Commit Graph

28 Commits

Author SHA1 Message Date
Claudio on hubris
02ad003e52 seafile: CE -> Pro upgrade, ES, Caddy resumable-upload fix
Same-day-as-deploy upgrade: image swapped to seafileltd/seafile-pro-mc:13.0-latest, elasticsearch:8.15.0 added as new compose service for Pro's full-text search. Free Pro tier (<=3 users, no license). Existing data + users survived.

Also documented the Caddy patch stripping IETF resumable-upload headers (Upload-Draft-Interop-Version etc.) so the iOS Seafile Pro 4.0.2 app falls back to plain multipart upload; without it large uploads stalled and cancelled after ~60s.
2026-05-12 18:45:56 +02:00
Claudio on hubris
40f6c93fd5 Add 125 (seafile) — Nextcloud-replacement evaluation
LXC 125 stood up as a Seafile CE 13.0 docker-compose deployment, behind
files.hubris.network. Authentik OAuth wired up via ak shell. No data
migration — exploration alongside Nextcloud (114).
2026-05-12 12:45:45 +02:00
claudio
bb410eea49 120 mule-images: Phase 4 — retire /data/thumbs; SECRET_KEY bug fix
- Vision fetches NC preview at 640px via new sync helper.
- WORKER_THUMB_SIZES = set(); generate_thumbnails still does pHash.
- All medium.webp purged after verification.
- Bug: SECRET_KEY was missing from workers in compose, so
  Fernet decrypt silently failed everywhere outside the backend
  container. Phase 3 had been falling back to ExifTool the whole
  time. Fix replicates SECRET_KEY to all worker services.
2026-05-11 14:00:50 +02:00
claudio
372b856b32 120 mule-images: Phase 3 — extract_metadata via Memories HTTP API
Tries Memories /api/image/info/{fileid} first (OCS-APIRequest header
bypasses CSRF), falls back to ExifTool on 404 / non-NC / errors.
Kept the full date-fallback chain because 35% of the library uses
filename-encoded dates that Memories doesn't recover.
2026-05-11 13:41:54 +02:00
claudio
599715a447 120 mule-images: folder rename round-trip both ways
- handle_directory_rename in scan.py covers NC-side renames via the
  webhook. Iterates rows in Python (asyncpg int-type quirk on raw
  SUBSTRING+LENGTH).
- Existing PATCH /folders/{id} handles mule-side renames; webhook
  feedback hits the same helper and is a 0-row no-op (idempotent).
2026-05-11 13:19:05 +02:00
claudio
02571093d4 120 mule-images: post-Phase-2 delete-roundtrip patches (A + C)
- Folder delete now propagates: webhook handler detects directory
  deletes and runs a single UPDATE that discards every Photo under
  the path prefix.
- PUT-overwrite of a previously-discarded file now resurrects the
  Photo row (is_discarded=false, re-queue extract_metadata).
- Trashbin restore and folder rename remain known gaps (documented).
2026-05-11 12:54:38 +02:00
claudio
a4bf4367e6 120 mule-images: Phase 1 + 2 NC integration (thumbnail proxy + webhook receiver)
- Worker-watcher retired; file events come from NC webhook_listeners.
- Thumbnails proxy /index.php/core/preview keyed by photos.nextcloud_fileid.
- backfill_gps auto-trigger killed (was queueing ~60k tasks per deploy).
- Range support added to /api/v1/photos/{id}/original so .mov plays.
- NC cron tightened to */1 for ~60s webhook latency.
2026-05-11 12:33:10 +02:00
Claudio
71e890c8f1 docs(mule-image): duplicates path strip now shows grandparent/parent
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 00:51:05 +02:00
Claudio
86009d316f docs(mule-image): duplicates path strip + duplicate-worker orphan post-mortem
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 00:45:23 +02:00
Claudio
53c0193dc9 docs(mule-image): drop Title field, add bulk Notes editor
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 00:11:36 +02:00
Claudio
d68ce2ee2a docs(mule-image): right sidebar compact two-section rebuild
ActiveHeapCard gone, Edit + Metadata collapsibles collapsed into one
Metadata block (readonly + hr + form), Camera split out at the
bottom. Section helper deleted along with the orphan ActiveHeapCard
component file.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 23:45:28 +02:00
Claudio
3d59f2287b docs(mule-image): timeline scroll-to-top on section switch
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 23:29:48 +02:00
Claudio
51221afe7d docs(mule-image): filter-bar 422-on-date-from
date_from went out as bare YYYY-MM-DD; pydantic v2 datetime parser
rejected it with 422, frontend swallowed the failure, grid showed
nothing. Fixed both sides.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 23:19:31 +02:00
Claudio
0673f28213 docs(mule-image): date-extraction overhaul
EXIF:ModifyDate dropped, SubSec promoted, path-guess fallback added,
manual edits now preserved on rescan. backfill_taken_at sweep firing
across all non-manual photos.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 23:05:30 +02:00
Claudio
3eafc17900 docs(mule-image): cascade-delete FK fixes + tz-aware taken_at fix
After the hard-remove SourceRoot endpoint shipped, two real-world FK
issues surfaced (parent_id self-FK and cross-source-root children) and
one tz-aware datetime issue on PATCH /photos/{id}. All three fixed in
the same session. Trash icon also picks up a spinner during the multi-
second cascade.

Deploy.sh's --force-recreate flag isn't actually recreating reliably;
flagged as open infra question.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 22:43:15 +02:00
Claudio
21423d9f2d docs(mule-image): hard-delete SourceRoot + 30-min discard catch-up
Trash icon is now an actual hard delete (SourceRoot + Folders +
Photos, Nextcloud files untouched). Watcher's 5-minute soft-time-
limit kill is fixed. Beat schedule fires discard_missing_photos
every 30 min as a safety net for events the real-time watcher
might miss.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 22:23:50 +02:00
Claudio
8a17a8dcf5 docs(mule-image): OIDC auto-redirect + deploy.sh caveat
LoginPage now bounces straight through Authentik when OIDC is on,
with skipAutoSso escape hatches for logout / error / explicit
password use. Also flagging that the first deploy.sh --force-recreate
run raced with a manual --no-deps recreate and broke the stack;
recovery via docker compose down && up.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 22:03:47 +02:00
Claudio
0ad7cc9da0 docs(mule-image): mark deploy.sh force-recreate gotcha as fixed
/opt/mule-deploy/deploy.sh now runs docker compose up -d --build
--force-recreate. Eliminates the recurring 'image rebuilt but
container not restarted' issue we hit three times during the
perf-sweep session.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 21:53:04 +02:00
Claudio
79d769a8a6 docs(mule-image): editable/readonly split in right sidebar
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 21:50:47 +02:00
Claudio
200ea01f85 docs(mule-image): edit form collapsible + Header X drop
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 21:44:56 +02:00
Claudio
e3fa482f64 docs(mule-image): right sidebar restructure changelog
Heap card stays pinned at the top, editable form + readonly metadata
share a single scroll area, and the four readonly sections are now
wrapped in one outer Metadata collapsible.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 21:37:57 +02:00
Claudio
9b795f0489 docs(mule-image): photos.hubris.network perf sweep changelog
Five fixes this session: backend out of dev mode, PIL fallback for
iPhone Apple ProRAW Linear DNG, source root state classification so
prune-missing handles renamed folders, smaller initial page size +
idle polling backoff, and a partial index on photos that takes the
list query from 25ms seq-scan to 0.1ms index-only scan.

Also flags the deploy.sh --force-recreate gap that bit twice this
session and the outstanding data-drift (4,154 orphan rows + one
unregistered folder).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 21:30:38 +02:00
Claudio
ab0313eba6 docs(mule-image): record uvicorn --reload removal + 2-worker switch
Backend was running --reload single-worker in production. Switched to
--workers 2 --proxy-headers. Also note the deploy.sh quirk where a
runtime-only command change needed --force-recreate to take effect.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 21:12:32 +02:00
Claudio
ebdd4c857a mesh: document Netbird external-STUN fix (IONOS blocks UDP 3478) 2026-05-10 20:56:09 +02:00
Claudio
e5e87947f3 nextcloud: document PHP upload limit bump 2026-05-10 20:17:22 +02:00
Claudio
df4b2ec189 hubris: note physical relocation 2026-04-29 + post-move thermal baseline 2026-04-29 23:15:13 +02:00
Claudio
7454b5f110 hubris: document Phase 1 WiFi failover
Host now dual-homed LAN + WiFi (192.168.8.141 on wlp3s0, metric 200).
wan-failover.service handles carrier-based default-route swap since the
bridge's carrier follows LXC veths and ignore_routes_with_linkdown can't
catch eno1 going down on its own.

LXC/VM guests still LAN-only; Phase 2 migrates them.
2026-04-28 23:27:21 +02:00
dtoro
f5cd320433 Bootstrap Homelab-Docs wiki
Initial documentation of the hubris Proxmox homelab as a cross-linked
markdown wiki. Per-node pages, cross-cutting infrastructure pages, an
investigation log, and an operations cheatsheet. Each node and topic
ends with a Changelog section so changes can be tracked in-place going
forward.

Refreshed against live state on 2026-04-28 — 14 active LXCs (109
syncthing currently stopped) + 1 VM (108 haos). Reflects post-A/B-test
state of the 2026-04-21 hubris crash-loop investigation.
2026-04-28 22:53:09 +02:00