The measurement that decides this
I diffed the spine (rsr-template-repo) against the one realised variant (rsr-julia-library-template-repo). The genuinely language-specific delta is six files:
Project.toml test/ julia-test.yml documentation.yml VARIANT.a2ml variant-drift-gate.yml
Every other difference is the variant drifting backwards:
- Markdown files (
ARCHITECTURE.md, GOVERNANCE.md, CHANGELOG.md) after the spine converted to AsciiDoc
flake.nix after the spine moved to Guix
- duplicate
GOVERNANCE.adoc + GOVERNANCE.md and MAINTAINERS + MAINTAINERS.adoc pairs
- legacy
RSR-PHILOSOPHY.adoc, AFFIRMATION.adoc, EXPLAINME.adoc the spine has shed
A whole repository is being maintained to carry six files of real difference, and it is accumulating debt the spine already paid off. That is the argument for variant packs rather than variant repos, and it is measured rather than asserted.
Only two repos in the org carry GitHub's template flag: rsr-template-repo and rsr-julia-library-template-repo.
Children
1. Collapse variant repos into variant packs
Encode the six-file Julia delta as a pack. Generalise rsr-julia-library-template-repo into a language-library form rather than a Julia-specific repo — per owner direction, "the julia one should be generalised to any language library".
2. Define the base forms
Owner's list, with my recommended shape and the project each pre-wires:
| Form |
Purpose |
Links to |
| general |
the spine as-is |
— |
| documentation / format |
spec and format repos |
a2ml-ecosystem, k9-ecosystem, palimpsest-license |
| language library |
generalised from the Julia variant |
nextgen-language-evangeliser |
| audit-grade / narratable |
pre-wires audit tooling |
grim-repo |
| security ecosystem |
|
refugia |
⚠️ Name check — the owner-named projects resolve under slightly different names, worth fixing before anyone hardcodes them:
| Named as |
Actually |
nextgen-language-evangelist |
nextgen-language-evangeliser (-iser) |
grim-repos |
grim-repo (singular) |
refugia |
✅ refugia — "Kea — curiosity-driven, post-platform security ecosystem" |
3. Retire standards/rhodium-standard-repositories/templates/
27 .template files. They are not what the spine ships and nothing consumes them:
- Different placeholder syntax — single-brace prose (
{Project Name}) vs the spine's machine placeholders ({{PROJECT_NAME}}, {{OWNER}}, {{REPO}})
- Different licence policy —
MIT & Palimpsest v0.8 vs the spine's MPL-2.0 + CC-BY-SA-4.0
- No live consumer —
scripts/fill-placeholders.sh:81 explicitly excludes them from filling
A superseded generation-1 asset set. Delete, or fold anything still wanted into the base forms.
4. Reconcile scaffoldia — it is the designated minter and it is 5% built
The GitHub description says "Full-featured repository designer… composes spine × variant pack × features × profile into new repos and retrofits existing ones." Its own STATE.a2ml disagrees:
completion-percentage = 5
phase = "design"
maturity = "experimental"
Phase 0 (RSR shell) 90%; Phases 1–4 (composer ADR, VARIANT packs, retrofit engine, template-sync loop) 0%. src/ contains no composer code. There is no gh repo create anywhere in it and no workflow invokes it. Recent commits are all AsciiDoc migration and dependabot bumps — zero feature commits.
Meanwhile a working engine exists and is declared dormant: developer-ecosystem/scaffoldia — a Haskell CLI (cli/scaffoldia.hs) with init/validate/list/build/check, a Nickel builder, and MiniKanren constraints. Resolution recorded 2026-07-21: canonical repo = design surface, fork = dormant engine, registry harvested as data.
Decide: build the composer, or revive the dormant engine. Stop maintaining two halves of one tool. Note this is the birth end of the control-plane gap in #633.
Two harvest caveats already flagged and unfixed: julia/package.ncl declares PMPL-1.0-or-later outside the three-repo Palimpsest carve-out (a policy violation if minted), and packs embed hardcoded @open.ac.uk authorship defaults.
Also in scope: launch-scaffolder is a second, narrower minter that already works from A2ML specs. Fold it into the decision rather than leaving three scaffolding tools.
5. Fix the lying .gitmodules
Full audit of rhodium-standard-repositories/.gitmodules — 8 of 12 entries dead, in three distinct defect classes:
| Class |
Entries |
| ✅ resolves |
cccp, palimpsest-license, rsr-template-repo |
| ❌ absent |
rhodium-pipeline, mustfile, well-known-ecosystem, robot-repo-automaton |
| ❌ aliased — path ≠ url repo |
satellites/rsr-certifier → git-rsr-certified; satellites/rsr-deployer → repo-slm-augmentor (both also absent) |
| ❌ claims files are repos |
META.scm, ECOSYSTEM.scm, state.scm — these are files vendored under satellites/, never projects |
Per owner ruling, do not recreate five absent repos. Delete the dead and aliased entries; de-vendor satellites/ only where a real repo exists.
Tracked against #493, whose body has been corrected with this audit.
Horizon: the spine↔variant delta was established by comparing top-level file lists, workflow sets and Justfile recipe counts — not a byte-for-byte content diff. Template-flag status and repo existence were read from the GitHub API. Scaffoldia's completion figure is its own declared STATE.a2ml value, not my assessment; my independent check was that src/ holds no composer implementation and no workflow invokes it.
The measurement that decides this
I diffed the spine (
rsr-template-repo) against the one realised variant (rsr-julia-library-template-repo). The genuinely language-specific delta is six files:Every other difference is the variant drifting backwards:
ARCHITECTURE.md,GOVERNANCE.md,CHANGELOG.md) after the spine converted to AsciiDocflake.nixafter the spine moved to GuixGOVERNANCE.adoc+GOVERNANCE.mdandMAINTAINERS+MAINTAINERS.adocpairsRSR-PHILOSOPHY.adoc,AFFIRMATION.adoc,EXPLAINME.adocthe spine has shedA whole repository is being maintained to carry six files of real difference, and it is accumulating debt the spine already paid off. That is the argument for variant packs rather than variant repos, and it is measured rather than asserted.
Only two repos in the org carry GitHub's template flag:
rsr-template-repoandrsr-julia-library-template-repo.Children
1. Collapse variant repos into variant packs
Encode the six-file Julia delta as a pack. Generalise
rsr-julia-library-template-repointo a language-library form rather than a Julia-specific repo — per owner direction, "the julia one should be generalised to any language library".2. Define the base forms
Owner's list, with my recommended shape and the project each pre-wires:
a2ml-ecosystem,k9-ecosystem,palimpsest-licensenextgen-language-evangelisergrim-reporefugianextgen-language-evangelistnextgen-language-evangeliser(-iser)grim-reposgrim-repo(singular)refugiarefugia— "Kea — curiosity-driven, post-platform security ecosystem"3. Retire
standards/rhodium-standard-repositories/templates/27
.templatefiles. They are not what the spine ships and nothing consumes them:{Project Name}) vs the spine's machine placeholders ({{PROJECT_NAME}},{{OWNER}},{{REPO}})MIT & Palimpsest v0.8vs the spine'sMPL-2.0+CC-BY-SA-4.0scripts/fill-placeholders.sh:81explicitly excludes them from fillingA superseded generation-1 asset set. Delete, or fold anything still wanted into the base forms.
4. Reconcile scaffoldia — it is the designated minter and it is 5% built
The GitHub description says "Full-featured repository designer… composes spine × variant pack × features × profile into new repos and retrofits existing ones." Its own
STATE.a2mldisagrees:Phase 0 (RSR shell) 90%; Phases 1–4 (composer ADR, VARIANT packs, retrofit engine, template-sync loop) 0%.
src/contains no composer code. There is nogh repo createanywhere in it and no workflow invokes it. Recent commits are all AsciiDoc migration and dependabot bumps — zero feature commits.Meanwhile a working engine exists and is declared dormant:
developer-ecosystem/scaffoldia— a Haskell CLI (cli/scaffoldia.hs) withinit/validate/list/build/check, a Nickel builder, and MiniKanren constraints. Resolution recorded 2026-07-21: canonical repo = design surface, fork = dormant engine, registry harvested as data.Decide: build the composer, or revive the dormant engine. Stop maintaining two halves of one tool. Note this is the birth end of the control-plane gap in #633.
Two harvest caveats already flagged and unfixed:
julia/package.ncldeclaresPMPL-1.0-or-lateroutside the three-repo Palimpsest carve-out (a policy violation if minted), and packs embed hardcoded@open.ac.ukauthorship defaults.Also in scope:
launch-scaffolderis a second, narrower minter that already works from A2ML specs. Fold it into the decision rather than leaving three scaffolding tools.5. Fix the lying
.gitmodulesFull audit of
rhodium-standard-repositories/.gitmodules— 8 of 12 entries dead, in three distinct defect classes:cccp,palimpsest-license,rsr-template-reporhodium-pipeline,mustfile,well-known-ecosystem,robot-repo-automatonsatellites/rsr-certifier→git-rsr-certified;satellites/rsr-deployer→repo-slm-augmentor(both also absent)META.scm,ECOSYSTEM.scm,state.scm— these are files vendored undersatellites/, never projectsPer owner ruling, do not recreate five absent repos. Delete the dead and aliased entries; de-vendor
satellites/only where a real repo exists.Tracked against #493, whose body has been corrected with this audit.
Horizon: the spine↔variant delta was established by comparing top-level file lists, workflow sets and Justfile recipe counts — not a byte-for-byte content diff. Template-flag status and repo existence were read from the GitHub API. Scaffoldia's completion figure is its own declared
STATE.a2mlvalue, not my assessment; my independent check was thatsrc/holds no composer implementation and no workflow invokes it.