diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1883e1b706f..4cf1305e88d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -126,7 +126,7 @@ jobs: timeout-minutes: 5 rust_tests: runs-on: [self-hosted, linux, arm64] - timeout-minutes: 75 + timeout-minutes: 106 steps: - name: Checkout uses: actions/checkout@v5 @@ -199,7 +199,7 @@ jobs: rm -f "$BUILD_LOG" "$ROOT/target/release/claim_executor" --verify-build-artifacts "$ROOT/target/release/claim_executor" "$ROOT/target/release/gunbc" sccache --show-stats 2>/dev/null || true - timeout-minutes: 15 + timeout-minutes: 46 - name: v1 rust gate (fmt + clippy + nextest) run: | ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd) diff --git a/.github/workflows/falsifier.yml b/.github/workflows/falsifier.yml index e6bf9999989..8d9fa7272c6 100644 --- a/.github/workflows/falsifier.yml +++ b/.github/workflows/falsifier.yml @@ -10,7 +10,7 @@ env: jobs: falsifier: runs-on: [self-hosted, linux, arm64] - timeout-minutes: 155 + timeout-minutes: 170 steps: - name: Checkout uses: actions/checkout@v5 @@ -54,14 +54,14 @@ jobs: ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd) set -o pipefail BUILD_LOG=$(mktemp) - if ! ("$CARGO_HOME/bin/cargo" build -p v1-compiler --release --features text_lookup_work_counter --bins) 2>&1 | tee "$BUILD_LOG"; then + if ! ("$CARGO_HOME/bin/cargo" build -p v1-compiler --release --features text_lookup_work_counter --bin claim_executor --bin gunbc) 2>&1 | tee "$BUILD_LOG"; then if grep -qiE 'Resource temporarily unavailable|failed to spawn|sccache: encountered fatal error|(exit status: 254)|sccache: error: failed to execute compile' "$BUILD_LOG"; then echo "::warning::cargo/sccache EAGAIN under fleet pressure; cold retry CARGO_BUILD_JOBS=1 (keep sccache)" RETRY_LOG=$(mktemp) - if ! ( CARGO_BUILD_JOBS=1 "$CARGO_HOME/bin/cargo" build -p v1-compiler --release --features text_lookup_work_counter --bins ) 2>&1 | tee "$RETRY_LOG"; then + if ! ( CARGO_BUILD_JOBS=1 "$CARGO_HOME/bin/cargo" build -p v1-compiler --release --features text_lookup_work_counter --bin claim_executor --bin gunbc ) 2>&1 | tee "$RETRY_LOG"; then if grep -qiE 'Resource temporarily unavailable|failed to spawn|sccache: encountered fatal error|(exit status: 254)|sccache: error: failed to execute compile' "$RETRY_LOG"; then echo "::warning::cargo/sccache still failing; retry without RUSTC_WRAPPER" - env -u RUSTC_WRAPPER CARGO_BUILD_JOBS=1 "$CARGO_HOME/bin/cargo" build -p v1-compiler --release --features text_lookup_work_counter --bins || exit 1 + env -u RUSTC_WRAPPER CARGO_BUILD_JOBS=1 "$CARGO_HOME/bin/cargo" build -p v1-compiler --release --features text_lookup_work_counter --bin claim_executor --bin gunbc || exit 1 else exit 1 fi @@ -74,7 +74,7 @@ jobs: rm -f "$BUILD_LOG" "$ROOT/target/release/claim_executor" --verify-build-artifacts "$ROOT/target/release/claim_executor" "$ROOT/target/release/gunbc" sccache --show-stats 2>/dev/null || true - timeout-minutes: 30 + timeout-minutes: 45 - name: affected-set falsifier (predict-only cold run) run: | ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd) diff --git a/dag/gunbc/ci_workflow.dag b/dag/gunbc/ci_workflow.dag index 94eddc06de2..db0d3a96be7 100644 --- a/dag/gunbc/ci_workflow.dag +++ b/dag/gunbc/ci_workflow.dag @@ -321,7 +321,7 @@ data gunbc_ci_rust_gate_step_budget_note: String = "Budgeted rust-gate-only step data ci_rust_build_gate_step_split_note: String = "Build and rust gate are separate workflow steps (same discipline as ci_build_floor_step_split_note): bundling cargo build + rust_gates_ci under one step timeout produced step-FAILURE during v1-compiler compile with zero gate verdict (receipt: rust_tests job 85237415376, run 28746200534 on dfbff0f). Warm step ci_rust_sccache_warm_step carries gunbc_ci_rust_sccache_warm_step_timeout_minutes; rust gate step carries gunbc_ci_rust_gate_step_timeout_minutes." -data gunbc_ci_rust_sccache_warm_step_timeout_minutes: Int = 15 +data gunbc_ci_rust_sccache_warm_step_timeout_minutes: Int = 46 data gunbc_ci_rust_sccache_warm_step_budget_note: String = "Observable sccache-warm step (release bins + cache prime) before the budgeted rust gate: cold-cache fallback storms are counted here, not in gunbc_ci_rust_gate_step_timeout_minutes (operator ruling, cool-hawk-899 / valiant-bee-192). Receipt: PRs 6286/6274/6290 timed out at 15m with clippy never finishing under sccache cold-cache fallback while bundled with build." @@ -348,7 +348,7 @@ fn gunbc_ci_rust_job_backstop_timeout_minutes() -> Int { } data gunbc_ci_job_timeout_policy_disposition: Disposition = Terminal { - reason: "gunbc CI budget semantics (operator ruling 2026-07-06): floor step gunbc_ci_floor_step_timeout_minutes (10m) enforced at STEP level (RED-by-failure); ci job backstop gunbc_ci_job_backstop_timeout_minutes() = release build + floor + aux + prelude (65m) so cold release build is not killed by a job cap shorter than gunbc_ci_release_build_step_timeout_minutes (receipt run 28819559597 @ 201371c: 10m job kill aborted cargo mid-build). rust_tests keeps step-sum job backstop gunbc_ci_rust_job_backstop_timeout_minutes() = warm + gate + aux + prelude (75m at current step carriers: 15+45+5+5+5) — job cap must cover step budgets so gates reach RED-by-step-failure, not job-cancelled silent-pass (#6323 starvation-kill scoped to ci/floor only on main). dissolve-on: compile-clean scoping/memoization shrinks floor under measured envelope." + reason: "gunbc CI budget semantics (operator ruling 2026-07-06): floor step gunbc_ci_floor_step_timeout_minutes (10m) enforced at STEP level (RED-by-failure); ci job backstop gunbc_ci_job_backstop_timeout_minutes() = release build + floor + aux + prelude (65m) so cold release build is not killed by a job cap shorter than gunbc_ci_release_build_step_timeout_minutes (receipt run 28819559597 @ 201371c: 10m job kill aborted cargo mid-build). rust_tests keeps step-sum job backstop gunbc_ci_rust_job_backstop_timeout_minutes() = warm + gate + aux + prelude (106m at current step carriers: 46+45+5+5+5; warm strictly > gate is the serializer-witnessed separation - cold-cache storms land in warm, never eat the gate budget) — job cap must cover step budgets so gates reach RED-by-step-failure, not job-cancelled silent-pass (#6323 starvation-kill scoped to ci/floor only on main). dissolve-on: compile-clean scoping/memoization shrinks floor under measured envelope." } fn ci_deploy_job(stage: DeployStage) -> Job {