Design Proposal: Excititor Module Filesystem Path

Audience: Sprint authors, reviewers, and new contributors confused by why the Excititor libraries live under the Concelier source tree. This is a proposal recording the recommended course (retain + document), not a directory-move plan being executed.

Status: Proposed (recommendation: retain + document) Date: 2026-05-12 Sprint: docs/implplan/SPRINT_20260512_021_Concelier_Excititor_credentials_resolver_wiring.md — TASK-021-09 Related dossier: Excititor Module Architecture Authors: Project Manager / Excititor

Context

Every Excititor library (StellaOps.Excititor.Core, StellaOps.Excititor.Persistence, StellaOps.Excititor.Export, StellaOps.Excititor.Policy, StellaOps.Excititor.Attestation, all 8 StellaOps.Excititor.Connectors.*, etc. — 17 projects total) lives under src/Concelier/__Libraries/. There is no top-level src/Excititor/ directory.

This is organizationally confusing for sprint scoping: SPRINT_20260512_021 explicitly wanted to scope “Concelier vs Excititor” cleanly and could not without naming the Concelier subdirectory.

Historical note: Excititor was originally a Concelier submodule (VEX ingestion was an internal capability of the advisory engine). The namespace StellaOps.Excititor.* was introduced when Excititor became an independent module, but the filesystem path stuck because moving it was scope-prohibitive.

Options

Option A — Rename to src/Excititor/__Libraries/StellaOps.Excititor.*

Mirrors the Concelier / Scanner / Authority / etc. layout. Clean separation, sprint scoping becomes trivial.

Option B — Retain + document the historical reason

Leave the filesystem layout as-is. Add a short note at the top of docs/modules/excititor/architecture.md and a README.md under src/Concelier/__Libraries/ that explicitly states “Excititor projects live here for historical reasons; the namespace StellaOps.Excititor.* signals the actual module ownership.”

Recommendation

Option B — retain + document.

The rename would touch 60+ files across solution files, csproj graphs, sprint history, dossiers, and CI scripts for purely organizational tidiness. The namespace StellaOps.Excititor.* already carries the ownership signal that matters to compilers, test runners, NuGet packaging, and runtime plugin discovery. The filesystem path is a historical artifact, not an architectural constraint.

Sprint scoping pain is real but bounded: sprint authors can write “Working directory: src/Concelier/__Libraries/StellaOps.Excititor.*” with a short footnote, exactly as TASK-021-07 does today. A __Libraries/README.md makes this footnote unnecessary on the second encounter.

Implementation surface (Option B)

  1. Add src/Concelier/__Libraries/README.md with the historical note and a one-line table:
    • “Concelier-owned libs: anything not starting with StellaOps.Excititor.*.”
    • “Excititor-owned libs: anything starting with StellaOps.Excititor.*. These live here for historical reasons; ownership is signaled by the namespace, not the path.”
  2. Add a ## Module path section near the top of docs/modules/excititor/architecture.md linking to this proposal.
  3. Update CLAUDE.md §1.4 (“Examples of module locations”) to include a footnote that Excititor lives under src/Concelier/__Libraries/StellaOps.Excititor.*.

When to revisit

If/when any of the following occur, re-open the rename decision:

Until any of those triggers fire, the cost-benefit favors retention.