ci_gate: unknown prints the reason and asks again until --ci-wait runs out (CI_WAIT_SECS for the self-test). master_gate: three reads
over a minute before an unknown counts; a lasting unknown still refuses (no verdict, no merge). Self-test: a blip (unknown, then
green) merges; a lasting unknown is refused at the deadline; the same two shapes for master's read.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Start-Process -Wait -PassThru on igneum-app.exe --version, which exits in milliseconds, threw "Cannot process request because the
process (6792) has exited" before PowerShell attached, and the release branch's Windows build went red on a runner race, not on the
build. Run-Capture now tries twice and prints the first failure; the second is the verdict. Checked here by the workflow shell
parse and the PowerShell 5.1 drive-reference check; the runner's own parse step runs on the next master push.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
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 bd6fcb88 and 165e8b35 earlier
- windows-ci's stale payload-inputs pin (3 runs): closed on master by 4b4e1bc1; 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 61421005, 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>
Home row 03, the litepaper's chip section at /litepaper#chip-model (paragraph and table; the class v3 row last, "never the launch
state"), the miner page's line and evidence.md row 17 in its eight columns: 2.1x to 3.9x under class v4 from the first block,
class v5 removing the stored-dataset chip as a category, the 5x to 9x only as the class v3 baseline, the devnet's activation
height as a devnet fact. The litepaper's abstract carried the same claim in the old form ("5x to 9x today; class v4, now on
the vote") and now reads launch-first too. tools/ci/ledger-text-check.mjs follows the sentences (X35 on the home page and the
litepaper). No disclosure prize anywhere.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
the project lead: the ember band on /wallet had no vertical padding (the heading on the band's top edge, the button on its bottom), then
"run a full site sweep for padding and visuals".
- The band: .band .wrap carried the padding and the three bands use .container; both selectors now, 56 px (40 on phones), and
24 px at the sides on phones.
- tools/ci/padding-check.mjs: renders every served page at 390, 768, 1024, 1440 and 1600 in both themes and flags TIGHT (text or
a control under 24 px from the edge of the filled band, card or section that holds it; rows of radius 12 and under are the
app's compact rows and keep their own padding; small filled things such as buttons, pills, badges, tabs, cells and the bar are
never containers), SCALE (a section's vertical padding not 0 and not a multiple of 4 from 24), TOUCH (controls under 6 px
apart outside segmented groups), OVERRUN (an image or canvas past its frame) and UNDER-BAR (a heading under the sticky bar on
load, an anchor the bar would cover). --self-test builds the fixture from the site's own stylesheet and bar with the exact
/wallet band with its padding lost, a touching pair, an image over its frame and a heading under the bar; each must fail,
the clean twin must pass. A gate line runs it (self-test, then the built site); where no browser exists it says so.
- Findings fixed (first run 2,740, then 1,040, then 48, now 0 at 230 renders): page heroes 64/48 (were 65/45), the
observatory head and the 404 the same, the footer's bottom 24, doc sections and the litepaper's 40 (were 42), .sec 72 at
tablet (was 70), the 404 card 36, /live's motion block 24 (was 25), the scenes lab 48 (was 50); every card at 24 inside
(download cards, home tiles, the live tiles and stats, the evidence labels, the wallet state cards, the journey phases, the
live inspector and toolbar, the download card on phones).
- The eye pass over every page at 1440 and 390 dark: the journey's phases are cards now, so the old timeline rail and marker
(drawn for an unboxed list, sitting on the card's top border) go and the when column keeps clear of the body; tables keep
words whole (break-word, not anywhere: "regenerat es" on the litepaper) and give the label column 14ch (one word per line on
/randomx); the litepaper's body paragraphs share one measure; the ledger's count-table chips stay on one line; orphan words
go through text-wrap: pretty on body text (copy law 18, "measurement." alone on /claims); the dev-fee page lost its doubled
gutter (a lifted section keeps its own .container) and its table clears the text above; /faucet and /metamask keep a gap
between headline and lead, line their two cards up at the top and end 72 px above the footer; a heading after a card grid
gets 40 px.
- The overlap sweep at the same five widths and both themes: 0 overlaps at 290 renders.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>