GloriousFlywheel Tier Scorecard And Template Remediation 2026-04-17
Snapshot date: 2026-04-17
Purpose
Take the exception register and repo matrix one step further:
- score the current active repo set by evidence tier
- identify the highest-leverage contract debt
- define the first two promotion packages that would materially improve the scorecard
Companion notes:
- gloriousflywheel-exception-register-and-promotion-rules-2026-04-17.md
- gloriousflywheel-active-owned-repo-adoption-board-2026-04-17.md
- gloriousflywheel-wave0-wave1-classification-matrix-2026-04-17.md
Active Set Scorecard
This scorecard uses the current active repo set from the adoption board:
- 8 Wave 0 repos
- 6 Wave 1 repos
- 14 active repos total
Strict scoring rule:
- use the current authoritative workflow surface
- score the default branch unless the repo is visibly being driven through a different named authority branch
- do not count feature-branch-only or manual-only proof as routine adoption
Tier Distribution
Strict Current-State View
| Tier | Meaning | Repos | Count |
|---|---|---|---|
| Tier 0 | hosted only | tinyclaw |
1 |
| Tier 1 | hosted cache consumer | betterkvm, remote-juggler, tummycrypt |
3 |
| Tier 2 | hosted template consumer | tinyvectors |
1 |
| Tier 3 | shared self-hosted consumer | lab, yt-text |
2 |
| Tier 4 | repo-owned dedicated dogfood lane | scheduling-kit |
1 |
| Tier X | hybrid surface | GloriousFlywheel, MassageIthaca, tinyland.dev, XoxdWM, blahaj, acuity-middleware |
6 |
Near-Term View After The Known MassageIthaca Promotion
If Jesssullivan/MassageIthaca#189 lands cleanly on the active product branch,
the score becomes:
- Tier 4:
MassageIthaca - Tier X drops from
6to5
That is the clearest single downstream promotion currently visible.
What The Scorecard Means
1. Real Runner Dogfood Is Still Small
Strict current-state score after verifying repo-variable-backed dedicated lanes:
- Tier 3 plus Tier 4 repos:
3of14 - that is about
21%of the active set
Near-term optimistic score after the known MassageIthaca promotion:
- Tier 3 plus Tier 4 repos:
4of14 - that is about
29%of the active set
That is the honest answer to “how close are we to the promise?” for active repos.
2. The Middle Of The Program Is Not Self-Hosted Yet
The largest block that can be moved without inventing new infrastructure is:
- Tier 1 hosted cache consumers:
3 - Tier 2 hosted template consumers:
1 - Tier X hybrids with already-real self-hosted lanes but unresolved exceptions:
6
That means the next gains come from two different directions:
- lifting hosted cache and template repos into self-hosted use
- collapsing hybrid repos into cleaner contract shapes
3. The Biggest Reporting Risk Is Hybrid Overstatement
Tier X is currently 6 repos.
Those are the easiest repos to overstate in status reports because they contain real platform usage and real exceptions in the same surface.
That group includes both:
- the source repo itself
- named product dogfood and canary repos
The Highest-Leverage Debt Surface
That surface is tinyland-inc/ci-templates.
Observed blast radius from live repo inspection:
js-bazel-package.ymlis imported by:tinyvectorsscheduling-kitacuity-middleware
- live repo-variable inspection now shows:
scheduling-kithas a repo-specific self-hosted label variableacuity-middlewarehas a repo-specific self-hosted label variabletinyvectorsdoes not show a repo-level variable today
tinyvectorscurrently imports the shared template without passing runner labels in workflow codenpm-publish.ymlexists as a separate hosted-first workflow surface
This is small enough to fix quickly and important enough to move multiple repos at once.
Template Contract Debt
1. Hosted Fallback Is The Default
js-bazel-package.yml currently defaults runner_labels_json to
["ubuntu-latest"].
That means:
- a repo can look “platform-aligned” because it imports the shared workflow
- while still being fully hosted unless a repo variable or explicit input is present
This is acceptable as a migration bridge.
It is not acceptable as a long-term adoption metric.
2. Persistent Workspace Hygiene Is Still Encoded In The Template
The shared workflow uses:
actions/checkoutwithclean: false- repo-provided
cleanup_paths - best-effort
chmodplusrm -rf
That means the template currently spreads the old self-hosted workspace model instead of replacing it.
3. The Template Does Not Integrate The Platform Contract
js-bazel-package.yml currently does not use:
setup-flywheel- explicit self-hosted cache injection
- a standardized per-job scratch workspace
- explicit separation between hosted publish requirements and self-hosted build requirements
So even when the template runs on self-hosted runners, it is not expressing the GloriousFlywheel contract clearly.
4. The Publish Path Is Still Mixed By Environment
The template already special-cases npm provenance on hosted versus self-hosted
via runner.environment.
That is reasonable, but it means publication behavior is already environment dependent.
The repo should make that dependency explicit in policy instead of letting it sit as incidental shell logic.
Promotion Package A: Source Repo Self-Dogfood
Goal
Make GloriousFlywheel itself prove the normal platform contract on a normal
default-branch path.
Why This Matters
Right now the source repo splits proof between:
- default-branch hosted validation
- partial shared-runner app checks
- branch-gated ARC runner proof
That weakens every downstream claim.
Smallest Useful Package
- create or promote one default-branch workflow that runs on:
tinyland-dockertinyland-nixtinyland-nix-heavy
- move the current
test-arc-runners.ymlassertions into that routine path:- Nix bootstrap
- cache endpoint injection
- heavy-lane basic validation
- keep hosted utility and publication paths visibly separate as exceptions:
- docs
- external link checking
- release publication
- image builds if they still need hosted authority
Expected Scorecard Effect
- does not change repo count immediately
- but removes the biggest credibility gap in the whole program
Promotion Package B: js-bazel-package V2
Goal
Turn the shared JS and Bazel package workflow from a migration bridge into a real platform contract.
Smallest Useful Package
- require explicit runner intent
runner_mode: hosted | shared | repo_owned- keep
runner_labels_jsonas an override, not as the primary policy input
- remove persistent workspace dependence
- use
actions/checkoutwith clean behavior restored - or stage work into a per-job path under
$RUNNER_TEMP
- use
- add explicit platform integration for self-hosted modes
- call
setup-flywheel - define cache or scratch paths predictably
- call
- split build validation from publication authority
- allow build and package validation on self-hosted lanes
- keep hosted publish as a named policy exception when provenance or hosted token flows still require it
First Pilot Repos
Jesssullivan/acuity-middlewareJesssullivan/scheduling-kit
Reason:
- both already use the template
- both already express runner indirection
- both currently inherit the hygiene defect directly
Expected Scorecard Effect
If the template is fixed and both repos stay on their verified repo-owned self-hosted lanes:
- Tier counts do not change much immediately
- but one Tier 4 repo and one Tier X hybrid repo become clean contract proofs
- that is still the biggest multi-repo quality gain currently available from one shared change
If the same template then promotes tinyvectors onto verified self-hosted use:
- Tier 2 drops from
1to0 - Tier 4 rises from
1to2 - runner-dogfood score moves from
3/14to4/14even before countingMassageIthaca
Secondary Promotion Packages
These matter, but they should follow the two packages above.
tinyland.dev
Promotion condition:
- move authoritative product CI off
ubuntu-latest
Why second, not first:
- the repo is important, but it is still mixed across product CI, staging deploy, Nix package builds, and infra concerns
betterkvm
Promotion condition:
- move default-branch Nix CI from hosted to
tinyland-nix
Why second, not first:
- it is a clean hosted cache consumer, but less leveraged than fixing the template or the source repo
Recommended Metric Model
Stop reporting one adoption number.
Use these four numbers instead:
- real runner dogfood repos
- Tier 3 and Tier 4 only
- hosted cache consumers
- Tier 1
- hosted template consumers
- Tier 2
- hybrid exception repos
- Tier X
That model makes overstatement harder and promotion easier to reason about.
Recommendation
If only two engineering moves happen next, they should be:
- promote source-repo self-dogfood onto a default-branch proof path
- replace
js-bazel-package.ymlwith a real self-hosted contract and pilot it inacuity-middlewareandscheduling-kit
Those two moves would improve both the real platform and the honesty of the platform story at the same time.