Skip to content

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
MattJackson merged 4 commits into
predevfrom
p5-plane-suite-tickets
Oct 7, 2026
Merged

MattJackson merged 4 commits into
predevfrom
p5-plane-suite-tickets

Conversation

@MattJackson

Copy link
Copy Markdown
Collaborator

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:

  • the route flags an arrival states, on the arrive line;
  • a session whose pieces cross on a ticket of its own;
  • tick and cancel steps 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_witness stays as extra coverage, not as a substitute.

New inputs (all optional; absent = today's behaviour)

input what it does
claimed.route.flags and session want route_flags an arrive line that names its route also states ArriveOut::route_flags as route_flags=["once" | "session" | "stream"] (an unnamed bit as its number), and the contract judges it
sessions[].ticket: true the session's pieces are SUBMITTED on one ticket of the leg's dispatcher, minted for it and recycled after its last step, as the kernel's route pump crosses them. A short piece is re-submitted once on the same ticket (pin 2).
step cancel: true, want disposition cancel with CancelIn::ticket = the session's ticket (pin 1). A cancelling session that names no ticket is refused at parse.
step tick: {now_ns, wakes?}, want next tick on a DRIVER ticket of the leg's dispatcher (Dispatcher::driver + Dispatcher::tick), as the kernel ticks an instance (pin 1). With wakes: true the pin is 2: the tick, and the drive the 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 cmp reported no difference. The main script's tick/cancel stay ticket-less as before; only session steps take tickets.

Loader-side tests (plane_door_plugin fixture, linked and dropped in)

The fixture now:

  • states ROUTE_SESSION for an arrival on its session door (claim 1);
  • records the ticket its session's caller piece crossed on;
  • ends that session on a cancel naming that ticket.

No existing fixture test changes.

conformance_plane_sessions_tests.rs covers:

  • GREEN: the live session (now ticket: true) runs both ways at its pins with every want met:
    • upgrade route_flags ["session"]
    • tick on a driver ticket, next=1001000
    • a second caller piece
    • cancel (disposition 3)
    • drive after cancel ready []
  • RED:
    • a moved count on every step, including the new ones
    • wants other than the answer: route_flags ["once"], next, disposition 2, ready [40] after the cancel
    • a cancel naming no session ticket: the session survives, so drive still names it (ready=[50])
    • a cancelling session with no ticket, refused at parse
    • a tick pinned to wakes on a door whose tick wakes nothing: 1 crossing where 2 are pinned

The 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! in tests/conformance.rs, and the loader dev-dep with conformance. The conformance.json grows:

  • settings session_max_secs: 1
  • claimed.route.flags [], and every READY arrival's want route_flags: []
  • sideband session: ticket: true
  • ceiling session (ticket):
    • upgrade, then caller audio
    • tick at 1000: the clock starts, next=1000001000
    • drive ready=[]
    • tick at 1000000001000 with wakes: true: pinned 2, the woken drive crosses; next=1001000001000
    • drive ready=[22]
    • collect: the session_expired error frame to the caller, units [[4,2]]
    • collect: done=true
  • cancelled session (ticket): upgrade, caller audio, cancel naming the session's ticket (disposition 2, streaming's CANCEL_FAILED), then the far end's next piece is Refused because the session is gone.

Latchkey cli-0b18cf3f-fbc1-45dd-b0bb-244061914efa, release build with BUSBAR_EXPECT_RELEASE=1:

  • all seven suite tests ok both ways;
  • BUSBAR_CONFORMANCE_RED=count fails on the comparator (Linked: step 'facts': 0 crossing(s), pinned 1, rc 101);
  • door_witness 12/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_SESSION is 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() in arrive for 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

check result
cargo xtask gate --all --format=tsv at f13361f2f, tags in the bundle (Latchkey cli-e4cc42e9-7abf-4fbb-b9f3-52c67419ba83) GATE EXIT 1 on both base and head (base carries 12 FAIL rows). 562 judged rows, verdict columns identical to base 70776f1d3 (547 PASS / 12 FAIL / 3 EXCUSED), non-PASS rows byte-identical; kind-isolation matrix MEASURED 14862 = base
selftests of the gates that scan the touched files: instance-noun-neutrality, kind-isolation, structure-lint (cli-d061dd41-c7ad-4291-848b-f3bf0f9bd163), plane-purity and config-schema (cli-e4cc42e9-…, with tags) all rc 0
cargo fmt --all -- --check; cargo clippy --workspace --all-targets --locked -- -D warnings (cli-d061dd41-…) rc 0 / rc 0
loader conformance:: tests, CI=1 with the fixture cdylib built (cli-0b18cf3f-fbc1-45dd-b0bb-244061914efa) 42 passed, 0 failed
decisions suite, release (same job) 7/7; RED count run rc 101 on the comparator
merge-tree against predev 6afec149a clean

No oracle proof is involved: no oracle cell, golden or replay input is touched.

… 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
MattJackson enabled auto-merge October 7, 2026 11:04
@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown

promote into predev: BOARD @f13361f2f: 2 failing test row(s), 12 DENY row(s)

Failing tests (2)

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).

@MattJackson
MattJackson added this pull request to the merge queue Oct 7, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to invalid changes in the merge commit Oct 7, 2026
@MattJackson
MattJackson added this pull request to the merge queue Oct 7, 2026
Merged via the queue into predev with commit 4a4268e Oct 7, 2026
8 checks passed
@MattJackson
MattJackson deleted the p5-plane-suite-tickets branch October 7, 2026 21:15
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