Skip to content

Controls batch 20: stored automation renders the same bits on the browser artifact, native and the C ABI - #1721

Merged
tamashi095 merged 6 commits into
mainfrom
codex/controls-batch-20
Oct 17, 2026
Merged

tamashi095 merged 6 commits into
mainfrom
codex/controls-batch-20

Conversation

@tamashi095

@tamashi095 tamashi095 commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

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

Evidence

  • Bits. simd128 == native x86-64 == C ABI on all 96 blocks. No cross-host or cross-target difference was found in any delivered row.
  • Plants (R20-2; PR evidence only, reverted; run at 5894031, before review fold 1):
    • P1, +1 ulp on every return of value_at and value_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.
    • P2, next_up on db_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.
    • P3, one low bit flipped after miso_engine_v1_render_f32_planar for 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 capi on wasm32 is empty).
    • Why the pre-fold results still hold: the fold only removed mute masking at the seek, so more of the automation now reaches the output. P1 and P2 change lanes that are open in both versions, and P3 does not depend on the fixture. The reviewer confirmed this.
  • Measurements (all equal to main; the range changes no code under crates/, tools/ or sdk/): audit capi pcm_digest bffc21e857b5e134, 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 reports memoryBytes 2,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).
  • Gates: batch-gates.sh all 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.
  • Browsers: chromium, firefox and webkit qualification (--check-matrix --self-test-mutations) all pass at 30a1dd8.

Review

  • One fresh opus-high adversarial review of the range. FAIL with one MAJOR: at timeline 30,000 every member lane was inside a closed mute, so the fader and VCA-offset landings at the seek were only remembered and never heard. The step at 3001 also sat inside a VCA unmute hold.
  • Fold 1 (30a1dd8) moved the VCA mute steps so the right lanes are open at the seek, while t1's left lane still lands inside its own closed mute. The pin was re-minted from both sides, and a landing-heard assertion was added, which is red on the old fixture. The fold also fixed MINOR m1 (the Compare stored automation bits on AArch64 and across seek times #1670 seek bound: 1,440 samples = 480 mute hold + 960 fader ramp, no inserts, four pin tests) and the NIT (the self-test mutation).
  • The fold check PASSED. Its pin matches the reviewer's own simd128 probe of the same edit. The fold touched no render code, so no further verification was needed.
  • Root rulings R20-1 (no insert), R20-2 (plants P1-P3), R20-3 (Compare stored automation bits on AArch64 and across seek times #1670 amendment).

Not in this PR

Placeholders to file

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need.

tamashi095 and others added 6 commits October 17, 2026 19:52
 #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>
@tamashi095
tamashi095 merged commit 81a3074 into main Oct 17, 2026
22 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Compare stored automation bits across the browser and native hosts

1 participant