Repository navigation
row 155 B2: the protocol seam names no http type; head fields and u16 statuses, the kernel converts at its edges (TODO 34c (a)) - #974
Open
MattJackson wants to merge 2 commits into
Open
MattJackson wants to merge 2 commits into
MattJackson wants to merge 2 commits into
Conversation
…2, TODO 34c; BUSBAR-1.6.0.md Part 2 #49) protocol.rs names http::HeaderMap (ClaimsFn, attach_error_response_headers), http::HeaderName/HeaderValue (EgressAuthHeaders, header_map) and http::StatusCode (quota_exceeded_status, auth_failure_status_and_kind). This source scan fails on each of those lines until the seam drains.
…he kernel converts at its edges (TODO 34c drain (a)) BUSBAR-1.6.0.md Part 2 #49 (core names zero plane types) and Part 4 (every ABI shape in busbar-contract is neutral): protocol.rs names no http type. - ClaimsFn takes HeadFields; claims fns read a field through the new protocol::head_field (first legal value, name in any case), which is what the struck header_map + HeaderMap::get/contains_key read. Bedrock's SigV4 sniff keeps to_str's visible-ASCII condition (is_ascii on a legal value). - DialectCodec::attach_error_response_headers is struck; error_response_fields is the required method. busbar-plane-llm's DialectRef builds its writer's header map on its own side; proxy::ingress_error inserts the pairs. - quota_exceeded_status and auth_failure_status_and_kind are u16; the kernel converts in ingress::limit_refusal and proxy::auth_failure_status_and_kind (same fallbacks). - EgressAuthHeaders returns (String, Vec<u8>) pairs; bound_credential's DeclaredBuilder converts them. - detect_protocol (proto/installed.rs) hands the claims fold its HeaderMap as field pairs, in the map's order. codec.rs's WireBody and the `pub use http` re-export stay. Header order, multiplicity, case and statuses are unchanged from 1.5.5.
This was referenced Oct 14, 2026
Open
Open
Collaborator
Author
|
#1028 (row 155, codec host services) is stacked on this PR: it threads |
Collaborator
Author
|
Rule 20 note from #1030 (row 155): disjoint hunk in crates/busbar-kernel/src/proto/installed.rs ( |
Collaborator
Author
|
Rule 20 note from #1031 (row 155, draft): disjoint hunks in installed.rs (arm_host_services drops the cap reader), gemini/mod.rs, openai_responses/mod.rs and proto_codec.rs (the writer's translate_cap). A test merge is clean. |
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.
What
Row 155 "B2", TODO row 34c drain (a):
crates/busbar-contract/src/protocol.rsnames nohttptype. BUSBAR-1.6.0.md Part 2 #49 ("core names zero plane types") and Part 4 (every ABI shape lives in busbar-contract and is neutral). Design approved by the ARCHITECT as briefed.The seam
ClaimsFn = fn(&http::HeaderMap, &str)fn(HeadFields<'_>, &str); claims fns read through the newprotocol::head_field(first field whose value is a legal header value, name matched in any case), which is what the struckheader_map+HeaderMap::get/contains_keyreadDialectCodec::attach_error_response_headers(&mut http::HeaderMap, ..)plus a defaultederror_response_fieldsattach_error_response_headersstruck;error_response_fieldsis the required methodEgressAuthHeaders -> Vec<(HeaderName, HeaderValue)>-> Vec<(String, Vec<u8>)>quota_exceeded_status: http::StatusCode,auth_failure_status_and_kind: (http::StatusCode, &str)u16,(u16, &str)header_map(HeadFields -> HeaderMap)codec.rs'sWireBodyand thepub use httpre-export stay.Callers moved (the kernel converts at its edges)
busbar-kernel/src/proto/installed.rsdetect_protocol: the HeaderMap goes to the claims fold as field pairs, in the map's order (a name's first value first), throughProtocolDecl::claim_over.busbar-kernel/src/proxy/mod.rs:ingress_errorinsertserror_response_fieldspairs (the writersinsertunique names, so order and multiplicity are the same);auth_failure_status_and_kindconverts theu16(same 401 fallback).busbar-kernel/src/ingress/mod.rslimit_refusal: the twoquota_exceeded_statusreads convert theu16(same 429 fallback).busbar-kernel/src/bound_credential.rsDeclaredBuilder::headers_for: converts the plane's pairs to headers.busbar-plane-llm/src/codec/proto_codec.rsDialectRef::error_response_fields: builds its writer's header map on the plane side.ProtocolWriter::attach_error_response_headersand the writers are untouched.busbar-plane-llm/src/codec/{anthropic,bedrock,cohere,gemini,openai_chat,openai_responses}/mod.rs:claimssignatures and bodies, and the two status fields as.as_u16(). Bedrock's SigV4 sniff keepsto_str's visible-ASCII condition (is_asciion a legal value).busbar-plane-llm/src/exchange/reply/failure.rs: reads theu16directly.busbar-voice/src/lib.rs(decl statuses,voice_egress_auth_headers) andtests/egress_tests.rs.src/tests/proto.rs,src/proto/tests/neutral_protocols.rs.Customer-visible behaviour is identical to 1.5.5: header order, multiplicity, case and statuses are unchanged.
RED
crates/busbar-contract/tests/protocol_names_no_plane_type.rs, committed first (e2b7051): a source scan ofprotocol.rsforhttp::/use http. Against predev it lists theuse http::{..}line,ClaimsFn,attach_error_response_headers,EgressAuthHeaders, both status fields and the twonamed()status values. The fix commit addsa_head_field_is_the_first_legal_value_under_its_name_in_any_case(case-insensitive name, a control-byte value passed over, tab legal, DEL illegal).Overlap check (queue rule 20, widened)
git merge-tree --write-treeof this head againstorigin/predev41fd7c5 and each overlapping PR head:claimsfns and the two DECL status rows in mod.rs, and theDialectRefimpl in proto_codec.rs.auth_failure_status_and_kindand the tail ofingress_error.DeclaredBuilder::headers_foronly.crates/busbar-voice/src/lib.rsandsrc/tests/egress_tests.rs. FLIP-STREAMING: the streaming plane served through its door; busbar-voice deleted #503 deletes busbar-voice; predev's voice crate has to compile against the new field types, so the edit can't be avoided. Whichever lands second keeps the deletion.None of those PRs adds a new use of the moved shapes (their diffs were scanned for the seam names).
Not run locally
cargo build/test/clippy and xtask were not run on the laptop (queue rule 3).
cargo fmtwas run on the four touched crates. ModernCI is the proof.