mirror_master compared the landed remote's URL against the mirror entry's host:/path tail; the box remote is ssh://build@<ip>/srv/igneum.git, which never contains "<ip>:/srv", so the landed box took a second, harmless push on the 14:18 landing. The skip now matches the host alone; a self-test lands through the ssh:// form against a host:/path mirror entry.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
merge-to-master.sh called mirror_master only after a GitHub landing (remote_is_github && ...), so every box landing under the suspension exception left the other mirrors where they were: build-3 and build-4 sat at 27801032 (7 October 15:27) while the box mirror carried b2ac5ea7, and lanes cut branches from the stale tip. The landing path now fans out for whichever remote took it, skipping that remote, and pushes with --no-verify: the sha is the landed remote's master read back, a copy of what the gate passed, not a landing (with the hook on, a stale mirror re-ran the full gate for six minutes per box). Self-tests: the landing line is pinned, and the mirror that took the landing is not pushed to again.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
While tools/ci/github-suspended stands the public host git.igneum.network holds a rewritten copy whose master is replaced at cut-over by the rewrite of the box mirror's final tip, so a landing there is lost: pre-push.sh (forgejo_master_frozen, hook mode) and merge-to-master.sh (forgejo_master_refusal) refuse one and name the box route; a branch pushed there for safekeeping passes.
The installed hook hands the gate "<remote name> <url>", and the remote rules read $2, the name: "origin" matched no *github.com*, so the GitHub refusal and the CI rule never bound a named push. Hook mode now resolves the URL ($3, else git remote get-url) and the self-test drives the hook by name through a fixture repository for the GitHub remote, the public host and a safekeeping branch. GATE_ROOT is the script's own repository, so the helpers are read from it wherever the hook is driven from.
gate-manifest-check.sh under pipefail piped names_in into grep -q; GNU sed took SIGPIPE when grep matched early and the check read it as a missing run line (a research lane's gate on build-3, 13:4x UK: forty names "missing", the Mac never saw it because BSD sed had finished writing). The names are matched through a here-string now, proved green five times on build-3; the same shape is removed from playbook-quit, pc1-step-budget and second-engine. mirror_master fast-forwards every box with a build-server file (build-3 and build-4 sat at 7 October 15:27).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Twice today a merge gate died to signal 15 from another lane's kill pattern (12:4x UK, and the three-node script's self-kill at 10:05 was the same class). The sender cannot be read after the fact (no process accounting on the Mac, nothing in the unified log, a trap sees no sender), so the class is closed by rule: tools/ci/pre-push.sh re-execs under the title igneum-gate:<pid>-<start> and writes "<pid> <start> <mode> <title>" to .git/igneum-gate.pid under the worktree (removed at exit); tools/ci/merge-to-master.sh the same with igneum-merge:<pid>-<start> and .git/igneum-merge.pid; a gate or a merge run is stopped by `kill "$(cut -d' ' -f1 <that file>)"` and never by a name. tools/ci/kill-by-name-check.sh rule 4 (in the gate on every push): killall with any pattern, and pkill/pgrep (with or without -f or -x, bracketed or not) on a generic tool or a gate's name (bash, sh, zsh, node, cargo, python, ssh, git, perl, gate, igneum, pre-push, merge-to-master, build-remote, remote-run, igneum-gate, igneum-merge) are red; pkill -F <pidfile>, pkill -P <pid> and a daemon's own binary under -x stay allowed. Known-failed first: eight new banned shapes and four allowed ones in the self-test; the gate's self-test holds a gate open and reads its title and pid file, then sees the file gone.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
/income (through its generator, tools/launch/income-page.mjs, so the page check holds): pick a card (every current bench row, stock and tuned apart, inlined by the build; a tuned row at its tune point's rate), set a kWh price (the region's tariff from money.js, GBP 0.25 named as the default), type an IGN price (no default; the field says "no market yet: enter a price to see the figure"), read the network hash rate and the newest block's DAA from /api/live and the block reward from the chain's own rule (site/lib/emission.mjs at that DAA, 80 percent to the miner), and see IGN a day, electricity a day and money a day at that price, with the line that devnet and testnet IGN have no value. The arithmetic is site/lib/income-calc.mjs; site/lib/income-calc.test.mjs holds the known-failed case first (an empty, zero, negative or non-numeric price gives no money figure) and runs in the gate. The testnet tier tables stay below, named as the testnet's.
/economics: the emission as the node encodes it (release-0.3.25-node at e0644958, confirmed by the node lane: CURRENT on Devnet 3 and mainnet, TESTNET_1 on the testnet, each field with its file and line), the 80/20 split and the inactive silent-block bonus, the fee routes as the executor has them (base fee burned, the tip 80/20 with unregistered shares burned, external jobs designed and not in the code), the proving-fee market, the switchable 1 percent client fee and the fund it fills, the decimals per network; no price, no projection; "Not legal advice." alone. In the Learn group, the sitemap, the nav check and the capture routes; every page's chrome re-injected.
Bench table: class v4 watts rows 13 to 18 (RTX 2070 Super 204.2 W, +23 percent; GTX 1080 Ti 202.7 W uncapped, +63 percent; A100 500 W SKU 489.3 W, +78 percent; H100 695.1 W on its cap, +52 percent; RTX A4000 135.2 W at its stock cap, no premium; a tuned 2080 Ti board 161.1 W, the rate as a range by board).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- site/build.html and site/grants.html rendered by site/build.mjs from docs/build/build.md and docs/build/grants.md (the gate's site-only copy keeps the committed pages, as for /bench); site-relative links in the markdown renderer
- the nav's fourth group, Build (/build, /faucet, /grants), in the partial, the sheet, the footer, the sitemap and tools/ci/site-nav-check.mjs; the faucet leaves the Mine panel
- site/faucet.html is the Devnet 3 faucet: 10 IGN per address per day, 500 a day, chain id 4463, no value, resets without notice; the page posts to https://faucet.igneum.network/api/faucet and shows the balance
- infra/build-server/faucet: faucet.mjs (zero dependencies, signs with site/lib/eth.mjs, limiter self-test known-failed first, 100 IGN cap on the amount), the unit, faucet.sh install/status; live on build-1 behind Caddy since 10:16Z, funded 2,000 IGN by the fleet's funder at 10:01Z; first drip 0x8620e9d8 at 10:17Z
- docs/build: README, first-contract.md with its test script and the PASS line (24 s end to end through the public RPC and faucet, Foundry 1.8.5, Counter deployed at block 27055), rpc.md read from the node (75 methods probed, served and not served), faucet.md, verify-a-block.md, grants.md
- .forgejo/issue_template/grant.md: the grant application template on git.igneum.network
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
docs/analysis/class-v6/hardware-future.md: one table over PIM and PNM (HBM-PIM, AiM, LPDDR5X-PIM, UPMEM), HBM3E, HBM4 and the custom HBM4E base die, fine-grained DRAM on logic, LPDDR6, 3D DRAM, RLDRAM 3 and Folded Banks, FPGA with HBM2e, wafer-scale, CXL, optical I/O, chiplets and UCIe, and SRAM at N2: energy per dependent read, latency, cost per GB, availability to a non-hyperscaler, the k_read and shadow k bands, the edge per joule at zero shadow against the 5090 and the M5 Max, and the one layer of the four that blunts each with a number. The three findings: a 2 GiB SRAM full store on one N2 reticle is the strongest five-year chip (13x to 17x per joule, about USD 0.3 per MH/s) and no layer reaches it (layer 2 moves its capex, not its joules; the shadow at k = 0.5 holds 4.8x); per-bank PIM is blind (1.6 percent of reads in-bank at 2 GiB) and the custom HBM4E base die is the f = 1 chip with its controller in the stack (6.5x to 14x), untouched by layers 1 to 4; the denominator is the wrong card (the M5 Max at 0.78 microjoules halves to thirds every chip edge). Section 5 carries the k bands for the research lane's chip rows; section 7 the four decisions with defaults and deadlines; section 9 the sources with URLs and dates. tools/ci/export-exclude.txt: docs/analysis/class-v6 is research, not public export.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
At 09:46 UK the founder's gh had his other account active (his own work) and tools/ci/gh-account-check.sh refused every Igneum push from the Mac (the v5 lane's 56a50160 held local). The check now reads Igneum's directory: empty, it refuses naming the one step (the founder or main stores the Igneum token there with `GH_CONFIG_DIR=~/.config/gh-igneum gh auth login --with-token`; no lane does); another login, refused and named; the stored entry, passes; while tools/ci/github-suspended stands it skips with a line, because no gh call can succeed and the hook already refuses GitHub pushes, so the lanes land on the mirror meanwhile. Known-failed first: an empty directory, another login, the founder's directory never read (the fake gh records the directory it was given), the marker's skip, no gh. IGNEUM_GH_CONFIG_DIR overrides the path for the self-tests.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Intel's compiler turns rotate(x, (0u - n) & 31u) into a rotate LEFT by n: lane 0's register trace on the B580 diverged
at instruction 6 of iteration 0 (rotr) and nowhere before, in both exchange modes, with every other family and the
dataset kernels bit-exact. proto-opencl/intel_rotr.h rewrites the one helper line when the device's vendor or
platform string holds Intel (host.c's buildProgram and the prepare path), no other vendor sees a change, no pack or
consensus text moves. proto-opencl/test_intel_rotr.c (the pre-push gate runs it) feeds the line through the rewrite
under Intel, AMD and NVIDIA strings and asserts the outputs.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 5f8abe10a6)
At 03:39 UK a lane's default-remote call of the merge tool polled GitHub's CI 21 times (403 each) before it was killed by pid and re-run with --remote box; the rule since the suspension (never touch GitHub) rested on every lane remembering the switch. The marker is tracked and dated; main removes it at the cut-over. Known-failed first in both self-tests: a GitHub remote under the marker is refused with the line naming --remote box (exit 2 in the tool), a mirror remote is not, and no marker means no refusal.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>