GloriousFlywheel lab First Patch Playbook 2026-04-16

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-nix heavily
  • 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, and nix-deploy.yml already use Determinate/FlakeHub-oriented Nix flows on tinyland-nix
  • lab#71 then surfaced a separate self-hosted Nix bootstrap failure that was not about TCFS at all:
    • Build x86_64-linux and DevShell Cache failed on tinyland-nix
    • the logs showed determinate-nixd: command not found and then nix: command not found before any repo build logic ran
  • merged lab#73 corrected that by always running DeterminateSystems/determinate-nix-action@v3 on the affected tinyland-nix jobs 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

First Patch Goal

Make lab the cache/builder canary for shared Bazel cache behavior without disturbing the already-intentional FlakeHub Nix lanes.

That means:

  1. patch Bazel first
  2. keep the FlakeHub Nix workflows intact
  3. leave benchmark-label policy as separate follow-on work
  4. 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.yml is patched in a real local checkout at /tmp/lab/.github/workflows/bazel-build.yml
  • the build and test jobs now use tinyland-inc/GloriousFlywheel/.github/actions/setup-flywheel@main before consulting BAZEL_REMOTE_CACHE
  • git diff --check passes in the local checkout
  • workflow YAML parses cleanly
  • #73 is now merged and provides one concrete builder-contract signal for GloriousFlywheel: self-hosted tinyland-nix workflows 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.yml as the default downstream runner contract
  • do not widen the first lab patch into deploy-lane or benchmark-lane redesign

Acceptance Criteria

  • lab has 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-nix workflows cannot rely on preinstalled Nix
  • benchmark-specific labels remain clearly separated from the stable shared runner contract

GloriousFlywheel