Skip to content

llm plane: the OpenAI Responses webhook receiver, ported before the busbar-llm delete (F26/D4, option A) - #966

Merged
MattJackson merged 1 commit into
predevfrom
lane-llm-responses-webhook
Oct 15, 2026
Merged

MattJackson merged 1 commit into
predevfrom
lane-llm-responses-webhook

Conversation

@MattJackson

Copy link
Copy Markdown
Collaborator

PARITY-SCOPE item 3. The OpenAI Responses webhook receiver lived only in legacy busbar-llm (webhook-receiver feature, Cargo.toml:56, openai_responses_webhook.rs), so row 155's C delete would have dropped it with no port. Row 155 (af5c074a15290b0f8) has confirmed this lane owns the port and that C waits for it. Spec: F26 + correction (BUSBAR-1.6.0.md l.4642-4643), D4 (l.4664), E table (l.5496); ARCHITECT 2026-10-14, option A.

Design (as ruled)

  • On/off is the plugin's own setting. The llm plane's Statement now owns a top-level webhooks: section, stated with flags 0 (neither declaring nor consumed). webhooks: { openai_responses: true } switches the receiver on, and it is read at open from PlaneOpenIn::owned. The section uses deny_unknown_fields, so a misspelt receiver is refused at boot naming webhooks. There is no kernel or core switch.
  • The kernel learns the key only from the plane's row. config/prepass.rs Dest::for_declared now carries any section a registered plane owns beside its own, other than the endpoint door, RAW to plane_raw, and from there door_sections hands it to the plane's owned. No webhooks literal appears in kernel or root source. The kernel is net -1 line, and only MCP's mcp endpoint door was an owned section before, which is unchanged. Top-level unknown-key refusals keep 1.5.5's list: lifted keys are not serde fields, as with tools/agents.
  • Off by default, so 1.5.5 bytes. Without the key, the plane's claims are exactly today's (the path falls to the fallback claim, as 1.5.5's router answered it). With it, there is one exact POST /v1/llm/webhooks/openai claim wearing the Responses dialect.
  • Verification is the auth kind's (D4). The operator's auth.chain names a busbar-auth-webhook-signature standard-webhooks instance (pinned and linked by busbar-auth-webhook-signature pinned and linked, default-on (Twilio / Standard Webhooks inbound verify) #948). All-PASS is 401, a forged signature is REJECT, and a replayed webhook-id is refused through the claim record. The plane never sees the secret, and its unit requires a principal.
  • The unit is ROUTE_LOCAL. There is no walk and no far end, and the fee unit is never incurred (fee_unit excludes local units), so it bills nothing. On the caller's last piece the plane answers 200 application/json {"received":true,"response_id":…,"type":…}, the ported receiver's acknowledgement. A body that is not a Responses event is Decline::WebhookBody, a 400 invalid_request in the Responses envelope.

REDs (before the port there was no receiver, so none of these builds)

  • busbar-plane-llm/tests/exchange_webhook.rs: off by default with no extra claim; switched on gives one exact POST claim in the Responses dialect; a misspelt or mistyped section is refused naming it; the Statement owns webhooks with flags 0; only a POST on the exact path is a delivery; read and ack bytes; ten malformed bodies are refused.
  • busbar-kernel config::tests::a_section_a_plane_owns_beside_its_own_is_lifted_raw_for_it: before the fix the document was refused at the key as an unknown field.

Register. This is new 1.6.0 surface with no 1.5.5 golden (F26 correction). It carries a CHANGELOG line under 1.6.0 Added. No oracle cell exercises the path. A cell for it belongs to the oracle-new-cells lane, and it records only after #911.

DRAFT. It waits for:

…lm, switched on by the plane's own webhooks: section, verified by the auth kind, answered ROUTE_LOCAL (ARCHITECT 2026-10-14 option A)
@MattJackson

Copy link
Copy Markdown
Collaborator Author

Row 155 $ #991 edits busbar-plane-llm src/plane_door.rs (one compile-time drift assertion beside the billable class list) and src/meta.rs (MeterClassDecl derived from the door's TOKEN_CLASSES). The hunks are disjoint from this PR's, and the merge with predev is clean.

MattJackson added a commit that referenced this pull request Oct 15, 2026
… from the gates log of 80d5f03

- hooks parity (#989): the v1.5.5 hook corpus moves out of the kernel's source into
  testing/hook-parity/v1.5.5-hook-corpus.tsv, read by the count test; its origins are `proxy`/`core`
  and the constants PROXY_ORIGIN/CORE_ORIGIN (gate hook-parity-count reads them). The listing named
  plane, hook and export instances in a neutral crate: kernel x plane +84, x hooks +18, and the
  instance-noun-neutrality llm census.
- config-schema: a section a plane owns beside its declaring one is the endpoint DOOR only for the
  plane the kernel names its owner (EndpointSection::OWNER); any other is RAW, carried by
  DeployCfg::plane_raw, as the pre-pass lifts it since #966 (a2a's agent_push, #1001). Selftest: two
  doors under the owner stay RED; a non-owner's beside section is carried.
- reachability: serve_datagram.rs is the module `serve_datagram`, named for its file like serve_framed.
- teller-steps / libtest_path: door cells are read off the linked rows on the plane-door axis, the
  rows build.rs mounts since #1006 deleted [package.metadata.busbar.door-cells].
- plane-purity dialect / neutral-no-dialect: LegacyLaneKeys flattens ProviderLaneCaps rather than
  spelling its fields (#957).
- structure-lint: stand_in.rs's inline tests move to tests/stand_in_tests.rs (#1010).
- config-scope: auth/mod.rs's test-idp-module arm is braced like its sibling, so the scanner sees
  the `new` construction in the arm after it.
- instance-noun-neutrality mcp: the a2a client cell's rationale (and its capability-equality row)
  names no other plane.
- hold-escapes: host_disk.rs::start (#864's disk lane job loop) is a reviewed known site.
- hook-parity-count: the TODO's M4 row reads 181.
- design-bindings: PB-50's config.migrate family is 158 cells (#1026 added two).
- kind-isolation law0: busbar auth 24, instance:auth 10, instance:export 25, plane 525, transport 97
  are the merged tree's measure (#1038's figures were T+O-B over a virtual base carrying #993, #1017,
  #1020, which w2 does not carry); busbar-contract export 1 -> 0 and transport 226 -> 225 (slack).
@MattJackson
MattJackson merged commit 8572fd1 into predev Oct 15, 2026
1 check was pending
@MattJackson
MattJackson deleted the lane-llm-responses-webhook branch October 15, 2026 13:54
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