- Owns Aspire application composition for KeyLoad services and infrastructure resources.
- Entry point:
Program.cs; benchmark resource composition:Features/BenchmarkComparisons/Resources/BenchmarkResources.cs.
- Keep host wiring and genuinely shared infrastructure composition here. Feature-specific deployment behavior belongs under
Features/<SliceName>/and the matchingdocs/Features/<SliceName>.md. - Aspire owns resource orchestration, not database storage state or atomic partition identity. Each node-local
PartitionHostowns storage, journals, file locks and the apply gate; Orleans grains route commands and physical placement remains separate from atomic partition identity. - ClusterResources composes actual Docker RF3 resources. Do not replace the required Docker/Aspire RF3 topology with an in-memory or single-node demonstration. The accepted ADR-082 protocol-cohort test seam preserves fixed three-voter membership and node-local storage ownership.
- The canonical Aspire-owned test entry is defined by root AGENTS.md and ADR-074. AppHost defaults to Release because the pinned Aspire CLI evaluates RunCommand without forwarding outer dotnet-run configuration; verify the actual launched path and native TUnit outcomes. Do not bypass CLI/DCP or count stale Debug output as current qualification.
- GitHub Actions solution build:
dotnet build KeyLoad.slnx --no-restore --configuration Release. - Owner correction2026-10-03 requires every test caller, including integration/RF3, to use
dotnet run --project src/KeyLoad.AppHost --no-build --no-restore --configuration Release -- --KeyLoadTests:Suite=<suite>. Native dotnet test is only the owned child process; preserve all suites and original artifacts. Delivered-source qualification remains actual Linux GitHub Actions evidence.
- Applicable skills: none installed; skill installation is prohibited by owner direction.
- Owner correction2026-10-03 explicitly permits local development through the same Aspire-owned entry. Preserve secret boundaries, resource health dependencies, scoped fault injection, complete resource shutdown and the required Orleans RF3 topology; local results do not qualify delivered-source Linux or public performance gates.
- Read the root policy, architecture map, RepositoryGovernance feature, and ADR-032 first.
- Owned composition slices:
ClusterReplication,ClusterRouting,TestInfrastructureandBenchmarkComparisons; target paths use the sameFeatures/<SliceName>/convention. ClusterRouting's protocol image overrides follow NativeCqrsRequestV2 and ADR-082; they are allowed only in an explicitly selected ephemeral fixed-three-voter child test topology, never benchmark or ordinary production composition. - Keep
Program.csas the shared Aspire composition entry point; put feature-owned resource definitions under their named slice. Features/CodeQuality/owns the test-only native functional coverage configuration and Aspire preparation/resource dependencies under ADR-033 and CodeQuality AC-CQ-039..042. Use the same centrally pinned Microsoft engine as MTP, downloaded as a package; do not install a global tool. Preserve exact contributor/source/DLL/PDB/image identity, original process settlement and all full mandatory suites. Runtime coverage still comes from the original owned server processes, not the AppHost assembly.
- Keep feature-owned implementation inside its canonical
Features/<SliceName>/and organize it in populated, feature-local responsibility folders (such asModels/,Contracts/,Commands/,Queries/,Transport/,Hosting/,Serialization/, orValidation/). Do not leave a flat dump of unrelated responsibilities at the slice root; keep only genuinely shared building blocks and executable/composition entry points outside feature slices. Preserve namespaces and runtime contracts during physical moves.
- ADR-117 supersedes the earlier outer AppHost caller requirements: CI starts TUnit directly after build with Detailed output. Test fixtures own Aspire infrastructure startup, readiness, client operations and cleanup. scripts/Features/TestInfrastructure/run-tests.mjs only selects native test arguments/environment; it cannot execute database workloads. RF3 coverage preparation belongs to the TUnit session lifecycle. Preserve every original qualification/artifact gate and separate Benchmarks ownership.