Skip to content

loader: the plugin observer, host series and intake are the dispatcher's (door-only) - #1009

Open
MattJackson wants to merge 1 commit into
predevfrom
lane-cabi-seam-observer
Open

MattJackson wants to merge 1 commit into
predevfrom
lane-cabi-seam-observer

Conversation

@MattJackson

@MattJackson MattJackson commented Oct 14, 2026 •

Copy link
Copy Markdown
Collaborator

CONTRACT-ABI lane, item 3 (the door-only static seams, part 2): the plugin observer and the host's series predicate (coordinator ruling 2026-10-14 (a)).

door-only static-seam rule (docs/design/BUSBAR-1.6.0.md l.1475-1478 R6, l.1543): no static fn-pointer seam installed into the binary closure; exactly the two oauth2/admin seams are exempt. qa/door-only.toml rows: crates/plugin-loader/src/observe.rs OBSERVER (OnceLock<&'static dyn PluginObserver>) and HOST_SERIES (OnceLock<fn(&str) -> bool>). The composition root installed Rust code into both, and the INTAKE they fed was process-global with them.

What moves:

  • observe::Observing (new) holds the observer, the host's series predicate and the bounded intake (INTAKE_BOUND, never blocking, drops counted). Installs stay first-wins and one-way, as before.
  • The Dispatcher owns one (Env::observing; Dispatcher::observing()). An Adopter hands it to every door the dispatcher binds (Adopter::observing), and EnvelopeObserver carries it, so a door's envelope folds through its own dispatcher's observability. A door with no dispatcher (a test adopter) gets an empty one and drops, which is the old "no observer" state.
  • The export door's shed fold reads the observability off its instance's dispatcher, and ExportRows::open's series grant reads it off the axis's dispatcher (grant_series(observing, …)).
  • The composition root installs its observer (root::observe::install) and its series predicate (root::linked::register_exports) on the process's one dispatcher (root::dispatch::dispatcher()), which main builds before both.
  • qa/door-only.toml strikes both rows.

Behaviour is unchanged. Every door already binds on that one dispatcher: the transport doors through root::doors::install_dispatcher, and the plane probes through door_probe_dispatcher(), which returns it.

Tests:

  • In this crate's test binary every Observing stands with the shared recorder, so the fold-log tests and the export conformance both-folds proof (an_opened_sinks_envelope_reaches_the_host_observability, a_first_party_series_is_granted_through_either_door_and_to_nobody_else) read as before. The latter now names its host series on the dispatcher its opens bind on. settle() waits on every intake the binary started.
  • RED: observe_tests::the_observer_and_the_host_series_are_the_dispatchers. A series predicate installed on one dispatcher refuses a first-party claim on the host's series there and not on another dispatcher; the second install is refused; an adopter's observability is its own dispatcher's. It does not compile on predev.

Shared files (rule 20/23): merge-tree is clean against every open PR touching these files: lane-proof-abi-mac, #1004, lane-a2a-push-ca, lane-law0-root, #992, #986, #971, #961, #960, #953, #952, #893, #865 and #864. It conflicts only with the drafts #778 and #561.

No dependency change.

…ispatcher's, not static seams

door-only static-seam rows OBSERVER and HOST_SERIES (plugin-loader observe.rs; BUSBAR-1.6.0.md
l.1475-1478, l.1543: no static fn-pointer seam installed into the binary closure; coordinator
ruling 2026-10-14 (a)). observe::Observing holds the observer, the host's series predicate and
the bounded intake; the Dispatcher owns one (Dispatcher::observing), every door it adopts folds its
envelope through it (EnvelopeObserver carries it; Adopter::observing), the export door's shed fold
and the export axis's series grant read it off their dispatcher, and the composition root installs
its observer and series predicate on the process's one dispatcher. qa/door-only.toml strikes both
rows. The test binary's every Observing stands with the shared recorder, so the fold-log tests and
the export conformance both-folds proof read as before.

RED: observe_tests::the_observer_and_the_host_series_are_the_dispatchers (a series predicate on one
dispatcher refuses a host-series claim there and not on another; a door's adopter folds through
its own dispatcher's observability).
@MattJackson

Copy link
Copy Markdown
Collaborator Author

Rule 20 note from #1031 (row 155, draft): one disjoint line in root/linked.rs (hot_answer_inline's cap reads busbar_kernel::proxy::max_translate_body_bytes). A test merge is clean.

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