docs(plan): ship dlopen-audio-backend-and-audio-blocks — fold into §Media I/O and archive - #2020
Merged
Merged
Conversation
…edia I/O and archive Every ticket of the change is merged: #1988 (the AudioBlock bag, PR #1995), #1989 (the device seam and the null backend, PR #1997), #1998 (the loopback fixture, PR #2001), #2002 (per-processor tap verification, PR #2003), #2004 (the unconnected-output log storm, PR #2005), #1990 (the PipeWire arm, PR #2008), #1991 (the ALSA arm, PR #2010), #1992 (SpeakerSink, PR #2013), #1993 (the removals, PR #2016), #1999 (/verify-audio, PR #2017) and #2012 (stream death reaches its owner, PR #2018) — the last landing 2026-08-28, the archive date. The REMOVED gate is clean at the archived path: 7 bullets, none referenced and none on disk. Eleven DECIDED entries fold into §Media I/O. Six are new — the device seam as one engine primitive, runtime symbol binding, the SPA shim that calls nothing, vendored headers, the unweakened portability gate, and the four AudioBlock entries (wire contract, msgpack bin, the Python cast, the zero-copy claim stated as a claim about the cast, and the harness bin-decode fix). Five existing [audio-subsystem] entries are sharpened in place and gain their SHIPPED citations: the backend chain gains "chosen by opening, not by loading" and the named-device raise; the pacing entry gains the clock starting only when something needs it; A/V sync, the data model and the two built-ins gain theirs. The built-ins entry cites partially — conditioning and immediate cancel are a later rung, and the citation says so. The section stays IN-FLIGHT rather than flipping to SHIPPED: its audio-plugins OPEN entry is still live, and a section ships only when it holds no OPEN. Only the (→ dlopen-audio-backend-and-audio-blocks) pointer goes. #2012 was a follow-up filed during implementation, not part of the approved delta, so it folds into the device-seam entry rather than becoming a plan entry of its own. Every verify marker was run before it was written, on this rig with the wheel rebuilt first: 20 engine and media-builtins tests pass, the PipeWire and ALSA arms pass their hardware tier against a live daemon and /dev/snd (13 tests that otherwise skip), and 29 wheel tests pass. readelf -d on the rebuilt _engine.abi3.so names exactly the five permitted host libraries — the design's own pass/fail, proven rather than asserted. The diagram gains the vendored-shim and DT_NEEDED clause on the media node, and the previously unlabelled media → engine edge now carries the seam and the device-stamping rule. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Contributor
|
Warning Review limit reachedNext included review available in 20 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (3)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
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.
Ships
dlopen-audio-backend-and-audio-blocks— rung one of the[audio-subsystem]ladder. Audio exists: a microphone reaches a processor as timestamped samples over a
backend the wheel never links, and a processor's samples reach a speaker.
Plan changes merge only with the owner's review.
Precondition — every ticket merged
AudioBlock— samples ride the bag as msgpack binSpeakerSink— playback on every arm/verify-audioas a callable skill#2018 merged 2026-08-28T22:10:12Z — the archive date, not today's guess.
#2015 is the one ticket that did not ship. It was closed
NOT_PLANNED, notimplemented: the drop counter it would fix turns on whether
losslessandevery_sampleare distinct concepts, and that vocabulary needs an/alignbefore thewindower rung. Recorded here as a fact; no plan entry claims the fix.
Gate — clean at the archived path
All 11 source-walking gates pass, including
check-no-in-process-placement(7408 files,19 exempt prohibition lines matched) — this change file pinned no gate key, so archiving
it moved nothing the placement gate depends on.
The fold — eleven DECIDED entries into §Media I/O
Six new entries. The device seam as one engine primitive (
AudioDeviceBackendopening capture and playback streams beside the audio clock, no second audio device
path); every audio symbol binding at runtime through
libloadingagainst the versionedsoname; SPA's header-only layer as a
cc-compiled shim that references no externalsymbol; the headers vendored rather than taken from the build machine; the portability
gate unchanged and unweakened. Then the
AudioBlockhalf — the wire contract and itssix keys,
samplesas msgpackbinrather than a typed vector, the pure-Python castthat composes nothing surface-shaped, "zero-copy" stated as a claim about the cast
alone, and the harness
bin-decode defect fixed at the engine layer.Five existing
[audio-subsystem]entries sharpened in place, each gaining itsSHIPPED citation: the backend chain gains an arm is chosen by opening, not by
loading and the named-
device_idraise atsetup(); the pacing entry gains the clockstarting only when something needs it, which is what makes "exactly one cadence source"
true in the tree rather than merely stated; A/V sync, the data model, and the two
built-ins gain theirs. The built-ins entry cites partially —
#1989, #1992for thebuilt-ins, their execution mode and the drop-at-the-edge clause, with conditioning and
immediate cancel named as a later rung.
The section stays IN-FLIGHT. Its audio-plugins entry is still
OPEN, and theconvention here is that a section ships only when it holds no OPEN. Only the
(→ dlopen-audio-backend-and-audio-blocks)pointer goes.#2012 folds rather than adding an entry. It was filed during implementation, not
part of the approved delta, so its contract lands as a clause on the device-seam entry
instead of becoming architecture this session made.
Every verify marker was run before it was written
The wheel's
.sopredated HEAD, somaturin developran first — otherwise the PASSwould describe the old code.
streamlib-engine --lib,streamlib-media-builtins --lib,and the
audio_clock_paces_only_what_needs_it/silent_null_arm_*integrationbinaries.
has
/dev/sndand a live PipeWire session, sopipewire_arm_*andalsa_arm_*wereexecuted under
--features streamlib/hardware-tests, not merely listed. The devicestamping the block is proven against a real daemon and a real driver.
test_audio_block_cast.py,test_microphone_source.py,test_speaker_sink.py(22), plustest_wheel_portability.pyandtest_third_party_notices.py(7).The design's own pass/fail, run directly rather than asserted:
Five libraries after audio, the same five as before. No audio library entered
DT_NEEDED.Diagram
system.mmdgains the vendored-shim andDT_NEEDEDclause on the media node, and thepreviously unlabelled
media → engineedge now carries the seam, the liveness report,and the device-stamps-the-block rule.
Note, not a ticket
packages/audio,packages/opusandpackages/clapremain read-only reference forrungs two and three (the
rubatowiring, the rechunker, the Opus framing). They aredeleted as
REMOVED:facts when the last of that logic is re-homed, not before.🤖 Generated with Claude Code