Repository navigation
plugin-loader plane suite: route flags on the arrive line, sessions on a ticket, and tick and cancel that take one (stacked on #543) - #551
Merged
Conversation
… an optional sessions leg any plane drives from its own conformance.json The plane kind's script takes plane.public_url (handed to `open`; the refresh frame carries none, so the instance keeps the one its open was handed), an arrival's claim, head fields and named route, the ATTEMPT's pool and the caller's reference on every piece, a short answer met over a fields buffer as well as a units one, and plane.sessions: units on one claim driven step by step (an arrival, pieces from the caller, the far end or the kernel keyed by a stream, a piece met short and re-called once, drive, project), every step a Recorder line at its exact pin and judged by the contract against the step's want. Every new input is optional; absent, the fold is byte-identical (the decisions plane's 467-line fold dump compared equal on base and head). The loader's plane fixture claims its session door when opened under a public URL; the new conformance_plane_sessions_tests drive the leg over it linked and dropped in, with RED arms for a moved count on any session step, a step answering otherwise than wanted, an unknown want, a piece called short that is not, and inputs naming a step twice.
…e line and in a want, so the suite spells no plane's section key (kind-isolation matrix back to base, 14862)
…s pieces on a ticket of its own, and tick and cancel steps that take a ticket An arrive line that names its route also states `ArriveOut::route_flags` (once, session, stream), judged by a `route_flags` want (and `claimed.route.flags`). A session that names `ticket` crosses its pieces SUBMITTED on one ticket of the leg's dispatcher, as the kernel's route pump does (a short piece re-submitted once on it); a `cancel` step names that ticket in `CancelIn::ticket` and a `tick` step crosses on a driver ticket, so a session's ceiling and a live session's cancel are driven by the published suite, each step pinned at one crossing and judged by `next` and `disposition` wants. Every input is optional; the decisions plane's fold is byte-identical to predev's (467-line dump compared equal). The loader's plane fixture states ROUTE_SESSION for an arrival on its session door and ends its session on a cancel naming the ticket the session's caller piece crossed on; the sessions tests drive both, with RED arms for each new want, a cancel naming no ticket (the session survives), and a cancelling session that crosses on no ticket (refused at parse).
…s pinned at two (the tick and the drive the wake calls), and waits for the woken drive; RED: a tick pinned to wake that wakes nothing
MattJackson
enabled auto-merge
October 7, 2026 11:04
promote into
|
| crate | test | step | first panic |
|---|---|---|---|
transport_dropped_in_serves |
a_dropped_in_transport_registers_through_the_one_fold_and_serves |
test:dropped-in-tcp-transport | crates/busbar/tests/transport_dropped_in_serves.rs:168:13: busbar exited (ExitStatus(unix_wait_status(512))) before serving; log: |
-p busbar --test transport_dropped_in_serves |
test target failed |
test:dropped-in-tcp-transport |
DENY rows (12)
| gate | row | detail |
|---|---|---|
| construction | one-pick-site |
3 production call site(s) of 'pick_among(' (ceiling 2): crates/busbar-kernel-egress/src/walk.rs:298; crates/busbar-llm/src/engine/exhaustion/fallback.rs:120; crates/busbar-llm/src/engine/pipeline.rs:8 |
| kind-isolation | kind-isolation:deps |
3 finding(s), 76 shipped edge instance(s) over 27 class(es), 76 declaration(s); 61 '[[dep]]' row(s), 0 question(s): unlisted-dep-edge legacy -> plane busbar-llm -> busbar-plane-llm is a shipped edge w |
| kind-isolation | kind-isolation:test-deps |
5 finding(s), 36 test edge instance(s) over 19 class(es), 36 declaration(s); 22 '[[dep]]' row(s), 0 question(s): unlisted-dep-edge cleanliness -> legacy busbar-core-admin -> busbar-a2a is a test edge |
| kind-isolation-ship | kind-isolation:deps |
15 finding(s) over 76 shipped edge(s): ship-edge kernel -> hooks busbar-kernel -> busbar-hooks-ranking is 'not-allowed': the architecture grants no kernel -> hooks edge, and the ship criterion is the |
| kind-isolation-ship | kind-isolation:test-deps |
13 finding(s) over 36 test edge(s): ship-edge cleanliness -> legacy busbar-core-admin -> busbar-a2a is 'not-allowed': the architecture grants no cleanliness -> legacy edge, and the ship criterion is t |
| kind-isolation-ship | kind-isolation:faces |
4 finding(s) over 31 crate(s): foreign-entry crates/busbar busbar is kind 'root' and implements 'Store' 2 time(s) in shipped source — the entry face of kind 'store'. A trait implementation is a claim |
| kind-isolation-ship | kind-isolation:testkit |
2 finding(s) over 12 crate(s): battery-ignored crates/busbar-plane-decisions busbar-plane-decisions carries a tests/conformance.rs whose every entry is '#[ignore]'d (or which has none). 'cargo test' |
| kind-isolation-ship | kind-isolation:legacy-drain |
5 finding(s): transitional-live qa/kind-isolation.toml 'busbar-a2a -> busbar-core-admin' (legacy drain: the retiring A2A engine's tests drive the admin surface that drained into the cleanliness tier) |
| kind-isolation-ship | kind-isolation:control-path |
73 finding(s) over 3 control surface(s): upstream crates/busbar-core-admin/src/admin_codec/meta.rs:84 busbar-core-admin names 'egress' — a control surface has no upstream to reach, so the vocabulary o |
| ship-ready | ship-ready:ship-twin |
'kind-isolation-ship' is not green: kind-isolation:deps (a dependency the architecture does not grant is still in the graph); kind-isolation:test-deps (a dependency the architecture does not grant is |
| instance-noun-neutrality | instance-noun-neutrality:voice |
tracked known-debt census — 8: crates/busbar-plane-llm/src/codec/gemini/handler.rs×7 [cross-plugin] | crates/busbar-plane-llm/src/codec/gemini/tests/handler_tests.rs×2 [cross-plugin] | crates/busbar |
| structure-lint | structure-lint:plane-dup:unledgered |
23 finding(s): PLANE-DUPLICATE (module): 'config.rs' — a2a:crates/busbar-a2a/src/a2a/config.rs mcp:crates/busbar-mcp/src/mcp/config.rs voice:crates/busbar-voice/src/config.rs (the ledger row signs for |
Judged against base fafb44f3b: 0 new red, 0 worse, 7 standing (excused).
tests passed: 23414, failed: 1. Run: https://github.com/GetBusbar/busbar/actions/runs/37611593492 . Artifact verdict-f13361f2f263b1a9847f5b8e686e73bdcaa66dbd (failures.json, junit.xml, raw.log; 90 days).
github-merge-queue
Bot
removed this pull request from the merge queue due to invalid changes in the merge commit
Oct 7, 2026
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.
What
STREAMING GAP, stacked on #543 (
p5-plane-suite, which still holds its own two commits). The published plane suite now drives three more things:tickandcancelsteps that take a ticket.So a session's ceiling (timeout) and a live session's cancel are both driven by the suite each plane runs from its own repo. Neutral nouns only. The seven test names are unchanged.
door_witnessstays as extra coverage, not as a substitute.New inputs (all optional; absent = today's behaviour)
claimed.route.flagsand session wantroute_flagsArriveOut::route_flagsasroute_flags=["once" | "session" | "stream"](an unnamed bit as its number), and the contract judges itsessions[].ticket: truecancel: true, wantdispositioncancelwithCancelIn::ticket= the session's ticket (pin 1). A cancelling session that names no ticket is refused at parse.tick: {now_ns, wakes?}, wantnexttickon a DRIVER ticket of the leg's dispatcher (Dispatcher::driver+Dispatcher::tick), as the kernel ticks an instance (pin 1). Withwakes: truethe pin is 2: the tick, and thedrivethe dispatcher calls on the woken driver ticket. The step waits up to 2 s for that drive so it lands in this step.Decisions' fold is byte-identical to predev's. I dumped the 467-line both-ways fold (scratch, not committed) and
cmpreported no difference. The main script'stick/cancelstay ticket-less as before; only session steps take tickets.Loader-side tests (
plane_door_pluginfixture, linked and dropped in)The fixture now:
ROUTE_SESSIONfor an arrival on its session door (claim 1);cancelnaming that ticket.No existing fixture test changes.
conformance_plane_sessions_tests.rscovers:ticket: true) runs both ways at its pins with every want met:upgraderoute_flags["session"]tickon a driver ticket,next=1001000cancel(disposition 3)drive after cancelready[]["once"],next, disposition 2, ready[40]after the canceldrivestill names it (ready=[50])wakeson a door whose tick wakes nothing: 1 crossing where 2 are pinnedThe streaming plane runs it (scratch on #503's head, not in this PR)
Same scratch as #543: the hand-written witness at
tests/door_witness.rs,conformance_suite!intests/conformance.rs, and the loader dev-dep withconformance. Theconformance.jsongrows:session_max_secs: 1claimed.route.flags[], and every READY arrival's wantroute_flags: []ticket: truenext=1000001000ready=[]wakes: true: pinned 2, the woken drive crosses;next=1001000001000ready=[22]session_expirederror frame to the caller, units[[4,2]]done=truecancelnaming the session's ticket (disposition 2, streaming'sCANCEL_FAILED), then the far end's next piece is Refused because the session is gone.Latchkey
cli-0b18cf3f-fbc1-45dd-b0bb-244061914efa, release build withBUSBAR_EXPECT_RELEASE=1:BUSBAR_CONFORMANCE_RED=countfails on the comparator (Linked: step 'facts': 0 crossing(s), pinned 1, rc 101);door_witness12/12.Decisions (same job): 7/7, and its RED run fails (rc 101).
Finding for #503 (not changed here): streaming's session doors (sideband, live, telephony) state no route flags. Every READY arrival answers
route_flags=[], so its wants pin[].ROUTE_SESSIONis documented as "the unit is served as a DUPLEX SESSION ... its unsolicited output is named on the instance's driver ticket". If the plane sets it (out.session()inarrivefor a session door), its plugin repo flips those wants to["session"].streaming tests/conformance.json (extended)
{ "settings": { "session": { "model": "m-cap" }, "session_max_secs": 1 }, "plane": { "bad_settings": [ { "nonsense_key": 1 }, { "session_max_secs": 0 } ], "refresh_settings": { "session": { "model": "m-cap" } }, "public_url": "https://gw.example.com/ignored?q=1#f", "open_claims": [ [ "POST", "/v1/realtime/client_secrets" ], [ "POST", "/v1/realtime/calls" ], [ "GET", "/v1/realtime/sideband/{call_id}" ], [ "GET", "/v1/realtime/gemini/{call_id}" ], [ "GET", "/twilio/{call_id}" ] ], "refresh_claims": [ [ "POST", "/v1/realtime/client_secrets" ], [ "POST", "/v1/realtime/calls" ], [ "GET", "/v1/realtime/sideband/{call_id}" ], [ "GET", "/v1/realtime/gemini/{call_id}" ], [ "GET", "/twilio/{call_id}" ] ], "member": "m-cap", "caller_ref": "c0ffee", "claimed": { "unit": 7, "claim": 1, "method": "POST", "target": "/v1/realtime/calls", "route": { "class": "direct", "entry": "m-cap", "flags": [] } }, "unclaimed": { "unit": 8, "claim": 9, "method": "GET", "target": "/v1/realtime/nowhere", "status": 404 }, "request": "v=0\r\no=- 1 1 IN IP4 127.0.0.1\r\ns=oracle-offer\r\nt=0 0\r\n", "request_out": "v=0\r\no=- 1 1 IN IP4 127.0.0.1\r\ns=oracle-offer\r\nt=0 0\r\n", "far_end": { "status": 201, "fields": [ [ "location", "/v1/realtime/calls/rtc_oracle0001" ] ], "answer": "v=0\r\no=- 2 2 IN IP4 127.0.0.1\r\ns=oracle-answer\r\nt=0 0\r\n", "answer_out": "v=0\r\no=- 2 2 IN IP4 127.0.0.1\r\ns=oracle-answer\r\nt=0 0\r\n", "units": [] }, "narrow": { "unit": 9, "reply_cap": 16, "more": 3 }, "short": { "unit": 11, "buffer": "fields" }, "empty": { "unit": 10, "outcome": "Ready" }, "sessions": [ { "name": "mint", "unit": 30, "claim": 0, "steps": [ { "label": "arrive", "arrive": { "method": "POST", "target": "/v1/realtime/client_secrets" }, "want": { "outcome": "Ready", "route": { "class": "direct", "entry": "m-cap" }, "route_flags": [] } }, { "label": "attempt", "piece": { "from": "kernel", "attempt": 1 }, "want": { "outcome": "Ready", "to_far_end": true, "verb": "POST", "target": "/v1/realtime/client_secrets", "need": 5, "emitted": "{\"expires_after\":{\"anchor\":\"created_at\",\"seconds\":600},\"session\":{\"model\":\"m-cap\"}}" } }, { "label": "caller", "piece": { "from": "caller", "last": true }, "want": { "outcome": "Ready", "emitted": "", "to_far_end": false } }, { "label": "far_end", "piece": { "from": "far_end", "status": 200, "last": true, "bytes": "{\"value\":\"ek_oracle_0001\",\"expires_at\":1767225600}" }, "want": { "outcome": "Ready", "done": true, "status": 200, "emitted_has": [ "ek_oracle_0001" ], "fields": [ [ "content-type", "application/json" ], [ "content-length", "55" ] ] } } ] }, { "name": "sideband", "reply_cap": 262144, "unit": 20, "stream": 20, "claim": 2, "steps": [ { "label": "upgrade", "arrive": { "method": "GET", "target": "/v1/realtime/sideband/rtc_1" }, "want": { "outcome": "Ready", "route": { "class": "direct", "entry": "m-cap" }, "route_flags": [] } }, { "label": "project", "project": {}, "want": { "outcome": "Ready", "rewritten": false, "body_has": [ "\"model\":\"m-cap\"" ] } }, { "label": "caller audio", "piece": { "from": "caller", "bytes": [ "{\"type\":\"input_audio_buffer.append\",\"audio\":\"", { "repeat": "A", "times": 128000 }, "\"}" ] }, "want": { "outcome": "Ready", "to_far_end": true, "more": 0, "verb": "GET", "target": "/v1/realtime", "emitted_has": [ "input_audio_buffer.append" ], "units": [], "need": 4 } }, { "label": "drive", "drive": true, "want": { "outcome": "Ready", "ready": [] } }, { "label": "turn attempt", "piece": { "from": "kernel", "attempt": 1 }, "want": { "outcome": "Ready", "emitted": "", "to_far_end": false, "done": false, "units": [] } }, { "label": "far usage", "piece": { "from": "far_end", "status": 101, "bytes": "{\"type\":\"response.done\",\"response\":{\"usage\":{\"input_token_details\":{\"audio_tokens\":10,\"text_tokens\":3},\"output_token_details\":{\"audio_tokens\":20,\"text_tokens\":4}}}}" }, "want": { "outcome": "Ready", "to_far_end": false, "done": false, "units": [ [ 0, 10 ], [ 1, 20 ], [ 2, 3 ], [ 3, 4 ], [ 4, 2 ], [ 6, 1 ] ] } }, { "label": "collect", "piece": { "from": "kernel" }, "want": { "outcome": "Ready", "emitted": "", "more": 0, "done": false, "units": [ [ 0, 10 ], [ 1, 20 ], [ 2, 3 ], [ 3, 4 ], [ 4, 2 ], [ 6, 1 ] ] } }, { "label": "short", "piece": { "from": "caller", "bytes": [ "{\"type\":\"input_audio_buffer.append\",\"audio\":\"", { "repeat": "A", "times": 128000 }, "\"}" ], "short": "units" }, "want": { "outcome": "Ready", "to_far_end": true, "units": [ [ 0, 10 ], [ 1, 20 ], [ 2, 3 ], [ 3, 4 ], [ 4, 2 ], [ 6, 1 ] ], "need": 4 } }, { "label": "caller end", "piece": { "from": "caller", "last": true }, "want": { "outcome": "Ready", "done": true, "units": [ [ 0, 10 ], [ 1, 20 ], [ 2, 3 ], [ 3, 4 ], [ 4, 4 ], [ 6, 1 ] ] } } ], "ticket": true }, { "name": "hooks", "unit": 31, "claim": 2, "steps": [ { "label": "rewrite", "project": { "rewrite": "{\"voice\":\"marin\"}" }, "want": { "outcome": "Ready", "rewritten": true, "body_has": [ "\"voice\":\"marin\"", "\"model\":\"m-cap\"" ] } }, { "label": "rewrite unread", "project": { "rewrite": "{\"voice\":7}" }, "want": { "outcome": "Refused" } } ] }, { "name": "ceiling", "unit": 22, "stream": 22, "claim": 2, "ticket": true, "reply_cap": 262144, "steps": [ { "label": "upgrade", "arrive": { "method": "GET", "target": "/v1/realtime/sideband/rtc_2" }, "want": { "outcome": "Ready", "route_flags": [], "route": { "class": "direct", "entry": "m-cap" } } }, { "label": "caller audio", "piece": { "from": "caller", "bytes": [ "{\"type\":\"input_audio_buffer.append\",\"audio\":\"", { "repeat": "A", "times": 128000 }, "\"}" ] }, "want": { "outcome": "Ready", "to_far_end": true } }, { "label": "clock starts", "tick": { "now_ns": 1000 }, "want": { "outcome": "Ready", "next": 1000001000 } }, { "label": "drive before", "drive": true, "want": { "outcome": "Ready", "ready": [] } }, { "label": "past the ceiling", "tick": { "now_ns": 1000000001000, "wakes": true }, "want": { "outcome": "Ready", "next": 1001000001000 } }, { "label": "drive", "drive": true, "want": { "outcome": "Ready", "ready": [ 22 ] } }, { "label": "collect", "piece": { "from": "kernel" }, "want": { "outcome": "Ready", "emitted_has": [ "session_expired" ], "done": false, "to_far_end": false, "units": [ [ 4, 2 ] ] } }, { "label": "collect end", "piece": { "from": "kernel" }, "want": { "outcome": "Ready", "emitted": "", "done": true, "units": [ [ 4, 2 ] ] } } ] }, { "name": "cancelled", "unit": 23, "stream": 23, "claim": 2, "ticket": true, "reply_cap": 262144, "steps": [ { "label": "upgrade", "arrive": { "method": "GET", "target": "/v1/realtime/sideband/rtc_3" }, "want": { "outcome": "Ready", "route_flags": [], "route": { "class": "direct", "entry": "m-cap" } } }, { "label": "caller audio", "piece": { "from": "caller", "bytes": [ "{\"type\":\"input_audio_buffer.append\",\"audio\":\"", { "repeat": "A", "times": 128000 }, "\"}" ] }, "want": { "outcome": "Ready", "to_far_end": true } }, { "label": "cancel", "cancel": true, "want": { "outcome": "Ready", "disposition": 2 } }, { "label": "far usage after", "piece": { "from": "far_end", "status": 101, "bytes": "{\"type\":\"response.done\",\"response\":{\"usage\":{\"input_token_details\":{\"audio_tokens\":10,\"text_tokens\":3},\"output_token_details\":{\"audio_tokens\":20,\"text_tokens\":4}}}}" }, "want": { "outcome": "Refused" } } ] }, { "name": "request on a session door", "unit": 21, "claim": 2, "steps": [ { "label": "attempt", "piece": { "from": "kernel", "attempt": 1 }, "want": { "outcome": "Refused" } } ] }, { "name": "unclaimed door", "unit": 12, "claim": 5, "steps": [ { "label": "arrive", "arrive": { "method": "GET", "target": "/.well-known/oauth-protected-resource/v1/realtime" }, "want": { "outcome": "Refused", "status": 404 } }, { "label": "attempt", "piece": { "from": "kernel", "attempt": 1 }, "want": { "outcome": "Refused" } } ] } ], "refusal": { "status": 403, "text": "denied", "reply": "{\"error\":{\"code\":null,\"message\":\"denied\",\"param\":null,\"type\":\"permission_error\"}}" } } }Checks
cargo xtask gate --all --format=tsvatf13361f2f, tags in the bundle (Latchkeycli-e4cc42e9-7abf-4fbb-b9f3-52c67419ba83)70776f1d3(547 PASS / 12 FAIL / 3 EXCUSED), non-PASS rows byte-identical; kind-isolation matrix MEASURED 14862 = basecli-d061dd41-c7ad-4291-848b-f3bf0f9bd163), plane-purity and config-schema (cli-e4cc42e9-…, with tags)cargo fmt --all -- --check;cargo clippy --workspace --all-targets --locked -- -D warnings(cli-d061dd41-…)conformance::tests, CI=1 with the fixture cdylib built (cli-0b18cf3f-fbc1-45dd-b0bb-244061914efa)6afec149aNo oracle proof is involved: no oracle cell, golden or replay input is touched.