Plugin Framework

Verified against commit 942a18727c (2026-09-26). Re-verify with: ls src/Plugin src/Plugin/StellaOps.Plugin.Registry.Persistence/Migrations && rg -n "FromTrust" src/Plugin/StellaOps.Plugin.Sandbox/SandboxMode.cs src/Plugin/StellaOps.Plugin.Host/PluginHost.cs

Universal extensibility framework providing deterministic plugin discovery, admission checks, registry models, and SDK support for building Stella Ops plugins.

Audience: plugin authors building connectors, analyzers, or gate/step providers, and module owners who load plugins into their service hosts.

Purpose

The Plugin Framework is a foundational library that provides a consistent plugin lifecycle, deterministic discovery, signature/version admission checks, process/in-process sandboxing, and a persistent registry for Stella Ops modules. It is consumed as a library by other modules and exposes no HTTP endpoints.

The src/Plugin/ host derives a runtime SandboxMode from each plugin’s verified trust level via SandboxModeMatrix.FromTrust (StellaOps.Plugin.Sandbox/SandboxMode.cs). Today BuiltIn plugins load in-process with policy-interposed filesystem and process-spawn calls; Trusted plugins run out of process through ProcessSandbox behind a SandboxedPluginProxy; Untrusted plugins (valid signature, signer not allowlisted) still load in-process in an isolated, collectible AssemblyLoadContext, because the confined process runner is not yet wired into the host. See architecture.md.

Two distinct hosts exist. This dossier (src/Plugin/) documents the sandbox-capable host used by Release Orchestrator. A separate, older library at src/__Libraries/StellaOps.Plugin/ (PluginHost/PluginManifestLoader/NullPluginVerifier) is a lightweight shared host with admission checks and no process sandboxing; Integrations, Scanner and the JobEngine Scheduler use it. Integrations adds its own stellaops.pluginhost.process.v1 child-runner path for production admission, allowlisted integration:test-connection / integration:health-check / integration:discovery execution, deterministic dead-runner evidence and brokered single-authref secret materialization.

Status

AttributeValue
MaturityProduction
Sourcesrc/Plugin/

Key Features

Testing

Tests live under src/Plugin/__Tests/ (Abstractions, Host, Registry, Sandbox, Sdk). The sandbox suites also run in the platform-specific CI lanes .gitea/workflows/plugin-linux-os-confinement.yml, plugin-linux-overlay-sandbox.yml, plugin-windows-filesystem-sandbox.yml and plugin-windows-os-confinement.yml. StellaOps.Plugin.Sandbox.Tests references Microsoft.Extensions.Logging directly (it previously received logging only through a removed transitive test reference). Lane status is tracked in the active sprint, not here.

Dependencies

Upstream (this module depends on)

Downstream (modules that depend on this)

Consumers of the src/Plugin/host/abstractions/registry/sandbox/SDK projects documented here:

Note: Integrations, Scanner and JobEngine (Scheduler job plugins) load plugins through the older src/__Libraries/StellaOps.Plugin/ shared host (sandbox-free) and reference only StellaOps.Plugin.Abstractions from src/Plugin/.