- collect: a per-guest GuestConfig failure preserves the ListLXC run-status (only spec dropped); empty status normalized to "unknown". Test asserts preserved "running" + nil spec. - main: --selftest usage error now reads (want read|task|hub). - contract: testdata/host-report.golden.json + TestHostReport_ContractMatchesGolden (field-name key-set check vs golden; byte-identical with the hub copy). - version 0.3.0 -> 0.3.1. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2.6 KiB
felhom-agent — latest task report
This file holds the report for the most recent change, fully overwritten each task. Cumulative history lives in CHANGELOG.md.
Task: slice-3 validation follow-ups — v0.3.1
Small fixes surfaced during slice-3 validation (agent half). Pushed to main; build/vet/test
green locally (go1.26) and on the build server.
§1 — --selftest usage string
selftestFlag.Set's error now reads (want read|task|hub) (was missing hub, which became a
valid mode in slice 3). Cosmetic.
§2 — collector keeps run-status on a GuestConfig failure
internal/hub/collect.go collectGuests: a per-guest GuestConfig error no longer forces
status="unknown". The run-status from ListLXC is preserved (only spec is dropped — that's
the only thing actually unknown). An empty status is still normalized to unknown, so the wire
value is always running|stopped|unknown (matches the hub handler's empty→unknown defaulting).
Test renamed TestCollect_GuestConfigFailureKeepsStatusOmitsSpec, now asserting the preserved
running status and nil spec (not a hollow != "unknown" check).
§4 — cross-repo contract golden fixture (agent half)
The host-report shape lives in two repos with nothing failing on drift (the hub ignores unknown fields). Locked it with a golden sample:
internal/hub/testdata/host-report.golden.json— a populated report (host block, two guests: onerunningwithspec, onestopped;cloudflared; the four empty collections +audit_tailas[]).TestHostReport_ContractMatchesGolden— marshals a constructedHostReport, unmarshals the golden, and compares field-name key sets at top level +host+guests[0]. A renamed/added/ removed json tag fails it.
Caveat (called out): this is a duplicated contract — the file must stay byte-identical
with felhom-hub's hub/internal/api/testdata/host-report.golden.json. JSON can't carry a comment,
so the mandatory "keep byte-identical" note lives in the test file's doc comment in both repos
instead of a JSON header. When slices 5/6 add real storage_targets/backups fields, revisit
promoting this to a shared Go types module (the proper fix).
Not touched (confirmed)
The daemon's proxmox client timeout is already bounded: proxmox.NewClient defaults HTTPTimeout
to 30s when zero, and newProxmoxClient leaves it zero. No change (was a "confirm" item).
Verification
go build/vet/test ./... green locally (go1.26) and on the build server (go1.26). Version 0.3.0 → 0.3.1.
Repo state
Branch: main only. Dep unchanged (golang.org/x/crypto v0.52.0).