Skip to content

row 155 B1b: the resolved provider carries its plane keys as one opaque table under the neutral merge - #957

Draft
MattJackson wants to merge 3 commits into
predevfrom
lane-p3-llm-b1b-resolved-provider
Draft

MattJackson wants to merge 3 commits into
predevfrom
lane-p3-llm-b1b-resolved-provider

Conversation

@MattJackson

Copy link
Copy Markdown
Collaborator

Row 155 B1b. Not a money ($) change. DRAFT, stacked on #937 (B1a) per queue rule 19: its head carries #937's commit. When #937 lands I'll merge origin/predev and ask for the undraft. Not run locally: only cargo fmt; ModernCI is the proof.

What (ARCHITECT ruling B1b, option (b))

  • config::providers::ResolvedProvider is new and is not Deserialize. RootCfg::providers now holds it.
    • Typed fields: the keys the kernel owns, CORE_PROVIDER_KEYS. These are base_url, path and path_base (destination facts, per the ruling and 1.5.5 config_validate:406,430), api_key with its outbound-auth binding (auth, token_url, scope, subject; THE DESIGN §6), health and allow_metadata_hosts.
    • Every other key of the entry rides as one opaque ProviderTable.
    • Governing lines: BUSBAR-1.6.0.md ci: close the gaps the 1.5.3 release found, at the root #49 ("The kernel knows NO plane or transport STRINGS"); THE DESIGN §4 ("its dialect fields go to the planes that use the provider").
  • The neutral merge (merge_tables). Where both sides hold a string map, it merges member by member and the deployment's member wins. Every other value the deployment sets replaces the catalog's. This is 1.5.5's merge (the error map unioned, every other key an override) stated without naming a key.
  • ProviderCfg stays the frozen v1.5.3 parse shape.
    • No waivers. The config-schema snapshot is unchanged: the new type is not Deserialize, and the grammar types only gain a Serialize derive, which the fingerprint does not read (derive_list(..).contains("Deserialize")).
  • The resolve_provider hook. merge_provider_fallback and PlaneDecl::resolve_provider return the resolved type. The legacy llm crate's hook delegates to the neutral merge; that is the smallest shim, and it goes with that crate.

Readers

  • root::door_steps::kernel_sections hands the plane its table as written, plus path, path_base and the auth style. The root's per-key projection (organization, project, the lane-capability keys and their output_key mapping) is deleted. The one byte difference: an empty catalog model_capabilities now arrives as [] instead of absent. The plane reads it with #[serde(default)], so it means the same thing.
  • Transitional reads. provider_routes, the kernel door's dialect facts and config_validate read the dialect word and the error map through two TRANSITIONAL accessors, ResolvedProvider::dialect and ResolvedProvider::error_map, which drain at B1c.
    • Every refusal keeps its text and its position in the per-provider sweep. B1a's pins hold them.
    • The contract key MODEL_PROTOCOL_KEYS[0] names the dialect key; the kernel spells no new one.
  • Legacy lane carrier. It reads its tenant and lane-capability keys off the table (plane_host::LegacyLaneKeys, TRANSITIONAL, goes with the legacy llm crate).
  • Secret walk. secret_refs walks ResolvedProvider, and ProviderCfg is inventoried NotInResolvedConfig. The inventory test now matches a type's whole name: before, IdentityProviderCfg { counted as a destructure of ProviderCfg.

RED

config::resolved_provider_tests::the_resolved_provider_carries_the_plane_keys_as_one_table_merged_by_the_neutral_rule. On base there is no table; every plane key was a typed field. Beside it: the_neutral_merge_rule_is_stated_by_shape_alone and an_unset_or_empty_deployment_leaves_the_catalog_table.

Rows

No gate row measures these fields (the "53 kernel hits" is no ledger row), and no ceiling moves:

  • No plane or vendor noun is added or removed in a measured crate.
  • The vendor scan does not split _-joined identifiers.

Queue rule 20 (widened by the ruling)

crates/busbar/src/root/door_steps.rs hunks are disjoint from #833, #841, #863 and #876:

  • kernel_sections provider loop, l.1310-1380.
  • RouteFacts inserted before provider_routes, l.1530.
  • The provider_routes signature, plus one inserted .map after .iter().
  • for_provider(&p).

git merge-tree of this head with origin/predev and with each of those four PR heads is clean. appbuild.rs and config_validate/mod.rs hunks are also disjoint from #876, #863 and #832.

…the provider dialect keys are pinned (row 155 B1a)

The kernel named a dialect as the serde default for an omitted provider `protocol:`
(config/providers.rs, `DEFAULT_PROTOCOL = "anthropic"`). BUSBAR-1.6.0.md #49: the kernel
contains zero transport-protocol literals; THE DESIGN §4: a plane receives the dialect fields of
the providers it references and resolves model -> dialect itself. The const and its
`default_protocol()` are deleted; `ProviderCfg::protocol` is `#[serde(default)]` (empty, the
kernel fills in no dialect). Only a direct `ProviderCfg` parse reached that default (tests); the
catalog's `ProviderDef::protocol` is required, so every resolved provider carries the catalog's
dialect and no customer-visible byte moves. The config-schema snapshot already records the field
as optional and does not change.

RED: config::tests::an_omitted_provider_protocol_names_no_dialect_in_the_kernel (base: the
omitted key read the kernel's dialect name).

Pins (coordinator guard: the dialect keys' validation stays byte-identical to 1.5.5):
config/tests/provider_refusal_pins.rs pins the 1.5.5 refusals of protocol, error_map, path and
path_base no oracle cell or test pinned: the deployment invalid-type sentences at their
positions, the catalog missing-`protocol` sentence, and the composed base_url+path /
base_url+path_base metadata refusals (v1.5.5 crates/busbar/src/config_validate/mod.rs:406, :430).

Rows drained:
- qa/c1-literals.toml: the c1-literals:literal finding providers.rs `anthropic` struck.
- qa/construction.toml: known_site `crates/busbar-kernel/src/config/providers.rs :: anthropic` struck.
- scripts/plane-grep-gate.sh: the `anthropic|...providers.rs|DEFAULT_PROTOCOL` ALLOWLIST row struck
  (it would suppress nothing and fail the dead-row check).
- one plane-purity frozen-wire pragma (providers.rs) and its test-scope twin deleted.
…ble under the neutral merge (row 155 B1b)

ARCHITECT ruling B1b, option (b): a new non-Deserialize resolved type,
`config::providers::ResolvedProvider`, is what `RootCfg::providers` holds. It types the keys the
kernel owns (CORE_PROVIDER_KEYS: base_url, path, path_base, api_key, auth, token_url, scope,
subject, health, allow_metadata_hosts) and carries every other key of the entry as one opaque
`ProviderTable`. The catalog and deployment tables merge by one neutral rule (`merge_tables`): a
string map merges member by member with the deployment's member winning, every other value the
deployment sets replaces the catalog's. That is 1.5.5's merge stated without naming a key.
BUSBAR-1.6.0.md #49; THE DESIGN §4 ("its dialect fields go to the planes that use the provider").

`ProviderCfg` stays the frozen v1.5.3 whole-entry parse shape (no config-schema change: the
resolved type is not Deserialize; the grammar types gain only a Serialize derive, which the
fingerprint does not read). `merge_provider_fallback` and the PlaneDecl::resolve_provider hook
return the resolved type; the legacy llm crate's hook delegates to the neutral merge (the
smallest shim).

Readers:
- root door_steps::kernel_sections hands the plane its table as written plus the two destination
  facts and the auth style; the root names none of the plane keys (the per-key projection and its
  `output_key` mapping are deleted).
- provider_routes, door.rs dialect facts and config_validate read the dialect word and the error
  map through two TRANSITIONAL accessors (ResolvedProvider::dialect / error_map) that drain at
  B1c; every refusal keeps its text and its position in the sweep.
- the legacy lane carrier reads its tenant and lane-capability keys off the table
  (plane_host::LegacyLaneKeys, TRANSITIONAL, goes with the legacy llm crate).
- secret_refs walks ResolvedProvider; ProviderCfg is inventoried NotInResolvedConfig. The
  inventory test now matches a type's whole name (`IdentityProviderCfg {` is not a destructure
  of `ProviderCfg`).

RED: config::resolved_provider_tests::the_resolved_provider_carries_the_plane_keys_as_one_table_merged_by_the_neutral_rule
(base: there is no table; every plane key was a typed field).

Stacked on #937 (B1a).
…one (coordinator ruling: the [] vs absent difference is internal; pin the equivalence)
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 added a commit that referenced this pull request Oct 15, 2026
…erialize; call-binding's mint finder iterates its tokens

- busbar-kernel ir/lane_caps.rs: MaxOutputKeyCfg and ModelCapabilities derive Serialize, as #957's
  ProviderCfg/ProviderDef/ProviderDeploy Serialize derives need (E0277 x6 on every cargo check). The
  config-schema fingerprint reads Deserialize shapes only.
- xtask call_binding (#1029): unbound_mints walks tokens.iter().enumerate().skip(3)
  (clippy needless_range_loop).
MattJackson added a commit that referenced this pull request Oct 15, 2026
…eld; clippy; the six Law 0 cells the merge grew; config-schema snapshot

- busbar-core-connector dialled.rs (#837 over #893's Piece): the datagram leg's body piece states
  `fault: None` and `declared_len: None` (E0063).
- busbar-kernel appbuild: build_app_from_config takes the root's rules as an eighth input (#1001);
  allowed too_many_arguments with that reason. plugin-loader secret_disk_tests: let-else for the
  refused declare (clippy err_expect).
- Law 0 growth over the merge-base (gates log of 3598829 and the group measures):
  kernel x plane: the failover predicate's docs and test say verdict, not decision (#890);
  kernel x instance:secret: the two new SecretRef literals key on SECRET_MODULE_ENV (#863/#864);
  kernel x auth: the resolved provider's and the token endpoint's docs name the client-credentials
  style without spelling the module (#957, #876);
  connector x transport: spawn_env's doc says program members (#865);
  contract x plane: section.rs's trust_from doc names a plane's push trust (#1001);
  busbar x vendor: the health-probe cell's catalog entry is testing/root-fixtures data (#1039);
  busbar x instance:secret: the pinned-cells selftest builds its fixture citing the pinned file
  rather than re-keying it (#1006).
- config-schema: the RAW carrier records each section as the map's value type; the snapshot gains
  DeployCfg.agent_push (serde_yaml::Value, #1001), ProviderLaneCaps (its Deserialize, round 2) and
  the `type ProviderTable` alias (#957).
- qa/scripts-allowlist.toml: the three twilio conformance legs (#998), oracle-driver like their
  siblings.
MattJackson added a commit that referenced this pull request Oct 15, 2026
…onns wrapper follow the merged shapes

From the full logs of 2382599:
- root door_steps PresentingConns: bind_auth/auth_of take and hand on the registration `member`
  (the connector's per-member binding, DeclaredConns; E0050/E0061 x2 each).
- root tests: the datagram cell's Got states fault/declared_len/end (#893 over #837); the two
  upgrade-row builds take the settings alone (HostWire build, #932 over #997); the two userinfo
  cells hand provider_routes a ResolvedProvider (#957 over #876/#936).
- tests/plane_blackbox.rs: the step's (key, text) pairs are a type (clippy type_complexity).
- config-schema snapshot: `type WakeTicket` is now an alias of ConnWake (#1018), recorded.
- Law 0: busbar x instance:export 25 -> 24 (measure); kernel x plane: a test doc names a plane's
  own webhooks section, not the llm plane's (1050 measured against w2's 1049).
MattJackson added a commit that referenced this pull request Oct 15, 2026
… from the kernel; four clippy findings

- busbar-llm provider_keys_drift_tests: ProviderCfg comes from busbar_kernel::config::providers;
  build_runtime re-exports ResolvedProvider since #957 (E0432).
- busbar build.rs: the generated DOOR_CELLS rows are a named type, DoorCellsRow (type_complexity).
- root serve.rs Attach: its admitted hook is the OnAdmitted type; root tests door_steps: the token
  endpoint's recorded head fields are HeadFields (type_complexity).
- root tests registry: let-else for the uncomposable refusal (err_expect).
MattJackson added a commit that referenced this pull request Oct 15, 2026
…ippy build named (bundle of d543b25)

- busbar-kernel tests: the rehomed lane-caps cells (#912) and the tenant merge cell read the
  resolved entry's table through LegacyLaneKeys, as #957's resolved provider carries the plane keys
  (E0599 lane_caps_for x15, E0609 organization/project x3).
- busbar-core-connector tests: the wake closures take (instance, ticket) (ConnWake since #1018,
  E0593 x3); the datagram head piece states fault/declared_len (E0063).
- busbar-plane-llm tests/conformance.rs: hydrate and start are the plane kind's slots (E0425).
- busbar-contract tests/object_safety.rs: StreamId is no longer imported (unused since #932).
- voice-conformance harness twilio_legs: std::slice::from_ref (clippy cloned_ref_to_slice_refs).
MattJackson added a commit that referenced this pull request Oct 15, 2026
…036f0; five stale segment-debt rows

- busbar-plane-llm tests/conformance.rs: the door-unit module no longer imports the lifecycle slots
  (its hydrate/start are the plane kind's since round 7).
- busbar-kernel tests: bound_credential_tests' recorded serving is the Asked type
  (type_complexity); engine_tests hands from_static the &'static str by auto-deref.
- qa/segment-debt.toml: the five anthropic_adaptive_thinking rows in appbuild.rs, config/mod.rs and
  config_validate/secret_refs.rs are struck: #957 drained those lines (the plane keys ride the
  resolved provider's table). Drain-only; no row added.

This branch has not been deployed

No deployments
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