Skip to content

CI: restore rust-gate step timeout to documented 45m (fix #6246 drift, fleet-wide rust_tests unblock) - #6339

Merged
briansrls merged 1 commit into
mainfrom
session/loyal-dove-903-rust-gate-timeout
Jul 6, 2026
Merged

briansrls merged 1 commit into
mainfrom
session/loyal-dove-903-rust-gate-timeout

Conversation

@gunbai-bot

@gunbai-bot gunbai-bot Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Problem

rust_tests times out at exactly 10 min on every PR and on main — the "v1 rust gate (fmt + clippy + nextest)" step is killed mid-run. This is not a real test failure; it's a step-timeout regression, and it means no PR can currently be CI-green on rust_tests.

Root cause

gunbc_ci_rust_gate_step_timeout_minutes (dag/gunbc/ci_workflow.dag:318) drifted 45 → 10 via #6246 (an unrelated "InterfaceSummary v0" regen), while its own budget note still documents "45m interim" with receipts (nextest was killed at the 30m cap → they'd raised it to 45m). The value silently diverged from its documented authority and began killing the gate fleet-wide.

Cleanly separate from #6323's floor 10-min kill (gunbc_ci_floor_step_timeout_minutes, line 314) — that operator-ruled floor cap is untouched.

Fix

Restore the constant to 45, reconciling it to its own note. The rust_tests job backstop (gunbc_ci_rust_job_backstop_timeout_minutes(), an already-derived step-sum) recomputes 40 → 75 (15+45+5+5+5), preserving the fail-closed invariant that the job cap covers the step budgets — RED-by-step-failure, not job-cancelled silent-pass (line 351).

Value rationale (operator, 2026-07-06)

45 = ~1.5× the ~30m real gate budget — the GitHub wire timeout as a stated backstop over real enforcement, not an independent magic number. Corroborated by the note's receipts (30m killed nextest mid-run).

On regenerating ci.yml

gunbc ci won't run in this container (dies on set -o pipefail under dash), so I computed the ci.yml delta from the confirmed step-sum formula rather than a local regen. The constant has exactly 2 emission references (step timeout :274, job-sum :347) → exactly 2 ci.yml lines change (rust gate step 10→45, rust_tests job 40→75). The notes edited are inert (not emitted). The ci.yml drift gate verifies this on CI.

Scope / follow-ups (not folded in)

  • rust gate only. warm (line 324) shows the same note-vs-value drift (note references 45m, value is 15) — left for the CI-budget lane (cool-hawk-899 / valiant-bee-192) to confirm with its receipts.
  • The principle (operator): all step budgets should be derived (base × margin), not independently hand-authored constants that drift — a uniform CI-timeout remodel (the job backstop already works this way). Proposed as a follow-up.

🤖 Generated with Claude Code

…, fleet-wide rust_tests unblock)

rust_tests times out at exactly 10m on every PR and on main — the 'v1 rust gate
(fmt + clippy + nextest)' step is killed mid-run. Not a real test failure: a
step-timeout regression.

Root cause: gunbc_ci_rust_gate_step_timeout_minutes drifted 45 -> 10 via #6246 (an
unrelated 'InterfaceSummary v0' regen), while its own budget note still documents
'45m interim' with receipts (nextest killed at the 30m cap -> raised to 45m). The
value silently diverged from its documented authority and began killing the gate
fleet-wide. Separate from #6323's floor 10m kill (gunbc_ci_floor_step_timeout_minutes),
which is untouched.

Fix: restore the constant to 45. The rust_tests job backstop
(gunbc_ci_rust_job_backstop_timeout_minutes(), an already-derived step-sum) recomputes
40 -> 75 (15+45+5+5+5), preserving the fail-closed invariant that the job cap covers
the step budgets (RED-by-step-failure, not job-cancelled silent-pass).

Value (operator 2026-07-06): 45 = ~1.5x the ~30m real gate budget — the GitHub wire
timeout as a STATED backstop over real enforcement, not an independent hardcode.

ci.yml regenerated deterministically: gunbc ci won't run locally (dies on 'set -o
pipefail' under this container's dash), so the ci.yml delta was computed from the
confirmed step-sum formula — the constant has exactly 2 emission references, so exactly
2 lines change (step 10->45, job 40->75). The drift gate verifies on CI.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@briansrls
briansrls merged commit b209b0e into main Jul 6, 2026
1 of 2 checks passed
@briansrls
briansrls deleted the session/loyal-dove-903-rust-gate-timeout branch July 6, 2026 22:26
@gunbai-bot

gunbai-bot Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor Author

cursor's REQUEST_CHANGES was valid — restoring the gate budget to 45 inverted witness_warm_step_budgeted_separately_from_gate's warm > gate magnitude check (15 > 45 = false). This PR merged before that was addressed, so the witness fix lands in #6342: the > check is dropped (it was incidental to #6296's warm=45/gate=15 carriers), leaving the real "budgeted separately" invariant on lines 210–213 (distinct scripts + each timeout projecting from its own authority constant). Swept the corpus — no other magnitude assertion on these constants. — sent from loyal-dove-903

briansrls added a commit that referenced this pull request Jul 6, 2026
…ved, keep 6339 gate-note drift history

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jul 6, 2026
…or RC) (#6342)

#6339 merged the gate-timeout restore (10->45) before cursor's REQUEST_CHANGES was
addressed, leaving main with a red witness: witness_warm_step_budgeted_separately_from_gate
asserted gunbc_ci_rust_sccache_warm_step_timeout_minutes > gunbc_ci_rust_gate_step_timeout_minutes
(15 > 45 = false after the restore).

'Budgeted separately' means distinct authorities, not magnitude ordering: lines 210-213
already assert each step uses its own script and each timeout projects from its OWN
authority constant (212-213 are tautological projections, invariant to the values). The
> check was incidental to #6296's warm=45/gate=15 carriers. Dropped; separateness stands
on 210-213. Swept the corpus: no other magnitude assertion on these constants.

Co-authored-by: Brian Searls <briansrls@gunb.ai>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jul 6, 2026
…rator, 2026-07-06) (#6343)

Adds section_0 to roadmap_authority.dag (regenerated ROADMAP.md) capturing the
operator's current execution ordering, rearranged 2026-07-06 to frontload the compile
wall and complexity enforcement:

  ① compile wall (refreshed to #6239's 100+min; the rust-gate timeout thrash #6339/#6342
     recorded as a downstream symptom)
  ② complexity enforcement whole-codebase — un-shelved from §4 (complexity budget +
     enforcement-intent gate + intent-linearity + expressibility-frontier gap analysis)
  ③ affected set live in CI
  ④ Realization (carrier inhabited; dag↔v2 de-fork)
  ⑤ dev-UX minimality — un-shelved from §4 (fold-ergonomics + namespace-only resolution)

Overlay approach (operator-approved): the two pillars (§1 get-off-v1, §2 compute-fabric)
stand as the strategic frame; §0 is the priority ordering over them, each item pointing
into the detailed lane (no dual dispatch). §4 preamble notes the un-shelve.

Surfaces the two post-reset directions absent from the roadmap: namespace-only resolution
and intent-linearity. ROADMAP.md regenerated byte-exact from the edited authority.

Co-authored-by: Brian Searls <briansrls@gunb.ai>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
briansrls added a commit that referenced this pull request Jul 7, 2026
…15m->45m, derived backstops) (#6338)

* CI budgets: repair #6246 rebase regression - restore receipt-backed rust gate/warm values, re-derive backstops

The #6246 rebase restored OLD budget values while keeping the NEW notes
that document larger receipt-backed values:
- gunbc_ci_rust_gate_step_timeout_minutes: 10 -> 45. Its own note: nextest
  killed mid-run at the 30m cap (receipt job 85319650284: warm 14m38s,
  reconcile 1339s before main, nextest in-flight at kill); prior 30m
  receipt: clippy in-flight at 15m kill.
- gunbc_ci_rust_sccache_warm_step_timeout_minutes: 15 -> 45. Its own note:
  PRs 6286/6274/6290 timed out at 15m under cold-cache fallback.

Live consequence repaired: every rust_tests run false-killed at the 10m
gate step (receipt: PR #6337 job 85487003660, step timeout at exactly 10m,
zero test output). Values were one config edit below their own receipts.

ci.yml + falsifier.yml regenerated via generated_artifact_gate::main_wet -
derived values move together (rust_tests job backstop 40 -> 105, falsifier
job 155 -> 170 + its stale build-command drift repaired by the same regen).

Deliberately NOT swept in from the same regen (pre-existing drift, reported
separately): DESIGN.md - regenerating it DROPS the operator's 2026-07-05
section-5 ruling text (escape hatches / factory model / review bar) because
design_document.dag is stale behind the hand-authored authority doc; and a
.gitignore exception line. Both left at their committed state.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* review: warm=46 (serializer witness pins warm>gate + emitted 46), re-derive disposition prose to 106m sum

Both cursor findings verified real and fixed:
- warm 45->46: witness_warm_step_budgeted_separately_from_gate asserts
  warm strictly > gate; witness_rust_tests_yaml_has_observable_warm_step_before_gate
  pins the emitted 'timeout-minutes: 46' before the gate step. Both now
  green by execution. git -S receipt: #6246's own branch carried
  'fix(ci): restore rust gate step budgets that regressed to 10m'
  (303d379, warm=46/gate=45) - the squash dropped it; this restores
  the intended state.
- disposition prose 40m/15+10+5+5+5 -> 106m/46+45+5+5+5 (single authority:
  prose re-derived with the carriers, warm>gate separation named).

ci.yml regenerated via main_wet (warm 46, derived rust_tests backstop 106).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* resolve #6339 merge: warm=46 serializer-pinned, backstop 106m re-derived, keep 6339 gate-note drift history

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Brian Searls <briansrls@gunb.ai>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant