Files
felhom-controller/REPORT.md
T

70 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# REPORT — v0.317.0: a second copy counts only on a proven different disk; the no-drive install speaks in words (2026-10-15)
Written in ASD-STE100 Simplified Technical English. Design read first: felhom.eu `architecture/16-storage-physical-identity.md`
(§3, §4, §5 D4, §8, §10, §11), `07-backup-architecture.md` §6, `09-update-architecture.md` (MinAgent), `03-host-agent.md`.
Task: storage identity build A (operator rulings D1–D6, 2026-10-15). Agent counterpart: felhom-agent v0.157.0.
## 1. Baselines
| Repo | `main` at start | at commit |
|---|---|---|
| felhom-controller | `9cc7ffcf3b` (brief) → `48d8674876` read | rebased onto `c6a5671` (v0.316.4) |
| felhom-agent | `d2053e7d47` | `52ed52c` (v0.157.0 released) |
## 2. What changed
- `internal/backup/backup.go`: `diskRelation` — the one „same disk?" decision; asks the agent through `SetDiskJudge`; an older
agent or an `unmapped` path keeps the st_dev rule (logged once). `offDriveCopyState` / `singleCopyWarning`: the notice by `16` §4,
skips a NAS (R-1075), i18n.
- `internal/backup/tier2.go`, `tier2_shares.go`: target choice — same disk never; unknown made, marked `Unproven`; proven beats unknown;
the guard re-asks right before the run. `settings.CrossDriveBackup.Unproven` records it; `handlers.go` + `backups_apps.html` show it.
- `internal/agentapi`: `FeatureSameDisk` (MinAgent 0.157.0), `Client.SameDisk`, the identity fields on `DiskInfo`.
- `internal/stacks/deploy.go`, `deploy_errors.go`, `internal/api/router.go`, `deploy.html`: D4 — `ErrNeedsDrive`, 400, `code: needs_drive`,
the sentence and a link to the drives page.
- `cmd/controller/main.go`: the judge wired. Locales: four new keys in both files; `scripts/i18n_go_keys.json` lists them.
## 3. Tests and red-proofs
| Test | Red-proof (seen failing) |
|---|---|
| `TestDisk16_ProvenDifferent_CountedNoNotice` | — (positive control for the others) |
| `TestDisk16_SameDisk_NotMadeAndNoticeShown` | the same-disk refusal turned off → fails |
| `TestDisk16_Unknown_MadeNotCountedCannotCheck` | the unproven mark set false → fails |
| `TestDisk16_NetworkShare_NeverHidesTheNotice` | the NAS skip removed → fails (R-1075) |
| `TestDisk16_OldAgent_KeepsTheStDevRule` | fails with the same-disk refusal off |
| `TestDisk16_UnprovenCopyIsRecorded` | — |
| `TestD4_NoDriveRefusalSpeaksInWords` | the D4 branch off → fails with the OMV run's raw sentence |
| `TestD4_NeedsDriveIs400`, `TestD4_FilledPathKeepsItsOwnRefusal` | — |
| `TestDiskJudge_IsWiredAtStartup` | the judge made to never call the agent → fails |
`go test ./...` green; `controller_gates.py --fast` green except `observations` (this section fixes it). Ten i18n parity pages
refreshed with `-update-i18n-golden` after moving the old ones aside; the diff of each is ONLY the new lines (the stylesheet line
kept as stored).
## 4. Live proof
Method: endpoint level (no browser on DooPlex) — the dashboard pages, the Tier-2 „run now" endpoint the button calls,
the agent's local API with the guest's own token. Evidence: felhom.eu `audits/storage-identity-buildA-2026-10-15/`.
The three boxes reached 0.317.0 by per-customer floors (MinAgent 0.157.0, 303 `floor_set` at 19:27:52 UTC); Tester 1 ran
0.317.0-rc.1 first.
| Box | Agent verdict | `/backups` after a Tier-2 run |
|---|---|---|
| Tester 1 (VM) | `unknown/vm` | „A Felhom nem tudja ellenőrizni…" shown; 10 apps copied, each marked „nem számolja második másolatnak" |
| demo-hp | different, proven | no notice; 10 apps copied, counted (unchanged) |
| N100 | different, proven | no notice; 5 apps copied, counted (unchanged) |
ASCII search controls: Tester 1 11 hits (positive); demo-hp 0; N100 1 hit read by eye — a database sentence, not the notice.
**Not live (unit only, red-proved):** the same-disk skip (no box has two places on one disk); the NAS notice — scratch box
9202 was put on 0.317.0 and back on 0.314.0: its `bootstrap.json` has no `local_api`, so it cannot ask the agent
(R-1083); the no-drive sentence (no one-disk box; a deploy request is never used to probe a refusal).
## 11. Observations
1. FILED: R-1082 — the drives page offers `/mnt/sys_drive` for attaching (R-280, the reinstall-restore way out) while `16` §11 rejects
it for household data, and the D4 sentence links to that page. Not changed here: source and design disagree, so it is reported.
2. FILED: R-1083 — scratch box 9202 has no `local_api` in its `bootstrap.json`, so no agent-coupled feature can be shown there.
3. FILED: R-1084 — the whole-box backup offer („…így egy lemezhiba után is vissza tudod állítani a rendszert") does not ask
the agent; on Tester 1 it stands next to the new „cannot check" notice.