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>