An unknown drawn as a zero: the defect v0.226.0's own fix introduced
gates / gates (push) Failing after 13s
gates / gates (push) Failing after 13s
Writing the REPORT's observation "the no-unit fallback already reports a zero result, which is honest" exposed that the sentence was FALSE. A zero UnitRestoreResult is Scenario B's shape. So RestoreFromRecoveryUnit's fallback to RestoreApp -- which returns only an error, and whose signature is deliberately out of scope -- would have printed "ez a mentes csak a beallitasokat tartalmazta, adatot nem" over a restore that may have replayed the app's entire dataset. That is an unknown drawn as a zero: the exact R-88 failure direction this whole change exists to remove, re-introduced by the change. UnitRestoreResult now carries CountsUnknown, the fallback sets it, and there is a fourth sentence claiming only what is known -- the restore ran, the app is back, and we cannot say what came back. RestoreApp's signature is untouched. Pinned by TestUnitRestoreOutcome_NoUnitFallbackSaysUnknownNotEmpty. The A5 seam test was corrected too: its fixture has no recovery unit, so it exercises exactly this path and had been asserting the wrong sentence -- it now asserts the unknown, which is what pins the fallback to it. IT WAS THE observations GATE REFUSING THE PUSH THAT FORCED THE RE-READ. A gate written to stop findings dying in an overwritten REPORT.md caught a live defect instead. Also files R-397 (NotifyIntegrityOK/Failed are dead code AND the monitoring page advertises a weekly integrity check that does not exist) and R-398 (resticStep is not a seam, which is why R-358's ordering needed an AST test) rather than leaving them in a file that is overwritten every session. REPORT.md is the full run record: baselines re-confirmed, per-test results, the five red-proofs with their observed output, the live validation with verbatim Hungarian messages, what was NOT validated and why, teardown across three layers, and the register 165 -> 167 -> 161. Green gate clean: 28 packages, rc 0. All 12 controller gates OK.
This commit is contained in:
@@ -1528,6 +1528,12 @@ func unitRestoreOutcomeMsg(app string, res backup.UnitRestoreResult) string {
|
||||
}
|
||||
return fmt.Sprintf(unitRestoreDataMsgFmt, app, what)
|
||||
}
|
||||
// An unknown must never be drawn as a zero. The no-unit fallback cannot report counts, and the
|
||||
// zero-value shape would otherwise read as „the backup held only settings" over a restore that may
|
||||
// have replayed the app's whole dataset. Same failure direction as R-88: degrade to UNKNOWN.
|
||||
if res.CountsUnknown {
|
||||
return fmt.Sprintf(unitRestoreCountsUnknownMsgFmt, app)
|
||||
}
|
||||
if res.ManifestVolumes+res.ManifestDBs > 0 {
|
||||
return fmt.Sprintf(unitRestoreNoneReturnedMsgFmt, app, res.ManifestVolumes, res.ManifestDBs)
|
||||
}
|
||||
@@ -1551,6 +1557,10 @@ const (
|
||||
// database dumps LISTED. It states the data is unchanged because that is true and load-bearing: the
|
||||
// replay only ever writes into volumes, so a replay that did nothing removed nothing, and a customer
|
||||
// who believes otherwise will do something worse than waiting.
|
||||
// unitRestoreCountsUnknownMsgFmt — the no-unit fallback. It claims only what is known: the restore
|
||||
// ran and the app is back. It deliberately does NOT say data returned and does NOT say it did not.
|
||||
unitRestoreCountsUnknownMsgFmt = "A(z) %s visszaállítása lefutott — az alkalmazás újraindult. Ehhez a mentéshez nem tartozik mentési egység, ezért nem tudjuk megmondani, mi állt vissza belőle. Ellenőrizd az alkalmazásban, hogy megvannak-e az adataid."
|
||||
|
||||
unitRestoreNoneReturnedMsgFmt = "A(z) %s: FIGYELEM — a mentés %d adatkötetet és %d adatbázis-mentést sorol fel, de egyik sem állt vissza. Az adataid változatlanok maradtak. Kérj segítséget, mielőtt újra próbálod."
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user