Repository navigation
Bound nightly simulation jobs and report reproducible timeouts - #1015
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Why
Issue #925 reports nightly workloads exhausting their command limits. In run 40667618822, compilation consumed 8m58s/8m06s of the apply jobs' 50-minute allowance and 7m35s of main's 55-minute engine allowance. All three then exited 124 without a panic or assertion.
The workload had insufficient headroom for unoptimized simulation code, growing invariant checks, and seed/runner variability. The green October 25 manual run, 40231084500, used only 100 apply seeds and 64 engine seeds; it did not validate the scheduled 500/250 budgets. Standard engine on the unchanged v0.1.9 tag timed out on October 27 but completed its test in 2,158.58s on October 28. Apply main took 2,341.31s on October 25 and 2,448.05s on October 26, before both refs timed out on October 28. This does not establish one sudden deterministic code regression.
The #908 full-suite timing increase mentioned in #911 also compares different test inventories: #908 added the Step failure profile and pinned-command test, whereas nightly selects one test with
--exact. Local sampling of the nightly apply workload showed broad unoptimized row parsing, iterator, copying, and protobuf work rather than a new single blocking operation. An equivalent 100-seed apply run measured 220.27s unoptimized and 42.67s optimized; these exploratory runs overlapped other local work, so the ratio is indicative rather than an isolated benchmark. Sharding plus optimized builds addresses the actual cost without removing checks or shortening seed trajectories.Testing
Rust 1.97.1; local simulation runs use
CARGO_PROFILE_DEV_OPT_LEVEL=1 CARGO_INCREMENTAL=0 CARGO_BUILD_JOBS=4.All four retained and passed their coverage assertions. These are laptop measurements, not hosted-runner timing guarantees; the workflow dispatch must verify actual runner headroom.
cargo test --locked -p dexzd-simulation: passed (17 library tests, 6 apply tests, 1 RNG contract, 5 engine tests), including pinned regression digests and repeated-run determinism.make server-zd-simulation-runner-test: 20 CLI integration tests passed after review fixes, covering every result classification, real baseline failure versus anchored acceptance timeout, invariant failure followed by timeout, child exit 124 versus supervisor timeout, signal-killed children, SIGINT/SIGTERM after build success, zero tests/missing progress, build-only output keys, live output before child exit, descendant termination and output draining, nested-session cleanup, intentional mutant failures, release instrumentation idempotence/rejection, and exact seed partitioning.2618013579, 64 random seeds × 1,000 commands plus two regression seeds; all coverage assertions passed, 137,823 total commands, 29.12s test time and 29.7s command wall time. Build-only runner completed in 0.8s using the existing local optimized target cache.cargo clippy --locked -p dexzd-simulation --all-targets -- -D warnings,cargo fmt --all --check,make rust-rules-check,make copyright-check, workflowactionlint, andgit diff --check: passed.CARGO_PROFILE_DEV_OPT_LEVEL=1 CARGO_INCREMENTAL=0 CARGO_BUILD_JOBS=4 bash script/server-zd-seeded-bugs.sh: passed in 653.01s wall; all 7 seeded bugs detected, 0 gaps, all unpatched suites passed.Hosted workflow results before review fixes
The revised classification, PR CI, separate build outputs, and disjoint target ranges still need a new hosted nightly dispatch on the updated branch. The earlier run below demonstrates cold-build headroom and the preserved full workload; it predates the review fixes.
Default-input run 40727840173 completed on commit bbd3fba: 20 test jobs passed, two apply shards found the existing Attribute Sync bug #1012, and zero jobs timed out. The resolver also passed in 51 seconds. The overall workflow is red solely because of those two real invariant failures.
Among simulation jobs, the longest separate build phase was 740.4s against its 1,500s limit, and the longest simulation was 327.9s against its 3,300s limit. Successful apply shards completed 102 seeds each (100 random plus two regressions); engine shards completed 87/87/88 seeds (83/83/84 random plus four regressions each), preserving the full 250-seed random budget per ref. Both profile types completed all 48 seeds per ref. Both seeded-acceptance jobs detected all seven mutants with zero gaps.
Both failing apply shards found seed 4200525811 at command index 755:
apply-error: apply invariant violated: synced Attribute "orders/2" has no live value. Each loggedResult: invariant failure, base seed 4200525742, and last completed seed 4200525810; they exited 101 rather than 124. Branch simulation time was 50.4s; release simulation time was 98.6s. The failure artifacts retain the reproduction and shrinking output. This production bug is intentionally left to #1012.Seeded-acceptance run seconds include its fresh baseline build, per-mutant builds, and all acceptance suites. Job wall times also include setup and uploads.
Existing invariant failures found during investigation
These remain outside this timeout fix. Reproductions use current origin/main production and simulation logic, with only the new progress output in tests.
apply-error: apply invariant violated: synced Attribute "orders/1" has no live valueapply-error: apply invariant violated: synced Attribute "status" has no live valuenode-cannot-recover: 40 starts failed, ending in a transient object-storage get failure (the recovery retry fix in #944 is already on main)Fixes #925
🤖 Generated with Claude Code