diff --git a/.derived/codebase-index/by-spec/003-product-family-registry.json b/.derived/codebase-index/by-spec/003-product-family-registry.json index 04ca924..f5c831a 100644 --- a/.derived/codebase-index/by-spec/003-product-family-registry.json +++ b/.derived/codebase-index/by-spec/003-product-family-registry.json @@ -29,5 +29,5 @@ "specStatus": "approved" }, "schemaVersion": "1.1.0", - "shardHash": "433eb99012f76eda5b5940890a1cf35a223c0b32acaee0446d074f251cb555fa" + "shardHash": "367dbdba178c66db7708d077ae5b78774614bc2880620ca4187ad703ff3266ea" } diff --git a/.derived/spec-registry/by-spec/003-product-family-registry.json b/.derived/spec-registry/by-spec/003-product-family-registry.json index ac02948..acbead8 100644 --- a/.derived/spec-registry/by-spec/003-product-family-registry.json +++ b/.derived/spec-registry/by-spec/003-product-family-registry.json @@ -30,6 +30,6 @@ "summary": "The canonical registry of the Statecraft product family: each repo's name, role, SPDX license, and URL, encoded once in app/lib/product-family.ts and consumed by the index family section, the footer, and the /registry viewer's repoMeta lookup. This spec gives that module a single explicit owner so a roster change (a repo added, removed, or re-described) is an ordinary authoring edit here plus the module, with no coupling waiver and no edit to the scaffold (001) or launch-content (002) specs. It owns the roster data, not the rendering.\n", "title": "Product-family registry: a single owner for the shared repo list" }, - "shardHash": "69d16df0efddc33e2ef09a97626c9662efa2a8be3f0c4b5a092b21649239526a", + "shardHash": "bdbe1f36bd561f96d6a61c98e598ec8494fb4913ec89c2af121bb6a9a57d96af", "specVersion": "1.1.0" } diff --git a/app/lib/product-family.ts b/app/lib/product-family.ts index 7c11d7f..bd394c8 100644 --- a/app/lib/product-family.ts +++ b/app/lib/product-family.ts @@ -91,6 +91,13 @@ export const REPO_META: Record = { role: "a rolling-window trust scorer: weighted samples map to a graduated privilege level", url: `${ORG_URL}/trust-window`, }, + statecrafting: { + repo: "statecrafting", + name: "statecrafting", + license: "Apache-2.0", + role: "the shared native packages: the @statecrafting/* napi addons and the Encore build toolchain", + url: `${ORG_URL}/statecrafting`, + }, "statecraft.ing": { repo: "statecraft.ing", name: "statecraft.ing", @@ -112,6 +119,7 @@ export const PRODUCT_FAMILY: RepoMeta[] = [ REPO_META["attest-ledger"], REPO_META["canonical-keysort-json"], REPO_META["trust-window"], + REPO_META["statecrafting"], ]; export function repoMeta(repo: string): RepoMeta | undefined { diff --git a/specs/003-product-family-registry/spec.md b/specs/003-product-family-registry/spec.md index 31a608e..4e5756c 100644 --- a/specs/003-product-family-registry/spec.md +++ b/specs/003-product-family-registry/spec.md @@ -63,7 +63,7 @@ repo-list change. This spec removes that recurring friction. ## 3. The roster -Ten public repositories under the `statecrafting` org, each checkable +Eleven public repositories under the `statecrafting` org, each checkable against its own repo; the license is the SPDX id in that repo's LICENSE. Each URL is `https://github.com/statecrafting/`. @@ -79,13 +79,18 @@ Each URL is `https://github.com/statecrafting/`. | attest-ledger | the tamper-evident, hash-linked record ledger | Apache-2.0 | | canonical-keysort-json | canonical JSON at the hash boundary | Apache-2.0 | | trust-window | the rolling-window trust scorer | Apache-2.0 | +| statecrafting | the shared native packages (the @statecrafting/* napi addons and the Encore toolchain) | Apache-2.0 | + +The `statecrafting` repo's root LICENSE is Apache-2.0 (the org-scope +default); two of its packages carry AGPL-3.0 per-package licenses, which +the repo's own spec corpus documents. `REPO_META` also carries a `statecraft.ing` entry (this site, unlicensed) as a lookup convenience; it is not part of the public roster above. ## 4. Acceptance -- `app/lib/product-family.ts` encodes exactly these ten repos, in this +- `app/lib/product-family.ts` encodes exactly these eleven repos, in this order, with these licenses; each role is a faithful one-line summary of the repo's own description (the module may phrase it more fully). - A subsequent roster edit (this section 3 plus the module) passes @@ -110,3 +115,7 @@ spec declares ownership rather than creating the file, hence `origin.retroactive: true`. No code change ships with this spec; the module already matches section 3. The next roster edit couples cleanly against this spec instead of requiring a waiver. + +2026-07-23: first such roster edit; the `statecrafting` packages repo +(the @statecrafting/* napi addons and the Encore toolchain) joins as the +eleventh member, coupled here plus the module, no waiver.