Skip to content

Latest commit

 

History

History
390 lines (348 loc) · 27.4 KB

MODULE_INFO.md

File metadata and controls

390 lines (348 loc) · 27.4 KB

Module info

At a glance

Module Path Language · target Ships Role
MissionController.Core src/MissionController.Core C# · net10.0 Yes Contracts, models, the mission pipeline and every engine that composes it
MissionController.Infrastructure.Windows src/MissionController.Infrastructure.Windows C# · net10.0-windows Yes Jail, job object, restricted token, AppContainer launch, DPAPI vault, remediation, Copilot adapter
MissionController.Infrastructure.Network src/MissionController.Infrastructure.Network C# · net10.0 Yes Egress firewall, model clients, DLP, identity, SIEM and EDR, trigger listeners
MissionController.Infrastructure.Data src/MissionController.Infrastructure.Data C# · net10.0 Yes SQLite storage, chained ledger, Merkle proofs and compliance export, retention, memory, catalogs, registries
MissionController.Infrastructure.Linux src/MissionController.Infrastructure.Linux C# · net10.0 Yes, inside splat-mcp and the console The Windows-side bridge to splat-agent
MissionController.Host src/MissionController.Host C# · net10.0 Yes, inside splat-mcp and the console What both hosts share: the substrate's doctor, mount and unmount, and the daemon they install
MissionController.UI src/MissionController.UI C# · WinUI 3 · net10.0-windows10.0.19041.0 As dist\App, self-contained The operator console; composition root one
splat-mcp src/splat-mcp C# · net10.0-windows · exe Yes — the licensee-facing surface The MCP server; composition root two
splat-bench src/splat-bench C# · net10.0-windows · exe No Measures the governed launch path against a bare one
MissionController.Tests tests/MissionController.Tests C# · xUnit · net10.0-windows No The suite
splat-agent native/splat-agent Rust 2021 and BPF C · Linux Yes — the licensed daemon The resident lease daemon and its BPF-LSM program
splat-canary native/splat-canary Rust 2021 and BPF C · Linux No — a frozen proof The standalone -EPERM harness
splat-langgraph src/splat-langgraph-py Python ≥ 3.10 As an adapter LangChain and LangGraph tools over splat-mcp
packaging packaging PowerShell Deferred Signed MSIX build; Intune and SCCM install and uninstall

"Ships" follows the live plan: what a licensee embeds. The console and the MSIX pipeline build, but nothing on the critical path depends on them.

Project references

flowchart BT
    CORE["Core"]
    WIN["Infrastructure.Windows"] --> CORE
    NET["Infrastructure.Network"] --> CORE
    DATA["Infrastructure.Data"] --> CORE
    LNX["Infrastructure.Linux"] --> CORE
    HOST["Host"] --> CORE
    HOST --> DATA
    HOST --> LNX
    UI["UI"] --> CORE
    UI --> WIN
    UI --> NET
    UI --> DATA
    UI --> LNX
    UI --> HOST
    MCP["splat-mcp"] --> CORE
    MCP --> WIN
    MCP --> NET
    MCP --> DATA
    MCP --> LNX
    MCP --> HOST
    BENCH["splat-bench"] --> CORE
    BENCH --> WIN
    TESTS["Tests"] --> MCP
    TESTS --> WIN
    TESTS --> NET
    TESTS --> DATA
    TESTS --> LNX
    TESTS --> HOST
Loading

Arrows point from a project to what it references; the tests also reference Core directly. The graph is a plain DAG: the infrastructure libraries reference only Core, Host is the one library above them and both hosts share it, and nothing references a host except the tests, which reference splat-mcp. Both hosts reference Infrastructure.Linux and run Linux-lease templates through it. The Rust crates and the Python package sit outside the solution; the Python package reaches C# only by launching splat-mcp.


MissionController.Core

MissionController.Infrastructure.Windows

MissionController.Infrastructure.Network

  • Target: net10.0. References: Core. Packages: none.
  • Referenced by: the console, splat-mcp, the tests.
  • Namespaces do not follow folders for the root files: .Egress (EgressFirewallHandler), .Http (HardenedHttpClientFactory), .Identity (PkceLoopbackAuthService, ServiceAccountAuthService) and .Vertex (VertexAiStreamClient). Ai/, Dlp/, Edr/, Identity/, Siem/ and Triggers/ match.
  • Owns: EgressFirewallHandler.cs, HardenedHttpClientFactory.cs, Ai/ — the Claude and Gemini clients, the router and the key classifier; Dlp/, Identity/ — JWT and API-key validation, token lifecycle, revocation, the credential sanitizer; Siem/, Edr/, Triggers/.
  • Constructed by neither host: VertexAiStreamClient, PkceLoopbackAuthService, ServiceAccountAuthService, and everything in Triggers/.
  • Tests: AiGatewayTests, DlpSanitizerTests, LoopbackGateTests, ModelStreamClientTests, SanitizationAndRevocationTests, SecurityHubOrchestrationTests, SecurityHubViewModelTests, SiemAndEdrIntegrationTests, TokenValidationAndLifecycleTests.

MissionController.Infrastructure.Data

  • Target: net10.0. References: Core.
  • Packages: Microsoft.Data.Sqlite, versioned per target framework in the project file: the single shared version it replaced pulled a native SQLite carrying GHSA-2m69-gcr7-jv3q into both legs.
  • Referenced by: the console, splat-mcp, the tests.
  • Namespaces do not follow folders for two root files: .Audit (SqliteChainedAuditLedger) and .Templates (SqliteTemplateRegistry). Catalog/, Compliance/, Retention/ and Vector/ match.
  • Owns: SqliteStorageContext.cs, SqliteChainedAuditLedger.cs, the three registries, Catalog/ — the template catalog split by domain, plus the project and crew catalogs; Compliance/, Retention/, Vector/. Since 2026-10-10 Catalog/LeasedWebProbe.cs moves the eight web-fetching templates under the Linux lease, running the embedded LeasedWebProbe.py in the guest.
  • Constructed by neither host: DataRetentionService, SqliteGovernedCrewRegistry.
  • Tests: AuditAndSecurityTests, DataRetentionTests, GovernedCrewRegistryTests, GovernedProjectCatalogTests, HmacAuditLedgerAndAstValidatorTests, MerkleComplianceArchiveTests, SemanticMemoryTests, TemplateRegistryExpansionTests.
  • Detail: ARCHITECTURE-control-plane.md.

MissionController.Infrastructure.Linux

MissionController.Host

  • Target: net10.0. References: Core, Data, Linux. Packages: none.
  • Referenced by: splat-mcp, the console and the tests. Added 2026-10-10, when the substrate code moved out of splat-mcp so the desktop app could install, check and remove its own guest.
  • Owns: SubstrateDoctor.cs — what this host will enforce; SubstrateProvisioner.cs and SubstrateUnmounter.cs — mount and unmount, with MountManifest.cs between them; McpEgressPolicy.cs — the egress endpoints a lease may name; SubstrateOptions.cs — what each host passes in, in its own operator's words; SubstrateLifecycle.cs — the console's plan-then-apply machine over all three; ManagedBridgeClient.cs — the console's leases through a managed bridge's pipe, failing closed when one is configured and unavailable, with ManagedBridgeConfiguration.cs and ManagedLeaseRequest.cs. The daemon provision installs is embedded here when SplatAgentBinary is passed, so it reaches splat-mcp.exe through the reference.
  • Tests: SubstrateDoctorTests, SubstrateProvisionerTests, SubstrateUnmountTests, SubstrateLifecycleTests, ManagedBridgeTests.

MissionController.UI

  • Target: net10.0-windows10.0.19041.0, minimum platform 10.0.17763.0, win-x64, unpackaged (WindowsPackageType None), with both .NET and the Windows App SDK self-contained in dist\App.
  • References: Core, Windows, Network, Data, Linux, Host.
  • Packages: Microsoft.WindowsAppSDK 2.5.1, since 2026-09-18; Microsoft.Graphics.Win2D; Microsoft.Windows.SDK.BuildTools; CommunityToolkit.Mvvm; CommunityToolkit.WinUI.Controls.Primitives; Microsoft.Extensions.DependencyInjection.
  • Composition root: App.xaml.cs, which also routes every fatal path to FatalErrorLog and a message box, so a failed start leaves evidence.
  • Screens, from MainWindow.xaml.cs: QuickDiagnostician (the start page), WelcomeOnboarding, LiveMissionMonitor, TemplateCatalog, ProjectStudio, SecurityAudit, SemanticSearch, JailInspector, KernelLease and Settings — each a view under Views/ and a view model at the project root.
  • Rendering: Effects/ — composition shaders, and Win2D HLSL whose bytecode is built only when the SDK's fxc is found; Graphics/ — a Direct3D swap-chain host. The palette is Styles/SplatDesignTokens.xaml.
  • Suppressed warning: MVVMTK0045, with the reasoning in the project file; UiWarningSuppressionTests fails if AOT or trimming is ever switched on, the one case where the warning would matter.
  • Runs from dist\App, a dotnet publish output — see CONTEXT.md.
  • Self-test: MissionController.UI.exe --self-test [--self-test-report <path>] opens every page in MainWindow.EveryPage, waits for each to load, writes a JSON report and exits 0, or 2 when a page failed, 1 when the console failed before its window, 3 when it did not finish (ConsoleSelfTest.cs). packaging/build-client-dist.ps1 runs it on the published console and fails the package on any code but 0 - the only run-time check of the pages there is.
  • Tests: source-level only, because a test project cannot reference the WinUI app: CompositionRootTests, UiWarningSuppressionTests, ShaderAssetVerificationTests, XamlResourceKeyTests; the pages themselves are checked by the self-test above, and CompositionRootTests holds its page list to every view under Views/ and every menu item.

splat-mcp

splat-bench

  • Target: net10.0-windows, exe, with workstation, non-concurrent GC so collection pauses do not land in the measured window.
  • References: Core, Windows.
  • Does: runs cmd.exe /c exit 0 through the governed launch path and bare, alternating, and writes bench-*.json to evidence/. It is not part of dotnet test — timing assertions in a suite get flaky and then muted — and is run with dotnet run --project src/splat-bench -c Release.

MissionController.Tests

  • Target: net10.0-windows. Packages: xunit, xunit.runner.visualstudio, Microsoft.NET.Test.Sdk, coverlet.collector.
  • References: Core, Windows, Network, Data, Linux, Host, splat-mcp.
  • Beside it: MissionController.SubstrateProbe, an exe outside the solution that plans (--plan) or runs (--execute) the eight leased web probes against a real daemon. It is the live acceptance run for roadmap 5.0, never part of dotnet test.
  • Constraint: data-driven tests use [InlineData] only. NoDataSourceEscapesTheTestCounter fails on [MemberData] or [ClassData], because the documentation's test count is computed by reflection and could not see them.
  • Replay fixtures: Fixtures/Missions/ holds recorded missions - the sensor's scrubbed output, the model's answer, the verdict - and MissionReplayTests runs every one through the real post-tool pipeline with no model, via MissionReplayHarness; MissionFixtureExporter turns the console's own indexed runs into fixtures. The live canary in LiveMissionTests records a large template's run and replays it before it passes.
  • Cross-cutting: DocumentationDriftTests, EndToEndVerificationTests with DiagnosticVerificationRunner.

splat-agent

splat-canary

  • Crate: splat-canary 0.1.0, license GPL-2.0-only — a BPF-LSM program must be GPL-compatible — with libbpf-rs 0.24 pinned like the daemon's.
  • Scripts: preflight.sh gives a GREEN, YELLOW or RED verdict on the kernel; setup-guest.sh installs the toolchain and generates vmlinux.h; run-canary.sh builds and fires the canary and exits non-zero on a bad run.
  • Evidence: evidence/.
  • Frozen: its BPF program is a fork kept at the shape its evidence was produced against. See its README.

splat-langgraph

packaging

  • build-msix.ps1 publishes the console self-contained for win-x64 and packs and signs an MSIX when the Windows SDK's makeappx and signtool are present. dist\App is self-contained too since 2026-09-18, so the two differ only in packaging.
  • install-enterprise.ps1 and uninstall-enterprise.ps1 are the silent Intune and SCCM install and removal.
  • reprove-substrate.ps1, added 2026-09-23, re-records the daemon and last-hop evidence in one command: a fresh build started as root through wsl -u root, both probes with their evidence written into the tree, the installed unit put back, and exit 0 only when both verdicts are PASS against the kernel program in the tree. For the operator's own terminal; an agent is refused every route to a root daemon.
  • Deferred: the runbook leaves MSIX out on purpose, and the live plan ships splat-mcp without an installer.

Evidence files

File Written by Held by the suite to
native/splat-canary/evidence/canary-6.18.33.2-microsoft-standard-WSL2.json run-canary.sh The canary's BPF source hash, and the README's substrate wording
native/splat-agent/evidence/daemon-probe.json probe-daemon.sh against a root daemon The daemon's BPF source hash, and the README's "Enforcing, proven under root"
native/splat-agent/evidence/fail-closed-probe.json, peer-auth-probe.json, wire-contract-probe.json One-off probes Nothing — cited by SUPPORTED_POLICY
src/splat-bench/evidence/bench-windows-10.0.26200.0.json splat-bench Every document's latency claims

Re-verifying this page

$dotnet = "$env:LOCALAPPDATA\Microsoft\dotnet\dotnet.exe"
& $dotnet sln MissionController.sln list                               # the projects
git grep -n "TargetFramework\|ProjectReference\|PackageReference" -- "*.csproj"
git grep -n "^namespace" -- "src/*.cs"                                  # namespace against folder
git grep -lw TemplatePolicyCompiler -- src                               # is a type wired?

A type named only by its own file and by files under tests/ is not wired. A module added to the solution without a section here is this page's bug, and not yet a test's.