Skip to content

Decide: move CShells.Nuplane out of the core repo and adopt the single-consumer rule #178

Open

Description

@sfmskywalker

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.Nuplane is 375 src LOC. tests/CShells.Tests/Integration/Nuplane is ~1.9k LOC across 9 files (a 5x test-to-src ratio). Specs 021/023/024 are ~1.5k lines.
  • NuGet.Config adds the feedz-nuplane feed, and Directory.Packages.props pins Nuplane* 0.0.11-preview.99.
  • src/CShells.Nuplane/README.md:44 refers to "Foundation.Host" profiles. NuplaneRefreshCoordinatorTests.cs:361 tests Foundation and Workbench "policy profiles".
  • Since v0.0.30: src +2,940 LOC (+17%), tests +7,262, specs +3,944.

Proposal

  1. Maintainer decision: move src/CShells.Nuplane, its tests (tests/CShells.Tests/Integration/Nuplane/*) and specs 021/023/024 into the Nuplane or Foundation repo.
  2. Remove the feedz source from NuGet.Config, the Nuplane entries from Directory.Packages.props and publish.yml, and the Nuplane project reference from CShells.Tests.
  3. Keep in core only the generic seam it needs: IFeatureAssemblyProvider plus 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.
  4. Record in AGENTS.md: a capability needed by a single downstream host lives in that host's repo until a second consumer needs it.
  5. 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

  1. sfmskywalker commented on Oct 10, 2026

    @sfmskywalker
    CollaboratorAuthor

    Additional evidence: one more core API serves only Nuplane.

    CShellsBuilder.ShareSingletonWithShells<T>() (src/CShells/DependencyInjection/CShellsBuilder.cs, added in #150) has one caller in src/ and samples/: src/CShells.Nuplane/CShellsNuplaneBuilderExtensions.cs:42 (builder.ShareSingletonWithShells<CoordinatorHolder>()). The feature includes:

    • about 100 lines of shared-singleton resolution and root-service copying in ShellProviderBuilder;
    • a README section of edge-case rules;
    • 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 ShareSingletonWithShells stays 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).

  2. sfmskywalker commented on Oct 20, 2026

    @sfmskywalker
    CollaboratorAuthor

    [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).

    Labelled audit:approved. The fixer delivers it in the wave order posted on #209.


    Generated by Claude Code

  3. added
    audit:approvedTriaged and approved; eligible for the automated fixer
    and removed
    audit:proposedFiled by the quality audit; awaiting maintainer triage
    on Oct 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:productQuality audit area: productaudit:approvedTriaged and approved; eligible for the automated fixerbreaking-changeChanges public API or behaviorpriority:P2Important

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions