- 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).
- 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.
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>
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>
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>
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>
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>
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>
/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>
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>
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>
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>
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.
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.