Combined Saved Scenario spacing gate preparation
Attempt2 is prepared for the fetched user instruction update. The candidate commit awaits finalization; no source enumeration, baseline capture, finalization, compiler, test execution, cleanup, or native launch has been performed here. The parent owns final source review and dispatch.
This recipe adapts the reviewed scenario-workspace-gates-attempt3-20260913 runner for the separate scenario-spacing-ytr83r-20260913 worktree. It retains the shared root target and dependency cache with the established jobs=1/incremental=0 environment. The scripts never clean packages. Any separately required package clearance belongs to the parent.
Expected membership
The previous actual desktop listing has 1,045 names. Source adds 36 ordinary tests: nine primitive-hit tests, nine pure spacing tests, five controller tests, seven App adapter tests, and six mounted spacing tests. One additional ignored large-scene timing diagnostic brings the predicted full listing to 1,082, including four normally ignored cases.
The exact focused set is 288: the previous corrected 224 plus all five app::transition_context_tests, all 23 behavior::contextual_source_tests, and all 36 new ordinary tests. A successful focused run should report 288 passed, zero failed/ignored, and 794 filtered. The timing diagnostic is excluded. selection-provenance.json records the initial source-only derivation and hashes; it is not a final source binding or execution result. If review changes names or test membership, update this preparation before finalization. The actual executable listing must match every full and focused expected name before execution continues.
Dispatch after the reviewed candidate is committed
- Run
finalize.ps1 -SourceCommit <full reviewed SHA>. It requires a clean exact checkout, independently enumerates Git and on-disk input membership, captures every input and external configuration, and creates the single baseline capture. Input count is derived afresh, not inherited from the 601-input UI gate. - Parent runs
run.ps1 -Stage list, thenfocused,all,clippy, andbuild, sequentially and only after each prior receipt passes.
The listing binds the actual test executable reported by Cargo. Later stages verify that exact binary before and after execution; focused/full output must name the same executable. Exact per-test results, counts, ignored cases, source hashes, script/config hashes, prior receipts, and raw logs are checked. The GUI build receives a separate path/size/hash/time binding after successful build.
Strict lint remains cargo clippy -p oa-desktop -p oa-server --all-targets --locked --offline -- -D warnings. The prior unchanged core/server evidence is reused only while the finalizer confirms those paths and manifests have not changed from the verified 37 source. Server tests do not substitute for server strict lint. No separate server test repetition is planned.
Prior failure and preparation checks
The closed cb5 gate is preserved unchanged: listing 1,045 and focused 224 passed; the full run had 1,040 passed, two failed, and three ignored, with 601 inputs unchanged. Its failed transition-context and contextual-source evaluators are included in this focused set. Strict lint and GUI build did not run. Finalization records hashes of the original logs, receipts, and input bindings; the previous gate is not combined-source acceptance.
The preparation syntax check covers the original seven PowerShell scripts plus the optional diagnostic runner. The parser evaluator extracts the runner's actual parsing block and checks nine synthetic cases (valid/invalid exact focused selection and full listing). The earlier preparation receipt is retained; parser-preparation-verification-timing.json covers the revised recipe. These checks execute no Cargo or product tests. Finalization reruns the parser check with the finalized recipe in a separate receipt.
Optional timing diagnostic
After the full stage succeeds, the parent may run diagnostic.ps1. It directly invokes the exact listed test executable with --exact behavior::scenario::spacing::controller::timing_tests::saved_spacing_capture_prepare_20_lanes_1000_messages_3_views --ignored --nocapture --test-threads=1. It never runs Cargo or rebuilds. Clippy does not depend on this optional receipt.
The runner verifies the prior successful full receipt and its transitive recipe/input hashes, source/config before and after, and exact executable before and after. It requires one named test, one passing summary (1 passed, 0 failed/ignored, 1,081 filtered), and one SPACING_TIMING_JSON= payload with schema scenario_spacing_timing_v1 and invariant_status: "passed". The child receives SCENARIO_SPACING_SOURCE_PIN; its reported pin, 20 lanes/1,000 messages/3 views, and 28 samples with the expected phase counts are checked. The caller's previous source-pin environment value is restored. Timing samples are recorded without a speed threshold. The debug-profile diagnostic measures this fixture on this host; it establishes no native responsiveness or release performance guarantee. Existing diagnostic logs and captures cannot be overwritten.
Instruction-only retry
This gate supersedes the preparation-only finalization at 07e611fb9432b5164e43c326f3e3c7e75e1e6567; that directory remains unchanged, and no Cargo ran there. The only admitted Git change is AGENTS.md, with fetched blob 767be18f086c04b7a688b107808e97ac98881356. instruction-update-template.json binds the exact instruction bytes and the original610-input capture. Before making the new baseline capture, finalization requires the same610 paths, lengths and hashes and saves instruction-update-provenance.json. No prior generated result is copied as new evidence.
Independent Gitea peers run on separate machines. These local recipes and captures are available only on this host; the parent owns publication of portable evidence. This host's established local subagent target/cache sharing does not imply shared files, processes or resource constraints with Gitea peers.