fix(lane): drain terminal events at pump budget #180

Open
triform-admin wants to merge 0 commits from agent/lane-conflict-pump-yield-39016 into main

Problem

A conflict-heavy lane can recursively consume the 64-step pump budget. The old driver breaks after executing the build and queues BuildFinished, but drops that pending terminal event. The durable trail says the attempt ended while lane state remains building/settled forever.

This matches the production generation-111 failure observed in tf-multiverse.

Fix

After the eager-step budget is reached, continue draining already-produced events while suppressing new build starts. The current terminal event is applied, the lane settles idle, and the next host tick resumes queued work. A durable lane-pump-yield trail record makes the boundary observable.

Proof

  • Red proof: b570697327a0f273612ab9d760ec1637dfebc6f2 fails only the_step_budget_yields_idle_instead_of_latching_a_completed_conflict_build; the other six ci-gate legs pass.
  • Fixed head: 7d028e127a681be462042c221499c93ec1ac41eb passes all seven scripts/ci-gate legs: build, test, fmt, clippy, integ-build, integ-test, integ-clippy.
  • Regression uses 70 conflicting members with admissions held until the explicit trigger, proving exactly 63 attempts complete in one pump and the remaining 7 stay queued without latching an in-flight build.
## Problem A conflict-heavy lane can recursively consume the 64-step pump budget. The old driver breaks after executing the build and queues `BuildFinished`, but drops that pending terminal event. The durable trail says the attempt ended while lane state remains `building`/`settled` forever. This matches the production generation-111 failure observed in tf-multiverse. ## Fix After the eager-step budget is reached, continue draining already-produced events while suppressing new build starts. The current terminal event is applied, the lane settles idle, and the next host tick resumes queued work. A durable `lane-pump-yield` trail record makes the boundary observable. ## Proof - Red proof: `b570697327a0f273612ab9d760ec1637dfebc6f2` fails only `the_step_budget_yields_idle_instead_of_latching_a_completed_conflict_build`; the other six `ci-gate` legs pass. - Fixed head: `7d028e127a681be462042c221499c93ec1ac41eb` passes all seven `scripts/ci-gate` legs: build, test, fmt, clippy, integ-build, integ-test, integ-clippy. - Regression uses 70 conflicting members with admissions held until the explicit trigger, proving exactly 63 attempts complete in one pump and the remaining 7 stay queued without latching an in-flight build.
test(lane): hold admissions until conflict trigger
All checks were successful
ci / build (pull_request) Successful in 1m47s
ci / test (pull_request) Successful in 1m46s
ci / fmt (pull_request) Successful in 1m0s
ci / clippy (pull_request) Successful in 49s
ci / rust-analyzer latency harness (S1 / AC#2) (pull_request) Has been skipped
ci / lane policy mutation proof (pull_request) Successful in 3m16s
ci / build (push) Successful in 1m1s
ci / test (push) Successful in 1m14s
ci / fmt (push) Successful in 29s
ci / clippy (push) Successful in 54s
ci / lane policy mutation proof (push) Successful in 3m19s
s1-ac2-verdict S1_VERDICT: trait_err=386ms:PASS view_macro=386ms:PASS AC2=PASS D-A2=GO basis=cargo-check/warm-incremental reword="median save->verdict <1s via authoritative cargo-check (incl. view! macros); RA-native advisory-only, never authoritative"
ci / rust-analyzer latency harness (S1 / AC#2) (push) Successful in 1m0s
7d028e127a
All checks were successful
ci / build (pull_request) Successful in 1m47s
ci / test (pull_request) Successful in 1m46s
ci / fmt (pull_request) Successful in 1m0s
ci / clippy (pull_request) Successful in 49s
ci / rust-analyzer latency harness (S1 / AC#2) (pull_request) Has been skipped
ci / lane policy mutation proof (pull_request) Successful in 3m16s
ci / build (push) Successful in 1m1s
ci / test (push) Successful in 1m14s
ci / fmt (push) Successful in 29s
ci / clippy (push) Successful in 54s
ci / lane policy mutation proof (push) Successful in 3m19s
s1-ac2-verdict S1_VERDICT: trait_err=386ms:PASS view_macro=386ms:PASS AC2=PASS D-A2=GO basis=cargo-check/warm-incremental reword="median save->verdict <1s via authoritative cargo-check (incl. view! macros); RA-native advisory-only, never authoritative"
ci / rust-analyzer latency harness (S1 / AC#2) (push) Successful in 1m0s
This branch is already included in the target branch. There is nothing to merge.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin agent/lane-conflict-pump-yield-39016:agent/lane-conflict-pump-yield-39016
git switch agent/lane-conflict-pump-yield-39016

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch main
git merge --no-ff agent/lane-conflict-pump-yield-39016
git switch agent/lane-conflict-pump-yield-39016
git rebase main
git switch main
git merge --ff-only agent/lane-conflict-pump-yield-39016
git switch agent/lane-conflict-pump-yield-39016
git rebase main
git switch main
git merge --no-ff agent/lane-conflict-pump-yield-39016
git switch main
git merge --squash agent/lane-conflict-pump-yield-39016
git switch main
git merge --ff-only agent/lane-conflict-pump-yield-39016
git switch main
git merge agent/lane-conflict-pump-yield-39016
git push origin main
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
triform/cargoless!180
No description provided.