Thirteen failure emails between 15:26 and 16:53 UK. The classes and what closes them:
- the box-locks check on a hosted runner (10 runs): closed by e77cd823 and 0b4265ae earlier
- windows-ci's stale payload-inputs pin (3 runs): closed on master by 9983f9cf; update-return's dispatches still carry e69e8a39
- three hosted site jobs on master hung in the tree gate for over two hours (no timeout-minutes): ci.yml now carries
site 15, changes 10, pow 60, sims 45, the overlap sweep runs under a 10-minute wall clock where GNU timeout exists, and
tools/ci/workflow-timeouts-check.sh fails a job without a budget (self-test: a job without the key, a wrong budget)
- a branch merged with no ci run of its own (era-vdf be4db4f3, 16:31 UK): master's igneum-pow suite went red and five
docs-only merges landed green over it because their runs skip the compile job. tools/ci/ci-state.mjs reads the runs
API through gh (a commit's newest run, master's last COMPILED run, a branch's last red); merge-to-master.sh pushes an
unrun branch for a run, waits for a queued one printing the clock, refuses a red one and refuses any merge onto a red
master except the declared fix (--fixes-master); the pre-push hook refuses a push to master whose commit, or whose
merge's branch parent, has no green run on that exact sha; a feature-branch push prints the branch's previous red
first. Self-tests with a fake gh in all three.
- ci-red.yml fires on failure, cancelled and timed_out and hands the conclusion to red-watch.mjs, whose line names the
kind (CI red, CI cancelled, CI timed out); the self-test reads the workflow file for the three conclusions
- tools/ci/retry-once.sh: one retry before red for the box-locks check, the scene parity check and the live public API
check (each keeps its own skip line on a runner without the resource)
GitHub's branch protection cannot be applied: the organisation is on the free plan and the repository is private (the
API answers 403, "Upgrade to GitHub Pro or make this repository public"), so the two scripts are the enforcement; the
rule is one line in CLAUDE.md under the CI block.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The first 16 GB card and the first Thunderbolt card. The app's first poll listed it (vendor nvidia, 16,311 MiB,
driver 610.47 shared with the 5090, kind discrete: the app does not know it is an eGPU) and started a miner on
it by itself. Job run-5060ti-bench-20261007-b (tools/bench-5060ti/pc2-5060ti-bench.ps1, the card alone under
the runner's --cards-off, the 5090 mining, no power limit written: 180 W default read back unchanged, PC 2 lost
power twice that day): G1 PASS with 867dbc45cfb36b4d (sub-version 1) and 90f794dd556f7a3b equal to the Mac's;
the window 1,105 dispatches of 2^24 in 602 s at 30.882 MH/s, 114.8 W mean at utilisation 90 percent and over,
0.269 MH/W, PCIe 4.0 x4 through the enclosure (the hash is latency-bound, the link costs nothing measurable).
Owed: the efficient point (the app's Ember Tune; PC 2's Power Helper refuses every request since the restart)
and the prove-beside read (the shipped WSL2 host has no IGNEUM_CUDA_DEVICE selector; the floor server is on
PC 2; the prover-floor host is the cut). The kit (tools/bench-5060ti/make-kit.sh) takes the sub-version 1 packs
from ca3-v4-amend 38ce010d, since master's packs-ca3-v4 is the 6 October stream.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
the project lead's three on the live site, plus the /live key's last item:
- Mobile nav (URGENT): the sheet was position:fixed inside the bar, and the bar's backdrop-filter is a containing block for
fixed descendants, so top and bottom resolved against the 60 px bar and the sheet opened with zero height while
aria-expanded said true. It is now absolute under the sticky bar, a viewport-tall box (100dvh minus the bar), display block
over the package's grid rule. tools/site/sheet-test.mjs opens every page at 390 px, clicks the burger and asserts the first
link is on screen and on top (elementFromPoint at its centre returns the link); --self-test forces a zero-height sheet first
and must catch it; a gate line runs it where a browser exists (the box, CI) and says so where none does. On build-2: the
zero-height sheet is caught, 23 pages pass.
- Home at 375: the renderer's "Waiting for observer data" was drawn on the fold's canvas under the lead. The fold now carries
.pending until the feed is live or stale and keeps the canvas at opacity 0 meanwhile; the status pill is its own row under
the buttons on phones. ?feed=off holds the pending state for a render; the overlap sweep (whose server answers /api with
503) renders the pending state by construction and ran at 375, 390 and 1440 in both themes: 0 overlaps.
- /miner and /wallet: the light-theme screenshot variants are gone (dark only), captions unwrapped, "light and dark" dropped
from the gallery line; one gallery of frames with one caption each.
- /live: "Your block" leaves the key, the "Your blocks" filter and tile and the Mark-my-key prompt leave the page (the site
has no "you"); the stats row is three tiles; the key reads Included, Excluded, Selected chain, Proven, Locked checkpoint.
- Captures: ?motion=off (head partial) marks data-motion=off so every .reveal is drawn in a headless render; capture.sh passes it.
tools/site/serve.mjs survives a refused api origin (502, never a crash).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>