GloriousFlywheel MassageIthaca Dogfood Playbook 2026-04-17
Superseded on 2026-04-23 by the pooled substrate dogfood reset. Hosted beta-validation escape hatches are not acceptable as the canonical contract for
MassageIthaca.Correction on 2026-04-23: Repo-specific runner labels such as
massageithaca-*are not the intended GloriousFlywheel architecture. Treat earlier repo-shaped lane language in this note as historical drift, not as the active platform direction.Additional correction on 2026-04-24: Preserve this note only for the beta-validation evidence and branch/runtime facts it captured. Its earlier repo-owned dogfood framing is retired; do not use this note to justify
MassageIthaca-specific runner taxonomy or repo-owned canaries.
Snapshot date: 2026-04-17
Correction on 2026-04-24:
- the later Phase 2 live test showed the historical multilabel array
["self-hosted","Linux","X64","honey","massageithaca"]was not a broker-assigned contract - the current proven repo variable is
["massageithaca"] - treat the older array below as unproven intent, not current authority truth
Purpose
Capture a historical snapshot of how MassageIthaca exposed beta-validation
gaps and repo-shaped runner drift during April 2026.
This note is useful as evidence for why the pooled-substrate reset happened. It is not active architecture guidance, and it should not be read as advocating a repo-local runner contract.
GitHub owner: #210
Why MassageIthaca Matters
Jesssullivan/MassageIthaca is not just another downstream repo:
- it exposed that repo-local labels and variables had been allowed to stand in for the shared capability-class contract
- it is a real product repo with deploy, smoke, and Playwright-style beta validation instead of only build-only CI
- it exposes the remaining contract gap cleanly inside one repo: core CI was already attempting self-hosted execution, while beta validation still escaped to GitHub-hosted runners
Observed Workflow Reality
From direct workflow, variable, and run inspection on 2026-04-17:
.github/workflows/ci.ymltest-unit,theme-validate,check, andbuildall use:runs-on: ${{ fromJSON(vars.PRIMARY_LINUX_RUNNER_LABELS_JSON || '["ubuntu-latest"]') }}- repository variable
PRIMARY_LINUX_RUNNER_LABELS_JSONis set to:["self-hosted","Linux","X64","honey","massageithaca"] smoke-betaande2e-betastill use plainubuntu-latest
dev/mainrun24561967515- green:
Theme Validation(71812543065),Unit Tests(71812543084),Type Check(71812629814), andBuild(71812629852) - failed before runner assignment:
E2E Tests (Beta)(71812744601) andSmoke Test (Beta)(71812744629) - GitHub’s job annotation says those jobs were not started because recent account payments failed or the spending limit needs to be increased
- green:
- newer PR run
24562197983forMassageIthaca#186is green, so the repo is still moving and the blocker is not a fresh application regression theme-validatealready succeeds on the repo-local lane arrangement that was in use with Playwright Chromium install, which shows the remaining problem is narrower than “Playwright cannot run on self-hosted runners”e2e-betastill usesnpx playwright install --with-deps chromium, which is a strong sign that browser/bootstrap assumptions still lean on the GitHub-hosted image path
Current Problem Shape
The problem is not runner registration and it is not app logic.
The actual problem is that the downstream repo still mixed a repo-local runner story with hosted fallback:
- primary CI already uses dedicated self-hosted labels
- beta post-deploy validation still depends on GitHub-hosted
ubuntu-latest - GitHub billing can therefore block the visible promotion path even when the self-hosted lane is healthy
Historical First Patch Goal, Now Retired
The durable lesson is not “preserve a MassageIthaca lane.”
The durable lesson is that GloriousFlywheel needed one shared substrate story for both core CI and post-deploy beta validation, with any temporary compatibility bridge called out as debt rather than canon.
That means:
- move
smoke-betaande2e-betatoward the same shared-substrate-backed selector, or document any temporary repo-local bridge as debt - make browser/bootstrap expectations explicit for self-hosted beta checks
instead of inheriting
ubuntu-latestimage folklore - keep GitHub-hosted fallback, if still needed, as explicit compatibility rather than the authoritative dogfood path
Historical Interpretation, Corrected
MassageIthaca remains useful as evidence for a specific false turn and gap
because:
- it recorded that a repo-local lane arrangement had become part of the story
- its current failure is isolated to historical hosted beta-validation fallback paths
- it showed why GloriousFlywheel needed to tighten the pooled-substrate contract without preserving repo-owned canaries
What Not To Do First
- do not call this a new application regression when the failed jobs never started
- do not use GitHub billing noise as evidence that the self-hosted dogfood lane is unstable
- do not patch unrelated green jobs before closing the beta-validation authority gap
- do not describe repo-local labels or
ubuntu-latestbeta jobs as if they were the actual GloriousFlywheel dogfood contract
Historical Takeaways To Preserve
- this note remains readable as evidence that hosted beta-validation fallback masked a real shared-substrate gap
- future readers can see that repo-local labels were part of the drift, not the target architecture
- follow-on work is steered toward pooled capability classes and explicit browser/bootstrap assumptions instead of repo-owned canaries