Files
felhom-controller/REPORT.md
T

4.6 KiB
Raw Blame History

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.