# Red-proofs — night 2026-10-28 Every new test was seen failing before the fix landed, or by breaking the fix on purpose (a string swap, run, swapped back — `tools/mutate.py`, `tools/mutaten.py`). The failure line is quoted as the test printed it. ## R-1256 — controller `342a394` | Test | How it was red | Failure line | |---|---|---| | `TestR1256_H4_AFailedDefinitionWriteStartsTheAppAtItsLiveDefinition` | before the fix | `definition writes [[example/app:0.96.0 postgres:16-alpine]] — want the snapshot's, then the LIVE one written back` | | `TestR1256_H4_AFailedWriteBackHoldsTheApp` | before the fix | `the app was STARTED although its live definition could not be written back — calls [stop recreate start]` | | `TestR1256_H5_APutBackWhoseStopFailsDoesNotPourAndKeepsTheCopy` | before the fix | `the copy was poured (map[immich_pgdata:LIVE bytes of immich_pgdata]) / volumes removed ([immich_newvol]) after a FAILED stop` | | `TestR1256_H5_AFailedDefinitionWriteBackKeepsTheCopy` | before the fix | `the copy must be KEPT after a failed put-back (D20)` | | `TestR1256_H5_ACrashPutBackWhoseStopFailsRefuses` | before the fix | `a put-back whose stop failed must return an error` | | `TestR1256_H5_AVolumeThatCannotBeRemovedIsNotMergedInto` | before the fix | `restored 2, err — want 1 and an error naming app_busy` | | `TestR1256_H6_ARestoreCannotBeginBesideAMirrorThatStartedAfterTheCheck` | mutation: TryBeginRestoreOp records without asking | `the restore began beside a running mirror: busy="" app=""` | | `TestR1256_H6_TheBeginRefusesWithTheCopySentence` | same mutation | `the begin must refuse with the copy named; ok=true ""` | | `TestR1256_H6_NoHandlerBeginsARestoreUnchecked` | mutation: one direct `BeginRestoreOp` in handlers.go | `handlers.go:2242:2: a direct BeginRestoreOp — begin through s.beginRestoreOp (R-1256 H6)` | | `TestR1256_H6_AKeptLoadAtInstallIsRefusedWhileASecondDriveCopyRuns` | mutation: the old RestoreStatus/IsRunning check + plain begin in both loads | `a load during a second-drive copy: code 202, want 409` | | `TestR1256_H8_OnlyAnUnusedOldCopyIsRemoved` | mutations: no hold check / no marker check / no age check | `removed [.../held/... .../unused/... .../waiting/...]`; `removed [.../named/... .../unused/...]`; `removed [.../unused/... .../young/...]` | | `TestR1256_H8_NothingIsRemovedDuringARestoreOrWithAnUnreadableMarker` | mutations: no busy check / an unreadable marker read as empty | `removed [.../app/...] during a restore`; `removed [.../app/...] with an unreadable marker` | | `TestR1256_H8_TheSweepIsWiredAtStartup` | mutation: the job's call removed | `SweepUnusedRestoreCopies is never called` | ## R-1255 — hub (felhom.eu `1ee6d5a5`) | Test | How it was red | Failure line | |---|---|---| | `TestR1255_TheCarryTakesTheNewestPackageThatHasAHash` | before the fix | `carry = {Outcome:1 FromHost:T-old ToHost:T-new ResticPwSHA256: …} — want the package with the household's hash (SHA_REAL)` | | `TestR1255_APurgeNeverDeletesAPackageAReusedPathStillNeeds` | before the fix | `purge removed 2 err= — want exactly the deleted copy's package (key 1)` | | `TestR1255_TwoSetAsidesOnOneDayGetTwoNames` | before the fix | `two set-asides on one day share the name "/home/felhom-repo.orphaned-20261028"` | | `TestR1255_WithNoHashedPackageTheNewestIdentityIsStillCarried` | a guard of today's behaviour (green before and after, on purpose) | — | ## R-1254 — agent `5ddd124`, controller `e33cffa` | Test | How it was red | Failure line | |---|---|---| | `TestR1254_ALostAnswerAtTheClaimIsASuccessWhenTheHubHoldsTheNewPackage` (agent) | before the fix | `claim after a lost answer, the hub holding the new package: 502 {"ok":false,"error":"… — the previous code still works; try again"}` | | `TestR1254_AnUnknownOutcomeAtTheClaimPromisesNothing` (agent) | before the fix | `claim with an unknown outcome: 502 …` | | `TestR1254_ALostAnswerAtTheConfirmIsASuccessWhenTheHubHoldsTheNewPackage` (agent) | before the fix | `confirm after a lost answer: 502 (opens: true) — want 200` | | `TestR1254_HubHoldsComparesTheIdentityBlob` (agent) | mutation: „held" whenever the hub has any package | `the hub holds another package: held=true err=` | | `TestR1254_AnUnknownConfirmOutcomePromisesNothing` (controller) | before the fix | `hu: an unknown outcome promised the previous code: {"error":"Az új kódot nem sikerült elmenteni — a régi kódod továbbra is érvényes. …"}` | | `TestR1254_ClaimAndConfirmOutwaitTheAgentsUpload` (controller) | before the fix; and mutation: the claim through the 15 s client | `escrowCallTimeout 15s must outlast …`; `a slow claim was abandoned: … Client.Timeout exceeded while awaiting headers` | ## R-528 — agent `6f933d6`, controller `eed23e7` | Test | How it was red | Failure line | |---|---|---| | `TestR528_GuestOOMKillsServesThisGuestsCountersOnly` / `…TheRouteAnswersTheTokensGuest` (agent) | mutations: a glob over every guest; parsing `oom` for `oom_kill` | `…cccc…:7 … want …` (another guest's container); `aaaa…:9` | | `TestR528_AHostCounterAboveZeroIsAnOOMKillWhateverDockerSays` (controller) | before the fix | `the inspect must ask for the container id …`; `the host-counted kill was not seen: []` | | `TestR528_WithoutAHostCounterTheScanIsAsBefore` (controller) | before the fix | `no host source: [{… Source:}]` | | `TestR528_HostOOMSourceBacksOffAnOldAgent` (controller) | mutation: no 404 back-off | `an old agent was asked 3 times in 90 s, want 1` | | `TestR528_HostOOMSourceIsWiredAtStartup` (controller) | mutation: the wiring line removed | `the host OOM counter is never wired …` | ## Found walking the capability map — controller `20c5877` | Test | How it was red | Failure line | |---|---|---| | `TestAnActionOnANameThatIsNoAppIsA404` | before the fix | `stop of a name that is no app: 500 "A művelet nem hajtható végre: az alkalmazás beállításai nem menthetők." — want 404` | ## R-1338 — catalog working tree (NOT pushed; the morning list) | Test | How it was red | Failure line | |---|---|---| | `test_memory_live.py` AnonLive / SoakSummary / TightMark | mutations: `return anon`; the soak's peaks from `anon_peak_pct`; the mark reads `anon_peak_pct` first; no `max(a, b)`; no cap at anon | `FAIL: test_the_measured_spike`, `FAIL: test_the_mark_reads_the_live_figure`, `FAIL: test_the_bench_mark_prefers_the_live_figure`, `FAIL: test_it_errs_high_never_above_anon` |