Repository navigation
row 130 E6: the plugins.fetch download leaves busbar-kernel and rides the one connector (stacked on #804) - #805
MattJackson wants to merge 35 commits into
Conversation
…t, as 1.5.5 did ARCHITECT ruling 2026-10-12: the kernel engine's proxy behaviour moves into the connector unchanged, so every dial through the connector honours HTTPS_PROXY / HTTP_PROXY / ALL_PROXY / NO_PROXY exactly as 1.5.5's reqwest clients did. The connector and the transport plugins had no proxy support, so every dial already on the connector (the door planes, oidc, cimd) went direct past a configured proxy. - busbar-core-connector/src/proxy.rs: the engine's decision moved verbatim (busbar-kernel egress/engine/mod.rs `mod tunnel`): scheme-scoped slots with the ALL_PROXY fallback, uppercase before lowercase, NO_PROXY's full rule set (host, domain suffix, IP literal, CIDR), Basic Proxy-Authorization from userinfo, an https:// proxy and a garbage value refused without echoing the password; the CONNECT request bytes and the 2xx / 8 KiB answer rule of the engine's connect_handshake. - compose.rs: a dial through a proxy connects to the proxy, writes the CONNECT request before anything else, reads the proxy's head raw (under the 10 s CONNECT bound), then runs the secure layer (the target's name and certificate) and the framer over the tunnel. Bytes after the head are the target's. - lib.rs: Connector::proxying; a FRAMED dial (never a carrier carried as itself, as 1.5.5's drivers never used a proxy) not pinned `within` an address set, to a host the scheme's slot has a proxy for and NO_PROXY does not exclude, is judged in two steps: the target (its name arm, and its own resolution when it resolves here; a name that does not resolve here goes to the proxy, the engine's tunnelled arm), then the proxy's address with reach (a private proxy admitted, cloud metadata never). process::build reads the environment once; a set value that does not parse refuses the boot, as the engine's install did. - Tests (src/tests/proxy_tests.rs): the engine's semantics rows ported (precedence, garbage, NO_PROXY suffix and IP/CIDR matrix, scheme scoping, password redaction, the answer rule), and end to end through Connector::open: a framed dial to a name only the proxy resolves writes exactly `CONNECT upstream.test:8080 HTTP/1.1`, `Host`, the Basic credential, and its exchange rides the tunnel; RED arms: a 407 refuses the exchange; a NO_PROXY host and a raw-stream need dial direct and the proxy is never asked; with no proxy a name nothing resolves is refused.
promote into
|
| crate | test | step | first panic |
|---|---|---|---|
| `` | clippy rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:root-test-harness | |
| `` | test rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:root-test-harness | |
| `` | clippy rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:timing | |
| `` | clippy rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:core-duplex-ws | |
| `` | clippy rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:oauth2-test-support | |
| `` | clippy rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:single-plane-decision | |
| `` | test rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:single-plane-decision | |
| `` | clippy rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
build:clippy | |
| `` | clippy rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:admin-test-support | |
| `` | clippy rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:single-plane-mcp | |
| `` | test rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:single-plane-mcp | |
| `` | clippy rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:dropped-in-tcp-transport | |
| `` | clippy rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:no-default-features | |
| `` | test rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:no-default-features | |
| `` | clippy rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:openapi-schema | |
| `` | test rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:openapi-schema | |
| `` | nextest rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:workspace | |
| `` | xtask rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:teller-steps-root-legs | |
| `` | clippy rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:single-plane-a2a | |
| `` | test rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:single-plane-a2a | |
| `` | clippy rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:single-plane-voice | |
| `` | test rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:single-plane-voice | |
| `` | check rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
build:workspace-compile | |
| `` | clippy rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:loader-pack | |
| `` | clippy rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:contract-test-seal | |
| `` | clippy rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:single-plane-llm | |
| `` | test rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs |
test:single-plane-llm |
Denied because (20)
- shard 1/4: gate:test:core-duplex-ws: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs)
- shard 1/4: gate:test:oauth2-test-support: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs)
- shard 1/4: gate:test:root-test-harness: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs, test: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs)
- shard 1/4: gate:test:single-plane-decision: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs, test: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs)
- shard 1/4: gate:test:timing: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs)
- shard 1/4: gate:test:xtask-selftest row xtask: selftest no-deferral: red now, not red at base
- shard 2/4: gate:build:clippy: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs)
- shard 2/4: gate:test:admin-test-support: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs)
- shard 2/4: gate:test:dropped-in-tcp-transport: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs)
- shard 2/4: gate:test:no-default-features: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs, test: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs)
- shard 2/4: gate:test:openapi-schema: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs, test: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs)
- shard 2/4: gate:test:single-plane-mcp: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs, test: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs)
- shard 3/4: gate:test:single-plane-a2a: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs, test: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs)
- shard 3/4: gate:test:single-plane-voice: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs, test: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs)
- shard 3/4: gate:test:teller-steps-root-legs: green at base, red now (xtask: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs)
- shard 3/4: gate:test:workspace: green at base, red now (nextest: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs)
- shard 4/4: gate:build:workspace-compile: green at base, red now (check: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs)
- shard 4/4: gate:test:contract-test-seal: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs)
- shard 4/4: gate:test:loader-pack: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs)
- shard 4/4: gate:test:single-plane-llm: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs, test: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs)
Judged against base 427ff692f: 20 new red, 0 worse, 6 standing (excused).
New reds: gate:test:core-duplex-ws: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs), gate:test:oauth2-test-support: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs), gate:test:root-test-harness: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs, test: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs), gate:test:single-plane-decision: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs, test: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs), gate:test:timing: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs), gate:test:xtask-selftest row xtask: selftest no-deferral: red now, not red at base, gate:build:clippy: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs), gate:test:admin-test-support: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs), gate:test:dropped-in-tcp-transport: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs), gate:test:no-default-features: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs, test: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs), gate:test:openapi-schema: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs, test: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs), gate:test:single-plane-mcp: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs, test: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs), gate:test:single-plane-a2a: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs, test: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs), gate:test:single-plane-voice: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs, test: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs), gate:test:teller-steps-root-legs: green at base, red now (xtask: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs), gate:test:workspace: green at base, red now (nextest: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs), gate:build:workspace-compile: green at base, red now (check: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs), gate:test:contract-test-seal: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs), gate:test:loader-pack: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs), gate:test:single-plane-llm: green at base, red now (clippy: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs, test: rustc error[E0308]: mismatched types @ crates/busbar/src/root/tests/boot.rs)
Already red on predev, not this PR's: 15
| gate | row | detail |
|---|---|---|
| test:xtask-selftest | ::xtask selftest kind-isolation |
|
| test:xtask-selftest | ::xtask selftest no-deferral |
|
| test:xtask-selftest | ::xtask selftest plane-purity |
|
| test:xtask-selftest | ::xtask selftest no-deferral-strict-done |
|
| test:xtask-selftest | ::xtask selftest plane-purity-strict |
|
| test:xtask-selftest | ::xtask selftest unconstructed |
|
| test:xtask-selftest | ::xtask selftest plane-transport-neutrality |
|
| construction | one-pick-site |
3 production call site(s) of 'pick_among(' (ceiling 2): crates/busbar-kernel-egress/src/walk.rs:358; crates/busbar-llm/src/engine/exhaustion/fallback.rs:120; crates/busbar-llm/src/engine/pipeline.rs:8 |
| kind-isolation | kind-isolation:deps |
3 finding(s), 92 shipped edge instance(s) over 29 class(es), 92 declaration(s); 55 '[[dep]]' row(s), 0 question(s): unlisted-dep-edge legacy -> plane busbar-llm -> busbar-plane-llm is a shipped edge w |
| kind-isolation-ship | kind-isolation:deps |
8 finding(s) over 92 shipped edge(s): ship-edge kernel -> store busbar-kernel -> busbar-store-memory is 'not-allowed': the architecture grants no kernel -> store edge, and the ship criterion is the ar |
| kind-isolation-ship | kind-isolation:test-deps |
5 finding(s) over 31 test edge(s): ship-edge cleanliness -> export busbar-core-admin -> busbar-export-prometheus is 'not-allowed': the architecture grants no cleanliness -> export edge, and the ship c |
| kind-isolation-ship | kind-isolation:faces |
2 finding(s) over 40 crate(s): foreign-entry crates/busbar busbar is kind 'root' and implements 'Transport' 1 time(s) in shipped source — the entry face of kind 'transport'. A trait implementation is |
| kind-isolation-ship | kind-isolation:legacy-drain |
3 finding(s): transitional-live qa/kind-isolation.toml 'busbar-a2a -> busbar-core-admin' (legacy drain: the retiring A2A engine's tests drive the admin surface that drained into the cleanliness tier) |
| ship-ready | ship-ready:ship-twin |
'kind-isolation-ship' is not green: kind-isolation:deps (a dependency the architecture does not grant is still in the graph); kind-isolation:test-deps (a dependency the architecture does not grant is |
| structure-lint | structure-lint:plane-dup:unledgered |
22 finding(s): PLANE-DUPLICATE (module): 'config.rs' — a2a:crates/busbar-a2a/src/a2a/config.rs decisions:crates/busbar-plane-decisions/src/config.rs voice:crates/busbar-voice/src/config.rs (the ledger |
tests passed: 33239, failed: 0. Run: https://github.com/GetBusbar/busbar/actions/runs/38384151676 . Artifact verdict-8be49add6c31cb95295315525f4b81239b62d84b (failures.json, junit.xml, raw.log; 90 days).
…d parameter secret-hygiene check 3 read connect_answer's `authority` parameter as a secret subject: the CONNECT target is `target` throughout (ProxySpec::endpoint for the proxy's own host:port). The kind-isolation law0 scan read the verbatim engine word for the proxy's choice as the decisions plane's bare id: it is `choice` here. Three comments say socket instead of naming a carrier.
… the one connector The kernel's last dial of its own, preflight::plugin_fetch_downloader (the engine on a cold one-shot posture), is deleted. The root downloads every plugins.fetch artifact through the process's one connector (BUSBAR-1.6.0.md §3 stage 3c, "fetch plugins through the connector"): crates/busbar/src/root/plugin_fetch.rs declares a provider-class need per URL scheme under the root's own identity (NeedId 1 and 2; 0 is the authorization server's) and sends one GET, so the connector's one guard judges and pins the address, the proxy environment applies (#804), and the http door writes the request with the client defaults 1.5.5's Client::new().get() sent: `accept: */*` before `host`. That is the oracle cell egress.fetch|plugins|url, known-red as egress-plugin-fetch-accept; its mark stays until ModernCI shows the cell green. What stays the download's own moves verbatim: https for a public host and plaintext only for a loopback or private one, the cloud-metadata denylist extended by security.blocked_metadata_hosts, no redirect followed, a declared Content-Length over the cap refused before a body byte and the body counted against the cap, every refusal in 1.5.5's words, and the dedicated thread with its own current-thread runtime. The kernel's PluginsFetch row now hands the root the operator's denylist instead of a downloader; the kernel test build's stand-in refuses every download (it has no connector). Tests: the kernel's two downloader tests move to root/tests/plugin_fetch.rs, driven over a connector of the build's linked doors against scripted loopback far ends (an honest and an absent Content-Length over the cap, a within-cap body byte for byte, a redirect refused in its 1.5.5 words), plus the wire row (exactly `GET <path>`, `accept: */*`, `host`) and a pre-check RED row.
busbar-kernel x transport 285 -> 284 and busbar x transport 208 -> 209: the plugins.fetch download moved verbatim from the kernel into the root, so the total does not rise (the ARCHITECT ruling on #710, 2026-10-10).
d228282 to
805e1ba
Compare
# Conflicts: # crates/busbar-core-connector/src/compose.rs # crates/busbar-core-connector/src/lib.rs
…in-fetch; the download's rules stay the kernel's pure functions The plugins.fetch pre-check (the scheme rule and the cloud-metadata denylist) and the verdict on the answer's status are the kernel's deleted downloader's rules, kept in busbar-kernel as pure functions (preflight::plugin_fetch_admits, plugin_fetch_status_refusal) the root's download calls: no dial, and the root's module names no transport. The ledger rows are predev's: no ceiling moves.
…he kernel engine takes its choice ARCHITECT ruling 2026-10-12 (a move, not a copy): proxy environment parsing (the variables, the scheme rule, the credential) lives in busbar-core-connector only. The kernel engine's own parser (parse_proxy, the environment read, the precedence resolve, the redaction) is deleted with its suite's rows, which the connector's suite holds. - busbar-contract proxy_route: the shared shape, ProxyHop (endpoint and credential, Debug redacted) and ProxyChoice (the secured and plain slots and the exemption list, with curl's rule set, moved verbatim), naming no transport. - busbar-core-connector proxy: the parser fills ProxyChoice; Connector::proxy hands it out. - busbar-kernel egress engine: install_proxy(choice) replaces install_proxy_tunnel_if_configured; the root installs the connector's choice right after the connector is installed; busbar-llm no longer reads the environment at its runtime build.
…s tests are the connector's The download (one GET over the root's own need, read under the cap) moves from the root into busbar-core-connector (fetch::download, over a fetch::Table the root fills with its identity and NeedIds 1 and 2), so every dial is the connector's and the root gains no transport words: the root's plugin_fetch module only wires the one connector. The pre-check and the status verdict stay the kernel's pure rules. The wire, cap and redirect rows move from the root's test into the connector's universal_needs suite, over the request/response framer built beside it, naming no wire (the version is the door's own claim, as the suite's other rows spell it).
…names no secret subject - busbar-core-connector x transport 68 -> 69 and busbar-kernel x transport -1: the ruled MOVE of the proxy environment parse (ARCHITECT ruling 2026-10-12), net flat. - Drained by #805, lowered to the measure: busbar-kernel x transport 285 -> 279 (with the -1 above), busbar-kernel x plane 1168 -> 1164, busbar-kernel x auth 50 -> 31, busbar x auth 49 -> 21, busbar-plugin-loader x auth 5 -> 0. - busbar-contract x plane stays 210: proxy_route's doc says choice, not the decisions plane's word. - secret-hygiene check 3: the CONNECT refusal reads "CONNECT <target> refused by the tunnel's far end: <status line>", no secret-subject word beside the interpolated target.
…in-cached fetch test hands its panicking download to the loader's fetch This branch changed the kernel's PluginsFetch row (and the root's plugins_fetch) to take the operator's metadata denylist instead of a download closure (row 130 E6: the root downloads through the connector), and left the root boot test a_pin_cached_fetch_never_downloads passing a closure (E0308). The test now drives the loader's fetch the root delegates to with the panicking download, so a pin-cached entry is still proven to reach no network.
…in-fetch # Conflicts: # qa/kind-isolation.toml
…on, the per-dial choice names no plane, a CONNECT refusal names its addr; law0 rows settle at the merged tree's measure - busbar-contract ProxyHop::auth() -> proxy_authorization(): a contract-exported `auth` identifier is masked tree-wide by kind-isolation's contract_identifiers, which hid every `auth-header`/`busbar-auth-*` hit outside the contract (busbar x auth 49 -> 21, kernel x auth 50 -> 31, plugin-loader x auth 5 -> 0 were that mask, not a drain). - proxy_route.rs: "The per-dial decision:" read as a `decision:` section key (contract x plane +1); reworded. - proxy.rs connect_answer: the refused-CONNECT message interpolated a `target` parameter beside the word "proxy" (secret-hygiene check 3); the parameter is the `host:port` addr it always was. - qa/kind-isolation.toml: kernel x plane 1132 -> 1128, kernel x auth 50 -> 49 (drains with the tunnel the engine gave up); kernel x transport 284 -> 278 and core-connector x transport 68 -> 69, a ruled net-flat MOVE of the `"http"` proxy-scheme check, reason on both rows.
…nto lane-egress-e6-plugin-fetch Both sides carry the same E5a commits (e56e48f, 73ab28a, 3587dab), so every shared row takes #804's side rather than theirs + ours - base, which would count E5a twice: - busbar-core-connector x transport: O == T == 69 (the one ruled MOVE of the "http" proxy-scheme check) -> theirs, count and cite. - busbar-kernel x transport: O == T == 278 -> theirs (cite: 5 drained + 1 moved, both E5a; this branch's E6 download move is net 0 on the row, as its gates measured 278 over a 284 base). - busbar-kernel x plane: theirs 1128 (predev 1132 - E5a's 4); ours 1137 was E5a's same -4 over the older 1141, so T + O - B would drain it twice. - busbar x auth 21 -> 49, busbar-kernel x auth 31 -> 49, busbar-plugin-loader x auth 0 -> 5: this branch's lowered values measured the mask #804 removes (busbar-contract exported a bare `auth` accessor, which kind-isolation's contract_identifiers masks tree-wide). With ProxyHop::proxy_authorization the rows read predev's 49 and 5, and kernel x auth 49 is the one real drain (the `auth header` comment that left with the engine's proxy-parse test). E6's diff adds or removes no auth-vocabulary text. - proxy_route.rs doc and proxy.rs connect_answer: #804's text (the `addr` parameter keeps the 1.5.5 refusal wording, so proxy_tests.rs takes #804's expectation).
…a miscount busbar-contract exports a `header` identifier, and kind-isolation's contract_identifiers masks every whole-token `header` outside the contract, so the engine test's "the auth header is prebuilt Basic" comment was never an `auth-header` hit. Its deletion drained nothing: the row keeps predev's count and cite (gates measured 50 on #805's 979c4b1, which carries this change).
…tself The http door writes no field its caller did not (SEAM-4i, busbar-transport-http door/engine.rs `client_posture`): 1.5.5's client default `accept: */*` is a field of the request, so the download sends it as its own field and the transport adds `host` after it, the request 1.5.5's `Client::new().get()` put on the wire (oracle cell `egress.fetch|plugins|url`; universal_needs the_plugins_fetch_download_sends_1_5_5s_request_through_the_table).
qa/kind-isolation.toml busbar-kernel x transport: base 284, ours 278 (E5a: -5 drained, -1 ruled MOVE to busbar-core-connector), theirs 267 (#741's -17 listener MOVE to the root): different changes, so theirs + ours - base = 261, predev's cite kept with E5a's clause renumbered 267 -> 261.
qa/kind-isolation.toml busbar-kernel x transport: base 284, ours 278 (E5a: -5 drained, -1 ruled MOVE to busbar-core-connector), theirs 267 (#741's -17 listener MOVE to the root): different changes, so theirs + ours - base = 261, predev's cite kept with E5a's clause renumbered 267 -> 261.
qa/kind-isolation.toml busbar-kernel x transport: base 267, ours 261 (E5a: -5 drained, -1 ruled MOVE to busbar-core-connector), theirs 266 (#532: auth/token.rs's "http" check deleted, a different hit): theirs + ours - base = 260, predev's cite kept with E5a's clause renumbered 266 -> 260.
qa/kind-isolation.toml busbar-kernel x plane: base 1132, ours 1128 (E5a's proxy-tunnel drain: two `llm engine` prose mentions, the `decision:` doc key, the `installed decision` assert message), theirs 1128 (#674: the ask-state seal's `crate::mcp::roots` links and `\x6dcp` domains). O == T, but these are two different drains of equal size, not one change carried twice, so theirs + ours - base = 1124, predev's cite kept with E5a's clause renumbered 1128 -> 1124.
qa/kind-isolation.toml busbar-kernel x plane: base 1128, ours 1124 (E5a's proxy-tunnel drain), theirs 1122 (E2's net_guard deletion): different drains, so theirs + ours - base = 1118, predev's cite kept with E5a's clause renumbered 1122 -> 1118. The kernel no-socket pin (#796) stays exact on the merged tree.
|
row 155 B2 (#974) edits crates/busbar-kernel/src/proxy/mod.rs at fn auth_failure_status_and_kind and the tail of fn ingress_error; disjoint from this PR's hunks. |
/status row 130 (E6): the kernel's last dial of its own, the
plugins.fetchdownload, moves out of busbar-kernel and goes through the one connector. Stacked on #804 (proxy support in the connector, E5a), so the download keeps honouring the proxy environment the way 1.5.5 did.busbar-kernelpreflight::plugin_fetch_downloader, which used the kernel engine's client.crates/busbar/src/root/plugin_fetch.rs. The root declares one provider-class need per URL scheme under its own identity.NeedId(1)andNeedId(2)are new;NeedId(0)is the authorization server's. The root then sends one GET through the process's one connector, so:accept: */*beforehost. This is the oracle cellegress.fetch|plugins|url. It is currently marked known-red asegress-plugin-fetch-accept, and the mark stays until ModernCI shows the cell green, per the ARCHITECT.security.blocked_metadata_hosts;Content-Lengthover the cap is refused before any body byte, and the body is counted against the cap as it arrives;PluginsFetchnow hands the root the operator's denylist instead of a downloader. The kernel test build's stand-in refuses every download, because it has no connector.Tests (
root/tests/plugin_fetch.rs). The rows that dial use the build's linked doors against scripted loopback far ends:GET <path> HTTP/1.1,accept: */*,host;Content-Lengthand with none (chunked); a body within the cap comes back byte for byte;Proof: ModernCI only (owner rule 2026-10-12).