Skip to content

docs: haus's CI runs every flake check but one, + drift row 34 - #618

Merged
JulienMartel merged 1 commit into
mainfrom
worktree-haus-darwin-checks-never
Sep 21, 2026
Merged

JulienMartel merged 1 commit into
mainfrom
worktree-haus-darwin-checks-never

Conversation

@JulienMartel

Copy link
Copy Markdown
Contributor

What

  • docs/ci.md — the haus row in the gate table, the two places that counted its flake checks by hand, and three measured claims that the companion change falsifies: nix flake check's 57s cold / 1s warm pair, and eval as the nix half's pole. Each is marked as describing the shape before this, with where to re-take it.
  • docs/drift.md — row 34, appended. AGENTS.md's count follows it to thirty-four.

Why

hausfold/haus#762 is the change: twenty-four flake checks sat behind optionalAttrs (lib.hasSuffix "-darwin" system) while every runner in that repo's check.yml is ubuntu-latest, so they fired on a Mac, by hand, or not at all. Twenty-three move above the gate there. brew-bundle-guarded stays, because it does import-from-derivation on a BUILT darwin system and no Linux runner can answer it.

Row 34 is the shape that put them there: a platform guard whose stated reason names a weaker capability than the one it actually requires. The block said "it evaluates a real system" and gated on having a darwin builder. On the author's Mac those are the same thing, every sentence beside the guard was true, and the conjunction was what was false. Row 32 is the symptom (a check no runner selects), row 33 the census that could not see it, row 24 the nearest neighbour — its counter-example was one job away in the same workflow file. None of the three says why the guard came out that way, which is what a reader needs in order not to write the next one.

The store-cache paragraphs matter as much as the row. What those checks bring to that step is EVALUATION — dozens of nix-darwin systems raised in one evaluator — and no store entry has ever held an eval, so a cache hit pays it in full. The claims that job's restore settles are unaffected; the figures beside them are not.

Verify

# the row count matches the table
grep -c '^| [0-9]' docs/drift.md            # 34
grep -o 'thirty-four numbered shapes' AGENTS.md

# the split, at hausfold/haus#762's head
diff <(nix eval --json .#checks.x86_64-linux   --apply builtins.attrNames | jq -r '.[]') \
     <(nix eval --json .#checks.aarch64-darwin --apply builtins.attrNames | jq -r '.[]')
#   > brew-bundle-guarded

nix run nixpkgs#bats -- test/     # 208 ok

Watch out

  • Land checks: every flake check but one now runs on CI's Linux runner haus#762 first. Until it merges, docs/ci.md's haus row is false — which is docs/drift.md row 14's shape, in the doc that owns it.
  • Row 34 is a first sighting, where the Seen once, not yet a row lede makes "not yet" the cheap option. It is a row because that section's own criterion is a finder who cannot yet state the general form or tell it from an existing row, and this one does both; row 31 is the precedent for a first-sighting row appended in the same change as its fix. Reversible: delete the row, move the text under Seen once, put AGENTS.md back to thirty-three. Nothing cites 34 yet but checks: every flake check but one now runs on CI's Linux runner haus#762's commit message.
  • The re-take is not done. nix flake check's new cold and warm figures, and which job the nix half's pole is, both come off a run on haus's main after #762 lands. This PR says where to get them and does not guess at them.
  • script/probes/README.md's checks figures are deliberately untouched — they are stamped measurements in past tense, which AGENTS.md's date carve-out for script/probes/** covers.

🤖 Generated with Claude Code

haus's darwin checks were declared behind a platform guard whose stated
reason ("it evaluates a real system") named a weaker capability than the
one the guard actually required (a darwin BUILDER). Twenty-four of them
never ran on any push. hausfold/haus#762 moves twenty-three above the
gate; `brew-bundle-guarded` stays, because it does IFD on a built darwin
system and no Linux runner can answer it.

- docs/ci.md: the haus row, and the two places that counted its checks by
  hand. `nix flake check`'s 57s/1s pair is replaced with what that step
  measures now — 193s, of which 186s is evaluation and 6s builds eighty
  derivations (run 35591587897) — and `eval` stops being the nix half's
  pole, at 221s against 62s. haus is now the family's one gate whose pole
  is evaluation rather than build or compile, which is the part that
  matters for the store-cache section it sits in: an entry holds outputs
  and has never held an eval.
- docs/drift.md: row 34, the shape itself. Row 32 is its symptom and row
  33 the census that could not see it; neither says why the guard was
  written that way. AGENTS.md's count follows.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@JulienMartel
JulienMartel force-pushed the worktree-haus-darwin-checks-never branch from 24ff217 to 3897ce5 Compare September 21, 2026 11:04
@JulienMartel
JulienMartel merged commit 4c430bc into main Sep 21, 2026
1 check passed
@JulienMartel
JulienMartel deleted the worktree-haus-darwin-checks-never branch September 21, 2026 11:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant