v5 CI: build e2e binaries once and tier the PM matrix - #291
Conversation
The e2e matrix recompiled the CLI and its test binary in each of its 176 legs. e2e-build now compiles every CLI test target once per OS and the legs run the downloaded binaries from the same checkout path. That compile also replaces the --all-features --no-run pass in test and test-release, so each of those compiles one feature set. PR runs keep every named version boundary, the oldest and newest release of each tool and every vlt era. The 31 middle e2e rows, 2 yarn-berry releases and 10 cargo toolchain x lock cells move to *-full jobs that run on main pushes, a new nightly schedule and dispatch. - e2e-docker (a subset of coverage-docker) runs nightly only. - Dockerfile.base is built once per run and loaded by each docker leg. - The hermetic maven/nuget crawl tests run in `test`; their rows and e2e_composer's are gone. e2e_safety_cargo_build rides cargo-vex. - pdm-compat builds the capstone once, skips the 7 cells ci.yml runs, drops the Windows native rows (they never ran), and fails a cell whose bootstrap fails or whose rows all skip. - vlt-compat install-proof leaves ci.yml's identical cells to it. - npm/pnpm compatibility are path-filtered on PRs; the disarmed vlt serve watchdog runs daily instead of every 6 hours. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HK6zFsizxHRUtyxPvdhM4c
- The legs that run test binaries directly set SOCKET_NO_CONFIG and SOCKET_NO_UPDATE_CHECK, which cargo's [env] gave `cargo test`. - cargo 1.93.1 with its own lock (the pinned toolchain the removed e2e_safety_cargo_build rows ran) stays on PRs; 1.82.0 own-lock moves to the full tier. - Poetry 2.0.1, the first lock 2.1 writer, stays on PRs. - e2e-build gets 60 minutes on Windows. - npm/pnpm filters also watch .cargo/config.toml and cache_env.rs. - vlt install-proof notes a cell left entirely to ci.yml. - pdm-compat saves its build cache from main only. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HK6zFsizxHRUtyxPvdhM4c
- ci.yml also runs on pushes to release/v5-prerelease, whose PRs skip the full tier and which has no nightly; e2e-docker runs there too. - cargo 1.93.1 with its own lock runs on macOS and Windows on PRs, the cell the old e2e_safety_cargo_build rows ran there. - e2e-build and pdm-compat print rendered compile errors (json-render-diagnostics). - vlt-compat and pdm-compat also trigger on ci.yml changes, and the vlt dedupe only counts ci rows with the same test filter. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HK6zFsizxHRUtyxPvdhM4c
get now defaults to hosted mode (5e5f5ed), so the real-vlt get_and_remove leg ran a hosted get and found the installed copy unpatched. It now passes --mode agent, like the other agent-mode fixtures that commit updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R11RZRvYFL3fzmEnkFAU4A (cherry picked from commit cc5f1b6)
|
[agent] vlt-compatibility
Generated by Claude Code |
|
[agent] vlt-compatibility
Generated by Claude Code |
|
[agent]
Generated by Claude Code |
|
#283 landed on release/v5-prerelease as 06437d2; please merge origin/release/v5-prerelease again, resolve conflicts, get green, and keep it ready. Generated by Claude Code |
|
[agent] ready to land
Generated by Claude Code |
A concurrency group holds one pending run. Sharing main's group let a queued main push and the nightly cancel each other, and the nightly is the only automatic run of e2e-docker. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HK6zFsizxHRUtyxPvdhM4c
|
[agent] ready to land
Generated by Claude Code |
|
[agent] ready to land
Generated by Claude Code |
|
[agent]
Generated by Claude Code |
|
[agent] Status on 73e4c6b, which merges base 28cebf7:
Generated by Claude Code |
|
#281 landed on release/v5-prerelease as 73c0c4f; please merge origin/release/v5-prerelease again, resolve conflicts, get green, and keep it ready. Generated by Claude Code |
|
[agent] ready to land
Generated by Claude Code |
|
#279 landed on release/v5-prerelease as f6bdad5; please merge origin/release/v5-prerelease again, resolve conflicts, get green, and keep it ready. Generated by Claude Code |
…i-build-once # Conflicts: # .github/workflows/ci.yml
|
[agent] ready to land
Generated by Claude Code |
|
#282 landed on release/v5-prerelease as 14a9cb0; please merge origin/release/v5-prerelease again, resolve conflicts, get green, and keep it ready. Generated by Claude Code |
|
[agent] I merged
Generated by Claude Code |
|
[agent]
No fix exists because nothing points at a code change. I'll re-run the failed jobs once this run finishes. That is the one re-run to confirm it. If it fails the same way again, I'll treat it as real and dig into it. Generated by Claude Code |
|
[agent] ready to land
Generated by Claude Code |
f9cb7e1
into
release/v5-prerelease
Brings in #291, which builds the e2e test binaries once and tiers the package-manager matrix. The only conflict is the `test-release` timeout: it takes the base's 40 minutes. The 50 minutes here was sized for the two feature-set builds that #291 removes. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BKsyzefGhAnPkYmXCwq3H3
Brings in #291, which builds the e2e binaries once per OS and tiers the package-manager matrix. The release test job keeps the base's 40-minute limit. This branch raised it to 50 because the job used to build the test graph twice; it now builds once, so the extra time is no longer needed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AvGSu5jGg1z3f3sePc2eHC
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N9YdJqaGiT9Jf5LN1hDFhB
v5 waste review follow-up W1 (#286). This PR changes workflows and CI scripts only, plus un-ignoring 4 hermetic tests and porting one test fix (cc5f1b6).
Findings
e2e-buildjob compiles the CLI and every CLI test target once per OS (--all-features).scripts/ci-e2e-bundle.pybundles the binaries the rows need, and the legs run them directly from the same checkout path withCARGO_MANIFEST_DIRand cargo's[env]set ascargo testwould. The legs no longer compile or use rust-cache.testandtest-releasecompile one feature set. The feature-gated suites' compile-rot check moves toe2e-build, on 3 OSes.e2e-full: bundler 2.7.2, uv 0.2–0.11 plus 0.5.3/0.5.6, Pipenv 2023–2025, and .NET 7–9 on ubuntu. yarn-berry 4.6.0 and ubuntu 4.12.0 move toyarn-berry-full, and 10 cargo toolchain × lock cells tocargo-vex-matrix-full. These run on main pushes, pushes torelease/v5-prerelease, a new nightlyschedule(with its own concurrency group) and dispatch. PRs keep every named boundary, the oldest and newest release of each tool, and every vlt row. Every PM version stays.e2e-dockerruns nightly, on dispatch and on v5 pushes.coverage-dockerruns the same 9 suites (plus vendor_gem and vendor_maven) on every PR.docker-basejob buildsDockerfile.baseonce and hands it to the docker legs withdocker save/load.testruns them on 3 OSes; they pass on Windows. Thee2e_maven,e2e_nugetande2e_composerrows are gone (none of the three has an#[ignore]d test left). #279's removal of the vacuouse2e_cargo/e2e_golangrows is kept.e2e_safety_cargo_buildrows are gone; every cargo-vex leg runs that suite. PRs run a covering subset: every toolchain, every lock, and 1.93.1 with its own lock on 3 OSes. The rest of the cross is in-full. The binaries come frome2e-build.e2e_vex_buildonce, and the capstone skips the 7 cells ci.yml runs;test_ci_e2e_tiers.pykeeps the two lists equal.backtest-pdm.pyturns a bootstrap failure into ERROR, and a cell whose rows all skip exits 1. The 16 Windows native rows are dropped because they always skipped (POSIX venv layout). Native Windows PDM stays untested, as it was before; porting the harness would add ~50–60 job-min.e2eruns identically (scripts/ci-vlt-proof-suites.py, tested); a dispatch runs every cell. It is verified in run 36419561398: the ubuntu rc.32 cell logs 3 suites handed to ci.yml.setupand the setup-matrix job, and this PR now includes that change through the merge from the base.Measured savings
e2e-full30 legs, 15.3 +e2e-build20.8 = 140.6docker-base4.9)v5/ci-build-once-proof, which drops only theneeds: testgate. The proxy refused to let me delete that branch; please delete it.Equivalence
e2e-full= 170 after, with no new or changed rows. The other 6 moved: e2e_maven, e2e_nuget and e2e_composer intotest, and e2e_safety_cargo_build ×3 into every cargo-vex leg. (Since then, v5: removesetup(WS7) + patch UI streamlining (WS8) #279 also dropped the vacuous e2e_cargo and e2e_golang rows on the base.)SOCKET_PATCH_*_E2E_REQUIRED/_VERSIONgate is unchanged. vlt legs still go throughcheck-vlt-legs.py, with--binary. Exit status reaches the step through pipefail.native (windows-latest, 1.2.0)also failed 5 of 36 production-dependent cases; it passed on the one re-run, as it did on v5 WS4/WS6: one hosted engine for disk + memory; unified Ledgers view #282's own head.python3 -m unittest discover -s scripts/testspasses, including the newtest_ci_e2e_tiers.py, andcargo build --workspace --tests --all-featurespasses after the v5 WS4/WS6: one hosted engine for disk + memory; unified Ledgers view #282 merge. actionlint reports only "property not defined" on the stepse2e-fullshares through the YAML alias; a missing matrix key is null at runtime, as it is for e2e rows today.Base-inherited failures
covgap_commands_scan_modfailure, which had skipped the whole e2e tier on v5 PRs, and the dotnet hosted capstone.e2e_safety_pnpm. Porting cc5f1b6 fixedget_and_remove.hosted_wiring_contestedrefusals in the uv andmode_migration_vltlegs.e2e_redirect_vlt_buildfail:vlt_pinned_matrix_hosted_crlf_lock,_idempotenceand_rollback_byte_exact. In each, rollback doesn't restore the lock's tarball-URL field byte-for-byte. The base's own run on 28cebf7 (36454568301) and v5 WS4/WS6: one hosted engine for disk + memory; unified Ledgers view #282's head (run 36474482017) fail the same 4 cells.mode_migration_npmfails. The base fails the same way in run 36454564172.hosted-e2epasses on 3e1f36d. An earlier failure was a production reachability blip.Needs an owner check
e2e (…)rows,e2e-docker (<eco>)×9 (now one skipped check), 10 cargo cells, 2 yarn-berry cells, and the pdm Windows and excluded cells. If any of them are required checks, PRs will wedge.🤖 Generated with Claude Code
https://claude.ai/code/session_01HK6zFsizxHRUtyxPvdhM4c