Stop the 60s suite budget from failing bin/fast-gate on a loaded host #1239
Labels
No labels
P0
P1
P2
P3
bug
category/code-change
category/cross-repo
category/eval-run
category/investigation
category/no-test-target
category/owner-ruling
category/prose-artifact
category/recurring-chore
category/structure
category/umbrella
crc-refactor
create
delete
enhancement
filed-by/agent
filed-by/user
frozen
lint-rule
needs-info
needs-triage
next
plugin/cc-architect
plugin/os
plugin/os-adr
plugin/os-aidd-lint
plugin/os-backlog
plugin/os-context
plugin/os-doc-hygiene
plugin/os-sdlc
plugin/os-vault
project/cc-os
ready-for-agent
ready-for-human
recurring
review
rule-proposal
update
waiting
wayfinder:grilling
wayfinder:map
wayfinder:map
wayfinder:research
wayfinder:task
wayfinder:task
wontfix
worklist/deviations
worklist/lint-rule
worklist/new-implement-build
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
jared/cc-os#1239
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problem
The os-sdlc suite has a 60s wall-time budget.
On a loaded host,
bin/fast-gatefails on this budget with 0 failures and 0 errors.Each time-only failure cost the builder a wasted repair attempt, or left the change uncommitted for the orchestrator to re-gate.
Observed
Evidence from 2026-10-22, fast-batch-12.
Finding B's builder saw 60.4s, 66.7s, and 64.3s at load average about 4.5 on 12 cores, with other agents active.
The orchestrator saw 68.1s on the final worktree run.
Idle runs the same day took 44.5s to 54s.
Reproduce
n/a: the failure depends on host load, not on a fixed command.
Approach
Decided 2026-10-23: option (a). The budget stays a signal and stops being a blocker. The budget value stays 60s. No load-aware logic.
The budget is in
plugins/os-sdlc/tests/all.rb:21(BUDGET_SECONDS = 60). ItsMinitest.after_runhook (lines 23-30) runsexit 1on an overrun with 0 failures.That exit code feeds both
FastGate::SuiteCheck#outcome(fast_gate/suite_check.rb:19) and the implement pipeline suite step (StepOutcome#classify_green,step_outcome.rb:34-36, which escalates:green_report_nonzero_exit). Both stop failing on a time-only overrun. This is intended: the overrun is the same false failure in both places.tests/all.rbprintsWARN Suite wall time X (budget 60s)on an overrun and exits 0 when the run is green.A new
SuiteOutput::WallTimeparses the wall-time line. It returns nil when the line is absent.FastGate::SuiteCheck#outcomeadds the wall time to its summary, with anover budgetmarker on an overrun, so the PASS line shows it.Required work:
WARN Suite wall timeinplugins/os-sdlc/tests/all.rbWallTimeinplugins/os-sdlc/lib/os_sdlc/suite_output/*.rbWallTimeinplugins/os-sdlc/lib/os_sdlc/fast_gate/suite_check.rbexceeded because the machine was overloadedinplugins/os-sdlc/references/escalation-procedure.mdBUDGET_SECONDS = 47indocs/implementation-status/os-sdlc.mdRejected: (b) raise the budget — the next load spike fails again. (c) load-aware budget — more code for the same signal.
Acceptance criteria
bin/fast-gateruns, then the gate passes.over budgetmarker.SuiteOutput::WallTimeparses it, then it returns nil and the gate summary has no wall-time text.Unchanged, not an acceptance criterion: a suite run with a failing test still fails the gate (the existing nonzero-exit path; no new test).
Owner sketch
Origin
bin/fast-gateruns during fast-batch-12 on 2026-10-22plugins/os-sdlc/tests/all.rb:21)VERDICT: CREATE
Work started on branch ticket-1239 (os-sdlc implement pipeline).
Implementation 115 failed at test-reviewer dispatch 962 (verdict:error, MISSING: red_tests). Cause: after orchestrator reroute (ticket AC 3 removed — it was a no-behavior criterion that looped test-writer/test-reviewer 4x to bound_exhausted), Dispatch::Brief::Facts#red_tests read the map-router dispatch 960 step summary ({reroute: []}) instead of the last test gate. Workflow defect captured separately. Restarting with a fresh implementation-open: 3 red tests remain in plugins/os-sdlc/tests/fast_gate/suite_check_wall_time_test.rb.
Resolution
Done: A green suite run over the 60s budget prints 'WARN Suite wall time X (budget 60s)' and exits 0; SuiteOutput::WallTime parses it; FastGate::SuiteCheck shows 'wall time Xs over budget' in its summary. The implement pipeline suite step no longer escalates a time-only overrun.
Evidence: main
606016fc(commit0c171c40, merged). Suite 2452 runs, 0 failures, wall 50.5s; rubocop clean on 4 files; one design audit (WallTime is Data.define; AC1 test sets START_TIME back). Implementation 115 failed (ticket AC defect, then reroute defect); implementation 118 hand-finished after escalation 64 and abandoned.Follow-ups: #1255 (reroute gives test-reviewer empty red_tests), occurrence on #663 (no-behavior AC loops the red round), occurrence on #1111 (verifier brief omits changed files). Dropped: SuiteOutput::Summary Struct to Data.define tidy (no defect observed).