# 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.
