diff --git a/REPORT.md b/REPORT.md index d1a1004..6260d5d 100644 --- a/REPORT.md +++ b/REPORT.md @@ -2,16 +2,82 @@ > **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); the scripts history lives in [scripts/CHANGELOG.md](scripts/CHANGELOG.md). -## RCA fixes 1+2+4 shipped — Q1c GREEN (agent v0.84.0 + controller v0.117.0) — 2026-07-11 +## Hub v0.47.0 — UI reorganization (customer tabs, Host tab, stale-host removal, offsite multi-endpoint UI, button contrast) — 2026-07-11 -felhom.eu's share of the cross-repo task: docs only. Code shipped in the sibling repos -(agent `474b858`, controller `c0f3e12`+`4a9c54a`); implementation detail in each repo's REPORT.md. +### 1. Baseline -- **Q1c closed green:** `documentation/controller/network-storage-nas.md` gained the - "Reboot survival (Q1c) — automatic since agent v0.84.0, live-proven 2026-07-11" section (the old - Q1c-FAIL open item replaced); the backlog spec - `FOLLOWUP-nas-automount-guest-reboot-reassert.md` is implemented by this pair. -- **Audit follow-up:** `documentation/audits/AUDIT-nas-cwa-rca-2026-07-11.md` §7 records the - shipped fixes + the live reboot transcript (hook re-armed and verified the share DURING the - `pct reboot 9201` start task; CWA auto-started healthy; health ok; no badge). -- CONTEXT.md updated (fixes 3/5/6 still queued; Peti publish train now carries 0.84 + 0.117). +felhom.eu `main` @ `8e1a3f0d82b62ac84835ddf0aa5a6fd523afb034`, hub v0.46.0 (CHANGELOG top + +running footer + `manifests/hub.yaml` all agreed). Spec: the "Hub UI reorganization" TASK. + +### 2. Files created / modified + +- `hub/internal/web/templates/style.css` — `.data-table td a:not(.btn)` contrast fix + tab/summary-strip/badge CSS +- `hub/internal/web/templates/customer_unified.html` — 8 hash-tab panels + sticky summary strip + Events badge + Host tab (all sections preserved; hiding = JS-added body class only) +- `hub/internal/web/templates/host_detail_body.html` — NEW: shared `{{define "host_detail_body"}}` (identity/vitals/guests/storage/diagnostics/DR + the Deletable-gated danger zone) +- `hub/internal/web/templates/host_detail.html` — reduced to chrome + sub-template call +- `hub/internal/web/templates/offsite.html` — endpoint cards + add/edit/delete forms + Endpoint peer column + deferral note +- `hub/internal/web/hosts.go` — `hostDetailData` builder; `handleHostDeleteImpact` + `handleHostDelete` +- `hub/internal/web/configs.go` — `Hosts` view models on the customer page (via `ListHostsByCustomer`) +- `hub/internal/web/offsite.go` — multi-endpoint render + save/delete handlers + subnet/peer guards +- `hub/internal/web/server.go` — routes: `/hosts/{id}/delete-impact|/delete` (above the catch-all), `/offsite/endpoints[...]` +- `hub/internal/store/store.go` — `ListHostsByCustomer`, `HostArtifacts`/`CountHostArtifacts`, `DeleteHost` (one-tx cascade), `ErrHostEscrowPresent` +- `hub/internal/store/wg.go` — `ListWGEndpoints`, `DeleteWGEndpoint`; `SetWGEndpoint` comment updated (behavior untouched) +- Tests: `hub/internal/web/customer_tabs_test.go` (new), `hosts_delete_test.go` (new), `offsite_test.go` (amended deliberately), `hosts_test.go` (pin comment), `hub/internal/store/host_delete_test.go` (new), `wg_endpoints_test.go` (new), `host_test.go` (+`TestListHostsByCustomer`) +- Docs: `hub/CHANGELOG.md` (v0.47.0), `hub/README.md` (tab map, host lifecycle, offsite mgmt), `CONTEXT.md`, `REUSE.md` (new §2 table), `manifests/hub.yaml` (tag 0.47.0) + +### 3. Commits on `main` + +| Commit | Content | +|---|---| +| `9f29bf3` | Part 1+2: CSS contrast fix + customer hash tabs + tab render tests | +| `ae950e5` | Part 3: `host_detail_body` sub-template + Host tab + `ListHostsByCustomer` | +| `146d165` | ⚠ NOT mine — the parallel NFS session's docs commit whose `git add -A` swept my Part-4 WIP **mid-red-proof** (hosts.go landed with the RED-PROOF-2 mutation, escrow ack bypassed; everything else was in final correct state) | +| `068427a` | Part 4 completion: restored the escrow-ack gate line (the only delta vs. the intended state) | +| `0daddcd` | Part 5: offsite multi-endpoint UI + guards + tests | +| `95d71fe` | Part 6: CHANGELOG/README/CONTEXT/REUSE docs + `manifests/hub.yaml` → 0.47.0 | +| `41c8e00` | this REPORT.md | + +### 4. Red-proofs (all five ran: mutation → FAIL with the wrong value visible → revert → green) + +1. **Online gate removed** (`handleHostDelete`) → `TestHostDelete_OnlineRefused` FAILED: `online delete = 303, want 409` (live host deleted). Reverted. +2. **Escrow-ack check dropped** (`deleteEscrow := true`) → `TestHostDelete_EscrowAckRequired` FAILED: `escrow-unacked delete = 303, want 409`. Reverted. (This exact mutation is what `146d165` accidentally shipped; `068427a` is the revert on main.) +3. **Endpoint-delete peers-in-subnet guard removed** → `TestOffsiteEndpointDelete_Guard` FAILED: `delete with peers = 303, want 409`. Reverted. +4. **Subnet-change guard removed** → `TestOffsiteEndpointSave_SubnetChangeGuard` FAILED: `subnet change with peers = 303, want 409`. Reverted. +5. **log_bundles scope widened** (`WHERE scope_id = ? OR 1=1`) → `TestDeleteHost_CascadeAndIsolation` FAILED: `customer-scoped log bundle count = 0, want 1` + unrelated-host rows deleted. Reverted. + +### 5. Tests + +`cd hub && go build ./... && go vet ./... && go test ./...` — **all green** at every commit. +Test functions in `hub/`: **259 → 280** (+21). Pinned invariants kept green UNMODIFIED: +hosts-list zero-`