Commit graph

1933 commits

Author SHA1 Message Date
igneum-labs
fad7ee5288 Earnings card tidied (the project lead, 7 October 2026: "remove all the type a price stuff"): the £ per IGN input, Use it, the remembered igneum.ign_price, the price line, the balance-in-pounds line, the share line, the IGN per kWh line and the cost-of-hash row are gone from the card (rentLine stays in View for the site's hash-cost model); the card is now the day rate in ember with its reason line, blocks and IGN this run, a quiet row of three (weight: rank, window, days, share; electricity: £ a day at the Settings price or the draw, IGN per kWh; lifetime: blocks and their IGN), the dev-fee switch last with one sentence; View.earningsLines(s, chain, pence, now, minor) carries every line and names its field; three view tests known-failed first (no price input anywhere, the headline and run line, the row of three), the old price test retired
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:40:19 +00:00
igneum-labs
17df07bf6e release-0.3.21 plan: gpu-logos-21 in (the marks, the Prove switch fix)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:29:29 +00:00
igneum-labs
a0813606b7 Merge remote-tracking branch 'origin/gpu-logos-21' into release-0.3.21 2026-10-07 13:29:27 +00:00
igneum-labs
a94dd192aa brand/marks/vendor-marks.mjs: the app's vendor marks and tokens exported verbatim for the site (site-ui-5), with the Windows mark in the same treatment and macOS as the Apple glyph, regen.mjs to refresh it from app.js, a view test that fails on drift; the review shots re-taken on build-2 against gpu-logos-21 (the Prove page on, off and light added: the switch fix in the picture)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:28:36 +00:00
igneum-labs
b900fb585f Prove page switch fix (the project lead's 0.3.19 Mac screenshot, 7 October 2026): the thin white rectangle above-left of "Prove on this machine" was the DAG legend's bare .lg rule hitting label.switch.lg, the knob outside the track at off was the inspector's bare .track rule (flex, 10 px margin) hitting every switch track; both scoped (.legend .lg, #i-track), the switch's size class is its own (big), the native input is hidden the accessible way (1 px clip, focusable, label kept) under a positioned label; three view tests, known-failed first on the old CSS (bare rules, input hiding, knob inside the track at off and on in both sizes with the theme blocks untouched)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:26:45 +00:00
igneum-labs
9d80b81bc1 gpu-logos captures from build-2 (tools/ui-mock/capture.sh with --force-prefers-reduced-motion so the page is drawn, not mid-fade): the Overview dark and light, the first-block card with the mini mark, the Mac row, the mixed rig on the Cards page and the first-run list, dark and light, 1280 wide at 2x
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:25:52 +00:00
igneum-labs
41441a8fdf GPU vendor marks on every card row (gpu-logos, 7 October 2026): NVIDIA, AMD Radeon, Intel Arc and Apple as hand-drawn monochrome inline SVG glyphs (under 460 B each, currentColor), each in a soft rounded well tinted by its own --mark-* token (dark and light sets, ember never tints a brand), the series line under the name in mono (RTX 50 series · Blackwell, RX 9000 series · RDNA 4, Arc B series · Battlemage, M5 series · integrated), an integrated row keeps the same glyph with the integrated line, a neutral chip glyph for an unknown vendor, the block card's mini mark; one contiguous View block and one CSS block for the apps-harmony rebase; five view tests (every vendor, the fallback, never twice on a row, the series line, light contrast at 3:1 or better with app.css checked); the mock's rig scenario and tools/ui-mock/capture.sh for the box
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:25:52 +00:00
igneum-labs
c76c42b118 release-0.3.21 plan: pool-finish rides it (main's word, the split switch at never), the four UI branches in order, MF-11
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:21:10 +00:00
igneum-labs
fefab015e3 platform: kill_pid spawns taskkill and kill with the hidden console (master's windows-spawn check on the reliability merge)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:18:20 +00:00
igneum-labs
77350dd832 release-0.3.21 plan: what rides it, the under-12 GB prove-instead switch and the per-architecture prover server as designs, the gate clock
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:16:59 +00:00
igneum-labs
59fe7d08b4 Merge remote-tracking branch 'origin/miner-reliability-21' into release-0.3.21 2026-10-07 13:16:12 +00:00
igneum-labs
0730606201 engine (0.3.21): the heat-mode release restarts every slot; there is no faulted state to skip
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:14:13 +00:00
igneum-labs
f4fd814383 restart-hand-nodes: the bracket form for the pgrep (master's kill-by-name check), the launchd form kept
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:12:59 +00:00
igneum-labs
e78ace39bc execrpc: 0.3.21's two callers classified (igneum_getRecentBlocks gated, eth_getBalance safe)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:12:26 +00:00
igneum-labs
26574c32d0 miner-faults register: run 5 (card-appears green with the fixed listing); every class's injector step passes on engine 073fbea1
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit ee3d93386b7aabe8188fd2c8bd00c63a818ac2bf)
2026-10-07 13:12:08 +00:00
igneum-labs
44d2def1e5 miner-faults register: the pod injector's run 4 lines (seven of eight steps pass on engine 073fbea1)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 9a91ff57e1db5896f9f9016b7aadcc2ba27e5bff)
2026-10-07 13:12:08 +00:00
igneum-labs
06eadb406d miner-faults MF-10: a prover server built for another card's architecture (named symbol not found); the capability check at start and the per-architecture kit
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 9d2c267af7a7b097199e6232b221b91081f52bca)
2026-10-07 13:12:08 +00:00
igneum-labs
87c17c84fc miner-faults MF-9: a node that stops slower than its restart (the listener watchdog's sleep-then-check); every poll loop returns on shutdown, a sub-second shutdown is a named release gate
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 7a0115617b9fa7b7e8e9930c8cfb530af71d4d55)
2026-10-07 13:12:08 +00:00
igneum-labs
cb8a265431 fake worker: the OpenCL listing carries the real worker's header line, so the engine reads an answered enumeration and removes a card that left
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit ecd798747a26d339ff514da04773be858780636c)
2026-10-07 13:12:08 +00:00
igneum-labs
ced26986fd execrpc: an empty or unparsable reply is no answer, so a stopped node reads as silent to the watchdog's probe
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 073fbea1d1)
2026-10-07 13:12:08 +00:00
igneum-labs
635e8576a8 miner-faults MF-8: the class in the shipper's words (node refuses its own kept datadir after an update), N13 b7cc37e7, the gate on both datadir shapes, the injector step owed
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 291ea5418f)
2026-10-07 13:12:08 +00:00
igneum-labs
ae35330f42 miner-faults MF-8: a node dying at start on a kept datadir (the serde(default) row, N13); the LG-4 job's tenth install keeps the datadir and a node restart loop fails the row
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit d82de28e40)
2026-10-07 13:12:08 +00:00
igneum-labs
942f537ff6 reliability injector: the stale duplicate step blocks removed (the card-appears rewrite had sliced before an earlier definition); the rung is read over two seconds
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 10badc02a3)
2026-10-07 13:12:08 +00:00
igneum-labs
313059f6bd engine: the row's countdown is set the moment a watchdog restart is scheduled; injector reads the rung over two seconds
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit e1aeecad40)
2026-10-07 13:12:08 +00:00
igneum-labs
fd4c3e72a7 reliability injector: card-appears uses a second fake device (added, removed, revived); an empty device list is read by the engine as no answer
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit df2617bb43)
2026-10-07 13:12:08 +00:00
igneum-labs
e464a5fb06 reliability injector: reads the fake cards by name and switches a box's real GPU off through the app's own card path
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit b9c70528fa)
2026-10-07 13:12:08 +00:00
igneum-labs
c95e854265 miner-faults register: the commits table and which side each class is on
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 43cbec0d63)
2026-10-07 13:12:08 +00:00
igneum-labs
1506f6c003 reliability injector: the catch-up step's flag no longer shadows the process list
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 2efe419521)
2026-10-07 13:12:08 +00:00
igneum-labs
164dc99413 execrpc: one gate for every execution-layer RPC call the app makes (ledger N7, main's rule for 0.3.19)
A node before the exec RPC bounds fix (every 0.3.17 node) dies when a method that resolves a block number or indexes the record vector is asked while its exec follower holds no record; PC 1 crash-looped on two callers in one night (eth_getBlockByNumber from the clock sample, then igneum_getAssignedShards from the prover loop: 'panicked at igneum/exec/src/rpc.rs:808:35: range start index 1 out of range for slice of length 0'). Every caller (prover.rs's evm_rpc, update.rs's clock sample, extnode's rpc for chainfacts and the external-node probe) now goes through execrpc::call: SAFE_ON_EMPTY methods go out, GATED ones wait for igneum_getExecStatus's executedTipHash, an unclassified method is refused. The test every_caller_goes_through_the_gate scans src/ for JSON-RPC requests built elsewhere and for unclassified exec method names.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:12:08 +00:00
igneum-labs
089b078a3a Miner app: plug, tune, play (the project lead, 7 October 2026): node readiness gate, the retry ladder, no permanent fault, fault lines to the intake, the signed cards job, the fault-class register
docs/plans/miner-faults.md: MF-1 to MF-7, each with its rule, test and gate line.
- MF-1/MF-2: a worker starts and is judged only when the node is READY (synced and igneum_getExecStatus reports an
  executed tip; execrpc::probe every 5 s off the engine thread); the node watchdog never counts the catch-up (settled
  once read synced; 30 min cap before that; any RPC answer is a sign of life); the watchdog restarts on a ladder 10 s,
  30 s, 2 min, 5 min, then every 5 min for ever (watchdog::RETRY_LADDER_S); the faulted state and the one-restart
  budget are gone (tools/ci/permanent-fault-check.sh in the gate); a node-caused restart resets the ladder at sync.
- MF-3: the hot-plug pass starts a recovered or revived card's worker (unchanged rule, now in the register).
- MF-4: the status clock starts at ready (program loaded), loading bounded by 300 s; a self-test failure holds the
  card 30 min with the reason on its row, released on a driver change; a crash loop climbs the ladder; the pack is
  exported once a minute for every card (a refused pack forces one).
- MF-5: the app reads template_wait=, template_ms=, identities_active= from the 0.3.20 miner's STATUS; waiting on
  the node is never the card's fault; the row says node slow; every node-wait label clears on the first rate.
- MF-6: a miners hold belongs to the job that took it and releases when that job is gone or at its own cap.
- MF-7: the engine owns every igneum-miner it started: an untracked one on this engine's node RPC is killed at start,
  after every stop and every minute, one line and one fault report per kill; a restart kills the old process first.
- Every fault line posts one FAULT line to the log intake (label fault-<id8>, app and node version, 60/h cap).
- The signed cards job kind (per card enabled, identities, power_pct; refused for a card the machine lacks; applied
  through the app's own card path, persisted, read back): packaging/ota/publish-jobs.sh add --kind cards.
- LG-4 as a job: relay/playbooks/first-share.ps1 and tools/fleet/first-share-gate.mjs (no Windows box yet).
- tools/reliability: the fault injector with one step per class (catch-up, card-appears, own-restart, zero-ladder,
  no-status, node-silent, one-card-fails, orphan-miner); fake-worker.mjs lists devices and fails self-tests on command.
- master's build tooling (97255a4e) and release-0.3.20's igneum-pow taken into the worktree for the box routes.
Box: app 198 + 27 + 8 tests green on igneum-build-2; the tree gate green (33 checks).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:11:48 +00:00
igneum-labs
75215bf2bb Merge remote-tracking branch 'origin/master' into release-0.3.21 2026-10-07 13:11:18 +00:00
igneum-labs
cc444e8551 0.3.21: version strings (the tree after 0.3.20's cut: driver-check edac467d first; miner-reliability's app half, the under-12 GB prove-instead routing and the per-architecture prover server follow)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:10:44 +00:00
igneum-labs
53cd1ee767 Driver table: a referer per row, sent as curl -e (drivers.amd.com answers 403 without an amd.com one; the AMD row carries it); a plain user agent on the download
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit edac467dbd)
2026-10-07 13:09:47 +00:00
igneum-labs
015e6d5a6a Driver table: the NVIDIA 617.42 and AMD 26.9.2 rows measured on igneum-build-2 (sha256, size, Authenticode subject from the vendors' own files); the stray #[test] above the Intel test's doc comment removed
NVIDIA GeForce Game Ready 617.42 WHQL (6 October 2026): us.download.nvidia.com/Windows/617.42/..., 990,853,168
bytes, sha256 f115c927..., subject CN=NVIDIA Corporation (DigiCert G4). AMD Software Adrenalin 26.9.2 WHQL
(29 September 2026, the win11-b build): drivers.amd.com/drivers/whql-amd-software-adrenalin-edition-26.9.2-win11-b.exe
(an amd.com Referer required), 1,000,800,840 bytes, sha256 593c1d73..., subject CN=Advanced Micro Devices (Sectigo).
Read on the box: curl, sha256sum, the PKCS7 out of the PE security directory through openssl pkcs7 -print_certs.
The table's placeholders are gone: every row installs. The drivertable test sample, the mock and the view test name
the real NVIDIA release. detect.rs:990 carried a #[test] above the doc comment of the Intel test from the cherry-pick,
the test build's one warning ("duplicated attribute"): removed.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 80787ea024)
2026-10-07 13:09:47 +00:00
igneum-labs
d00772bf20 Driver check: the app detects a missing or old driver per card and installs it on one click from the vendor's own server (branch driver-check, 7 October 2026)
the project lead: can the drivers be packaged with the miner, for all cards, with the system knowing which to install if not
present. Not bundled: detected and installed on one click. A per-vendor table rides the signed manifest (drivers.json:
min_version, the version on offer, the vendor's URL, size, sha256 and its source page, the silent arguments, the
restart exit codes, the Authenticode signer, the Linux and HiveOS package), validated by the signer and the app alike
(src/drivertable.rs, shared), written to <app data>/drivers.json by ota.rs. Each card's driver version is read at
every detection (nvidia-smi's driver_version; Windows' DriverVersion for AMD and Intel) and compared; a missing or
old driver puts the offer on the card's row, on the dashboard and on the first-run list. The click downloads with
curl (resume), checks size, sha256 and the Authenticode subject, runs the installer through one elevated prompt
(platform::elevated_command, the PC 1 driver job's shape), reports restart required with a Restart now button, and
never restarts by itself; the miners keep mining. macOS: no step; Linux and HiveOS: the package line. Dry run through
IGNEUM_DRIVER_DRY_RUN or the table. Tests: the table, the versions, the offers per tier, the exit codes, the
Authenticode verdicts, the download against a mocked vendor server on 127.0.0.1, the UI's strip per state; the mock's
drivers scenarios; captures light and dark in docs/plans/driver-check-shots. publish-manifest.sh --drivers carries the
table. Also the doubled #[test] in detect.rs from the cherry-pick.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 3f0ef65786)
2026-10-07 13:09:46 +00:00
igneum-labs
53e62a4bb8 release-0.3.20 plan: section 35, the project lead's orders (the floor file publishes, the sweep in waves, the Arc-tested worker exe, 0.3.21 tonight)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:09:09 +00:00
igneum-labs
a2aa13541d CI red watcher: every branch, one line per failed run naming the branch, the commit, the red check and the pushing author
The red job's condition drops the master/release-* clause; record() keeps GITHUB_ACTOR and the head commit's author name (RED_WATCH_AUTHOR from the workflow) and formatLine prints "pushed by <actor> (commit by <author>)" before the failed job and step. The self-test covers a feature-branch run and the author in the line. Same updates channel, same box file, same one-line-per-run idempotence.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:09:06 +00:00
igneum-labs
3fae316607 CI gate: the feature-branch hook runs the never-push classes (no-secrets, identity grep) beside the structural checks; harness summaries write keys through a redacting writer with its own check
The class (7 October 2026, 11:26 to 12:47 UK): three fork-gate summaries on ca3-v4-node carried the miners' vote-key hashes under "key" and eight CI runs went red on "no secret file names and no 64-hex secrets in the tree" while the pushing lanes saw nothing: the light gate ran only conflict markers and Windows paths.

- tools/ci/pre-push.sh: never_push_checks() (identity grep, no-secrets) runs on every ref from --hook, and inside the full gate where the identity grep already sat; the self-test asserts the wiring; the light gate is about 20 s on the Mac.
- infra/fast-time/lib/redact-keys.mjs: writeSummary() shortens every 64-hex value under a key-shaped field to 8 hex and an ellipsis and refuses a text the no-secrets rule would flag (line named); --self-test and --check; the gate runs the self-test. fork-gate.mjs adopts it on ca3-v4-node.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:09:06 +00:00
igneum-labs
0e4ea6909d Merge branch 'build-server' into HEAD 2026-10-07 13:08:22 +00:00
igneum-labs
b04c4b3ac9 Build boxes: the class router is a preference with spill-over (a held or overloaded box hands the job to the other one); build-2 gets a third slot and every run there is bounded on its own 32-core band; the spill decision in the first route line, the slot label and the JSONL row
the project lead, 7 October 2026 15:02 UK: build-1 at load 139 / 114 / 90 with both slots held and a 1 h 40 min queue while build-2 read 4.5 with
free slots, because the class router pinned each class to its box. Now lib.sh bs_route_spill reads the preferred box (free slots,
1-minute load) with one ssh and hands the job to the other box when the preferred one has no free slot or sits above load 64 and the
other qualifies; neither qualifying queues on the class's own box. The decision travels as BR_ROUTE_* into the JSONL "route" object
for the dashboard. build-2's slots file reads 3; everything on box 2 runs at nice 10 / 32 cores / -j 32, and a bounded run takes
the band its slot owns so three never share a core. Self-test tools/ci/route-spill-check.sh (thirteen cases) in the gate.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:08:19 +00:00
igneum-labs
957606f8ec release rules: 4a every gate starts on every candidate as it builds, 4b warm pods per gate class, 5 the sweep in waves (the project lead, 7 October 2026)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:07:49 +00:00
igneum-labs
650cc59669 release-0.3.20 plan: section 34, every artefact on c4459193 with shas, the workers with the Arc fix, the hive package and its smoke, the Windows inputs and run, the staging plan
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 13:00:53 +00:00
igneum-labs
6049b406ca Counter ASIC 3.0 status: the F8 re-gate verdict on sub-version 1 (53 of 64 PASS, 11 FAIL, worst 29.27x), the three residual classes, the fixpoint requirement for sub-version 2
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 12:57:40 +00:00
igneum-labs
db3b0b3d85 Counter ASIC 3.0 status: the shipper's reason for gating on the cases (dc141409 to c4459193 touches the class signal byte)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 12:54:49 +00:00
igneum-labs
215b9c74e7 Counter ASIC 3.0 status: the cut gated on CASES END, the word about 15:15Z, publish on green, sweep PC 1 first
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 12:54:05 +00:00
igneum-labs
ec06347123 release-0.3.20 plan: the cases rerun's slip to about 16:10 BST, the choice put to main
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 12:53:10 +00:00
igneum-labs
542da05fa0 Counter ASIC 3.0 status: the cases rerun slips to about 15:10Z; the wipe canary holds 14:17Z; the kept read in hand
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 12:52:55 +00:00
igneum-labs
37cb92e928 release-0.3.20 plan: the c4459193 seed pair; the pair set complete
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 12:48:51 +00:00
igneum-labs
b528038e45 release-0.3.20 plan: c20-1's kept start on the pin, the Mac build started
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 12:47:20 +00:00
igneum-labs
8afe0714af Counter ASIC 3.0 status: c4459193's mixed-version gate PASS, the restart step green
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-07 12:46:58 +00:00