R-403: the restore OUTCOME names the package's date, not the run's
gates / gates (push) Successful in 11s

Live on demo-hp the confirm said 11:43 (the preserved package) and the outcome said 14:23 (the
copy's newest run) for the same restore. A customer reading both cannot tell which one they had, and
one of the two is the flattering sentence. Part 2.3's rule is 'not a plain green success ANYWHERE',
and the outcome is an anywhere.

tier2UnitSourceMsg now asks UnitRestoreDate, the same resolver the confirm uses, so the two cannot
disagree. TestR403_OutcomeNamesThePackageDateNotTheRunDate pins it, with a negative control for the
ordinary case.
This commit is contained in:
2026-08-31 14:32:29 +02:00
parent 5429d651ee
commit b48a7fa326
2 changed files with 42 additions and 1 deletions
+6 -1
View File
@@ -1724,7 +1724,12 @@ func tier2UnitConfirmWithStaleness(copyDate string, proven bool, stale bool) str
// date it puts in the confirm — so the sentence the customer approves and the sentence they are left
// with cannot name different copies.
func tier2UnitSourceMsg(cov backup.Tier2Coverage) string {
date, proven := cov.Tier2CopyDate()
// R-403: the OUTCOME names the same date the CONFIRM did — the PACKAGE's, not the copy's newest
// run. Live on demo-hp 2026-08-31 these disagreed by two and a half hours (confirm 11:43, outcome
// 14:23) after a preserved leg, and a customer reading both would not know which restore they had
// just had. §2.3's rule is "not a plain green success ANYWHERE", and the outcome is an anywhere.
date, _ := cov.UnitRestoreDate()
_, proven := cov.Tier2CopyDate()
if date == "" {
return ""
}