Repository navigation
Controls batch 20: stored automation renders the same bits on the browser artifact, native and the C ABI - #1721
Merged
Merged
Conversation
#1711 The owner's finish line A (2026-10-17) narrows #1669 to the rows the engine renders today: strip fader, strip mute, VCA offset, VCA mute and a following send. One fixture, one oracle pin, one cross-host case. The matrix fixture and pan, trim, filter and EQ rows become phase-2 extensions. D5's single value_at plant cannot hold (the program builder derives jumps from value_before vs value_at), so it becomes three plants. #1670 gets a matching amendment. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…1+T2) One fixture automates strip fader, strip mute, VCA offset and VCA mute, with a following and a non-following send, and is seeked once while it plays. The direct oracle's new leg renders it through the shipped simd128 artifact and asserts the native pin before printing. The pin was written only after both digests were measured equal (6f82e466...86cb6). The native test also proves the automation is heard: clearing the entries moves bits before and after the seek. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…r host (#1669 T3) The new control_parity case renders the batch-20 fixture through the C ABI and through AudioWorkletEngineHost with one session seek at block 40, and compares every block's two planes bit for bit. A one-bit plant in the C ABI read path at block >= 40 turned it red at block 40 (probe reverted). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…0 review placeholder) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
At timeline 30,000 every member lane sat inside a closed mute, so the fader and VCA offset landing at the seek were only remembered and never heard. The VCA mute steps move so the right lanes are open at the seek; t1's left lane still lands inside its own closed mute. The pin is re-minted from both sides, measured equal (a81d883b...1363). The pin test proves the landing is heard (red on the old fixture). The #1670 amendment states the narrowed seek bound. The self-test gains the automation digest mutation. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Controls batch 20: stored automation renders to the same bits on the shipped browser artifact, the native browser host and the C ABI. This is the last batch of finish line A for the stored-automation program (#1058). It adds no engine code.
Closes #1669
What changed
hosts/host-web/tests/browser-v1/automation-session.json(807b474, review fold 30a1dd8). It has two tracks, one submix and a VCA over both tracks.t1-busis a pre-fader following send andt2-busis a non-following one for contrast. There are five entries: t1's fader on both lanes with a stored offset, t1's mute on the left lane, t2's fader on the right lane, the VCA offset on the right lane with a stored offset, and the VCA mute on both lanes. The shapes are step and linear (every row refuses exponential), with steps on and off the grid, gaps, holds, and segments that cross the seek target.f32in Rust and in JavaScript. Before block 40 there is one plain session seek, generation 2, to timeline 30,000.runAutomationTimelinerenders the fixture through the shippedsimd128artifact. Before it prints anything, it asserts the digest equalsdirectOracle.nativeAutomationPcmF32leSha256. The native testnative_automation_timeline_digest_pins_the_wasm_parity(inhosts/host-web/src/tests.rs) renders the fixture throughAudioWorkletEngineHoston x86-64 and checks it against the same pin. The pin was written only after both sides were measured equal:a81d883b3f83eaf629bd78db149d1a39825c821c6cb2e9a53506341a97ed1363. The test also proves that the automation is heard: with the entries cleared, the bits change before and after the seek, and a different fader value at the seek changes block 40. No new digest owner is added; this extends the oracle's existing pins.scripts/check-browser-expected-resources.pyadds the digest toDIGEST_PATHSand adds a self-test mutation for it.the_automation_fixture_renders_alike_on_both_hosts_across_one_session_seekinhosts/host-web/tests/control_parity.rs(5894031) renders the fixture through both hosts with the seek. It compares every block's two planes bit for bit, with no digest. The cross-host harness (Report live_values_superseded in the browser status and prove both hosts drain strip cells alike #1399/Prove that both hosts give the same result for the same control edits #1560) was already onmain.Evidence
simd128== native x86-64 == C ABI on all 96 blocks. No cross-host or cross-target difference was found in any delivered row.value_atandvalue_before: the native pin test is red, and the oracle's automation leg is red (only that leg). G5 is red in cases 146-151 (automation/*), natively and in the wasm leg, and so is G6's caller-FTZ check, which uses the same pins. D4 is green, as expected, because both hosts share one core.next_upondb_gain: the native pin test is red. The oracle is red, but it stops at its first leg (the identity session,direct-oracle.mjs:561). A copy that keeps going after a failure shows all four digest legs red, the automation leg among them. D4 is green.miso_engine_v1_render_f32_planarfor absolute samples >= 5120: D4 is red at block 40, left plane. The pin test and the oracle are green, because capi is not in the wasm artifact (cargo tree -i capion wasm32 is empty).main; the range changes no code undercrates/,tools/orsdk/):audit capipcm_digestbffc21e857b5e134, unchanged (0 render errors, 0 allocations). capi_retained 168,746 of 175,296. Boot growth 19,857,408 bytes (pin 20,971,520). simd128 artifact 4,480,805 B. Realtime policy 171 marked regions. The oracle's automation leg reportsmemoryBytes2,949,120, one 64 KiB page above the other legs; it is pinned exactly, as the other legs are (Ceiling the direct oracle's status memory bytes #1720).batch-gates.shall green on codex/controls-batch-20 at 30a1dd8: fmt; bench and realtime policy; host-core clippy default / no-default / all features and the loom spectrum handoff; workspace clippy -D warnings; no-feature release and debug checks; workspace tests (all features); the whole documentation job; builtins, console and effect-runtime fixtures; graph determinism; effect contract; host-core policy; protocol wasm parity; SDK generated and types; C ABI; protocol allocation audit; builtins and builtins-graph trace audits; test-web-audioworklet; check-cross-targets; web build, check-web-audioworklet, SDK headless; CI path routing, test-support CI, browser expected resources (artifacts and self-test, 33 mutations), SDK deletions, command reason and kind vocabularies, script reachability; fuzz check. G5 (cargo test --locked --release -p lane -p math -p wasm-gates --features math/lane) green.--check-matrix --self-test-mutations) all pass at 30a1dd8.Review
simd128probe of the same edit. The fold touched no render code, so no further verification was needed.Not in this PR
Placeholders to file
.github/ISSUE_SPECS/1720-ceiling-the-direct-oracle-status-memory-bytes.md). Every oracle leg pinsbeforeDisposeStatus.memoryBytesto the byte, but under AGENTS.md and Replace exact resource-byte and record-hash pins with ceilings and live reports #1060 a resource size should be a ceiling. This is test hygiene, not a defect.🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.