Repository navigation
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
Draft
MattJackson wants to merge 3 commits into
MattJackson wants to merge 3 commits into
Conversation
…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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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::ResolvedProvideris new and is notDeserialize.RootCfg::providersnow holds it.CORE_PROVIDER_KEYS. These arebase_url,pathandpath_base(destination facts, per the ruling and 1.5.5config_validate:406,430),api_keywith its outbound-auth binding (auth,token_url,scope,subject; THE DESIGN §6),healthandallow_metadata_hosts.ProviderTable.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.ProviderCfgstays the frozen v1.5.3 parse shape.Deserialize, and the grammar types only gain aSerializederive, which the fingerprint does not read (derive_list(..).contains("Deserialize")).resolve_providerhook.merge_provider_fallbackandPlaneDecl::resolve_providerreturn 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_sectionshands the plane its table as written, pluspath,path_baseand theauthstyle. The root's per-key projection (organization, project, the lane-capability keys and theiroutput_keymapping) is deleted. The one byte difference: an empty catalogmodel_capabilitiesnow arrives as[]instead of absent. The plane reads it with#[serde(default)], so it means the same thing.provider_routes, the kernel door's dialect facts andconfig_validateread the dialect word and the error map through two TRANSITIONAL accessors,ResolvedProvider::dialectandResolvedProvider::error_map, which drain at B1c.MODEL_PROTOCOL_KEYS[0]names the dialect key; the kernel spells no new one.plane_host::LegacyLaneKeys, TRANSITIONAL, goes with the legacy llm crate).secret_refswalksResolvedProvider, andProviderCfgis inventoriedNotInResolvedConfig. The inventory test now matches a type's whole name: before,IdentityProviderCfg {counted as a destructure ofProviderCfg.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_aloneandan_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:
_-joined identifiers.Queue rule 20 (widened by the ruling)
crates/busbar/src/root/door_steps.rshunks are disjoint from #833, #841, #863 and #876:kernel_sectionsprovider loop, l.1310-1380.RouteFactsinserted beforeprovider_routes, l.1530.provider_routessignature, plus one inserted.mapafter.iter().for_provider(&p).git merge-treeof this head with origin/predev and with each of those four PR heads is clean.appbuild.rsandconfig_validate/mod.rshunks are also disjoint from #876, #863 and #832.