REPORT: v0.240.0 delivered by the floor and proven live; R-488/R-489 filed
gates / gates (push) Successful in 14s

This commit is contained in:
2026-09-13 19:38:03 +02:00
parent bdcbd50b42
commit 24d7c54c79
+23 -44
View File
@@ -1,54 +1,33 @@
# REPORT — any backup tier lets an app update, and the release header must state its MinAgent (2026-09-13) # REPORT — controller v0.240.0: seven defects from the any-tier proof and the first nightly rotation (2026-09-13)
*Overwritten each run. This records the most recent implementation only.* *Overwritten each run. This records the most recent implementation only.*
> **Shipped as controller v0.239.0 and delivered to both demo guests by the managed floor alone** (hub > **Shipped as v0.240.0 and delivered to both demo guests by the managed floor** (declared MinAgent
> v0.112.0, declared MinAgent). No hand install. Scenarios G–M are tested; K, H, the failed update and > 0.129.0): demo-hp at +16 s, demo-felhom at +18 s from the save. Every row proven live on demo-hp
> the restore were walked live on demo-hp. Evidence: `felhom.eu/documentation/audits/rulings-r472-r475-2026-09-13/`. > with a throwaway adventurelog. Evidence: `felhom.eu/documentation/audits/v0240-2026-09-13/`.
## 1. What changed ## What changed (`bdcbd50`)
| Commit | What | | Row | Change | Live proof |
|---|---|
| `f946b0d` | `controller/scripts/minagent_header_gate.py` (fast, blocking): the newest `## vX.Y.Z` block must hold a line starting `**MinAgent: X.Y.Z**`. Decoy test; registered in GATES, FINGERPRINTS and COVERS. Backfill: v0.233.0–v0.236.0 now read `**MinAgent: 0.129.0** (unchanged)` — v0.232.0's value; zero commits under `internal/agentapi` since 2026-09-01, highest `featureMinAgent` 0.129.0 (R-470). |
| `b93c154` | v0.239.0 (R-475): `backup.Manager.UpdateRestorePoints` walks Tier 2 → 1 → 3 and returns the first copy the caller accepts; stacks' `freshRestorePoint` is the one age rule; nothing anywhere → back up first; refused only when no copy AND `CanBackUpApp` is false. `RunAppBackupNow` treats a Tier-2 failure as a WARN and marks the captured unit proven current. The hold stores `copy_tier` and names the tier; old holds keep their sentence. A successful off-site restore now clears an update hold. The backups page still calls `Tier2UnitRestorePoint`. |
## 2. Tests and red-proofs
- Go gate green per commit: `go build ./... && go vet ./... && go test ./...` (28 packages ok).
- `controller_gates.py --fast` green; `test_controller_gates.py` and `test_gate_decoys.py` green.
- New tests: `internal/stacks/update_tiers_test.go`, `internal/backup/update_tiers_test.go`,
`cmd/controller/r475_wiring_test.go`, `scripts/test_minagent_header_gate.py`.
| Red-proof | Mutation | Result |
|---|---|---| |---|---|---|
| F | gate accepts a body mention | the decoy test fails; 4 tests ran | | R-486 (P1) | removal keeps the Tier-2 record unless `remove_backups` | remove-keep → record kept → „Teljes visszaállítás" restored 2 volumes + the DB, data identical |
| M | age checked only for Tier 2 | 3 M sub-cases fail; 5 RUN lines | | R-484 | `postgis`/`pgvector`/`timescaledb` are Postgres | `db-dumps/adventurelog-postgres.sql` (8 MB) in the unit and mirror |
| L | refuse even with a copy | the L test fails | | R-485 | the backup card sizes the unit + mirror(s) | `244M` + `244M`, `has_backups:true` |
| tail | the proven-current mark misses | fails on the mtime | | R-480 | a held update's sentence leaves the card with the hold | card clean after a restore |
| off-site clear | call removed | the hold stays; test fails | | R-477 | the Tier-3 lookup is one `snapshots` call | unit-tested; the R-408 walk registers the shared reader |
| R-478 | a copy older than `deployed_at` does not count | unit-tested (the leftover unit R-474 now removes) |
| R-474 | "delete backups" deletes the unit, mirror(s), prefs | 244M + 243.6 MB removed, nothing left, prefs `None` |
The first run of all four Go red-proofs was inert: the harness ran outside the module (`RUN lines=0`). ## Gates, tests, red-proofs
They were rerun from the module folder and each failed as intended.
## 3. Live — demo-hp, endpoint-level - `go build ./... && go vet ./... && go test ./...` green (28 packages); `controller_gates.py --fast` green.
- Red-proofs, all valid (RUN > 0, FAIL > 0, file restored byte-identical): `rp-v240-R486-…`, `R484`,
`R485`, `R480` (first attempt inert — the mutation did not compile; rerun with a compiling one),
`R478`, `R477`, `R474`.
- `internal/backup` takes 5½ minutes on its own (89 tests with real waits) — R-488.
| Step | Result | ## Observations
|---|---|
| Delivery | floor 0.239.0 + MinAgent 0.129.0 saved 15:19:12Z; demo-hp on 0.239.0 at +14 s, demo-felhom at +15 s |
| K | throwaway actualbudget, Tier 2 off, unit removed: `found: none — backing up first`, Tier 2 skipped, Tier 1 chosen, done |
| H | gokapi: `precondition met — Tier 1 (own recovery unit)`, no backup, done |
| F-shape | never-healthy image: held; text ends „saját meghajtó, 2026-09-13 17:34."; start 409; record `copy_tier: 1` |
| Restore | `POST /backup/restore` from „helyi": hold CLEARED, gokapi v1.9.6 healthy |
A first K attempt did not test K: the deploy had already written a Tier-1 unit, so Tier 1 was 1. **Two concurrent `go test` runs of the backup package looked like a hang; the package is slow alone.** FILED: R-488
chosen. It is kept as `04a-…`. The restore script's first read polled a 404 path and stopped early; the 2. **`volumes_removed: null` still reported over removed volumes.** FILED: R-489
second read is appended to `08-…`. 3. **The first R-480 red-proof was inert (a non-compiling mutation, RUN=0).** NOT-A-FINDING: harness discipline, caught by the RUN count rule and rerun; recorded here so the pattern stays visible.
## 4. Observations
1. **The Tier-3 lookup pays its full 15 s bound on demo-hp and logs a misleading WARN about another app's snapshot size.** FILED: R-477
2. **A leftover recovery unit from a REMOVED install counted as the fresh Tier-1 restore point of a reinstall.** FILED: R-478
3. **For a bind-data app the Tier-1 unit holds settings only, so the route the hold names does not restore data.** FILED: R-479
4. **After a successful restore the card keeps the failed update's sentence, which says the running app is stopped.** FILED: R-480
5. **Removal with `remove_backups` again left both throwaways' recovery units and their backup prefs.** FILED: R-474