Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSK5g6qYLknKj8u3QAFEr6
5.9 KiB
felhom.eu — task reports
Overwrite this file with a summary of the most recent task only (uniform with the other repos; not cumulative). The cumulative hub history lives in hub/CHANGELOG.md; the scripts history lives in scripts/CHANGELOG.md.
REPORT — docs: REUSE.md introduced across all four felhom repos (consolidated)
Date: 2026-07-03 · Class: docs-only (no code change, no version bumps, no builds, no deploys)
Deliverable: a per-repo REUSE.md reuse map (canonical helpers / patterns / traps / seams /
extension points / known duplication), code-verified at file+symbol, plus scripts/reuse_refs_check.py
as the staleness gate, plus CLAUDE.md maintenance hooks.
1. Baselines used (all matched the task's expected hashes; trees clean, pulled fresh)
| Repo | main @ baseline |
State |
|---|---|---|
| felhom-controller | d0c70a7da6f4060422a545cea2396f9df5f7d61f |
v0.98.3 |
| felhom-agent | 0db09bf34fe2eff4b80ac77ed19afa18aef7675f |
v0.61.0 |
| felhom.eu | b0de6b34f61fef2e14807fba2c6176b888dc3327 |
hub v0.30.1 |
| app-catalog-felhom.eu | bb81cd414afcb89e28ac60f405133f40195e6c43 |
n/a |
2. Files created/modified per repo
- felhom-controller:
REUSE.md(new, 210 lines);CLAUDE.md(+2 hook lines);CHANGELOG.md(docs entry);CONTEXT.md(note);REPORT.md(overwritten). - felhom-agent:
REUSE.md(new, 160 lines);CLAUDE.md(+2 hook lines);CHANGELOG.md;CONTEXT.md;REPORT.md. - felhom.eu:
REUSE.md(new, 151 lines — hub + website + scripts + manifests);scripts/reuse_refs_check.py(new gate);CLAUDE.md(+2 hook lines);hub/CHANGELOG.md+scripts/CHANGELOG.md(docs entries);CONTEXT.md(new, minimal — repo had none);REPORT.md(this file). - app-catalog-felhom.eu:
REUSE.md(new, 58 lines, light §2/§5 variant per spec);CLAUDE.md(new, minimal — repo had none; full CLAUDE.md is a separate task);CHANGELOG.md;CONTEXT.md(new, minimal);REPORT.md.
3. Commits pushed to main (one per repo)
| Repo | Commit |
|---|---|
| felhom-controller | eda33400da0fd6a3b80271c44df24a177f7a444a |
| felhom-agent | 2a024b603973e79a0c84d6847a7cde0898091c61 |
| app-catalog-felhom.eu | c5a3d1b15b71103a3d1da217f1ff5a834857375c |
| felhom.eu | the commit carrying this REPORT (HEAD of main after this push) |
4. Per-repo sweep counts (evidence of depth)
| Repo | funcs scanned (non-test) | §1 rows | §3 traps | §6 duplications |
|---|---|---|---|---|
| felhom-controller | 1174 | 62 | 8 | 12 |
| felhom-agent | 702 | 48 | 10 | 7 |
| felhom.eu (hub Go) | 297 | 34 | 8 | 5 |
| app-catalog | 53 apps scanned | 0 (by design) | 3 | 6 |
Trap sweeps ran mechanically per §Method (--delete, wipefs, mkfs, os.RemoveAll, rm -rf,
sfdisk, dd , Format, Wipe) in every repo; each hit classified as guarded-canonical (§1, guard
named) or §3 trap. Known traps (rsyncMirror --delete, gokapi entrypoint, AGENT-001 TOCTOU shape,
allowedEventTypes 400) were independently rediscovered from code.
5. reuse_refs_check.py output (final, all four repos)
OK [felhom-controller]: 65 cited paths, all exist
OK [felhom-agent]: 57 cited paths, all exist
OK [felhom.eu]: 30 cited paths, all exist
OK [app-catalog-felhom.eu]: 10 cited paths, all exist
(The gate earned its keep during authoring: it caught the controller map citing
scripts/{template_id_gate,emoji_gate}.py — the real location is controller/scripts/ — fixed
before commit.)
6. Observations — doc↔code drift & findings (recorded, NOT acted on)
Worth operator attention:
- hub severity-coercion gotcha (NEW finding): the remembered "dispatcher drops critical" issue is
FIXED in code (
severityNotifiesroutes warning/error/critical since v0.24.0), buthandleEvent(hub/internal/api/handler.go) coerces any severity outside {info,warning,error} — including"critical"— to"info"at ingest, so a controller-POSTed critical event never notifies. Hub-internal events bypass this. Recorded in felhom.eu REUSE.md §3. - Committed secrets:
manifests/felhom.secret.yamlstill carries inlinestringDatacredentials (healthchecks superuser pw + Django secret — not deployed; umami APP_SECRET + POSTGRES_PASSWORD — deployed), unlike the de-gitted Resend key. Recorded as a §3 trap; rotation/ de-git is an operator follow-up.
Stale docs (each a separate refresh task):
felhom-agent/CLAUDE.mdsays "Current: v0.31.0" and omits ~8 live packages (localapi, signedjobs, escrow, capability, guesthook, lanresolver, desired, provision).felhom.eu/CLAUDE.md"Hub — current state (v0.7.x)" is ~23 minor versions stale (live 0.30.1).felhom-controller/CLAUDE.mdlayout lists ~7 of ~30 internal packages; bare-metal deploy steps superseded (already flagged in-file).- app-catalog
README.md: phantomfilebrowser/template, missingrecipe-importer/, field-type table omitssubdomain/secret_input, smtp_mapping list undercounts (2 listed, 6 real).
Duplication highlights (full lists in each REUSE.md §6): controller atomic-write ×4 (+1 inline,
two with deliberate non-atomic bind-mount fallback), dir-size ×6, JSON writers ×5/3 envelopes;
agent lsblk parsers ×2, atomic JSON store ×3, run() helper ×4, plus the acknowledged
antiRetarget↔WipeExecutor mirror; hub Resend sender ×2 + Hungarian formatter ×2 (frozen legacy
path) and semver-compare ×2 with different failure semantics; agent dead config knobs
Binaries.MkfsExt4/MkfsXfs (never executed — wrapper paths are hardcoded).
7. Maintenance hooks now active
Every repo's CLAUDE.md: "See REUSE.md before writing new code" + "update REUSE.md in the SAME
commit that adds/changes/deprecates a shared helper or pattern". Staleness gate:
python scripts/reuse_refs_check.py <repo-root> [...] (run from felhom.eu). Reviewer-side: symbols
spot-verified at file:line (line numbers in the maps are landmarks only).