Skip to content

row 155 B1c-1: the plane states its provider keys as a neutral descriptor in its Statement (dormant seam) - #981

Merged
MattJackson merged 1 commit into
predevfrom
lane-p3-llm-b1c1-provider-descriptor
Oct 15, 2026
Merged

MattJackson merged 1 commit into
predevfrom
lane-p3-llm-b1c1-provider-descriptor

Conversation

@MattJackson

Copy link
Copy Markdown
Collaborator

Row 155 B1c-1. Not a money ($) change. Dormant: customer-visible behaviour is unchanged; nothing parses a provider entry from the descriptor yet. Not run locally: only cargo fmt; ModernCI is the proof.

The seam (ARCHITECT ruling "Option A", coordinator-approved B1c-1/B1c-2 split)

A provider entry's plane-owned keys are DATA the plane declares through its Statement. They use a neutral shape vocabulary, are listed per form in frozen order, and each carries a required flag. Core holds no plane key name.

  • busbar-contract provider_keys.
    • Types: ProviderKeys { catalog, deployment, entry }. Each form is a Table { deny_unknown, keys }; each Key { name, shape, required }.
    • Shape has seven words: str, one-of, int, bool, list, str-map, table (a nested struct with its keys and deny_unknown).
    • JSON encode/decode under the ONE Statement-extensions key provider_keys (EXT_PROVIDER_KEYS). decode refuses any other shape word, unstated or missing members, a key named twice, and an empty or repeated one-of.
    • abi::mechanism::extensions::{entry, entry_len} build one extensions entry at compile time, because a door's Statement is const data.
  • busbar-plane-llm. meta::PROVIDER_KEYS states the three forms.
    • Each form's keys are read off ProviderDef / ProviderDeploy / ProviderCfg in field order, with the core keys left out (row 155 B1b: the resolved provider carries its plane keys as one opaque table under the neutral merge #957's base_url, path, path_base, api_key, auth, token_url, scope, subject, health, allow_metadata_hosts).
    • Plane keys: protocol, error_map, organization, project, max_output_key (one-of max_tokens|max_completion_tokens), anthropic_adaptive_thinking, native_structured_output, model_capabilities (a list of a deny-unknown table, from ModelCapabilities).
    • Required flags: catalog protocol, entry error_map, rule models.
    • Unknown keys: the catalog passes them over; deployment and entry refuse them.
    • The door's Statement carries the descriptor in extensions (octets).
  • plugin-loader. ServedFacts::provider_keys is read off the Statement's extensions and judged at bind. PlaneRegistration::provider_keys is the new field; the other construction sites are updated.
  • busbar-kernel. The door fold keeps the descriptor (inside its PlaneRegistration). plane::door::provider_keys() reads it. Nothing consumes it: it is unwired seam U19 in the TODO's table, wiring owner B1c-2.

Tests

  • Round trip: busbar-contract provider_keys_tests::a_descriptor_round_trips_through_its_encoding (encode, decode, equal), plus the_descriptor_is_read_off_the_one_extensions_key.
  • RED: a_non_neutral_shape_word_is_refused. secret, string, duration, {enum: …}, a non-neutral word inside a list and one inside a nested table are each refused, naming the word and the vocabulary. the_encoding_states_exactly_its_members covers the closed encoding.
  • Drift guard (busbar-llm engine::provider_keys_drift_tests): busbar-llm is where both the frozen structs and the plane are reachable, and the guard adds no busbar_kernel:: line.
    • Each form's declared keys equal the frozen struct's serde field order with the core keys filtered out. The order is read off the derived reader itself by a field-recording deserializer.
    • It also checks each required flag (missing field), each shape (every key written in its shape parses), each one-of's words and their order (serde's unknown variant … expected …), and each table's unknown-key rule, nested tables included.
  • Plane: tests/provider_keys.rs. The door's rendered Statement carries the descriptor byte for byte under the key, and the one loader's registration hands it on decoded.
  • Kernel: door_tests::the_provider_keys_a_door_states_are_kept_by_the_fold.
  • extensions_tests::an_entry_built_at_compile_time_is_the_encoded_entry.

Rows

No ledger row moves. The kernel and contract text names no plane package or id (kind-isolation presence unchanged). No kernel string literal is added outside tests, and the test literals are neutral words. No busbar_kernel:: line is added in a plane crate.

Queue rule 20

Hunks are disjoint from the open PRs on the same files (#959, #931 TODO; #897 plane_calls.rs; #890 plane_door.rs; drafts #957, #966, #960, #891). git merge-tree against each and origin/predev is clean.

…ptor in its Statement; the loader and the kernel's door fold keep it (dormant)

ARCHITECT ruling "Option A": a provider entry's plane keys are DATA the plane
declares through its Statement, in a neutral shape vocabulary, per form, in
frozen order, each with a required flag; core holds no plane key name.

- busbar-contract: provider_keys (ProviderKeys / Table / Key / Shape: str,
  one-of, int, bool, list, str-map, table), its JSON encode/decode under the
  one Statement-extensions key `provider_keys`; decode refuses any other shape
  word. extensions::entry/entry_len build an entry at compile time.
- busbar-plane-llm: meta::PROVIDER_KEYS states the catalog, deployment and
  entry forms (ProviderDef, ProviderDeploy, ProviderCfg field order, the
  kernel's keys left out; model_capabilities a nested deny-unknown table);
  the door's Statement carries it in its extensions.
- plugin-loader: ServedFacts / PlaneRegistration::provider_keys, judged at bind.
- busbar-kernel: the door fold keeps it; plane::door::provider_keys() reads it.
  Nothing consumes it: unwired seam U19, wiring owner B1c-2.

Tests: the contract round trip and the RED for a non-neutral shape word; the
plane's door and the loader carry the declared descriptor; the kernel fold
keeps it; the drift guard (busbar-llm) holds each form's declared keys to the
frozen struct's serde field order, required flags, shapes, one-of words and
unknown-key rule.
@MattJackson

Copy link
Copy Markdown
Collaborator Author

#1028 also edits crates/busbar-llm/src/engine/mod.rs (adds CODEC_HOST to the use busbar_kernel::{..., proto::...} group) and crates/busbar-plane-llm/src/plane_door.rs (DoorHost; attempt/far_end/answer/refusal slot take the host). Disjoint hunks, test merge clean.

@MattJackson

Copy link
Copy Markdown
Collaborator Author

Rule 20 note from #1030 (row 155): disjoint hunks in crates/busbar-plane-llm/src/plane_door.rs (the abi::plane import, Answer.tap_fault, to_caller, deliver). A test merge is clean.

@MattJackson

Copy link
Copy Markdown
Collaborator Author

Rule 20 note from #1031 (row 155, draft): one more disjoint line in plane_door.rs (far_end's ReplyCtx gains translate_cap). A test merge is clean.

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 15e7555 into predev Oct 15, 2026
1 check was pending
@MattJackson
MattJackson deleted the lane-p3-llm-b1c1-provider-descriptor branch October 15, 2026 05:33
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