Commit graph

1697 commits

Author SHA1 Message Date
igneum-josh
57335544a9 site-ui-5: /live sizes its scene box through the renderer (2.0.4 autoHeight, 1546b61f); the padding constants leave the page. The home fold keeps its CSS height (a backdrop), so autoHeight stays off there by the renderer's own rule.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 15:06:56 +01:00
igneum-josh
4db55ecfb5 Merge ca3-coord 6408d9cd into master (gate: green on 6408d9cd, recorded by tools/ci/pre-push.sh; the full gate runs in CI on this merge) 2026-10-07 15:02:29 +01:00
igneum-josh
41e0eb45e8 Merge ship-docs-0320 3ad0c60d into master (gate: green on 3ad0c60d, recorded by tools/ci/pre-push.sh; the full gate runs in CI on this merge) 2026-10-07 15:01:33 +01:00
igneum-josh
0cac881497 Merge site-ui-5 45d4f065 into master (gate: green on 45d4f065, recorded by tools/ci/pre-push.sh; the full gate runs in CI on this merge) 2026-10-07 15:01:01 +01:00
igneum-josh
6408d9cde6 Counter ASIC 3.0 status: the self-operand ban void (value equality from the shadow block), the dynamic bound's reach, the plan (0.3.21 on byte 5, sub-version 3 against a defined gate), 0.3.21's staging facts
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 15:00:44 +01:00
igneum-josh
b9017422fb Merge scene-parity-site 1546b61f into master (gate: green on 1546b61f, recorded by tools/ci/pre-push.sh; the full gate runs in CI on this merge) 2026-10-07 15:00:31 +01:00
igneum-josh
b8045d509c Merge ca3-coord 8dd78669 into master (gate: green on 8dd78669, recorded by tools/ci/pre-push.sh; the full gate runs in CI on this merge) 2026-10-07 14:59:31 +01:00
igneum-josh
45d4f06544 site-ui-5: the capture set, every route at 390 and 1440, dark and light, rendered on igneum-build-2 against the live feed (docs/plans/site-ui-5-shots, 80 PNGs)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:59:11 +01:00
igneum-josh
1546b61fa1 Chain scene 2.0.4: the box's height follows the lanes (onSize, autoHeight, the lane geometry in stats) (7 October 2026, 16:3x UK)
Josh's /live screenshot: a fixed tall box with the lanes in its top third and dead space under them. The renderer now knows
the height it wants: top padding + axis padding + lanes shown (at most maxLanes 7, narrowLanes 4 on a phone, never under 2)
times laneHeight (46 px, 40 on a phone, 26 compact; the mount option laneHeight overrides). It reports it through
onSize(heightPx, {lanes, laneHeight, narrow, compact}) whenever it changes and through getWantedHeight(); stats() carries
laneHeight, padT, padB, capacity, wantedHeight and autoHeight, so a page that sizes its own box reads no constants. With
autoHeight (on by default when the host set no CSS height on the canvas, which is read before the first size(); forced either
way by the option; never in compact mode, the app's card keeps its own height) the renderer sets canvas.style.height itself
and lets every lane through instead of fitting the lanes to the box. Every current host sets a height (/live 420, the hero
500, the app's card 220 and its Inspect view 420), so the frames are unchanged: the parity test on build-2 stayed equal on
every comparison. The site lane switches /live and the home fold to the hook.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:58:33 +01:00
igneum-josh
4f85e94f00 Merge remote-tracking branch 'origin/master' into scene-parity-site 2026-10-07 14:58:19 +01:00
igneum-josh
8dd7866924 Counter ASIC 3.0 status: sub-version 2's eight seeds (five lineage-fresh constants, three the null's tail), the exhaustion half passing, the gate threshold question, the sub-version 3 shape and clock
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:57:43 +01:00
igneum-josh
3ad0c60dc4 release plans and rules on master: the 0.3.20 plan (sections 1 to 37, the pin c4459193 and its lines), docs/plans/release-rules.md (rules 1 to 13 with 4a, 4b, 4c), the 0.3.21 plan as staged
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:57:35 +01:00
igneum-josh
9469bd0bf3 site-ui-5, deploy 2: every remaining route in the apps' look, /live's scene box fits its lanes with the key at the top (7 October 2026, 15:0x UK)
- /live (Josh: "make it more efficient, key at the top"): the key (Included, Excluded, Selected chain, Your block, Proven,
  Locked checkpoint), the "Click to inspect · Drag to explore" hint and the window stepper sit on one row above the scene
  (hint left, key centred, stepper right; on phones the key wraps and the stepper goes under it); the blue-score range stays
  as a small line under the canvas; the canvas height comes from the lane count (one lane per key in view plus the others
  lane, capped at the renderer's 7, 4 on phones: padT 58 + lanes x 46 (40 narrow) + padB 38, read from scene/live-dag.js
  2.0.3 layout(); a sizing hook was asked of the parity lane, which owns that file); the graph column no longer stretches to
  the inspector; the inspector keeps its rows with tighter spacing and Clear is a small button beside its title.
- Every other route carries the slim bar, the app's buttons, pills and cards from site.css section 10 with its content
  untouched: /app (OS marks on its platform line), /miner (the download tabs take the OS wells), /miners and the bench table
  (the vendor badge in front of every card name), /explorer, /block, /address (hash titles wrap), /journey, /bench, /evidence
  (status pills wrap in their cell), /litepaper, /ledger (status badges wrap at 390), /claims, /randomx, /provenance, /dev-fee,
  /faucet, /metamask, /404.
- Data tables fill their frame on desktop and scroll inside it on phones; no column squeezed to a sliver.
- The overlap lane's detector over all 23 pages at 390 and 1440, dark and light, on build-2: 0 overlaps.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:57:32 +01:00
igneum-josh
3d1533fda8 Merge remote-tracking branch 'origin/master' into ca3-coord 2026-10-07 14:57:26 +01:00
igneum-josh
8415500542 Merge build-server 73afa656 into master (gate: green on 73afa656, recorded by tools/ci/pre-push.sh; the full gate runs in CI on this merge) 2026-10-07 14:55:59 +01:00
igneum-josh
174939bea2 Counter ASIC 3.0 status: the 64-seed gate on sub-version 2 heading to FAIL (8 of 39 over 1.2x, worst 4.82x), the earlier none-over line withdrawn
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:55:27 +01:00
igneum-josh
73afa65617 Gate: the green stamp and the fast path for merges (a full gate that ends GREEN over a clean tree records its commit; the hook lets a merge of a stamped branch onto the exact remote tip through on the light gate, CI runs the full one on landing); tools/ci/merge-to-master.sh; the wave script's seeds mode takes --wipe-genesis with the genesis and base-unit read-backs for the testnet go
Main, 7 October 2026: a 100 s hook gate on the merge commit against a master that moves every minute lost six pushes in a row.
Self-test: a fixture repository (unstamped branch, stamped branch, stale stamp, wrong tip, plain commit, dirty tree).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:54:10 +01:00
igneum-josh
9aa332c060 Counter ASIC 3.0 status: the wipe canary on c4459193 PASS (c19-1, the restart stopping at once); the pin's set complete bar CASES END
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:52:36 +01:00
igneum-josh
f94c857fdd Chain scene parity test: one recorded feed through the home fold, /live and the app's Inspect view, three frames each pixel-equal, in the gate (7 October 2026, 15:5x UK)
tools/scene/parity.mjs serves site/ (tools/site-serve.mjs) and the app's UI (tools/ui-mock/server.mjs) on a build box, answers
every page's /api/live from scene/fixtures/live-2026-10-07.json, freezes the clock at the fixture's instant (Date, timers,
requestAnimationFrame) and reads each scene canvas at 900 by 420 px at the first push and the next two polls: the read is the
push's own synchronous paint, so a frame depends on the fake time alone, never on how long a fetch took. Known-failed first: the
app with --included moved by one unit must differ from /live at every instant (it does: 1,549 / 1,282 / 1,157 px). Then home
fold = /live, app Inspect = /live, app with this machine's key = /live with the same key (the overlay is the same picture), and
the app's overlay frame differs from its base frame (the overlay is drawn). The compact card is rendered and reported, not
compared. A RED line names the differing pixels and their box. tools/scene/parity-remote.sh carries the files to the box
(~/.config/igneum/build-server-2 by default) under this lane's prefix and runs it there; a plain CI runner with no box and no
Playwright prints a skip line. One new line in tools/ci/pre-push.sh.

First run on build-2 at 15:4x UK, release-0.3.21 tree plus scene-parity: every comparison equal at T+0, T+2 and T+4 s.
Found on the way and fixed in the harness, not the renderer: lane order keeps the history of earlier layouts (the scene must be
at the compared size before its first layout); the app's recorded mock card is a real devnet key (cleared for the base case).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:52:19 +01:00
igneum-josh
756ca1c155 Counter ASIC 3.0 status: PC 2 down for cable work (both PCs out of the waves); 0.3.21's mixed-version gate PASS on 55768f88
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:50:40 +01:00
igneum-josh
e9dd9965d6 Merge remote-tracking branch 'origin/master' into ca3-coord 2026-10-07 14:48:37 +01:00
igneum-josh
f823c2b3b4 Counter ASIC 3.0 status: the Windows G1 for sub-version 2 GREEN on PC 2 (eight of eight), G1 complete on three platforms
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:48:37 +01:00
igneum-josh
f099f373bb Merge commit '30756284' 2026-10-07 14:47:45 +01:00
igneum-josh
30756284aa CI and boxes: the simulators job runs on master and release-* pushes and pull requests into them only (a feature-branch code push runs the igneum-pow tests alone; tools/ci/sims-branch-check.sh); the box lock self-tests run in parallel in one ssh; build-2 and build-3 join the runner pool bounded to 32 cores; the 0.3.20 first-wave script (seeds, hands, RPC-filter lift; dry run by default)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:46:42 +01:00
igneum-josh
12e569aa71 site-ui-5, deploy 1: the site in the apps' look (7 October 2026, 15:0x UK): one design layer on the app's tokens, the slim bar, the home fold on the shared scene, /download, OS and GPU marks
Josh: "a site now what is on par with our current miner and wallet app look and feel with the new animation ... simple and
beautiful ... apple and windows icons everywhere needed, GPU brand icons ... easy access to all of our pages without a header
that is crazy".

- site.css section 10: the miner and wallet apps' treatments (app.css miner-ui-5, wallet-0.1.5) over the package: buttons
  (Plex Sans 600, radius 10), the status pill, graphite cards at 16 and rows at 12 on the hairline, the wallet lock screen's
  ember glow, the mark wells; the fourteen palette tokens stay in the scene-tokens block (scene/tokens.css); light and dark.
- Navigation: the seven-item header is gone. The slim bar carries the mark, a DEVNET pill with the live dot, Mine / Network /
  Learn (each opens a panel listing every route of its group with one line), the theme toggle and Download; on phones one
  button opens a full-screen sheet with the same groups. Keyboard: arrows between groups, Escape closes and returns focus,
  Tab walks a panel, the sheet is a dialog with its focus kept. The gate's header check is the new rule
  (tools/ci/site-nav-check.mjs: the bar, the three groups with their aria, 18 routes in the panels and the sheet with their
  descriptions, Download, the burger; self-test known-failed first).
- Home: one fold. The mark on the ember glow, one line, Download for Windows and Download for macOS with the OS glyphs and the
  stamped version (the visitor's platform first), "Linux and HiveOS" to /download, IgneumDag 2.0.3 painting underneath from
  /api/live through IgneumFeed (window 60, fps 60, poll false, no fork). Below: three lines on what a miner gets (E5 and X35
  verbatim), the live network in three tiles (hash rate, blocks a second, locked checkpoint; X2 and X31 verbatim), the
  community row (Discord, GitHub, Reddit), the footer (X7). The scene scripts are deferred; fonts preload with swap.
- /download: a new route. Windows, macOS, Linux and HiveOS cards with their marks, the stamped version, size and sha256, the
  HiveOS flight sheet, the three steps, the card picker with the vendor badge, the wallet for macOS; Windows wallet named as
  next with no file.
- Marks: brand/marks/vendor-marks.mjs (gpu-logos lane, ba5d9cea) copied byte for byte to site/lib/marks.mjs (the build and a
  gate line refuse drift); site/lib/os-marks.mjs adds Linux and HiveOS in the same treatment. The build stamps
  <span data-os> and <span data-gpu> and puts the vendor's mini badge in front of every table cell that names a card
  (/miner, /miners, the bench table), writes the --mark-* tokens into site.css between markers, and hands yourcard.js the
  badges as JSON for the card picker. The vendor well is scoped to [data-mark] so the ledger's and the journey's own
  .badge keep their look.
- The footer carries the four OS download chips; the nav's group wrappers are .nav-group (the wallet page owns .group).
- tools/site/serve.mjs and capture.sh: the site as Vercel serves it with /api passed to the live observer, captured on
  igneum-build-2 at 390 and 1440, dark and light (docs/plans/site-ui-5-shots, the home set in this commit). The overlap
  lane's detector ran over every page on build-2: 0 overlaps after the two fixes here (the explorer's hash titles wrap, the
  ledger's status badges wrap at 390).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:46:23 +01:00
igneum-josh
96f6ac979d Counter ASIC 3.0 status: the Linux CUDA G1 for sub-version 2 PASS on p1-5090 (eight of eight equal to the Mac)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:45:31 +01:00
igneum-josh
a94d73b7d2 Counter ASIC 3.0 status: PC 2 back (a power loss, not the update); the Windows G1 ordered on PC 2 before the publish
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:44:38 +01:00
igneum-josh
80dc32b39c Counter ASIC 3.0 status: the fleet G1 package, the PC 2 run job withdrawn (would have fired before the sweep), the lock released
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:43:04 +01:00
igneum-josh
47c3844d1f Merge remote-tracking branch 'origin/master' into build-server 2026-10-07 14:40:57 +01:00
igneum-josh
d4cb6358e5 Counter ASIC 3.0 status: main's byte-7 ruling (fleet 5090 G1 now, all green by 19:00Z or byte 5), 0.3.21's first digest gate PASS on 55768f88, the 0.3.21 order
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:39:52 +01:00
igneum-josh
8b85c342b9 Counter ASIC 3.0 status: the pin stays c4459193 (main's word), 55768f88 is 0.3.21's first; PC 1 offline for cable work; the G1 waits for a PC
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:37:44 +01:00
igneum-josh
880d4907b0 Counter ASIC 3.0 status: the proving-ids child 55768f88 built (sha256 279b1b690e854fc9), the pin candidate, its gates from 13:37Z
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:36:44 +01:00
igneum-josh
7a6010b2c5 Merge remote-tracking branch 'origin/master' into build-server 2026-10-07 14:36:15 +01:00
igneum-josh
8f9aca98ee Merge remote-tracking branch 'origin/master' into ca3-coord 2026-10-07 14:35:55 +01:00
igneum-josh
819cc52df9 CLAUDE.md: a code push goes out only after that commit's crate suite is green on a build box (7 October 2026, 15:4x UK)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:35:11 +01:00
igneum-josh
5792104999 Counter ASIC 3.0 status: the 4,096-seed census at 8bdcbdd8 (r = 0.674, 0 exhaustions); the control's verdict (statement passes, the race to a 24 GB box)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:35:11 +01:00
igneum-josh
99e2455e4e Counter ASIC 3.0 status: the suite line at 8bdcbdd8 (101 of 101 on box 2)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:34:17 +01:00
igneum-josh
f7882a0eeb Merge remote-tracking branch 'origin/master' into build-server 2026-10-07 14:33:24 +01:00
igneum-josh
4cc1657861 Counter ASIC 3.0 status: the proving-ids control (the environment names the ids on c4459193), the late-join commit 70e4601e for 0.3.21
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:33:16 +01:00
igneum-josh
ffc7270e67 Counter ASIC 3.0 status: AP-F8-2 fixed on 8bdcbdd8 (MAX_ATTEMPTS_V4 256, the last-resort draw, the stream unchanged, the census continues)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:32:26 +01:00
igneum-josh
98ef564cbf Build boxes: the measure file is retired; a pinned measurement leases its cores only (lease.sh cores), a whole-box quiet measurement is its own class (refused beside a slot or a lease, 20-minute cap, named owner), bounded suites never take it, every run keeps off leased cores, stopped holders are reaped after 5 minutes by every keeper, every waiter has a label file; the box-side self-tests in the gate; provision installs the lease tool and the headless Chromium libraries
Main, 7 October 2026, 15:07 UK: one global exclusive measure flock across unrelated measurements stalled build-1 at load 120 with
free slots (a stopped probe held it 5.5 h; an exclusive waiter queued every new shared taker) and build-2 behind a one-core VDF
bench. lease.sh (installed at /srv/builds/_bin/lease by provision.sh and by hand on both boxes) takes one flock per core for a
pinned measurement and the quiet file for a whole-box one; remote-run.sh takes quiet shared only for unbounded runs, excludes
leased cores from its set, and its keeper refreshes the holder file and calls lease reap (a STOPPED holder of a lease, quiet or a
slot for 5 minutes is killed with a line in _log/reaped.log). Keepers close the lock descriptors they inherit (an orphaned sleep
held a slot and the worktree lock 20 s past the release; the slot self-test had rotted on that since the worktree lock landed).
tools/ci/box-locks-check.sh runs lease.sh --self-test and remote-run.sh --self-test-slots on build-1. provision.sh also carries
the 16 libraries headless Chromium needs (installed by hand on both boxes at 14:5x UK) and a headless self-test step.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:30:40 +01:00
igneum-josh
b333340b0b Merge remote-tracking branch 'origin/master' into ca3-coord 2026-10-07 14:30:23 +01:00
igneum-josh
20d830fda1 Counter ASIC 3.0 status: the proving-ids cause (the bare start environment, not the binary), the child's embedded-key fallback, the gate carry under rule 4a
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:29:40 +01:00
igneum-josh
f774353461 Chain scene 2.0.3: /live and the home fold paint on every push whatever the document's visibility says; the renderer, its palette and its feed contract move to one shared folder scene/ with byte-equal copies checked by the gate (7 October 2026, 15:2x UK)
The blank /live (Josh, 14:3x UK): IgneumDag 2.0.2 painted only from a requestAnimationFrame loop gated on document.hidden and
the IntersectionObserver, so a page that loaded with document.hidden true (the desktop pane, a background tab) and whose embedder
never fired visibilitychange took every push, reported live and never drew a frame. 2.0.3 paints the current picture synchronously
on push, size and theme change; the motion loop alone waits for a visible document and an intersecting canvas. Confirmed headless
on build-2 against the live feed: hidden document 0 lit pixels before, 110,007 after; the never-intersecting observer repaints
on every push. Known-failed test tools/scene/paint-test.cjs (the 2.0.2 renderer draws nothing in the same world).

The second 2.0.3 change: the phone rule (30 s window, four lanes) keys on the viewport width, not the canvas width; a 640 px hero
on a 1,440 px laptop was rendering as a phone while the app's card beside it was not.

scene/ is the one source: live-dag.js, proof-core.js, tokens.css (the fourteen palette tokens, the brand package's values, dark and
light), feed-contract.md and .json (one JSON shape for the observer's /api/live and the app's api/live), a recorded reply as the
fixture. tools/scene/sync.mjs writes the copies and the scene-tokens block into site.css and app.css; --check is the gate line
(byte-equal scripts, an equal block, the names defined nowhere else, a print block excepted), --self-test fails five known cases
first. The site's token definitions move out of the package's :root line into the block; no value changes on the site.
tools/scene/feed-contract.mjs validates a reply against the key lists; its test refuses a miner rewritten to "you", a float now,
a stray key. Three new lines in tools/ci/pre-push.sh. The app side (branch scene-parity, for 0.3.21) takes the same folder.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:29:38 +01:00
igneum-josh
6de7b8f760 Counter ASIC 3.0 status: main's AP-F8-2 ruling (a total draw, no panic); the 12 GB line on c4459193 refused (shard program id unknown, statement zeros), the cut set not complete
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:28:05 +01:00
igneum-josh
c7a6034d61 Counter ASIC 3.0 status: AP-F8-2, draw exhaustion under (a') on sub-version 2 (one seed in 331,672, a liveness halt class); not green
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:27:04 +01:00
igneum-josh
8eaab8ac29 Counter ASIC 3.0 status: the PC 1 G1 variant staged (a2714d43, the 5090 by index-free key, published only on the go line)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:21:41 +01:00
igneum-josh
bdbc154beb Merge remote-tracking branch 'origin/master' into ca3-coord 2026-10-07 14:20:55 +01:00
igneum-josh
37aba3fbab Counter ASIC 3.0 status: the PC 1 G1 gated on the shipper's "PC 1 on 0.3.20" line, about 15:30 to 15:40Z
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:20:55 +01:00
igneum-josh
483bb56e04 CI queue: a second self-hosted runner (igneum-build-2 joins the pool label), docs-only pushes skip the compile jobs, the red watcher pinned to the box that posts
31 runs were queued on igneum-build-1's one runner at 13:15 UK on 7 October 2026 and nothing had concluded since 13:03Z, so no lane could read a conclusion.
- ci.yml: a `changes` job (ubuntu-latest) classifies the push with tools/ci/docs-only-check.sh (docs/, site/, *.md only = code=false; a new branch, a pull request, a force push or an API error = code=true); pow and sims need it and run only on code=true. The site job is unchanged on ubuntu-latest for every push. The classifier's self-test is in the gate.
- provision.sh and runner/register.sh: `--host <ip>` registers another box, forwarding BOX_HOSTNAME, RUNNER_NAME, RUNNER_LABELS, RUNNER_CPUS and RUNNER_JOBS (plain words only); RUNNER_CPUS writes AllowedCPUs into the service drop-in beside Nice=10, so igneum-build-2's runner is bounded like a suite (32 cores). The pool label is igneum-build-1 (both boxes carry it); ci-red marks the box with the record file and the poster, the default labels carry it, and igneum-build-1 got it through the runners API today.
- ci-red.yml runs on the ci-red label, so the red line always lands where the poster reads it.
- CLAUDE.md: the rule reads "read the conclusion when it lands, own a red before the next push"; pushes are never held.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 14:20:18 +01:00