# 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](hub/CHANGELOG.md). --- ## REPORT — hub v0.13.1: DR recipe v1 drive-shape sync (test-data + regression guard only) **TASK — DR-recipe completion (hub side of a cross-repo change).** The agent's **v0.39.0** dropped two fields from the host-half `drives[]` (`role`, `restic_repo_coord`) and now resolves the `pbs` coord live. The hub change is **test-data + a regression guard only — NO behavior change; redeploy optional**, because the hub already reads drive sections as `json.RawMessage` (verbatim passthrough): dropping fields needs no store/handler/struct change. **Baseline:** v0.13.0 (`5f5e3c5`) → **v0.13.1** (`149a3b0`, pushed to `main`). ### Changes - `internal/store/testdata/dr-recipe.golden.json` + the `drHostHalf` test fixture — dropped the `role` key from `drives[0]` to match the v1 shape the agent emits. - `internal/api/testdata/host-report.golden.json` — re-synced **byte-identical** with the agent's `internal/hub/testdata/host-report.golden.json` (sha256 `57f2a5e7…18b2f2b5`). The hub copy previously lacked the `dr_recipe` section entirely; it is now a verbatim copy, so the cross-repo golden truly matches and POSTing it through `/host-report` exercises the `SaveDRRecipeHostHalf` ingest path. - New `internal/store/dr_recipe_test.go::TestAssembleDRRecipe_V1DriveShape` — the regression guard: a stored host half whose `drives[]` carry NEITHER dropped field but WHICH HAS a `pbs` block assembles cleanly (pbs carried through, drives passed through verbatim, neither `role` nor `restic_repo_coord` present). Demonstrated to FAIL when the fixture re-adds `role`, then reverted. ### Verification - `go build ./... && go vet ./... && go test ./...` — **green**. - **Live (the real acceptance):** after deploying the daemon (agent v0.39.0) and its startup host-report landing in the hub DB, the **real `AssembleDRRecipe`** over a copy of the live `/data/hub.db` produced the `demo-felhom` recipe — `recipe_version 1`, 3 guests w/ sizing, **`pbs` present** (`felhom-pbs/root/9201`), **2 drives clean** (no `role`/`restic_repo_coord`), 5 pve_storage, **14 apps**. **Secret scan over the full assembled recipe AND both raw stored halves = 0 hits** (nothing to redact — the point of the arc). (Operator HTML panel not browser-rendered: no dashboard password in this env; the server pipeline + exact stored/assembled bytes were verified.) ### Cross-repo golden checksum `hub/internal/api/testdata/host-report.golden.json` ≡ `felhom-agent/internal/hub/testdata/host-report.golden.json`: `57f2a5e7154ece1be94a79fd327f2924762e70c3ee388d6e375df7c918b2f2b5` (both). ### BACKLOG flagged (not acted on) External-drive bulk data has **no offsite / second-failure-domain backup** — cross-drive (Tier-2) rsync lands on the same internal SSD in the same guest. This is why `restic_repo_coord` named nothing real and was dropped from v1. Design a genuine off-host bulk-data tier before re-introducing a drive backup coord. Full detail in `felhom-agent/REPORT.md` §8.