Skip to content

[umbrella] Template family rationalisation — variant packs, not variant repos (measured: 6-file delta) #634

Description

@hyperpolymath

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.

Activity

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

    designDesign of an interface, protocol, grammar, or type theorymeta:umbrellaParent issue aggregating child issuespriority:p3Low - nice to havescope:estateAffects many or all repos across the estatetech-debtKnown shortcut, drift, or hygiene owed - includes cleanup

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions