- 05-hub-architecture.md: stale 'felhom-hub v0.6.3' -> v0.11.0 (design-draft note). - auth-hub-sync-integrations.md: full onlyoffice:nextcloud occ command sequence. - storage-monitoring-metrics.md: metricsDBPath verified to coincide with the volume-backed data_dir on the bootstrap guest (persists; hardcoding is latent fragility only). - REORG-NOTES: gaps 2/3 CLOSED, gap 5 partially closed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
8.0 KiB
Documentation reorg + refresh — 2026-06-13
Rationale, inventory of changes, what was verified, and the doc-gaps left for review. Part of the audit-fix + docs-centralize session (controller v0.59.0; agent v0.29.1; hub v0.11.0).
Goal
Give the controller a documentation home under felhom.eu/documentation/ as thorough as the
agent/platform/hub already have, and ground everything in current code (not memory or stale
repo-local docs — the controller's own controller/README.md banner referenced v0.45 while live was
v0.58). Centralize so there is one published-docs home; keep per-repo operational working files in their
repos.
Structure chosen (and why)
documentation/
README.md # NEW — top-level index across controller/agent/platform/hub/audits/tests
controller/ # NEW subtree — the controller, mirroring the agent's depth
README.md # controller docs index + overview
module-map.md # current per-package map (supersedes architecture/02 planning map)
deploy-and-stack-lifecycle.md
backup-architecture.md
storage-monitoring-metrics.md
auth-hub-sync-integrations.md
audits/ # NEW — authoritative remediation record
deep-sweep-2026-06-13.md # (from controller audit/2026-06-13-deep-sweep, + status header)
bughunt-reconcile-2026-06-13.md
architecture/ 01..05, _reviews # unchanged (agent/platform/hub design docs)
proxmox-platform.md # unchanged
tests/ # unchanged (spike findings)
Why this shape: the agent/platform/hub already live under architecture/ as numbered design docs; the
controller had no central home (its prose lived in the repo README, stale). Rather than renumber the
existing set, I added a sibling controller/ subtree (feature-doc style, like the agent's areas) and a
top-level README.md index that ties all four components together. The four controller feature docs are
split by area (deploy, backup, storage/monitoring, auth/hub-glue) so each maps to a coherent set of
packages and can be maintained independently.
What was created / changed
- Created
documentation/README.md(top index),documentation/controller/(5 files),documentation/audits/(2 records). All additive. - Superseded, not deleted:
architecture/02-controller-module-map.md(v0.33 planning map) is kept for history;controller/module-map.mdis the live map and links back to it. Used additive cross-links rather thangit mvbecause the old doc is a planning artifact with distinct value (the KEEP/PORT/DELETE rationale), not a stale copy of the new one. controller/README.md(controller repo): an authoritative banner was prepended — version bumped to v0.59.0, a "documentation has moved" pointer todocumentation/controller/, the bootstrap-managed deploy note, and a marker that the body is retained legacy reference. The 1987-line body was NOT rewritten this session (safety over completeness — a full unattended rewrite risked garbling operational/build detail). Fully slimming the body to a pure quickstart is a deferred follow-up; until then the banner makes the central docs authoritative and warns the body may lag.BUGHUNT.md(controller repo): added a reconciliation banner (H10 fixed, pointer to the reconcile record); original content preserved.CONTEXT.md(controller repo): banner-and-below refreshed to v0.59.0 state.- Removed the accidental committed artifact
controller/mnt/user-data/outputs/felhom-controller/(a stale duplicate of the README under a Claude-sandbox output path; see "Tidy" below).
What each major controller claim was verified against
Each of the four feature docs was drafted by reading the actual current source and carries an inline content grounded in these packages (the drafting captured a per-doc verification ledger; representative anchors):
- deploy-and-stack-lifecycle:
internal/stacks/deploy.go(AppConfig:98, H1 check-and-set:122-139, CTRL-T2-1 transitionaldeployed:false:~295-336 + success flip inrunComposeDeploy, H10 fail-closed inSaveAppConfig),manager.go(Stack/ContainerState, up-d-not-restart),delete.go(H2 guards, protected enforcement),infra.go(EnsureBaseStackTryLock + filebrowser-preserve),healthprobe.go. - backup-architecture:
internal/appbackup/dbdump.go(docker-ps discovery, H8 Sync+Close-before- rename),paths.go/backup.go(GetAppDrivePathsystemDataPath fallback — C3 moot),recovery_unit.go(secret-free unit),restore_unit.go(fail-closed data-key gate),tier2.go(off-drive rsync + rootfs-headroom guard),quiesce/quiesce.go,agentapi/client.go(whole-guest backup is the agent's). - storage-monitoring-metrics:
internal/agentapi/client.go(DiskInfo, leaf-pin),web/agent_disk_handlers.gostorage_handlers.go(thin proxies, 409 on agent refusal),system/dockervol.go(reserve floor max(5GB,10%), HTTP 507 deploy gate),metrics/store.go(WAL verified),metrics/collector.go(cancellable ctx),monitor/healthcheck.go(watchdog/pinger gone).
- auth-hub-sync-integrations:
web/auth.go+csrf.go(bcrypt, cookie flags, demo open-mode, XFF rate-limit),setup/+bootstrap/(NeedsSetup, bootstrap.json v2),report/+notify/(zero-knowledge hub push),sync/sync.go(never overwrites app.yaml),integrations/,cloudflare/waf.go([felhom-geo]),selfupdate/updater.go(pinned tags, never:latest),assets/syncer.go.
Doc-gaps / uncertainties left for review (per the cardinal rule — flagged, not guessed)
- Daily volume-dump consistency:
DumpAppVolumesSafe(stop→dump→restart) exists, but whether the daily scheduled path calls it or the unsafeDumpAppVolumes, and the exact volume-tar trigger on the daily cadence, was not fully traced frommain.go. Backup doc describes volume tars without asserting live-dump consistency. (Tracecmd/controller/main.goschedule wiring next.) metricsDBPath— CLOSED (2026-06-13). Verified on the live bootstrap-managed guest 9201: thefelhom-controller-datavolume mounts at/opt/docker/felhom-controller,data_dir=/opt/docker/felhom-controller/data, andmetrics.dblives there — so the hardcodedmetricsDBPath(main.go:189) coincides with the volume-backeddata_dirand metrics persist correctly. Residual (low-priority backlog, not a live bug): the path is hardcoded rather than derived fromcfg.Paths.DataDir, so it would diverge ifdata_dirwere ever reconfigured. Documented in the storage doc.onlyoffice:nextcloudinternals — CLOSED (2026-06-13). Readinternal/integrations/onlyoffice_nextcloud.go; documented the fullocccommand sequence (install/enable + DocumentServerUrl/InternalUrl/jwt_secret/ StorageUrl + trusted_domains;Revoke=app:disable) inauth-hub-sync-integrations.md.selfUpdateAuthMiddleware(API auth wrapper for the hub-callback/api/selfupdate|config|georoutes) referenced but its implementation not read in depth. (Still open.)- Agent/platform/hub design docs (
architecture/01,03,04,05,proxmox-platform.md) are explicit design drafts. PARTIALLY CLOSED:05-hub-architecture.md's stale "felhom-hub v0.6.3" corrected to v0.11.0 (with a design-draft note).01,03,04+proxmox-platform.mdstill reference older precedent and remain design-drafts — full grounding against agent v0.30.0 / hub v0.11.0 is the recommended next docs slice (the top index already records current versions). - Front-end (templates) deploy progress markup lives in
web/templates, documented only via the in-memory state it polls, not the template/endpoint markup.
Tidy
controller/mnt/user-data/outputs/felhom-controller/{README.md,assets/README.md}was a tracked accidental commit (a stale 283-line duplicate README under a Claude sandbox output path, from the initialadded controllercommit). Removed viagit rm— clearly safe (stale duplicate, obviously accidental path). Noted here for the record.