pub enum Ecosystem {
Npm,
Pypi,
Go,
Crates,
Maven,
Nuget,
}Expand description
Locked vocabulary per matrix §8 — ecosystem identifiers are always lowercase.
CLEANLIB-373 + CLEANLIB-374 close: Crates and Maven join the accepted
set. Both emit shell-snippet form (no canonical_location) because the
canonical config file placement is workflow-dependent — cargo per-user
(~/.cargo/config.toml) vs per-workspace, maven per-user
(~/.m2/settings.xml) vs per-project mvn -s. config init prints the
snippet + the recommended file path in the header line rather than
silently mutating either default. Sister of the Ecosystem::Go shape
which follows the same shell-snippet pattern for GOPROXY / GOAUTH.
CLEANLIB-818 close: Nuget joins the accepted set. All four App-side
layers nuget requires were verified live in prod (service index +
list_versions enumeration + attested .nupkg serve + a provisioned
drain job) — the refusal here had no technical basis, a stale
hard-coded allow-list. Rubygems and Composer deliberately do NOT
join: per CLEANLIB-818’s own explicit scoping, the platform genuinely
does not resolve those two yet (their App-side endpoints 404) — adding
them to this enum would silence a CORRECT refusal and hand a customer a
config that looks right and fails on every restore. That work is
server-side, tracked in CLEANLIB-818’s sibling ticket, a different repo.
Nuget follows the Maven precedent (XML merged into an existing file,
not npm’s, since NuGet.Config is XML with the same
mirror-entry + credential-block shape) and the same canonical_location-
empty reasoning: NuGet.Config resolution is per-project or per-user
(~/.nuget/NuGet/NuGet.Config / %APPDATA%\NuGet\NuGet.Config),
workflow-dependent same as cargo/maven.
Variants§
Npm
Pypi
Go
Crates
CLEANLIB-373 — cargo / crates.io registry (rustaceans).
Maven
CLEANLIB-374 — Maven Central (JVM: maven/gradle/sbt).
Nuget
CLEANLIB-818 — NuGet (V3 protocol, .NET/C#).