Skip to content

P3 FLIP-A2A: the a2a plane served through its door; busbar-a2a deleted (stacked on #778) - #787

Merged
MattJackson merged 444 commits into
predevfrom
lane-p3-flip-a2a
Oct 15, 2026
Merged

MattJackson merged 444 commits into
predevfrom
lane-p3-flip-a2a

Conversation

@MattJackson

@MattJackson MattJackson commented Oct 12, 2026 •

Copy link
Copy Markdown
Collaborator

P3 FLIP-A2A: the a2a plane is served through its plugin door (busbar-plane-a2a), the same way the mcp and decisions planes are. Compiled-in and dropped-in use one table. The legacy busbar-a2a crate is deleted, and its tests are ported into the door.

Stacked: #502 → #561 → #778 (row 68) → this PR. The branch carries #778's head e846df4 (predev 740a8f5 merged through #502 and #561), so the diff against predev includes #561 and #778. This PR's own work is its two merge commits (the lane port onto #778, then #778's new head) and the commits after them.

What it carries

  • The a2a fold and flip from p3-flip-a2a-lane (all its coordinator rulings of 2026-10-07), ported onto predev. Not redone.
  • The door is wired like the mcp door: plane-a2a = ["plane-a2a-door", …], plane-a2a-door = ["dep:busbar-plane-a2a"], a plane-door row with its linked-declares and linked-section agents, and no linked row of the plane's key.
  • busbar-a2a is deleted along with every row that names it (workspace, test-linked lists, served-witness rows, qa ledgers, and row 68: the breaker reads a plane fault at the far end (stacked on #561) #778's two A2A [[dep]] rows). The a2a-lf/a2a-pb workspace pins go with it.
  • The composition root names no plane (the Law-0 ruling on P3 FLIP-LLM: the llm plane served through its door on the plane driver (dev-only llm-on-driver switch) #464). The door's root cells (about 8,400 lines) live in crates/busbar-plane-a2a/tests/root/mod.rs. They compile into the root's serve module through a [package.metadata.busbar.door-cells] row (build.rs emits one #[path] module per row). The module-tree readers follow that include (xtask libtest_path, scripts/capability-equality-summary.py, the capability-equality and teller-steps gates), and qa/capability-equality.json and qa/teller-steps.json cite the new file.
  • One plane record chain mechanism. The kernel keeps the lane's ChainBook (host-sealed appends, a verified records.list read). predev's ChainedKind is removed; its admit check for an unkeepable chain is kept.
  • RefusalCode::CredentialUnavailable is classed Unreachable in predev's single classification. busbar-auth-oauth is pinned at lane-p3-flip-a2a-pin (97627f86): predev's 7022a089 plus the CredentialUnavailable arms.
  • The kernel links no plane door in its tests (test-linked = ["busbar-llm"]); its two cross-plane tests that need a mounting plane move whole to the composition root, as DEL-MCP did (a2b32ed). The admin crate's door double is gone.
  • gRPC callers are answered through the stream's framer (predev's SEAM-4l contract). The door's gRPC head is the listener's 200 with content-type: application/grpc. The call's status is its final status, which the framer renders. A refusal is the door's status block. A refusal that comes before arrive read the line picks the gRPC line from its target (the contract's RefusalIn::target rule). The a2a root harness gives its served planes the connector's framers, as boot does.

Architect rulings on #787, applied

  1. header in neutral crates. The 1.5.5 credential placement key stays byte-identical, as ONE constant in busbar-contract (section::PLACEMENT_HEADER_KEY, Part 2 mcp: a resource is addressable by the URI the protocol defines (A1.3) #83; DoD item 6).
    • kind-isolation reads a new [[shape-word]] table. Each row is a NAMED reservation of one spelling: its word, its file, and the line its holder names (a const <holder>: in a .rs file, or the object keyed "<holder>" in a .json file). It is never word-wide.
    • There are two rows: the contract constant, and the config-schema snapshot's manual-de CredentialPlacement. Each cites BUSBAR-1.6.0.md:2284 (mcp: a resource is addressable by the URI the protocol defines (A1.3) #83) and :2020 (DoD 6).
    • RED cases in the kind-isolation selftest: a second spelling in the same file still counts, and a row that reserves nothing is shape-word-unused.
    • busbar-contract × instance:auth and busbar-kernel × instance:auth are back at the merge-base's 3 and 8.
    • One deviation from the ruling's wording: the hand-written deserializer is the a2a plane's (busbar-plane-a2a/src/a2a/creds.rs), not the kernel's. The kernel spells the word only in the generated snapshot. The plane keeps its literal match arms, because the config-schema gate reads a deserializer's wire keys off them.
  2. structure-lint:plane-dup:unledgered is ARMED at 42 (plane_dups::UNLEDGERED_ARMED, Law 9; ModernCI Law-9 review H1, head dca6f92).
    • All 54 findings this branch added (52 new door declarations + 2 via mcp: the MCP-FIX stack (plane-mcp findings 1-18, 24) #703) are DRAINED in code: 8 shared once in busbar_contract::abi::sdk (used by both the a2a and mcp doors: ServedRoute/claim, admin_route, class_index, Lent::stated, digest::lower_hex, trust::State, trust::Sighting); 46 renamed precisely where the concepts only share a word (43 a2a-side incl. 5 modules; 3 private renames: llm Binding->CredentialBinding, mcp Event->SessionEvent, voice refusal->plain_refusal). Every pair is listed in commit dca6f92.
    • 42 = 15 carried from predev (predev measures 26; 11 left with the engine) + 27 genuine scope moves (files already in busbar-plane-a2a on predev). The earlier "armed at 94 / none is new code" premise was wrong and is withdrawn.
    • Green at 42, red above (a new copy) or below (a drain that did not lower the count). The standing red is struck; no per-duplicate rows.
    • The plane-root selftest now plants against the voice plane, since a2a is door-only.
  3. gRPC error before any message: trailers-only, as predev.
    • 1.5.5 has no a2a plane: the published v1.5.5 binary refuses the agents: section, and v1.5.5's source has no a2a crate. So no 1.5.5 golden or oracle cell holds these bytes, and the decider is predev's subject (row 68: the breaker reads a plane fault at the far end (stacked on #561) #778's head) on M3.
    • Predev answers GetTask that its agent refuses with ONE header block: :status 200, content-type: application/grpc, grpc-status: 5, grpc-message: the%20backend%20agent%20refused%20this%20task, grpc-status-details-bin: …, content-length: 0.
    • This branch now sends the same block. The door states the media type, and the root answers a framed stream that closed before its first body byte whole: its head and the framer's closing block in one header block, run to the unit's end.
    • Root cell a_grpc_call_refused_before_any_message_closes_trailers_only_as_predev pins those bytes (red before). The OK cell pins content-type: application/grpc.
  4. Admin OpenAPI and floors.
    • A2aTrustView's description is predev's text again. The door's fragment is data (src/admin_openapi.json), and openapi.json/.gz are byte-identical to row 68: the breaker reads a plane fault at the far end (stacked on #561) #778's.
    • Each floor names what FLIP-A2A deleted, measured against row 68: the breaker reads a plane fault at the far end (stacked on #561) #778's e846df4:
      • population 948 → 938
      • tracing 978 → 968
      • seal-witness 2199 → 2162
      • no-deferral 941 → 930
      • plane_isomorphism allowlist 21 → 4 rows
    • What was deleted: busbar-a2a, the retired engine (97 files, 39 of them non-test); the a2a plane crate's in-process Plane impl (src/plane.rs, its tests, alloc gate and scaffold); and the anomaly breaker predev never wired.
    • The isomorphism rows that left are the 17 that described the deleted engine's PlaneDecl.
    • None of these is a lost check, with one possible exception. The deleted alloc gate pinned the engine's in-process relay, which no longer exists. The door's relay has no allocation pin, and the drain lane may want one.

The 81 plane-dup findings measured before the drain (historical: 54 drained at dca6f92, 27 scope moves remain)

The count went from 22 to 94. 9 of predev's findings left with the engine (the duplicates that were the engine's meter.rs, route.rs, verify.rs, …), and 81 are new, all in the a2a door crate:

  • crates/busbar-plane-a2a/src/jsonrpc.rs + crates/busbar-plane-mcp/src/jsonrpc.rs: symbol Envelope, symbol IdShape, symbol id_shape, symbol id_value, symbol is_number, symbol read, symbol success
  • crates/busbar-plane-a2a/src/trust.rs + crates/busbar-plane-mcp/src/trust.rs: module trust.rs, symbol Observation, symbol Sighting, symbol State, symbol TrustView, symbol drift
  • crates/busbar-plane-a2a/src/plane_door.rs + crates/busbar-plane-mcp/src/tool_door.rs: symbol Looked, symbol keep, symbol public_url, symbol section, symbol verify_on_call
  • crates/busbar-plane-a2a/src/door.rs + crates/busbar-plane-mcp/src/door.rs: module door.rs, symbol Route, symbol admin_route, symbol op_class_index
  • crates/busbar-plane-a2a/src/facts.rs + crates/busbar-plane-mcp/src/tool_facts.rs: symbol correlation_for, symbol correlation_value, symbol is_canonical_number
  • crates/busbar-plane-a2a/src/ops.rs + crates/busbar-plane-decisions/src/ops.rs: module ops.rs, symbol MethodRow, symbol row_for
  • crates/busbar-plane-a2a/src/door.rs + crates/busbar-plane-decisions/src/plane_door.rs: symbol read_settings, symbol snapshot_spec
  • crates/busbar-plane-a2a/src/plane_door.rs + crates/busbar-plane-decisions/src/plane_door.rs: module plane_door.rs, symbol Unit
  • crates/busbar-plane-a2a/src/plane_door.rs + crates/busbar-plane-mcp/src/door_listen.rs: symbol piece, symbol stands
  • crates/busbar-llm/src/arrival.rs + crates/busbar-plane-a2a/src/arrival.rs: module arrival.rs
  • crates/busbar-llm/src/engine/credential.rs + crates/busbar-plane-a2a/src/binding.rs: symbol Binding
  • crates/busbar-llm/src/engine/lazy_body.rs + crates/busbar-plane-a2a/src/plane_door.rs + crates/busbar-plane-a2a/src/task_door.rs: symbol Head
  • crates/busbar-llm/src/unit/route.rs + crates/busbar-plane-a2a/src/tasks.rs: symbol seal
  • crates/busbar-llm/src/unit/verify.rs + crates/busbar-plane-a2a/src/trust.rs: symbol verify
  • crates/busbar-llm/src/unit/walk.rs + crates/busbar-plane-a2a/src/frame.rs: symbol Tap
  • crates/busbar-plane-a2a/src/a2a/task.rs + crates/busbar-plane-mcp/src/tool_tasks.rs: symbol Task
  • crates/busbar-plane-a2a/src/arrival.rs + crates/busbar-plane-mcp/src/ask.rs + crates/busbar-plane-mcp/src/tool_arrival.rs: symbol decide
  • crates/busbar-plane-a2a/src/arrival.rs + crates/busbar-plane-mcp/src/call.rs: symbol not_granted
  • crates/busbar-plane-a2a/src/arrival.rs + crates/busbar-plane-mcp/src/client/negotiate.rs + crates/busbar-plane-mcp/src/tool_arrival.rs: symbol Refusal
  • crates/busbar-plane-a2a/src/arrival.rs + crates/busbar-plane-mcp/src/tool_arrival.rs: symbol Disposition
  • crates/busbar-plane-a2a/src/claims.rs + crates/busbar-plane-decisions/src/claims.rs: module claims.rs
  • crates/busbar-plane-a2a/src/diagnostics.rs + crates/busbar-plane-mcp/src/diagnostics.rs: module diagnostics.rs
  • crates/busbar-plane-a2a/src/door.rs + crates/busbar-plane-a2a/src/surface.rs + crates/busbar-plane-a2a/src/task_hop.rs + crates/busbar-plane-a2a/src/tasks.rs + crates/busbar-plane-mcp/src/door_listen.rs + crates/busbar-plane-mcp/src/tool_claims.rs: symbol open
  • crates/busbar-plane-a2a/src/door.rs + crates/busbar-plane-mcp/src/door.rs + crates/busbar-plane-mcp/src/tool_claims.rs: symbol claim
  • crates/busbar-plane-a2a/src/door.rs + crates/busbar-plane-mcp/src/door.rs + crates/busbar-plane-mcp/src/tool_door.rs: symbol op_class
  • crates/busbar-plane-a2a/src/events.rs + crates/busbar-plane-mcp/src/adapt.rs + crates/busbar-plane-mcp/src/door_listen.rs: symbol frame
  • crates/busbar-plane-a2a/src/events.rs + crates/busbar-plane-mcp/src/tool_sessions.rs: symbol Event
  • crates/busbar-plane-a2a/src/facts.rs + crates/busbar-plane-decisions/src/facts.rs: module facts.rs
  • crates/busbar-plane-a2a/src/framed.rs + crates/busbar-plane-a2a/src/local.rs + crates/busbar-plane-a2a/src/push_serve.rs + crates/busbar-plane-mcp/src/answer.rs + crates/busbar-plane-mcp/src/client/peer.rs + crates/busbar-plane-mcp/src/door_tasks.rs: symbol answer
  • crates/busbar-plane-a2a/src/framed.rs + crates/busbar-plane-a2a/src/local.rs + crates/busbar-plane-a2a/src/skill.rs + crates/busbar-plane-a2a/src/task_hop.rs + crates/busbar-voice/src/mount.rs: symbol refusal
  • crates/busbar-plane-a2a/src/framed.rs + crates/busbar-plane-a2a/src/relay.rs + crates/busbar-plane-mcp/src/line.rs: symbol Reply
  • crates/busbar-plane-a2a/src/framed.rs + crates/busbar-plane-mcp/src/door_tasks.rs + crates/busbar-plane-mcp/src/line.rs: symbol reply
  • crates/busbar-plane-a2a/src/framed.rs + crates/busbar-plane-mcp/src/framing.rs: symbol events
  • crates/busbar-plane-a2a/src/framed.rs + crates/busbar-plane-mcp/src/tool_tasks.rs: symbol Status
  • crates/busbar-plane-a2a/src/identity.rs + crates/busbar-plane-mcp/src/identity.rs: module identity.rs
  • crates/busbar-plane-a2a/src/jsonrpc.rs + crates/busbar-plane-mcp/src/call.rs + crates/busbar-plane-mcp/src/jsonrpc.rs: symbol error
  • crates/busbar-plane-a2a/src/jsonrpc.rs + crates/busbar-plane-mcp/src/client/jsonrpc.rs: module jsonrpc.rs
  • crates/busbar-plane-a2a/src/local.rs + crates/busbar-plane-a2a/src/relay.rs + crates/busbar-plane-mcp/src/answer.rs: symbol Answer
  • crates/busbar-plane-a2a/src/meta.rs + crates/busbar-plane-decisions/src/meta.rs: module meta.rs
  • crates/busbar-plane-a2a/src/push.rs + crates/busbar-plane-a2a/src/relay.rs + crates/busbar-plane-mcp/src/call.rs: symbol Settled
  • crates/busbar-plane-a2a/src/push.rs + crates/busbar-plane-a2a/src/rest.rs + crates/busbar-plane-mcp/src/trust.rs: symbol hex
  • crates/busbar-plane-a2a/src/push_door.rs + crates/busbar-plane-mcp/src/door_line.rs + crates/busbar-plane-mcp/src/door_listen.rs: symbol tick
  • crates/busbar-plane-a2a/src/push_door.rs + crates/busbar-plane-mcp/src/door_tasks.rs: symbol advance
  • crates/busbar-plane-a2a/src/record.rs + crates/busbar-plane-a2a/src/tasks.rs + crates/busbar-plane-mcp/src/record.rs: symbol encode
  • crates/busbar-plane-a2a/src/record.rs + crates/busbar-plane-a2a/src/tasks.rs + crates/busbar-voice/src/bin/voice-conform.rs: symbol decode
  • crates/busbar-plane-a2a/src/record.rs + crates/busbar-plane-mcp/src/record.rs: module record.rs
  • crates/busbar-plane-a2a/src/records.rs + crates/busbar-plane-decisions/src/records.rs: module records.rs
  • crates/busbar-plane-a2a/src/records.rs + crates/busbar-plane-mcp/src/tool_records.rs: symbol operations_for
  • crates/busbar-plane-a2a/src/relay.rs + crates/busbar-plane-mcp/src/tool_door.rs: symbol Relay
  • crates/busbar-plane-a2a/src/task_door.rs + crates/busbar-plane-a2a/src/tasks.rs + crates/busbar-plane-mcp/src/tool_door.rs: symbol Held
  • crates/busbar-plane-a2a/src/task_hop.rs + crates/busbar-plane-decisions/src/plane_door.rs: symbol settle
  • crates/busbar-plane-a2a/src/task_hop.rs + crates/busbar-plane-mcp/src/checks.rs: symbol Refused
  • crates/busbar-plane-a2a/src/tasks.rs + crates/busbar-plane-mcp/src/subscribe.rs + crates/busbar-plane-mcp/src/tool_door.rs + crates/busbar-plane-mcp/src/tool_program.rs: symbol Step
  • crates/busbar-plane-a2a/src/tasks.rs + crates/busbar-plane-mcp/src/tool_tasks.rs: symbol sweep
  • crates/busbar-plane-a2a/src/trust.rs + crates/busbar-plane-decisions/src/codec/mod.rs: symbol view
  • crates/busbar-plane-a2a/src/trust.rs + crates/busbar-plane-mcp/src/subscribe.rs: symbol Standing

Two more rulings on #787, applied

  1. extern "C" is not a secret instance (scanner precision fix).
    • The instance axes skip exactly the ABI position: the literal the keyword extern takes, and an abi = "…" argument. plugins.yaml's busbar-secret-c had taught the secret axis the word c, so every extern "C" in a neutral crate counted as that plugin.
    • Selftest:
      • GREEN: extern "C" fn, extern "C-unwind" fn and abi = "C" count 0.
      • RED: a "c" literal naming the plugin counts.
      • RED: the plugin's name on the very line of an extern "C" counts.
    • The ceilings the fix drained are re-armed at the measure, citing "scanner no longer counts extern ABI strings": instance:secret busbar 35 → 25, busbar-contract 133 → 64, busbar-kernel 115 → 112, busbar-plugin-loader 111 → 25.
  2. The relay's allocation pin is restored on the door (crates/busbar-plane-a2a/tests/alloc_gate.rs, DoD item 6).
    • It covers the same request the retired engine's pin covered (a JSON-RPC message/send carrying no task id), measured over one hop: the kernel's ATTEMPT and the caller's body.
    • It is pinned at the engine's 2: the attempt's field list and its target. RED arm: one allocation planted in the relay's loop is counted and fails the pin.
    • Before this commit the door's relay allocated beyond the pin, at these sites:
      • each of the three head fields spelled as an owned String;
      • the journal's url re-copied on every attempt;
      • the caller's body copied (piece.bytes.to_vec());
      • target_of parsing the agent url (a parse buffer, and a lower-cased copy per path segment, beside the target).
    • With only the parse left in place it measured 3.
    • Fixed without loosening the pin:
      • the fields borrow the plane's constants;
      • the body is LENT (Answer::ToFarEndLent): the door writes it from the piece the host lent, keeping only what a short host buffer could not take;
      • the common url is read off its own bytes, with any other parsed as before. a_target_read_without_a_parse_is_the_parsed_target holds the two equal over 20 urls.

Still open

Proof (M3 prover VM, this branch's head)

…eam_tests

The hostless seam adapter (seam.rs buffered, read_capped_over, stream_head/pump) against a direct
build_pinned_client hop over the same loopback fixture: byte-identical buffered GET, a 3xx status and
Location surfaced as a direct hop surfaces them, all three ReadEnd states of the cap loop matching
proxy::read_capped, and the stream concatenation equal to a direct streamed hop.
The section described a lease (header_for refusing Expired / WrongAgent) that no longer exists. It
is busbar's own credential, re-resolved on every hop and presented by the auth kind's per-request
call; the plane never holds it; card fetches carry none; lease_ttl_ms must be > 0 and has no
further effect (predev presented a lease the instant it minted it); a credential that stops
resolving refuses the hop (502) in predev's words, and busbar's own requests are not made.
instance-noun-neutrality scans literals and identifiers in every non-family crate, tests included:
the root serve cells read the ErrorInfo domain and the task resource type from the agent door's
wire fixture (agent_door_wire.txt) as the agent_door module already does, the door_steps cells use a
neutral vendor URL, and the kernel seam cell is renamed buffered_adapter_matches_a_direct_pinned_get_byte_for_byte.
…ix a shadowed fixture in the callback-floor cell

The capability arm (streaming and pushNotifications, each excluded and each
fitting), the input- and output-mode arms with the compatible-both-ways case,
and the exhaustive TaskShape destructure guarding content-blindness, from
predev catalogue_tests.rs, now over skill::fit.
…c, and registration members riding every member-target need

The a2a plane is one dialect whose JSON-RPC, REST and gRPC are its lines (spec, 2026-09-30:
transport de-frames, plane transcodes protobuf<->ProtoJSON). predev's engine dialled gRPC agents
(relay::GrpcFraming); the door refused a gRPC-only card as unspeakable. Now:

- binding.rs: GRPC is speakable; a card listing it first is reached on it.
- framed.rs: the outbound codec on the same generated messages: the hop's params written as the
  rpc's request message, each length-prefixed answer read back as its ProtoJSON result, and the
  status the trailers state (grpc-status-details-bin's google.rpc.Status and ErrorInfo).
- door.rs: NEED_GRPC, outbound, member-target (settings.*.url), transport grpc, the same trust
  anchors (client identity) as NEED_AGENT.
- relay.rs: the gRPC binding composes /lf.a2a.v1.A2AService/<rpc> with the request message; a
  unary answer is read whole, an error status is the backend's refusal (its A2A code where its
  reason or status binds one), no message and no status is the engine's Unframable; the two
  streaming rpcs re-frame each message as a JSON-RPC event through the one event reader.
  Trailers (PIECE_FIELDS) are read for the status and never appended to the answer.
- plane_door.rs: an attempt on a gRPC-bound agent names NEED_GRPC; the door's own requests
  (push-config mirror, ListTasks refresh) dial NEED_GRPC and transcode the answer.
- root door_steps.rs (approved root change): a registration member rides EVERY member-target need
  its plane states (the providers' rides pattern); its anchors and private reach are sealed, and
  its auth binding bound, on each ridden need.

Ports the engine's grpc client legs (client_leg_tests grpc_client_issues_*, pushback
grpc_client_issues_*_task_push_notification_config(s)) and the port-f rows at unit level.
…rce_cites_the_design_in_words_not_in_symbols test refuses the section sign)
… plane's purity and design-citation rules hold over the new cells

The task_hop inline-callback cell answered DEST_ALLOWED for a plaintext and an
internal-literal callback and relied on the plane's own scheme and literal
checks; with the destination decision the host judge's (the design's one
destination guard), the cell's host answers DEST_PLAINTEXT and DEST_INTERNAL,
and the refusal words are unchanged. The push attempt seam takes &mut self so
the test host keeps its log without a cell (the plane holds no interior state,
tests/purity.rs); the internal-address refusal names the host as read, with no
std::net parse; the design is cited in words; a clippy type_complexity alias.
Root: a cell that a key no longer live never dials its agent (predev's
authorise_egress KeyNotLive).
…own name (a local named desk shadowed the desk() helper)
… to end, and port the refresh, no-hop, terminal and token-lifetime cells

- serve_tests agent_door: a loopback agent serving its card over HTTP/1.1 and its rpcs over HTTP/2
  on one port; an agent whose card names only GRPC is approved and a relayed SendMessage reaches it
  on the door's gRPC need (its registration riding that need): the rpc's path, one length-prefixed
  message carrying the caller's content, the answer back under busbar's task identity.
- The rig's Agent can answer per request; the engine's the_refreshed_state_reaches_the_callers_own_list,
  a_list_with_no_open_task_of_this_callers_makes_no_hop, a_terminal_task_is_not_armed_at_the_backend,
  a_token_is_not_spent_by_being_used_while_the_task_is_live and
  a_token_for_a_task_that_has_ended_authorises_nothing ported as root cells.
- The plane's wire words these cells use are fixture data (agent_door_wire.txt), as the rig's others.
- relay_grpc_tests: a request message whose fields are all default is zero bytes (nothing sent
  beside the head; the transport frames the empty message).
…ent DECLARES the agents section (served().section), not one that merely owns it; the cells never ran since 40ccb45 because the probe read the owned-section list and found no door. A missing door is now a failure through door(), never a silent skip (33 early returns removed)
…es the agents section

linked_door() matched only a door that OWNS the fixture's section (a
section kept beside its declaring one), but the agent door DECLARES it:
its ServedFacts.owns is empty. So linked_door() was None in every build
and every agent_door cell returned at its guard and passed without
driving anything (witnessed on Latchkey: neither of two probe prints
past the guard ran, and a cell with its kernel fix reverted still
passed). It now matches the declaring section or an owned one.
…s predev's did

Without a store block the config also refuses "store is required", beside
the agents-card refusal the cell pins (seen on Latchkey once the cell was
actually driven).
… so the transport names no plane (kind-isolation vocab back to predev's: zero findings)
…oot path installs (root::connector::install_io_reactor, now one function both call). The door's own requests (its card fetch, a mirrored push config) run on a dispatcher worker off any runtime, so with no process reactor their sockets were refused registration (io::NOT_ON_A_WORKER) and every connect failed as a host fault
…e, card signing, JWS verify) into p3-flip-a2a; its cells sit after helper e's at the agent-door module's end, and every early return on a missing door is struck (a missing door fails through door())
…R4: an unreachable card on the call path fails the hop closed; the verify_tests ports; the dated ruling in Appendix B) into p3-flip-a2a; the plane tests both branches appended sit one after the other, and the root cells' early returns are struck
…cation answered 202, a deleted push config's credential forgotten; registration judged by the host's dest.judge, no plane-local address check; ruling (C): the inert anomaly breaker and its cells deleted, egress_scopes documented as validated and unread) into p3-flip-a2a. The anomaly-breaker pass cell a2a-h-b ported retires with the breaker under ruling (C); the fixture keeps both branches' rows
…tes; PerHop's redacting Debug; the per-hop credential, waiver and seam conformance cells; docs/a2a.md's upstream_credential restated) into p3-flip-a2a. The refusal slot answers an unreadable rewrite first, then a refused credential, then the rest; docs keep a2a-h-a's egress_scopes row beside a2a-h-d's upstream_credential row
…ilent about an agent, through DoorSection::ledger_lanes; the R2 cell: a breaker-refused hop counts its request and bills no fee, bytes or spend) into p3-flip-a2a; the agent door probe stays the lane's (the declaring section only, never a skip)
…s own need, the codec's outbound direction, a registration riding every member-target need in the root, the client and mirror legs ported) into p3-flip-a2a. The cells' Agent fake keeps both branches' constructors over one start_core (head fields from a2a-h-i, an answer made of the request from a2a-h-f); the fixture, relay constants and appended cells keep both sides
…, served card, task hop, framing, the kernel lifecycle cell, the mutual-TLS and card-signing root cells) into p3-flip-a2a; appended tests keep both sides, the fixture both rows, the root cells no early return
…ential binding) is a runtime carrier built from a reference the door section's walk already reported, never part of RootCfg (NotInResolvedConfig), so the inventory accounts for it
…in the trailers is an answer (RED)

A far end that states its status at the end (the grpc transport: head with no status, trailers
carrying grpc-status, BUSBAR-1.6.0.md l.394, l.747) answering NOT_FOUND must be relayed to the
caller as the A2A error the status binds (TaskNotFound -32001), never failed over, and record no
transient against the agent (coordinator ruling: the trailer status comes through the kernel).

- kernel far_end: the trailers cross with their status; a non-success one is the answer's last
  piece, not a cut (no compensating transient, no refund); the plane's reading of it wins, with
  no second success beside the head's; a success stated there ends as it ends.
- a2a relay/framed: the call's end is the status handed on beside the trailers; the
  grpc-status-details-bin details carry the ErrorInfo, never the code.
- root agent_door: a gRPC agent answering NOT_FOUND six times is answered -32001 each time,
  dialled once per call, its breaker never open.
…plane, and a non-OK one is an answer, never a connection fault

Coordinator ruling: the gRPC trailer status comes through the kernel (BUSBAR-1.6.0.md l.394 a gRPC
binding reads grpc-status from the trailers; l.747 the trailers carry grpc-status, then a terminal
piece). Before, the far end handed the plane the trailers' field block without its status_code, and
the failed terminal piece after a non-OK end was read as a cut: a compensating transient on the
member's breaker (even for NOT_FOUND) and the budget unit refunded, while the plane, seeing no
status, read the details field for the code.

- far_end: the trailers piece carries the status the transport read off it (its number and class).
  A non-success status after a head the walk recorded as a success is the answer's outcome: the
  trailers are the answer's last piece (the failed terminal is never read), and the transport's
  fault reading of the status is held for the plane's own (FarEnd::judged), as a relayed failure's
  head is; a plane reading that is a success again records no second success. NOT_FOUND's row reads
  as the caller's: nothing is recorded against the member. A success stated in the trailers ends as
  it ends (the line is still read to its completion).
- route: the status crosses with PIECE_HAS_STATUS on the first piece and on a trailers piece; the
  head fields cross only with the first.
- contract: PIECE_FIELDS documents the status it may carry (no layout change; the header's line is
  unchanged).
- a2a framed::ended: the call's code is the status handed on beside the trailers, never the
  grpc-status-details-bin details (which still carry the error's ErrorInfo); the relay already maps
  the code to the A2A error and the breaker reading predev's classify_hop gives (a backend error is
  the destination answering; UNAUTHENTICATED/PERMISSION_DENIED hard).
- the root cell's name speaks no instance noun in code.
…erged with predev (460be4d77d)

Drains: busbar x instance:secret 25 -> 22, busbar x plane 772 -> 770, busbar-kernel x plane 1100 -> 1099, busbar-kernel x transport 266 -> 220, busbar-kernel-breaker x plane 2 -> 0, busbar-kernel-breaker x transport 134 -> 1 (the #561/#778 breaker work this branch stacks on, row 66, and FLIP-A2A).

busbar-plugin-loader x instance:secret 21 -> 23 is a correction of the merge figure, not a rise: predev's -2 (#532, 40a4080) removed two `extern "C"` ABI strings (host_log_sink and its doc line) that this branch's scanner fix had already stopped counting, so the two drains overlap by those two; 23 is this branch's own pre-merge measure, and no hit was added.
…hat read as the c secret plugin are named for what they are

Ruling on 60dd171: no raise. The 23 ModernCI measured is no hit #787 added (#787 adds no secret-instance literal to the loader; it removes one, the durable_tests rename): the merge figure 21 counted predev's -2 (#532, two extern "C" ABI strings) that the scanner fix behind #787's -85 had already stopped counting. The ceiling returns to 21 by draining two real hits: store_money_acceptance.rs the_floor_makes_arrival_order_matter's .expect("c") messages (the charge), now "the charge", and their refund pair "the refund".
ModernCI merged predev (1d111f2) into lane-p3-flip-a2a: they conflicted only where a fixed rule settles it. Each file is settled by its rule:
- crates/busbar/src/root/door_steps.rs: rust (items both sides added are all kept, the target's first; an item both changed is a real conflict)

Keep-both: where both sides only added at one place, both are kept, predev's first. ModernCI writes nothing of its own. A red on this commit belongs to the pair and goes to lane-p3-flip-a2a with both sides' diffs.

The change's own commits are untouched: this commit holds the resolution alone. It is judged in full, like any push, before anything lands.
@MattJackson

Copy link
Copy Markdown
Collaborator Author

ModernCI merged predev (1d111f2) into lane-p3-flip-a2a as 10de6be: the branch conflicted with predev only where a fixed rule settles it (a mechanical file, or both sides only adding at one place: both kept, predev's first), each file by its rule:

  • crates/busbar/src/root/door_steps.rs: rust

The change's own commits are untouched; the new commit holds the resolution alone (ModernCI writes nothing of its own) and is judged in full like any push. A red on it belongs to the pair and comes back to this change with both sides' diffs. It was made as Matthew Jackson 1085847+MattJackson@users.noreply.github.com.

…'s are renamed to what they are (787 reads its armed 96)

Each pair was read on both sides. None is shared logic: each is a distinct concept that only
shares a generic word, so the decisions side, whose name was the less precise, is disambiguated.

- Relayed -> RelayedFields (driven.rs). Decisions: the caller's header fields the far end
  receives, one buffer per unit (what `relayed_fields` returns). MCP's `Relayed` (tool_door.rs) is
  the outcome of relaying an upstream ask: an answer, a pended host service, or refused child
  requests. Different concept; renamed, not shared.
- Routed -> ModelRoute (plane_door.rs). Decisions: one configured model's route, its dialect index
  and its upstream_model. LLM's `Routed` (busbar-llm unit/route.rs) is the Route step's output: the
  sealed seat verdict, the response bytes, the meter facts and the unspent meter sink. Different
  concept; renamed, not shared.
- Unreadable -> UnreadableUsage (driven.rs). Decisions: a usage member present in a success answer
  but not a whole count, naming its pointer (the money rule's loud failure). A2A's `Unreadable`
  (skill.rs) is why a held agent card cannot be read. Different concept; renamed, not shared.

The private `Member::Unreadable` variant is not a top-level symbol and is unchanged. No ledger row
is added and the armed count is not touched.
… base, so it compiles against #787's FramePiece (fault in the old _reserved byte)

#787's FramePiece states the framer's fault reading in the byte that was `_reserved` (the breaker
plane-fault work); the datagram rig landed on predev against the old layout and named
`_reserved: 0`, which #787's tree does not have (E0560). FramePiece has no constructor or Default,
so the literal names the four fields the rig sets and takes the rest from an all-zero piece (code,
status class, FAULT_NONE, no retry), as the contract and loader tests' `z()` pieces do. An appended
field (#1032's declared_len) no longer breaks it. Every other FramePiece and WirePiece literal in
the tree was checked: the rest are built from `z()` or already name the current fields.
…: both sides' hunks kept

- crates/busbar-contract/src/abi/plane/check.rs: the import list carries #787's MAX_METRIC_LANES,
  ROUTE_CARRIES_OWN_TOKEN, ROUTE_SCOPE_LOCAL and TAIL_REFUSED_PIECE with predev's TAP_FAULT_NONE.
- crates/busbar-kernel/src/plane_driver/route.rs: the Answer copy carries #787's metric_pool,
  metric_lane and wait_member with predev's tap_fault (OnPieceOut holds all four: tap_fault in the
  old padding byte, the spans appended; the layout golden and header agree at 181/182 and 216..240).
- crates/busbar-kernel/tests/common/mod.rs: TestUnits keeps #787's `resolved` and predev's
  `tap_faults`; its one DriverSteps impl answers both `resolved` and `usage_tap_fault`.

Stale-copy check over every file either side changed since 1d111f2: a file only one side
changed is that side's copy exactly, and no file both changed fell back to the base or to one
side alone.
…he measured 42 (Law 9); five a2a capability cells proven again

H1 (structure-lint:plane-dup:unledgered). The armed 96 rested on "none of the new pairs is new
code"; 52 of the 81 new findings (plus the 2 #703 met through predev's door_sessions.rs) were
declarations this branch added (39cf69f, the plane-local a2a door). All 54 are drained:

Shared once in the SDK (busbar_contract::abi::sdk), both doors use it (8):
- Route            -> publish::ServedRoute (a2a and mcp door tables alias it)
- claim            -> ServedRoute::claim_spec (a2a's dialect step is dialect_claim)
- admin_route      -> publish::admin_route
- op_class_index   -> publish::class_index (a2a calls it; mcp's op_class_index delegates)
- public_url       -> Lent::stated
- hex              -> digest::lower_hex (a2a push token); mcp uses busbar_contract::sha256_hex
- State            -> trust::State (identical state word, both trust.rs)
- Sighting         -> trust::Sighting<O> (a2a over CardObservation, mcp over Observation)

Renamed, distinct concepts sharing a word (46):
- modules: trust.rs -> card_trust.rs, arrival.rs -> agent_arrival.rs, door.rs -> door_statement.rs,
  plane_door.rs -> agent_door.rs (busbar/Cargo.toml plane-a2a-door row follows),
  identity.rs -> task_identity.rs
- card_trust: Observation -> CardObservation, Standing -> TrustStanding, state_of -> verdict_state,
  verify -> verify_card, TrustView -> AgentTrustView, drift -> skill_drift, view -> agent_view
- agent_arrival: Refusal -> AgentRefusal, Disposition -> AgentDisposition, decide -> decide_arrival,
  not_granted -> not_granted_sentence
- door_statement: read_settings -> read_agents_section, snapshot_spec -> agents_snapshot_spec
- agent_door: Unit -> AgentUnit, Head -> AnswerHead, Looked -> CardLook, section -> agents_section,
  stands -> caller_stands, piece -> hop_piece, verify_on_call -> verify_agent_on_call,
  session_of -> context_session
- framed: Status -> CallStatus, answer -> answer_message, Reply -> FramedReply,
  reply -> framed_reply, events -> event_messages
- local: Answer -> LocalAnswer, answer -> answer_local; push_serve: answer -> serve_answer
- relay: Answer -> PieceAnswer, Reply -> RelayReply, Relay -> HopRelay, Settled -> TaskSettled
- push: Settled -> DeliverySettled; push_door: tick -> tick_deliveries, advance -> advance_attempt
- tasks: Held -> HeldTask, Step -> Stamp, seal -> seal_event, sweep -> retention_sweep
- task_door: Held -> HeldAnswer, Head -> WindowHead; task_hop: Refused -> WriteRefused,
  settle -> settle_on_answer; events: frame -> json_event
- the less precise other half: busbar-llm credential.rs Binding -> CredentialBinding (private),
  busbar-plane-mcp tool_sessions.rs Event -> SessionEvent (private), busbar-voice mount.rs
  refusal -> plain_refusal (private)

Armed figure, measured by the lint's own rule (top-level fn/struct/enum/trait/union names and
file names per plane home, production files only) and listed pair by pair: 96 - 54 = 42.
- 15 carried from predev 2bce54d (which measures 26; 11 left with the deleted engine or the
  decisions renames: meter.rs, plane.rs, route.rs, verify.rs, admit, approve, deliver, task_verb,
  Verified, Relayed, Routed): config.rs, absolute, Admitted, arrive, attempt, build_runtime,
  drive, fingerprint, Hop, meter, op_class, owe, refused, relayed, serve
- 27 scope-moved (declared in busbar-plane-a2a files that existed on predev): claims.rs,
  diagnostics.rs, facts.rs, jsonrpc.rs, meta.rs, ops.rs, record.rs, records.rs, Envelope,
  IdShape, MethodRow, Tap, Task, correlation_for, correlation_value, decode, encode, error,
  id_shape, id_value, is_canonical_number, is_number, open, operations_for, read, row_for, success
UNLEDGERED_ARMED 96 -> 42 (the coordinator's ceiling was 51: predev's 22 + 27 + 2; predev's true
carry is 15 and the #703 two are drained). The source comment states this accounting; the
standing-red strike stays, the measure equals the armed figure.

H2 (qa/capability-equality.json): missing 5 -> 0.
- failover-reroute x a2a-client: tests/root/mod.rs::a_tripped_pool_primary_reroutes_a_fresh_submission_to_the_twin_and_stays_untouched (root proven too)
- metrics x a2a-client: tests/root/mod.rs::a_relayed_task_counts_an_upstream_attempt_naming_the_agent_it_was_issued_to (root proven too)
- metrics x a2a-server: crates/busbar/tests/plane_integration.rs::mounted_plane_traffic_appears_on_a_real_metrics_scrape (its agents: owner is the a2a door row)
- net-guard x a2a-server: src/tests/push_door_tests.rs::a_callback_that_became_internal_after_registration_is_refused_at_delivery
- egress-auth x a2a-server: src/tests/push_door_tests.rs::the_callers_own_webhook_credential_is_presented_on_the_delivery, ported from the engine's pushdeliver_tests.rs (the caller's own credential is the one authorization field of the delivery the judge admits, and that delivery is sent)

H3: no change. predev's snapshot "header" sat in CredentialPlacement's "variants" array, which the
instance scanner's placement collision already did not count, so busbar-kernel x instance:auth
measured 8 without it; the row reserves the moved spelling and stays 8.
MattJackson added a commit that referenced this pull request Oct 15, 2026
…c] (no backend is promised a C compiler; #787 preflight 'linker cc not found')
MattJackson added a commit that referenced this pull request Oct 15, 2026
…] (no backend is promised a C compiler; #787 preflight 'linker cc not found')
…ually sent

The ported cell asserted on `d.request(&due)`, a request the test recomputed, while the test
host's `send` dropped the exchange it was handed; framing the attempt without the credential
(push_door.rs `Exchange::request(deliveries.request(..))`) would still have passed.

- busbar-contract `Exchange::framed_fields`: the fields the exchange frames, read back off the head
  it sends (empty for a raw send), pinned by
  exchange_tests::the_framed_fields_are_the_head_the_exchange_sends.
- push_door_tests TestHost records each send's URL and the exchange's framed fields; the other
  cells read only `sent`, as before.
- the_callers_own_webhook_credential_is_presented_on_the_delivery now ticks the delivery and
  asserts on the one exchange sent, to the callback: exactly one `authorization` field, equal to
  `Bearer receiver-issued-token`. The credential is never printed.

RED arm (read from the code): framing with `push::request(&flight.delivery, None)` puts only
`content-type` in the head, so framed_fields has no `authorization` and the count assert fails;
an `Exchange::request` that drops the field leaves the head's field block without it, same failure.
MattJackson added a commit that referenced this pull request Oct 15, 2026
Conflicts:
- Cargo.toml, Cargo.lock: busbar-transport-http pinned at a6e29e36da, the http dev commit that
  carries both sides: this branch's fault-table pin 2d1dbfdabf (the dev pin that drains tokio and
  hyper-util) and predev's a715d1ab57 (an IPv4 spelling is sent as the address it names). It is
  the pin #787 already carries over the same two. grpc 1303273a73, ws 2ec0786eba and tcp
  b3047ce874 each contain predev's pin (a5140eee3e, f8ba71d259, eb334dd6e9), so they stay.

The transport ABI over predev's new code:
- busbar-transport-webrtc (new on predev): its tail states no fault table (fault_rows null, as
  the byte-stream carrier's), its pieces name the fault byte where the padding was, and a closed
  data channel is the stream's END by flag (PIECE_END | PIECE_END_OF_FRAME), never an empty
  message; door_tests prove both. The connector datagram test builds its piece over a zeroed
  base. Same port #787 carries.
- Layout golden and C header: the textual merge equals the generator's output over the merged
  types (predev's OnPieceOut.tap_fault and this branch's FaultRow / TransportTail.fault_rows /
  FramePiece.fault are disjoint; 287 of 291 structures pinned).

qa/kind-isolation.toml law0: busbar-kernel-breaker x plane 2 -> 0 and x transport 134 -> 1, the
measure ModernCI took of this same breaker code in #787 (60dd171, 460be4d77d).
MattJackson added a commit that referenced this pull request Oct 15, 2026
…eaker-plane-fault

No conflicts. The base's merge of predev brings the http pin at a6e29e36da (this branch's fault
table and predev's IPv4 spelling) and the webrtc transport's port onto the fault ABI. This
branch's grpc pin b6b269d99d contains predev's a5140eee3e, so it stays; the four transport pins
now equal #787's. Layout golden and C header equal the generator's output over the merged types
(this branch's FAULT_HEALTHY over the base's FaultRow / FramePiece.fault, predev's
OnPieceOut.tap_fault). The breaker law0 rows (x plane 0, x transport 1) are ModernCI's measure of
this branch's breaker code inside #787.
MattJackson added a commit that referenced this pull request Oct 15, 2026
…IP-STREAMING (#503) each struck the last legacy crate's row

Merged together, the two flips left [package.metadata.busbar.served-witness] with no row and
build.rs's metadata_map refused it, failing every busbar build. The empty table leaves the
manifest and build.rs emits an empty SERVED_WITNESSES when there is none, the shape it already
takes for the linked-swaps table once the last switch went (FLIP-STREAMING).
MattJackson added a commit that referenced this pull request Oct 15, 2026
…e pinned decisions plane on a busbar rev that holds its contract

- busbar-plane-decisions re-pinned 0ac65e1 -> 8b214c02cc: the plugin repo now pins busbar
  fca71d1 (this branch), whose contract carries the PlaneTail::metric_lanes,
  RefusalReason::CredentialUnavailable and HostCtx::NONE its ported edits use; its own
  workspace failed to build at 5c99bef (test check's dropped-in step). One busbar-contract
  in Cargo.lock (the [patch] path).
- kind-isolation:law0: five rows settled to the union's measure, each at or under the
  merge-base's own row: busbar x instance:secret 13 -> 16, busbar x plane 583 -> 620,
  busbar-contract x instance:secret 43 -> 45, busbar-kernel x plane 1071 -> 1068,
  busbar-kernel x transport 203 -> 220.
- kind-isolation:law0-base busbar x vendor (143 -> 144): #988's cap.perf.streams-2000 named
  its upstream's dialect in a root test literal; the provider row is test data
  (fixtures/streaming_mock_provider.yaml), as fixtures/mock_provider.yaml already is.
- kind-isolation:test-deps: the busbar-kernel -> busbar-contract test edge #941 (#65) added
  (the dev-only test-seal) gets its [[dep]] row, count 1.
- kind-isolation:test-deps plane -> plugin-tooling: #981 named the loader from a second
  busbar-plane-llm test file; its two loader cells move into tests/conformance.rs, the one
  file the conformance-witness grant covers.
- structure-lint:plane-dup: armed at the measured 46 (Law 9; #787's 42 less six drains, plus
  ten names #503 and #787 each saw only once both homes moved), the stale Outbound and Route
  rows struck.
- plane-secret-blindness: the a2a push.rs exposes-secret-bytes row is struck (drained).
- script-allowlist: #972's scripts/store-migration-fixture.sh gets its entry.
@MattJackson
MattJackson merged commit 09b6049 into predev Oct 15, 2026
1 check was pending
@MattJackson
MattJackson deleted the lane-p3-flip-a2a branch October 15, 2026 05:33
MattJackson added a commit that referenced this pull request Oct 15, 2026
- busbar-plane-llm tests: WholeCtx and ReplyCtx initializers state translate_cap (the default
  cap, as the in-crate tests already do), the reply rig's Piece copy carries tap_fault, and the
  dialect's auth-failure status is already a u16 (no as_u16) (#1030/#1031 against the rehomed
  exchange tests).
- busbar build.rs: a test-linked door row's module is the one its plane-door row names in
  linked-entry (busbar_plane_a2a::agent_door, busbar_plane_mcp::plane_door), not an assumed
  <crate>::plane_door (E0433 in out/test_linked.rs after FLIP-A2A).
- root serve_door_far: the far end's conn::Piece states declared_len (#1032).
- root serve_tests session_door: DoorReach takes its secret seam as a shared Arc (#787's
  per-hop credential re-resolution).
MattJackson added a commit that referenced this pull request Oct 15, 2026
… leg; the superseded structure-lint figure struck

ModernCI's Law 9 review of 44b9451..179abf2 (HIGH): #503 deleted busbar-voice's tests and
nothing re-homed them, so eleven streaming cells of qa/capability-equality.json went
proven -> missing and five root legs proven -> none. Each is proven again by a cell on the
streaming door's served root leg (root/tests/serve_tests.rs, module session_door), the door
composed as production seals it, as the decisions and mcp doors' cells are:

- breaker-trip: a_failing_provider_opens_the_breaker_cell_of_the_doors_route
- breaker-fastfail: a_tripped_provider_is_refused_at_the_session_door_before_the_dial_at_once
- hooks-gate (client, server): a_gate_hook_refuses_the_mint_before_the_provider_is_dialled
  (a deployment-wide gate on the hook stage, the door's routed order)
- audit-chain (client, server): every_session_door_mint_served_or_refused_seals_one_record_on_one_chain
- metrics (client, server): a_served_mint_counts_its_upstream_attempt_under_the_doors_route
- egress-auth, governance-budget (client, server): the mint and spent-key cells already on the
  leg, which assert the provider's own credential and the presenting key's charge and refusal
- teller-steps streaming approve: a_key_short_of_the_doors_grant_is_refused_before_any_dial

Each keeps its RED arm. The session door harness takes a scripted provider, group limits, the
key's pools and deployment hooks (with the hook stage composed over the generation).

LOW: STRUCTURE_LINT_STANDING_FIGURES' plane-dup:unledgered figure (22) is struck, superseded by
UNLEDGERED_ARMED when #787 armed the row.
MattJackson added a commit that referenced this pull request Oct 15, 2026
… leg; the superseded structure-lint figure struck

ModernCI's Law 9 review of 44b9451..179abf2 (HIGH): #503 deleted busbar-voice's tests and
nothing re-homed them, so eleven streaming cells of qa/capability-equality.json went
proven -> missing and five root legs proven -> none. Each is proven again by a cell on the
streaming door's served root leg (root/tests/serve_tests.rs, module session_door), the door
composed as production seals it, as the decisions and mcp doors' cells are:

- breaker-trip: a_failing_provider_opens_the_breaker_cell_of_the_doors_route
- breaker-fastfail: a_tripped_provider_is_refused_at_the_session_door_before_the_dial_at_once
- hooks-gate (client, server): a_gate_hook_refuses_the_mint_before_the_provider_is_dialled
  (a deployment-wide gate on the hook stage, the door's routed order)
- audit-chain (client, server): every_session_door_mint_served_or_refused_seals_one_record_on_one_chain
- metrics (client, server): a_served_mint_counts_its_upstream_attempt_under_the_doors_route
- egress-auth, governance-budget (client, server): the mint and spent-key cells already on the
  leg, which assert the provider's own credential and the presenting key's charge and refusal
- teller-steps streaming approve: a_key_short_of_the_doors_grant_is_refused_before_any_dial

Each keeps its RED arm. The session door harness takes a scripted provider, group limits, the
key's pools and deployment hooks (with the hook stage composed over the generation).

LOW: STRUCTURE_LINT_STANDING_FIGURES' plane-dup:unledgered figure (22) is struck, superseded by
UNLEDGERED_ARMED when #787 armed the row.
MattJackson added a commit that referenced this pull request Oct 15, 2026
… the framer repin past #1032; token-sealed's new red

From ModernCI's nextest log at predev f4eb715 (8c1c308c) and its gates log (f50fb550):

Two lanes meeting:
- busbar config_validate_cross_plane: a present card is held to every registration the section
  bills, keyed <first scope kind>:<name> (DoorSection ledger lanes, d1be722); the cell's row was
  keyed `lane:`. Its row is now the registration's lane (BUSBAR-1.6.0.md l.2226, #42; #77(5)).
- busbar Book is boot-only: the credential refresher's own `book()` (door_steps) read as a call of
  root::boot::book; renamed kept_book. The one boot call stays main.rs's.
- busbar gauntlet_kernel: served_rider_chains_what_it_audits / _charges_the_presenting_key were
  cited only by the a2a and streaming root cells, which FLIP-A2A/FLIP-STREAMING re-pointed to their
  door legs; cited by nobody, they are dropped as U14 (686b91e) dropped mcp's two.
- busbar plane_host_universal_purity: with a2a and streaming served through their doors (a plugin
  reaches busbar only over the ABI, BUSBAR-1.6.0.md l.2179, Part 2 #2) one in-root plane is left,
  so clock_now_secs has one caller: allowlisted with its reason, and the detector's multi-plane
  class is proved over the same counter on two planted plane sources.
- busbar-contract feature_invariance: #65 made acquire_for_kernel dev-only; it is spelled
  #[cfg(feature = "test-seal")] and named in TEST_SEAL_ITEMS (no contract cfg(test) code calls it).
- busbar-contract / busbar-plane-a2a: the design cited in words, not section signs.
- xtask ledger_merge: [[shape-word]] (#787's reservation table) has its identity
  (word, file, holder), as duplicate-shape-word keys it.
- xtask reachability selftest: #935's plane-crates row reads the root manifest's pins; the green
  fixture tree gains its root Cargo.toml (no pins: all five plane crates are laid).
- busbar-core-connector fetch: the pre-body cap reads the head piece's declared_len (#1032); the
  field block never carries content-length, so the old lookup could not fire.
- busbar root model_egress: pools_of registers the neutral test plane before parsing models/pools,
  as bf08115 did for the timeout cells (nextest: one process per test).

A test wrong on its own head:
- busbar-core-connector listen: the framer entry's listener rides the address carrier, so the
  view lays one beside it (TestDoor::identity("carrier")), as the connector's other cells do.
- busbar-plane-llm conformance: an openai caller's head carries no anthropic-version, whose
  header claim outranks the chat-completions path claim (1.5.5's detection order).
- busbar-plane-llm exchange_reply: never the far body; the far sentence is checked except where it
  is the caller dialect's own refusal sentence, which the envelope equality pins.
- busbar-plane-streaming broker: the pre-X-2204 assertion that an expiry-less ek_ answer reads as
  0 is struck; X-2204 refuses it (a_minted_answer_with_no_stated_expiry_is_refused).

Gates: token-sealed's red was seal_release_path.rs minting a Pass outside crates/busbar-kernel/src;
the release-path witness holds the seal and mints nothing.

Not fixed here: universal_needs x8 are the pinned http framer built against a pre-#1032 contract
(40-byte FramePiece against the host's 48); they go green with lane-transport-repin-1032.
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.

1 participant