GloriousFlywheel lab First Patch Playbook 2026-04-16
Snapshot date: 2026-04-16
Purpose
Define the first concrete downstream patch target for tinyland-inc/lab
under #210.
GitHub owner: #210
Why lab Goes Third
lab is the strongest cache and builder canary in tranche 1:
- it already uses
tinyland-nixheavily - it has distinct Nix, Bazel, deploy, and benchmark workflow families
- it is the cleanest place to separate FlakeHub-native Nix behavior from the GloriousFlywheel runtime contract for shared runner caches
Observed Workflow Reality
From direct workflow inspection on 2026-04-16:
nix-build.yml,cache-warm.yml,validate.yml, andnix-deploy.ymlalready use Determinate/FlakeHub-oriented Nix flows ontinyland-nixlab#71then surfaced a separate self-hosted Nix bootstrap failure that was not about TCFS at all:Build x86_64-linuxandDevShell Cachefailed ontinyland-nix- the logs showed
determinate-nixd: command not foundand thennix: command not foundbefore any repo build logic ran
- merged
lab#73corrected that by always runningDeterminateSystems/determinate-nix-action@v3on the affectedtinyland-nixjobs instead of assuming the self-hosted runner already has Nix installed runner-capacity-benchmark.yml- is benchmark-specific
- defaults to
tinyland-nix-capped - should remain a separate benchmark lane, not the default shared-label story
bazel-build.yml- runs on
tinyland-nix - branches on
BAZEL_REMOTE_CACHE - did not explicitly source the GloriousFlywheel runtime contract before the first local patch
- runs on
First Patch Goal
Make lab the cache/builder canary for shared Bazel cache behavior without
disturbing the already-intentional FlakeHub Nix lanes.
That means:
- patch Bazel first
- keep the FlakeHub Nix workflows intact
- leave benchmark-label policy as separate follow-on work
- treat self-hosted Nix bootstrap as workflow-owned, not as mutable runner folklore
Current Execution Status
Current execution state on 2026-04-16:
bazel-build.ymlis patched in a real local checkout at/tmp/lab/.github/workflows/bazel-build.yml- the
buildandtestjobs now usetinyland-inc/GloriousFlywheel/.github/actions/setup-flywheel@mainbefore consultingBAZEL_REMOTE_CACHE git diff --checkpasses in the local checkout- workflow YAML parses cleanly
#73is now merged and provides one concrete builder-contract signal for GloriousFlywheel: self-hostedtinyland-nixworkflows must bootstrap Nix explicitly before FlakeHub login/cache steps matter
What Not To Do First
- do not rewrite the FlakeHub cache flows as if they were broken
- do not treat
runner-capacity-benchmark.ymlas the default downstream runner contract - do not widen the first
labpatch into deploy-lane or benchmark-lane redesign
Acceptance Criteria
labhas one explicit Bazel cache-contract patch in a local checkout- the repo can be cited as the cache/builder canary for tranche 1
- the repo can also be cited as the first explicit proof that self-hosted
tinyland-nixworkflows cannot rely on preinstalled Nix - benchmark-specific labels remain clearly separated from the stable shared runner contract