R-899: a daytime press never cancels the night's whole-guest backup (operator ruling 2026-10-08, option A); press sends trigger=manual
gates / gates (push) Successful in 1m3s

Unreleased; ships with tomorrow's release.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
2026-10-08 07:34:03 +02:00
parent 4d3a0246df
commit 6d07ca2be4
11 changed files with 504 additions and 15 deletions
+4 -1
View File
@@ -47,6 +47,8 @@ type tierBackend struct {
// statusRestarts[target] samples the restart count at EACH status poll of that tier, so a test can
// say "the apps were already started when the Nth poll answered" (R-518, decision 156).
statusRestarts map[string][]int
// manualStarts records, per start, whether the context carried the R-899 press mark.
manualStarts []bool
}
func newTierBackend() *tierBackend {
@@ -70,13 +72,14 @@ func (b *tierBackend) DueFor(_ context.Context, target string) (bool, *int64, st
defer b.mu.Unlock()
return b.dueSet[target], nil, "", nil
}
func (b *tierBackend) StartBackupFor(_ context.Context, target string) (string, error) {
func (b *tierBackend) StartBackupFor(ctx context.Context, target string) (string, error) {
b.mu.Lock()
defer b.mu.Unlock()
if b.startErrOn == target {
return "", fmt.Errorf("simulated start failure on %s", target)
}
b.started = append(b.started, target)
b.manualStarts = append(b.manualStarts, IsManualTrigger(ctx))
if b.stacks != nil {
b.startsAtStart = append(b.startsAtStart, len(b.stacks.startedNames()))
b.stopsAtStart = append(b.stopsAtStart, len(b.stacks.stoppedNames()))