Skip to content

runtime: build the videre-host crate and register the venue platform#447

Merged
mfw78 merged 1 commit into
dev/m1from
feat/m2-videre-host
Jul 21, 2026
Merged

runtime: build the videre-host crate and register the venue platform#447
mfw78 merged 1 commit into
dev/m1from
feat/m2-videre-host

Conversation

@mfw78

@mfw78 mfw78 commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Closes #381

What

Adds the videre-host extension crate and moves the venue-adapter bindgens, VenueRegistry, EgressGuard, and the keeper-facing videre:venue/client interface out of nexum-runtime into it, registered as one extension via videre_host::platform(&config). Grows the runtime's Extension seam with extension-declared subscription kinds and attribute-filtered event streams (Extension::subscriptions/Extension::events, EventSources, ExtensionEvent), and threads config into Runtime::extensions. shepherd now composes the videre platform alongside the cow-api extension.

Why

Nothing owned the venue-adapter ProviderKind, the un-privileged registry, the advisory guard, or the client bindgens as an installable extension. Landing them in videre-host makes venue support a plug-in rather than a welded-in host concern, and proves the seam by moving the intent-status poll source through it instead of a bespoke runtime loop.

Closes #381

Testing

  • cargo fmt --all --check
  • cargo check --workspace --all-features
  • cargo clippy --workspace --all-targets --all-features -- -D warnings
  • cargo nextest run --workspace --all-features (includes videre-host's platform integration suite: install/service/provider wiring, capability linking, status-poll dispatch)
  • cargo test --doc

AI Assistance

Implemented with Claude Code end-to-end; human-reviewed before opening.

@lgahdl lgahdl left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Faithful, well-executed move for a diff this size — the registry.rs relocation is 95% import/doc/logging churn with the actual submit() body, the quota-before-guard ordering (#435), and the liveness/sweep integration (#445) all untouched, and the new subscription/event seam correctly reproduces the old bespoke poll loop's cadence and gating (venue_count() == 0 / subscribed.contains(kind) double-gate, empty-filter-set vacuous match-all). Comments are unusually clean for a refactor this size — no stale references to the old paths found anywhere. A few smaller notes:

  • The PR body says HostState.pool_router is deleted, but pool_router doesn't appear anywhere in this diff — that field was already removed in an earlier PR (#443), so this line in the description is stale copy, not a functional claim to verify here.
  • The new subscription/event seam (Extension::subscriptions/events, EventSources, ExtensionEvent) is mechanically generic, but videre-host is still its only real consumer — cow-api doesn't use it. "Proves the seam" is proven by construction, not by a second independent user, and nothing detects two extensions accidentally choosing the same kind string (they'd silently merge into one vocabulary set). Worth landing or stubbing a second consumer before leaning on this as validated-general infrastructure.
  • Test coverage: I didn't find a platform-level regression test for quota-before-guard ordering or the watch-set cap/expiry (#438) in the new videre-host/tests/platform.rs — the underlying unit tests moved intact inside registry.rs, so behavior is covered, but the E2E-level platform suite doesn't re-exercise either. Worth confirming that's an accepted gap rather than an oversight.

Comment thread crates/videre-host/src/registry.rs
@mfw78
mfw78 force-pushed the feat/m2-generic-launcher branch from f21855f to 1d291e0 Compare July 21, 2026 00:21
Base automatically changed from feat/m2-generic-launcher to dev/m1 July 21, 2026 00:37
…ough the seam

Relocate the venue-adapter and client bindgens, the venue registry, the
advisory egress guard, and the venue-adapter provider kind out of
nexum-runtime into a new videre-host extension crate, registered whole
via videre_host::platform(). The runtime grows two generic seams in
exchange: extension-declared subscription kinds with attribute-filtered
extension events through the event loop, and config-derived preset
extensions. nexum-runtime now carries zero venue, intent, or cow
symbols and the venue-agnostic check passes.
@mfw78

mfw78 commented Jul 21, 2026

Copy link
Copy Markdown
Contributor Author

Checked the three body notes against the end-of-train state.

1. Stale pool_router line - fixed. Correct: HostState.pool_router was removed back in #443, not here. I have dropped that clause from the PR description; it was stale copy, not a functional claim.

2. Event/subscription seam (single consumer + no duplicate-kind detection) - still valid, tracked in #517. At the tip, subscription kinds still aggregate into a BTreeSet<String> with no collision check, so two extensions choosing the same kind would silently merge, and videre-host is still the only consumer. Filed as a hardening follow-up: detect a duplicate kind at boot (the way HostServices::from_extensions already bails on a duplicate service namespace), plus optionally a second consumer to validate generality.

3. Platform-level test coverage - accepted gap. The quota-before-guard (#435) and watch cap/expiry (#438) unit tests moved intact into registry.rs, so behaviour stays covered; the platform.rs E2E suite is scenario-level and does not re-exercise them. That is an accepted gap rather than an oversight - happy to add platform-level regressions as a small follow-up if you want belt-and-suspenders.

@mfw78
mfw78 merged commit 7f0ea12 into dev/m1 Jul 21, 2026
5 of 6 checks passed
@mfw78
mfw78 deleted the feat/m2-videre-host branch July 21, 2026 02:22
mfw78 added a commit that referenced this pull request Jul 21, 2026
The Rust symbol scan inherited the old charter (nexum:intent, nexum:adapter,
PoolRouter) - names retired in #428/#447 that cannot reappear - while the
live venue vocabulary went unchecked. A re-introduced videre_host::VenueRegistry
in nexum-runtime/src would have passed. Switch to the post-rename set so the
scan guards the names that actually signal a leak.
mfw78 added a commit that referenced this pull request Jul 21, 2026
The privileged-field scan checked venue_registry|pool_router, neither of
which can appear: the field is registry: Arc<VenueRegistry> and pool_router
was retired in #428/#447. Match VenueRegistry so a router field reappearing
in nexum-runtime/src fails the gate.
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.

2 participants