Repository navigation
Decide: move CShells.Nuplane out of the core repo and adopt the single-consumer rule #178
Description
Problem
Integration code for one dynamic-loading product (Nuplane, used by Foundation.Host), and its build dependency on a third-party preview feed, live in the core repo. Core APIs (build leases, the activation runner, activation participants) were shaped around that single consumer. Every clone of the solution needs the feedz feed to restore. All 15 PRs from #150 to #169 are generation, activation or Nuplane machinery, while the getting-started docs did not change.
Evidence
src/CShells.Nuplaneis 375 src LOC.tests/CShells.Tests/Integration/Nuplaneis ~1.9k LOC across 9 files (a 5x test-to-src ratio). Specs 021/023/024 are ~1.5k lines.NuGet.Configadds thefeedz-nuplanefeed, andDirectory.Packages.propspinsNuplane*0.0.11-preview.99.src/CShells.Nuplane/README.md:44refers to "Foundation.Host" profiles.NuplaneRefreshCoordinatorTests.cs:361tests Foundation and Workbench "policy profiles".- Since v0.0.30: src +2,940 LOC (+17%), tests +7,262, specs +3,944.
Proposal
- Maintainer decision: move
src/CShells.Nuplane, its tests (tests/CShells.Tests/Integration/Nuplane/*) and specs 021/023/024 into the Nuplane or Foundation repo. - Remove the feedz source from
NuGet.Config, the Nuplane entries fromDirectory.Packages.propsand publish.yml, and the Nuplane project reference from CShells.Tests. - Keep in core only the generic seam it needs:
IFeatureAssemblyProviderplus a public "refresh/mark catalog stale" call on the feature catalog (defined in the build-lease removal issue). Mark it[Experimental]if it is new. - Record in AGENTS.md: a capability needed by a single downstream host lives in that host's repo until a second consumer needs it.
- If the decision is to keep Nuplane in-repo, do the "Consolidate Nuplane tests" issue instead.
What this removes
src/CShells.Nuplane, ~1.9k test LOC, ~1.5k spec lines, the preview feed, and the Nuplane package entries.
Breaking changes
The CShells.Nuplane package moves to another repo and package owner. It has never been published to nuget.org.
Acceptance criteria
- The decision is recorded (ADR or issue comment).
- If moved: the solution restores from nuget.org alone, no Nuplane reference remains in this repo, and the downstream repo builds against the public CShells seam.
- The single-consumer rule is in AGENTS.md.
Filed by the baseline quality audit (2026-10-10, c596ca2) · draft #9 · priority P2 · effort M · est. net -1800 lines · kind remove · audit findings: product-3, tests-9. Promote to audit:approved to make it eligible for the automated fixer.
Activity
sfmskywalker commentedon Oct 10, 2026
Additional evidence: one more core API serves only Nuplane.
CShellsBuilder.ShareSingletonWithShells<T>()(src/CShells/DependencyInjection/CShellsBuilder.cs, added in #150) has one caller insrc/andsamples/:src/CShells.Nuplane/CShellsNuplaneBuilderExtensions.cs:42(builder.ShareSingletonWithShells<CoordinatorHolder>()). The feature includes:ShellProviderBuilder;tests/CShells.Tests/Integration/DependencyInjection/ShareSingletonWithShellsTests.cs(33 references).No sample or doc scenario uses it outside Nuplane. If this issue moves Nuplane out, decide in the same step whether
ShareSingletonWithShellsstays as a general feature (then add a non-Nuplane documented scenario) or goes too, with Nuplane registering its holder through its own factory.Added by the weekly quality review (2026-10-10, 77879eb, focus: product).
sfmskywalker commentedon Oct 20, 2026
[Claude] Triage verdict: Accept-modified. Owner decision of 20 Oct 2026: batch-triage the open audits, then cut 1.0 (valence-works/elsa-control#868).
ShareSingletonWithShells(only callerCShellsNuplaneBuilderExtensions.cs:42)Labelled
audit:approved. The fixer delivers it in the wave order posted on #209.Generated by Claude Code