78d16b37a1
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSK5g6qYLknKj8u3QAFEr6
3.6 KiB
3.6 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.
Hub v0.46.0 — observability pass: per-box log pulls, bundle custody, TTL + secret gate — 2026-07-11
felhom.eu's third of the cross-repo observability task (agent v0.83.0 + controller v0.116.1 shipped
in their repos). Commits: hub e35b1ae, manifest bump + conventions runbook 7c038df.
Deployed: felhom-hub:0.46.0, ArgoCD Synced/Healthy, rollout complete (17:03 CEST).
What shipped
- Store (
hub/internal/store/logbundle.go+ schema):log_bundle_requests(pending intent per scope+component — controller scope = customer_id / report ACK; agent scope = host_id / heartbeat envelope) +log_bundles(gzip, newest-3, 72 h TTL purged on the existing 60 s sweep).SaveLogBundleruns the token-pattern secret gate BEFORE storing: a hit stores ablocked: possible secretflag row and NO payload (fail-closed, WARN hub-side);[REDACTED]shapes + public checksums pass by design. - Channels (additive both directions): report ACK
controller_log_requested+ ingest ofcontroller_log_tail; heartbeat envelopelog_tail_requested+ ingest oflog_tail. Consume-once on arrival. A pre-0.83 agent never fulfills → the request stays visiblypending(S6-tested, harmless). - UI (host detail, English per the hub operator surface): Diagnostics section — "Request
controller logs" / "Request agent logs" (CSRF forms), state rows (
pendingwith the honest latency hint: controller ≤ ~15 min report interval, agent ≈ heartbeat cadence;availablewith View/Download;blocked), 72 h custody note. The hosts "read-only" invariant is amended by test: these two forms are the ONLY actions. - Conventions codified:
documentation/runbooks/logging-conventions.md(levels, logs-are- English, keys-never-values, capture layers, pull posture) + a one-liner in each repo CLAUDE.md.
Red-proofs (demonstrated, restored)
| Scenario | Reverted shape | Failure seen |
|---|---|---|
| S4 secret gate | gate disabled | secret-shaped token not blocked |
| S2/consume-once | clear-on-arrival removed | request survived fulfillment (store + API tests) |
S5 TTL: injectable clock — kept at +71 h, purged at +73 h. Keep-newest-3 + byte-cap belts tested.
Live evidence / honest latencies
- Hub 0.46.0 live (ArgoCD Synced/Healthy, image verified, clean startup log).
- Box halves live-proven from 9201: controller ring + agent ring both readable at
logging.level=infothrough the new Debug tabs (see felhom-controller/REPORT.md timestamps). - Operator follow-up (HUMAN — hub UI is password-gated, CC cannot log in): on
hub.felhom.eu/hosts/<demo host>click both request buttons; expect the agent bundle within one heartbeat (~15 min) and the controller bundle on the next report (≤ ~15 min); download both and confirm the controller bundle carries the NAS-add phase lines + theoperator log pull servedINFO line. The full round-trip is already proven byinternal/api/logbundle_ack_test.go. - Blocked-secret branch: test-level only by design (no real secret planted live).
Open / observations
- Hub bearer key rotation still DUE (pre-existing; manifests/hub.yaml + screenshot-exposed).
log_bundlesUI statesrequested → pendingare merged (a request IS pending from the box's view);expiredrenders as absence after the purge — states documented in the template hint.