Skip to content

ci(windows): raise build timeout for cold cache - #725

Merged
ScriptedAlchemy merged 2 commits into
codex/tracedecay-total-redesign-plan-reopenedfrom
claude/fix-build-windows
Aug 25, 2026
Merged

ci(windows): raise build timeout for cold cache#725
ScriptedAlchemy merged 2 commits into
codex/tracedecay-total-redesign-plan-reopenedfrom
claude/fix-build-windows

Conversation

@ScriptedAlchemy

Copy link
Copy Markdown
Owner

Summary

Build Windows tests on #707 has two distinct causes, one already fixed and one still live. This PR addresses the live one.

Cause 1 — the compile error (already fixed on base, not by this PR)

Verbatim from run 32769481844 (and identically in 32749920192):

error[E0425]: cannot find function `hook_v2_replay_consumer_registered` in module `crate::daemon::hook_v2_replay`
   --> src\daemon\production_harness\project_server_capacity_journey_test.rs:137:44
    |
137 |             crate::daemon::hook_v2_replay::hook_v2_replay_consumer_registered(&replay_root),
    |                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ not found in `crate::daemon::hook_v2_replay`
    |
note: found an item that was configured out
   --> src\daemon\hook_v2_replay.rs:463:15
    |
462 | #[cfg(all(test, unix))]
    |                 ---- the item is gated here
463 | pub(crate) fn hook_v2_replay_consumer_registered(data_root: &Path) -> bool {
    |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

error: could not compile `tracedecay` (lib test) due to 3 previous errors; 32 warnings emitted

The helper was gated #[cfg(all(test, unix))], but its only consumer — mod project_server_capacity_journey_test in src/daemon/production_harness.rs:793 — is gated plain #[cfg(test)]. On Windows the consumer compiled and the helper did not.

This was fixed in 727a6d6c3 (PR #720) by widening the gate to #[cfg(test)]. That is correct on both platforms: the body only does a BTreeMap lookup plus Weak::upgrade behind a std::sync::Mutex, with no Unix-specific API, so it compiles and behaves identically on Windows. It is already an ancestor of this base — nothing in this PR re-does it.

I audited the same gating class across the tree for other instances. All 16 remaining cfg(all(test, unix)) sites are consistent: six gate an entire test module, and the rest (serve_socket_client, the five retirement_reaper_* helpers, mark_endpoint_bound, the DAEMON_INVOCATION_* re-exports) are only reached from call sites that are themselves #[cfg(unix)]-gated item-by-item. This matches the CI evidence — both failing runs reported exactly 3 errors and only tracedecay (lib test) failed to compile; every other crate built on Windows.

Cause 2 — the 45-minute job timeout (what this PR fixes)

With the compile error gone, the job stopped failing and started getting cancelled. Step timings from the newest run, 32789438873 job 97628697287, on base SHA 9a526da4f:

step window
setup (steps 1–8) 23:39:31 → 23:40:23 (52s)
Cache Windows Rust build outputs 12s — a miss, so a cold build
Build nextest archive 23:40:23 → 00:24:31 (44m08s, killed mid-compile)

Job start 23:39:31 + timeout-minutes: 45 = 00:24:31 — exactly when the step was cut. No step failed; the job timeout fired.

The earlier runs only appeared to fit inside 45m because E0425 is a resolution error: it aborted the tracedecay lib-test unit before codegen, so those runs never paid for the full build. Fixing the compile error removed that accidental shortcut and exposed that a cold-cache full-workspace nextest archive does not fit in 45m.

This still cascades identically: Test Windows fails in seconds on the unsatisfied dependency and all five Test Windows shard {1..5}/5 jobs skip, so the Windows suite stays entirely unexecuted.

Change: raise windows-build.timeout-minutes from 45 to 75, with the measurement recorded in the comment.

This does not disable, skip, or continue-on-error the job — the gate still runs and still has to pass, and a hung linker still fails loudly. It only gives a cold cache room to finish. The existing comment shows the same ceiling was already moved 30 → 45 for this reason; the 45 was simply still too low once the build ran to completion.

Verification

  • cargo check --workspace --all-targets --locked on Linux: clean, Finished in 5m38s, 0 errors. This PR touches only YAML, so no Rust code is affected on either platform.
  • Local Windows cross-check was attempted and is not possible in this environment, so the 75m figure is an evidence-based estimate rather than an observed passing build:
    • --target x86_64-pc-windows-msvc fails in the tree-sitter-* C build scripts (no MSVC C headers locally).
    • --target x86_64-pc-windows-gnu fails in ort-sys (no prebuilt ONNX Runtime for windows-gnu; CI uses msvc, which does have one).
    • Both are third-party native-toolchain limits, not Rust errors in this workspace.

The real confirmation is the next wide CI run: Build Windows tests should complete rather than being cancelled at 45m, and the five shards should finally execute. If the archive step turns out to need more than 75m even warm, that is a build-time problem to attack directly rather than by raising the ceiling again.

🤖 Generated with Claude Code

https://claude.ai/code/session_0175M5Lyn1pPrX9a6CYvwDVn

`Build Windows tests` no longer fails to compile -- 727a6d6 fixed the
E0425 that broke the Windows lib-test unit -- but the job now dies at the
45m job timeout instead.

In run 32789438873 the Swatinem cache restore took 12s (a miss), setup
finished in 52s, and `Build nextest archive` then burned 44m08s before the
job timeout killed it mid-compile. Earlier runs only appeared to fit inside
45m because the resolution error aborted the `tracedecay` lib-test unit
before codegen.

Raise the ceiling to 75m so a genuinely cold cache can complete. The gate
still runs and still has to pass; a hung linker will fail loudly.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0175M5Lyn1pPrX9a6CYvwDVn
@changeset-bot

changeset-bot Bot commented Aug 25, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: e6f43a8

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: eb51a8a194

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .github/workflows/ci.yml
# killed mid-compile). Earlier runs only "finished" faster because a
# resolution error aborted the `tracedecay` lib-test unit early. 75m fits
# a genuinely cold cache while still failing loudly on a hung linker.
timeout-minutes: 75

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Fix the cold-cache build instead of raising its timeout

On a cold Windows cache, this patch only moves the cancellation ceiling from 45 to 75 minutes; the commit explicitly describes 75 minutes as an unobserved estimate, so the job can consume another 30 minutes and still cancel without establishing a passing Windows gate. Keep the existing ceiling and reduce, scope, or cache the Build nextest archive workload using measured cold-run evidence.

AGENTS.md reference: AGENTS.md:L126-L128

Useful? React with 👍 / 👎.

@ScriptedAlchemy
ScriptedAlchemy merged commit 5bac377 into codex/tracedecay-total-redesign-plan-reopened Aug 25, 2026
4 checks passed
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