docs: mark Phase 0 done, record D19 (auto-update, deferred)
CI / Repo hygiene (pull_request) Successful in 2s
CI / Web (lint, typecheck, build) (pull_request) Successful in 13s
CI / Migrations reversible (pull_request) Successful in 6s
CI / API (lint, types, tests) (pull_request) Successful in 54s

docs/PLAN.md's Phase 0 section and its "Done when"/Verification entries
still described the original Postgres+RLS, docker-compose, auto-redeploying
design — none of which is what actually got built and deployed. Marks it
done, states the two deliberate deviations plainly (SQLite not Postgres+RLS,
manual redeploy not automatic), and separates what's actually verified
(login persists a session, checked by scripts/smoke-test.sh after a real bug)
from what nobody has tried yet (PWA home-screen install).

docs/DECISIONS.md D19 records the auto-update investigation: the real fix
for Unraid's own "not available" update-check badge (a third, independent
place the D17 self-signed cert needed trusting — Unraid's PHP update
checker doesn't share Docker's own certs.d), the structural reason "up to
date" can't be fully trusted on this host even after that fix (CI builds on
the same dockerd the app runs on, so the local :latest tag is always fresh
regardless of whether the container was recreated from it), the failed
first Watchtower attempt (stale image, wrong Docker API version) and why
CI-triggers-a-redeploy was rejected again rather than reconsidered.
"Deliberately deferred" gets three new entries: finishing Watchtower,
migrating Gitea/CI to a dedicated VM (raised as the real fix for the
root cause D19 kept running into), and persisting the accumulated
host-local trust files across a reboot.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R2ZKeWkZV7ehf7fivrAkkG
This commit is contained in:
2026-09-21 22:57:26 -04:00
co-authored by Claude Sonnet 5
parent 8c88748f50
commit 244fe525dd
3 changed files with 106 additions and 12 deletions
+15 -3
View File
@@ -154,8 +154,20 @@ It does **not** SSH into the host and recreate the running container — rolling
Unraid (pulling it and clicking "Apply" on the container, or via Unraid's own update-checking) is
left as a manual/Unraid-side step, not something CI does unattended.
Unraid's own "check for updates" is **not a reliable signal for this container specifically** — see
`docs/DECISIONS.md` D19. Because Gitea Actions builds on this same host's `dockerd`, every CI run
keeps the local `:latest` tag fresh regardless of whether the *running container* was ever
recreated from it, so the checker can say "up to date" while the running container is genuinely
stale. Don't wait for that badge; recreate deliberately after a merge you know should ship.
## What's not here yet
Backups (`docs/PLAN.md` calls for a systemd timer running `restic` against `/data`, independent of
CI) and the `import_inbox` USB-watch bind mount are both Phase 1+ concerns nothing in the schema
uses them yet.
- Backups (`docs/PLAN.md` calls for a systemd timer running `restic` against `/data`, independent
of CI) and the `import_inbox` USB-watch bind mount both Phase 1+ concerns, nothing in the
schema uses them yet.
- An auto-updater for the running container (attempted with Watchtower, deferred — D19).
- Persisting the host-local trust material from D17/D19 (`/etc/hosts`, `certs.d`, the CA bundle
entry) across a reboot — currently lost on restart, deliberately left that way pending a
decision about editing `/boot/config/go` (D19).
- Migrating Gitea + its Actions runners off this Unraid host onto a dedicated VM — the root cause
behind several of the fixes above, raised as a real future decision, not started (D19).