Skip to content

Controls batch 15b: owners carry across supersession, latency floors carry, declared discontinuity, held source blocks, seek tests, browser plan latency (#1698, #1285, #1323, #1318, #1319, #1688) - #1701

Merged
tamashi095 merged 13 commits into
mainfrom
codex/controls-batch-15b
Oct 16, 2026

Conversation

@tamashi095

@tamashi095 tamashi095 commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

Controls batch 15b: the source and latency chain's first half. A plan's latency no longer drops during playback: a successor keeps its predecessor's per-node arrival floors, and a host can declare a discontinuity to reset them. A superseding candidate carries every owner it keeps unchanged from the running plan. Held source blocks are reported apart from underruns. The browser reads the plan latency from the core, as the C ABI does.

Closes #1698
Closes #1285
Closes #1323
Closes #1318
Closes #1319
Closes #1688

What changed

  • Carry an owner a superseding candidate keeps unchanged from P0 from P0's state #1698 Across a withdrawn candidate A, B's base is the running plan P0's own inventory (PlanStateInventory::across_withdrawn). So every owner B keeps unchanged from P0 carries from P0, as the direct P0 -> B swap does, including an owner A restarted or removed. Sources keep the host contract (docs/CONTROL_PROTOCOL_SEMANTICS.md: a declaration change against the newest committed session restarts the feed at generation 1, frame 0): a P0 source row stays only when A carried it vacant, and the batch 15a guard drops_acked_fresh_source stays for all four cases (root ruling 2026-10-16). Removed: PreparedHost::carried_base, restricted_to, the carried_base_retained_bytes epoch term and graph::installed_carry_reads. The issue's title now names owners only.
  • Keep every node's latency from dropping during playback #1285 A successor compiles with its predecessor's per-node arrival floors (GraphBuiltinsCompileRequest::input_floors; pdc::timings compensates every incoming edge to max(arrival, floor)). The inventory keeps the floored arrivals, so a chain of successors keeps them, and a supersession takes P0's floors. A restarted strip still starts at rest with no duck until Duck-swap a strip whose state cannot continue across a plan swap #1324. Header paragraph "Latency across a replacement (issue 1285)".
  • Reset latency floors at a host-declared discontinuity #1323 SessionState::declare_discontinuity prepares a successor without floors, published Next, through the same supersession, donation, guard and observation path as a rebuild. A transaction that supersedes a waiting discontinuity successor is prepared at the discontinuity (the combined twin). Both hosts forward to the core: C miso_engine_v1_declare_discontinuity (FEATURE_DECLARE_DISCONTINUITY = 1 << 8, frozen list 18) and browser miso_engine_web_v1_declare_discontinuity, with a parity row. GraphCompileReport::raised_arrivals is a report field only: no program, canonical byte or fixture changes.
  • Report held source blocks apart from underruns #1318 A block with no PCM while a seek is held counts as held, not as an underrun (SourceReadReport.held*, consumer telemetry held_frames/held_blocks). The graph's underrun flag folds only real underruns, so a held block no longer marks a spectrum window starved, on both hosts alike. No rendered sample moves.
  • Test held seeks across swaps and supersession, and add a seek to audit capi #1319 Tests for held seeks across a swap, a supersession and a taken candidate (capi runtime tests). audit capi now issues a seek_at after its structural transaction and feeds generation 2.
  • Report the plan latency on the browser #1688 The browser copies the core's plan resources (latency and tail; tail_words moved into control-plane and is shared with the C ABI) into a 64-byte record: miso_engine_web_v1_plan_latency_read / _ptr (browser exports 102 -> 105 with Reset latency floors at a host-declared discontinuity #1323's). ABI layout, checker, self-test fixture and SDK mirrors regenerated.

Evidence

  • The full local CI-equivalent set (batch-gates.sh) passes at 470752d: fmt, bench and realtime policy (150 marked regions in 32 files), host-core feature matrix and loom, workspace clippy, the workspace tests, the doc job (cargo doc -D warnings), all 15 shell gates, the web build and check, check-sdk-headless (564 of 564), the 7 Python gates and the fuzz check.
  • Browser qualification passes at 470752d on Chromium 151.0.7922.34, Firefox 153.0 and WebKit 26.5 (--check-matrix --self-test-mutations); render-locked allocations are 0 in every scenario.
  • audit capi: 0 allocations, deallocations, locks and syscalls. pcm_digest moves from bf7dcedd1d92621f to 4f52089e4a8cf83c (Test held seeks across swaps and supersession, and add a seek to audit capi #1319, accepted by root): the audit now issues a seek_at after its structural transaction and feeds generation 2, so call 4 plays a generation-2 quantum where it was silent. No code pins the old value.
  • Parity rows (hosts/host-web/tests/control_parity.rs): a declared discontinuity resets the floors alike; the plan-latency record equals the C ABI report before and after every block of the scripted run; a rebuild that adds latency moves both alike at the adopting block; removing a limited track keeps the floored latency alike.
  • Carry an owner a superseding candidate keeps unchanged from P0 from P0's state #1698: on the base, the owner cases restart [t1,t2] / [t2,t3] and the bits differ at block 0, at Simd8 and Simd4; with the fix they are bit-identical to the direct P0 -> B twin.

Re-pins (each from a measurement)

Review

Successor work found

Spec bodies to sync after merge

#1698 (title and body), #1285, #1323, #1318, #1319, #1688, #1310, #1344, #1325, #1397, #1647.

🤖 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 13 commits October 16, 2026 03:37
A block with no PCM while a seek is held counts as held, not as an underrun: SourceReadReport
gains held_frames, held, cumulative_held_frames and cumulative_held_blocks; the consumer
telemetry gains held_frames and held_blocks. The graph's underrun flag folds only real
underruns, so a held block no longer marks a spectrum window starved (both hosts alike).
No rendered sample moves. Header: the clause calling held blocks underruns is removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…its a seek

- D1 a_held_anchored_seek_crosses_a_plan_swap, D2 a_queued_seek_on_a_persisting_source_survives_
  supersession, D3 a_held_seek_carries_from_a_taken_candidate (capi runtime tests; bit-identical
  to fresh or twin references, counters pinned).
- D4: audit capi issues seek_at after its structural transaction and feeds generation 2; the
  carried consumer holds the seek two calls and applies it at call 4. allocations 0,
  violations 0. pcm_digest bf7dcedd1d92621f -> 4f52089e4a8cf83c (call 4 now plays the
  generation-2 quantum where it was silent).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… from P0's state

B's base across a withdrawn candidate A is P0's own inventory
(PlanStateInventory::across_withdrawn), so every owner B keeps unchanged from P0 carries from
P0, as the direct P0 -> B swap does, including owners A restarted or removed. Sources keep the
host contract (a declaration change against the newest committed session restarts the feed):
a P0 source row stays only when A carried it vacant, and the batch 15a guard stays for all four
cases (root ruling 2026-10-16). Removed: PreparedHost::carried_base, restricted_to, the
carried_base_retained_bytes epoch term, graph::installed_carry_reads, and the superseded tests.
capi_retained_bytes 168,810 -> 167,514 (measured, x86-64); ceiling 175,296 stays. No ABI change.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A successor plan compiles with its predecessor's per-node arrival floors
(GraphBuiltinsCompileRequest::input_floors; pdc::timings compensates every incoming edge to
max(arrival, floor)). PlanStateInventory keeps the floored arrivals and every preparation with a
SuccessorBase passes them back; a supersession across a withdrawn candidate takes P0's floors.
No duck until #1324; the discontinuity reset is #1323. Header and qualification doc paragraph.
audit capi unchanged (4f52089e4a8cf83c); no fixture or ceiling moved.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The browser copies the core's plan resources (latency and tail, PlanQueries::resources and
control-plane's tail_words, shared with the C ABI) into a 64-byte record:
miso_engine_web_v1_plan_latency_read / _ptr (exports 102 -> 104; ABI layout, checker,
self-test fixture and SDK mirrors regenerated). Parity rows: boot and every rebuild of the
script, a rebuild that adds latency, and a removal that keeps the floored latency (#1285), alike
on both hosts. No browser resource re-pin (bridge retained 1,549,094 of 1,667,648).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SessionState::declare_discontinuity prepares a successor without the latency floors (the base
inventory at_discontinuity: identity, rate, quantum and sources), published Next, through the
same supersession, donation, guard and observation path as a rebuild. A transaction that
supersedes a waiting discontinuity successor is prepared at the discontinuity (the combined
twin). Both hosts forward to the core: C ABI miso_engine_v1_declare_discontinuity
(FEATURE_DECLARE_DISCONTINUITY = 1 << 8; frozen list 18), browser
miso_engine_web_v1_declare_discontinuity; parity row. GraphCompileReport::raised_arrivals
(report field only; no program, byte or fixture change). audit capi unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts:
#	hosts/host-web/tests/control_parity.rs
#	tools/parameter-metadata/src/abi_layout.rs
…amendments (#1325, #1397, #1647, #1285, #1698), browser latency in the discontinuity parity row, rewraps, run_control link

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@tamashi095
tamashi095 merged commit b39e544 into main Oct 16, 2026
22 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment