Skip to content

row 166 PR2b: a program's environment secrets resolve at declaration and are held; a spawn resolves nothing - #865

Merged
MattJackson merged 2 commits into
predevfrom
lane-row166-spawn-env
Oct 15, 2026
Merged

MattJackson merged 2 commits into
predevfrom
lane-row166-spawn-env

Conversation

@MattJackson

Copy link
Copy Markdown
Collaborator

Stacked on #864 (and #863). Row 166 PR2b implements the ARCHITECT ruling of 2026-10-13 on stdio member env timing.

  • busbar-core-connector::spawn_env::HeldEnv: env secret references resolve at the need's declaration (declare_program / declare_member_programs hold the config-time proof; a kept member re-resolves at an apply). They are held in an ArcSwap, so a spawn loads them without a lock and resolves nothing.
  • Refresher: one thread re-resolves every live held environment each SPAWN_ENV_LEASE (60 s), off the request path, keeping each weakly, as P3 FLIP-A2A: the a2a plane served through its door; busbar-a2a deleted (stacked on #778) #787's PerHop does. A reference that stops resolving empties the cell, and every spawn after it is refused.
  • Dest::Program and Admission::Spawn carry the held env to the host's io.spawn. SpawnSecretFn takes the proof, and the root installs resolve_linked_string_at_config.
  • config-scope gate: allow-list rows for the two declarations and the refresher.
  • docs/mcp.md: a rotated secret reaches the first NEW child after the next refresh. Stdio members are new in 1.6.0, so there is no 1.5.5 baseline and no register entry.
  • config-schema snapshot: SpawnSecretFn target updated, since it now takes the proof.
  • RED a_spawn_resolves_nothing_and_a_rotation_reaches_the_first_child_after_the_refresh:
    • two spawns, one resolution;
    • a rotation reaches no child before the refresh, and does reach the first child after it;
    • a reference gone at a refresh refuses the spawn.
      The member-program cell asserts that its first lease's spawn resolved nothing.

The 60 s lease is a fixed host constant: stdio members have no lease key, and adding one would add config surface.

… are held for its spawns: a spawn resolves nothing

Row 166 PR2b, ARCHITECT ruling 2026-10-13. A spawn serves a request (a member's first lease, a
respawn after its child exits, every open of a program need), and a secret source can block for
its whole deadline, so no resolution runs there.

- busbar-core-connector spawn_env: HeldEnv, resolved at the need's declaration (declare_program /
  declare_member_programs build the config-time proof; a kept member re-resolves at an apply), held
  in an ArcSwap that a spawn loads lock-free. The refresher re-resolves every live HeldEnv each
  SPAWN_ENV_LEASE (60 s) on its own thread, keeping each weakly like #787's PerHop. A reference that
  stops resolving empties the cell, so every spawn after it is refused (fail closed).
- Dest::Program and Admission::Spawn carry the HeldEnv to the host's io.spawn, which loads it and
  resolves nothing. SpawnSecretFn takes the proof; the root installs
  resolve_linked_string_at_config.
- config-scope gate: allow-list rows for the two declarations and the refresher.
- docs/mcp.md: a rotated secret reaches the first NEW child after the next refresh. Stdio members
  are new in 1.6.0, so there is no 1.5.5 baseline and no register entry.
- config-schema snapshot: SpawnSecretFn's target now takes the proof.
- RED: a_spawn_resolves_nothing_and_a_rotation_reaches_the_first_child_after_the_refresh (two
  spawns, one resolution; a rotation reaches no child before the refresh and the first child after
  it; a reference gone at a refresh refuses the spawn). The member-program cell asserts its first
  lease's spawn resolved nothing.
… fixed interval with no setting; a rotation reaches the first new child within it
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
…redev, by cause

- cap_perf_streams_2000 (#1039 made the llm door the default path): every piece of an admitted
  unit took an instance max_inflight unit on worker 0, so 2000 stream endings overflowed the
  door's cap and the refused pieces cut answered streams. plugin-loader: Dispatcher::submit_unit
  (an admitted unit's on_piece/serve hold no max_inflight unit, as driver-ticket ops do; spec
  A.4.1, one ticket per unit reused for its ops); PlaneInstance spreads unit tickets over the
  dispatcher's workers (one slab per instance and worker); a session's two legs mint on one worker
  (PlaneCalls::mint_beside).
- #958 (bedrock over-budget = 429 ThrottlingException, accepted difference C-22): exchange_refuse
  x2, on_driver refusals, plane_node bedrock fixture, pools_door spent-budget x2 and governance.
- llm door projection reads bedrock inferenceConfig.maxTokens where the top-level cap is absent
  (#912's on_driver pin, now that the door serves by default, #824).
- on_driver seam: a hook veto ends the route leg Failed(Route, HookVeto) as the kernel pins; the
  completion tap carries no response_tokens_out, as 1.5.5 (#919's test change only).
- kernel config_validate: the unknown-protocol list names each dialect once (cli_validate x2).
- root model_egress: the far end's RecordNothing is the caller's fault, counted in observe (the one
  call it records through).
- kernel secret_refs: SpawnEnv inventoried (#865); plugin-loader: the forged-ticket latch test
  reaches its 16th forgery, the dispatch fixture's stale wakes use the tickets it was handed
  (#1018).
- xtask: posture case reads construction figures (fixfwd-2 emptied structure-lint's); reachability
  selftest's name-only case uses busbar-plane-llm; segregation SRC_FLOOR follows xtask/src's growth
  (a floor, stricter); conformance_rigs counts 18 suites (#885).
- busbar-plane-llm dialect.rs: every dialect states its `protocol` param (the auth-header plugin's
  no-header line reads it), with the fixture's families/own/passthrough.
Base automatically changed from lane-row166-secret-disk to predev October 15, 2026 13:54
@MattJackson
MattJackson merged commit 94a2cf5 into predev Oct 15, 2026
1 check was pending
@MattJackson
MattJackson deleted the lane-row166-spawn-env branch October 15, 2026 13:54
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