| 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.
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
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.
- Target:
net10.0. - References: none. Packages: none. Referenced by: every other C# project.
- Contracts:
Interfaces.cs— the platform seams, plus the Linux lease records (LeaseSpec,LeaseResourceLimits,LeaseViolationEvent);OperatorIdentity.cs; and the contracts that sit beside their engines inCrew/,Workflow/andQualityIsland/Contracts/. - Models:
Models.cs— templates, egress rules, remediation actions, projects,MissionChunk, ledger and Merkle records,JobResourceMetrics, identity and diagnosis records;Enums.cs;CopilotSafetyModels.cs;RetentionPolicy.cs. - The pipeline:
MissionExecutionEngine.cs,GovernedArgumentBinder.cs,PosixArgumentSplitter.cs,StructuredDiagnosisContract.cs,JsonFindingsExtractor.cs,TelemetryGrounder.cs,DynamicCodeAstValidator.cs,FatalErrorLog.cs. - Engines:
GovernedInvestigationLoop.cswithReActDecisionContract.cs,ProjectExecutionEngine.cs,Crew/,Brain/,Workflow/,QualityIsland/— oracles, evaluators and the Bradley–Terry arbiter. - Tests:
AgentBrainTests,ArgumentVectorContractTests,BradleyTerryArbiterTests,DiagnosticFindingsExtractorTests,EngineResilienceTests,FailureIsNotEvidenceTests,FatalErrorLogTests,GovernedArgumentBinderTests,GovernedCrewDefectRegressionTests,GovernedCrewEngineTests,GovernedInvestigationLoopTests,PreMissionRecallTests,ProjectExecutionEngineTests,QualityIslandTests,StructuredDiagnosisContractTests,TelemetryGroundingTests,WorkflowEngineTests,WorkflowGovernanceTests, withWorkflowMissionDoublesas shared fakes.
- Target:
net10.0-windows, withAllowUnsafeBlocks. - References: Core. Packages:
System.Security.Cryptography.ProtectedDatafor DPAPI;Microsoft.Extensions.DependencyInjection.AbstractionsforAddSplatCopilotSafety. - Referenced by: the console,
splat-mcp,splat-bench, the tests. - Namespaces do not follow folders. The root files declare
MissionController.Infrastructure.Windows.Jails(NtAclJailManager),.JobObjects(Win32JobSandbox),.Process(SuspendedProcessLauncher),.Security(RestrictedTokenProvider,SensorAppContainer,WindowsOperatorIdentityProvider),.Vault(DpapiCredentialVault) and.Native(Win32Interop).Remediation/andCopilot/match their namespaces. - Owns:
SuspendedProcessLauncher.cs,Win32JobSandbox.cs,RestrictedTokenProvider.cs,NtAclJailManager.cs,SensorAppContainer.cs,Win32Interop.cs,DpapiCredentialVault.cs,WindowsOperatorIdentityProvider.cs,Remediation/,Copilot/. - Tests:
CopilotSafetySubstrateTests,CredentialRemovalTests,EgressAndPrivilegeHardeningTests,HardeningSubsystemTests,ProcessLauncherTests,RemediationEngineTests,SensorNetworkContainmentTests. - Detail: ARCHITECTURE-windows-substrate.md.
- 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/andTriggers/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 inTriggers/. - Tests:
AiGatewayTests,DlpSanitizerTests,LoopbackGateTests,ModelStreamClientTests,SanitizationAndRevocationTests,SecurityHubOrchestrationTests,SecurityHubViewModelTests,SiemAndEdrIntegrationTests,TokenValidationAndLifecycleTests.
- 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 carryingGHSA-2m69-gcr7-jv3qinto 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/andVector/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-10Catalog/LeasedWebProbe.csmoves the eight web-fetching templates under the Linux lease, running the embeddedLeasedWebProbe.pyin the guest. - Constructed by neither host:
DataRetentionService,SqliteGovernedCrewRegistry. - Tests:
AuditAndSecurityTests,DataRetentionTests,GovernedCrewRegistryTests,GovernedProjectCatalogTests,HmacAuditLedgerAndAstValidatorTests,MerkleComplianceArchiveTests,SemanticMemoryTests,TemplateRegistryExpansionTests. - Detail: ARCHITECTURE-control-plane.md.
- Target:
net10.0. References: Core. Packages: none. - Referenced by:
splat-mcp, the console (since 2026-09-24, for the leased missions) and the tests. - Owns:
WslLeasedExecutor.cs,TemplatePolicyCompiler.cs,LinuxLeaseSubstrate.cs— the jail, job and launcher a governed mission gets when its template names the Linux lease, with the lease compiled from the template —WslSubstrateHealthChecker.cs. - Tests:
LinuxSubstrateAndCompilerTests,SubstrateHealthHonestyTests,WslLeasedExecutorWireTests,LeasedMissionTests. - Detail: ARCHITECTURE-linux-substrate.md.
- 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 ofsplat-mcpso the desktop app could install, check and remove its own guest. - Owns:
SubstrateDoctor.cs— what this host will enforce;SubstrateProvisioner.csandSubstrateUnmounter.cs— mount and unmount, withMountManifest.csbetween 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, withManagedBridgeConfiguration.csandManagedLeaseRequest.cs. The daemonprovisioninstalls is embedded here whenSplatAgentBinaryis passed, so it reachessplat-mcp.exethrough the reference. - Tests:
SubstrateDoctorTests,SubstrateProvisionerTests,SubstrateUnmountTests,SubstrateLifecycleTests,ManagedBridgeTests.
- Target:
net10.0-windows10.0.19041.0, minimum platform10.0.17763.0,win-x64, unpackaged (WindowsPackageTypeNone), with both .NET and the Windows App SDK self-contained indist\App. - References: Core, Windows, Network, Data, Linux, Host.
- Packages:
Microsoft.WindowsAppSDK2.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 toFatalErrorLogand 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 underViews/and a view model at the project root. - Rendering:
Effects/— composition shaders, and Win2D HLSL whose bytecode is built only when the SDK'sfxcis found;Graphics/— a Direct3D swap-chain host. The palette isStyles/SplatDesignTokens.xaml. - Suppressed warning:
MVVMTK0045, with the reasoning in the project file;UiWarningSuppressionTestsfails if AOT or trimming is ever switched on, the one case where the warning would matter. - Runs from
dist\App, adotnet publishoutput — see CONTEXT.md. - Self-test:
MissionController.UI.exe --self-test [--self-test-report <path>]opens every page inMainWindow.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.ps1runs 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, andCompositionRootTestsholds its page list to every view underViews/and every menu item.
- Target:
net10.0-windows, exe, root namespaceSplatMcp. - References: Core, Linux, Host, Data, Network, Windows. Packages:
System.ServiceProcess.ServiceController. - Referenced by: the tests.
- Owns:
Program.cs— composition and the stdio loop;McpServerCommand.cs— the command line, decided before anything is built;McpServerHandler.cs— dispatch and the thirteen tools, withMcpServerHandler.ManagedLease.csserving the console's managed leases;ManagedBridgeHost.csandManagedBridgeCommand.cs— the managed bridge service and its deployment;McpProtocol.cs— the JSON-RPC and MCP records;McpOperatorIdentityProvider.cs;WorkspaceGuard.cs. - Tests:
AuditPayloadAndPreExecutionAuthTests,McpServerTests,McpTraceAnchorTests,OperatorAttributionTests,SplatMcpCommandLineTests,WorkspaceConfinementTests, andDocumentationDriftTests, which holdstools/listto the README. - Detail: ARCHITECTURE-agent-surface.md.
- 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 0through the governed launch path and bare, alternating, and writesbench-*.jsontoevidence/. It is not part ofdotnet test— timing assertions in a suite get flaky and then muted — and is run withdotnet run --project src/splat-bench -c Release.
- 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 ofdotnet test. - Constraint: data-driven tests use
[InlineData]only.NoDataSourceEscapesTheTestCounterfails 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 - andMissionReplayTestsruns every one through the real post-tool pipeline with no model, viaMissionReplayHarness;MissionFixtureExporterturns the console's own indexed runs into fixtures. The live canary inLiveMissionTestsrecords a large template's run and replays it before it passes. - Cross-cutting:
DocumentationDriftTests,EndToEndVerificationTestswithDiagnosticVerificationRunner.
- Crate:
splat-agent0.2.0, edition 2021. Dependencies:libbpf-rs0.24 — its API still moves, so the version is pinned — plustokio,clap,serde,serde_json,libc,anyhow,ctrlc,tracing, andhmac0.12 withsha20.10 for protocol 3's handshake;libbpf-cargo0.24 at build time. - Owns:
src/main.rs— the daemon and its protocol;lease.rs,cgroup.rs,auth.rs,violation.rs,secrets.rs,secret_memory.rs,secret_recovery.rs,identities.rs, andexecution.rs— the opt-in secret broker and child controls, with their separate 5.2 contract and proof boundary;cow.rs, which is parked;src/bpf/lease_lsm.bpf.c; a generatedvmlinux.h— never hand-edit it. - Scripts:
run-daemon.shbuilds into~/.cache/splat-agent-target— not/tmp, where any guest user could plant what it runs — and starts the daemon as root on loopback;probe-daemon.shexercises a running daemon. - Evidence:
evidence/. Policy:SUPPORTED_POLICY.md. - Tests:
cargo testfor what userspace can check; the root probe for everything else. - Detail: ARCHITECTURE-linux-substrate.md.
- Crate:
splat-canary0.1.0, licenseGPL-2.0-only— a BPF-LSM program must be GPL-compatible — withlibbpf-rs0.24 pinned like the daemon's. - Scripts:
preflight.shgives a GREEN, YELLOW or RED verdict on the kernel;setup-guest.shinstalls the toolchain and generatesvmlinux.h;run-canary.shbuilds 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.
- Package:
splat-langgraph0.1.0, Python ≥ 3.10. Dependencies:mcp,langchain-core,pydantic;langgraphas an extra. Declared license: MIT, inpyproject.toml— the repository as a whole is proprietary. - Owns:
splat_langgraph/substrate.py,splat_langgraph/tools.py. - Tests: none in this repository.
- Detail: ARCHITECTURE-agent-surface.md.
build-msix.ps1publishes the console self-contained forwin-x64and packs and signs an MSIX when the Windows SDK'smakeappxandsigntoolare present.dist\Appis self-contained too since 2026-09-18, so the two differ only in packaging.install-enterprise.ps1anduninstall-enterprise.ps1are 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 throughwsl -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-mcpwithout an installer.
| 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 |
$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.