Commit graph

155 commits

Author SHA1 Message Date
igneum-josh
f7d2af7ac6 Merge origin/miner-reliability into release-0.3.5
Conflicts resolved keeping both: engine.rs carries the sweep state (miner-eff) and the node watchdog (reliability);
the STATUS line goes through watchdog::parse_status and still feeds the sweep's rate sample; main.rs declares both
modules; bench-log.md keeps both entries. site/build.mjs keeps master's partial-injected pages and adds the /miners
bench table through the same page() with active: 'miners'; the Miners link is in site/partials/nav.html; sitemap
gains /miners; every generated page rebuilt with node site/build.mjs.
2026-10-04 23:25:10 +01:00
igneum-josh
6607fb3fec Reliability measured: miner guards and the app watchdog on private test networks; M26, M27, X21 fixed in the ledger
docs/bench-log.md: the fake-worker measurements (slow start one trip and 2.0 s restart, fake-fast guard in under
0.1 s, exit 43 at 8.8 s, CPU re-check stop at 0.5 s, stall guard at 60.1 s with STATUS lines through the silence,
one prepare per epoch with refused retries held; app: zero-rate restart at 79.6 s and faulted at 75.4 s on the
repeat, no-status restart at 90.4 s, silent node restarted at 150.7 s and synced 7.2 s later; no double restart on
the miner's own worker restart). Two defects the harness found are named with their fork commits.
docs/fud-ledger.md and the round-4 review table: M26, M27, X21 Fixed with the commits.
engine.rs: the miner's restart note no longer hides the fault reason on the card.
tools/reliability: the harness matches the miner's stderr lines where they are printed there.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 23:22:16 +01:00
igneum-josh
5672a28e9f Merge remote-tracking branch 'origin/master' into release-0.3.5 2026-10-04 22:50:27 +01:00
igneum-josh
49f95de55e Merge origin/dev-fee into release-0.3.5
Conflicts resolved keeping both: Settings and SettingsState carry the sweep fields (miner-eff) and dev_fee /
fee_total (dev-fee); the engine's settings snapshot sets both and the DevFeeState line stays.
2026-10-04 22:48:04 +01:00
igneum-josh
e22068f72c bugs.md: the collect-exit branch rebased and fully tested
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 22:47:22 +01:00
igneum-josh
6b4ec59648 Miner dev fee: app switch and UI line, HiveOS package, Linux worker cross-build, docs and public text
Decision of 4 October 2026 (evening): the Igneum Miner software takes a visible, switchable 1% dev fee, the norm
for GPU miners; the protocol stays fee-free. The miner side (--dev-fee, the 1-in-100 template counter, the audit
command) is on branch dev-fee of the node fork.

- app: settings.dev_fee (default on) passes --dev-fee 0 to igneum-miner when off; Settings shows the miner's own
  "dev fee 1% (1 block in 100) to 0x..." line next to the rewards address with a switch; the engine parses the
  miner's start line and its dev-fee block lines (fee_session, lifetime fee_total, an event per fee block)
- packaging/hive: h-manifest.conf, h-config.sh, h-run.sh, h-stats.sh, make-hive-package.sh (igneum-hive-<v>.tar.gz
  with the Linux igneumd, igneum-miner and both GPU workers), README with the Flight Sheet, selftest.sh (bash -n,
  stub binaries, the three hooks the way Hive runs them, the stats JSON parsed). Hive itself is untested
- infra/cross/build-workers-linux.sh: the NVRTC and OpenCL workers cross-compiled for Linux with zig;
  proto-opencl/cl_dynamic.h gains the Linux dlopen branch (libOpenCL.so.1)
- tools/dev-fee/run.mjs: the fee-block test network (two nodes on 29900+, three CPU miners, payouts audit)
- docs/design/miner-dev-fee.md (mechanism, flag, lines, the DEV_FEE_ADDRESS placeholder and the devnet address),
  docs/fud-ledger.md E18 and the E5/L9 status line, litepaper "What a miner's hour looks like" paragraph, homepage
  miner section note

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 22:46:41 +01:00
igneum-josh
984288a946 release-0.3.5 plan: master c257444 merged (bugs.md only)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 22:38:40 +01:00
igneum-josh
ce746269ce Merge remote-tracking branch 'origin/master' into release-0.3.5 2026-10-04 22:38:26 +01:00
igneum-josh
0a90630c65 docs/plans/release-0.3.5.md: the overnight merge, tests, the morning cut and the Windows hand installs
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 22:37:48 +01:00
igneum-josh
c257444c04 bugs.md: the memo row's evidence corrected (PC 2's case), the misleading approval wording on Windows
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 22:36:53 +01:00
igneum-josh
cc71ed6aa1 Merge remote-tracking branch 'origin/master' into release-0.3.5 2026-10-04 22:35:05 +01:00
igneum-josh
7eb83fff6e Merge origin/build-job into release-0.3.5
Conflict resolved: publish-jobs.sh keeps master's verify command and --tries (the retrying live check) alongside the
build kind's arguments; the usage range covers the merged header.
2026-10-04 22:32:48 +01:00
igneum-josh
98726f02ba Merge origin/miner-perf into release-0.3.5
Conflicts resolved: state.rs keeps both the sweep fields (miner-eff) and the race fields (miner-perf); bench-log.md
keeps both appended entries; publish-manifest.sh keeps master's --override implementation (b84644c, the "every
height switch" rule, --verify-only, --tries, the retrying live check) and adds miner-perf's --tuning / --no-tuning
with the carry-over of consensus.override and tuning from the current manifest. One --override case, one parser.
2026-10-04 22:31:26 +01:00
igneum-josh
b7c3ebb343 bugs.md: the OTA memo row
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 22:29:19 +01:00
igneum-josh
fcadcc5283 Merge remote-tracking branch 'origin/miner-eff' into release-0.3.5 2026-10-04 22:25:44 +01:00
igneum-josh
0d123b3075 OTA (Windows): start the update helper with CREATE_NO_WINDOW only; DETACHED_PROCESS killed PowerShell before the script ran
The first Windows update over the air (0.3.3 to 0.3.4) sat on 'the installer is starting' with no helper log on
PC 2. The helper launched by a remote job with the same arguments ran at once. Fix in 0.3.5; the Windows machines
take 0.3.5 by hand once more.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 22:22:31 +01:00
igneum-josh
17b5644f4e bugs.md: Sam's Mac incident closed with the helper evidence
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 22:13:52 +01:00
igneum-josh
e9f8847df5 Bench log: the fairness re-check of the variant race (jobs 0.17 to 2.8 s during a race, 36 s before)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 22:12:40 +01:00
igneum-josh
5c6e5b5f52 bugs.md: build-info worktree commit fix (fork branch), node provenance and observer EVM leads
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 22:12:29 +01:00
igneum-josh
ebce665094 Merge branch 'master' of https://github.com/igneum-network/igneum 2026-10-04 21:59:33 +01:00
igneum-josh
c0f246dbff Site: polish merged (one header and footer from partials, litepaper router, self-hosted fonts, 404, cache headers); light client derives the vote key hash when the feed omits it
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 21:59:28 +01:00
igneum-josh
35abe6d482 bugs.md: Sam's Mac 0.3.4 incident (open), the helper's getcwd warning, the 0.3.3 plist
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 21:58:21 +01:00
igneum-josh
b0e5f3bf59 Site polish: one header and footer from partials on every page, litepaper section router fixed, self-hosted fonts, 404 page, live page idle cost
Header: site/partials/nav.html, head.html, footer.html, injected by site/build.mjs between markers in every page (the bench template too) with the active link marked; the master mark in its black square, the wordmark, Litepaper, Live devnet, Engineering log, Evidence, GitHub and the miner button, in that order everywhere; one menu script (closes on a link, a tap outside, Escape with focus back on the button, a resize past 900 px); a skip link; one focus ring and one reduced-motion rule.

Litepaper: the hash routed by a click delegate and popstate instead of the browser's fragment jump. Root cause of the tabs fault: show() scrolled to the top of the article, never to the section; in whole-paper mode the fragment jump landed on the section and the smooth scroll then dragged the reader back to the Abstract; in one-section mode a deep link scrolled while the section was still display:none and landed on the cover. Now: every section and all 29 subsection headings reachable by URL in both modes, scroll-margin from the measured bar height (nav, plus the contents row on a phone), focus moved to the heading, a re-aim after a late font batch, mode buttons stacked in the sidebar.

Pages: homepage headline capped at 9cqw so it is two lines at 390 and 1440 (was four with "fire." alone), journey inlined by the build (no fetch, no shift), dates as "4 Oct 2026"; live page legend no longer forces 420 px of width at 390, the hash-rate unit as small mono, idle redraw at 30/s with a 1.5x backing store (0.7 to 1.2% of one core idle in Chrome for Testing, taken under load), the proving line wraps on a phone; evidence sort headings are buttons, chips carry aria-pressed, a scroll hint under 1,140 px; bench contents in a sticky scroll box, og.png?v=3; 404.html; sitemap with /evidence; vercel.json caches fonts a year and images a day.

Fonts: eight latin woff2 files in site/fonts (139 KB for all, 118 KB a typical page), preloaded first-paint faces, fallback faces with size-adjust and ascent overrides from the font tables; every page lost its render-blocking fonts.googleapis.com stylesheet and the gstatic origin.

HTML per page before to after (gzip): / 17,265 to 21,810 B; /litepaper 20,556 to 24,957; /live 15,640 to 17,777; /evidence 18,899 to 22,493; /bench 94,723 to 98,289. Third-party requests before to after: 3 to 1 (jsdelivr, light client), 1 to 0, 3 to 0, 1 to 0, 1 to 0. Lighthouse before and after is queued under the measure lock (held by reliability runs since 19:16Z, load average 258) and recorded in docs/design/site-polish-2026-10-04.md when it runs.

Checks: node site/build.mjs, tools/ci/link-check.mjs (246 links, 0 broken), identity grep, and a Chrome for Testing run over every page at 390, 768 and 1440 (no overflow, no console errors, menu, router in both modes, deep links on reload, keyboard).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 21:57:20 +01:00
igneum-josh
a86383f936 bugs.md: the stopped detector fired live on Sam's Mac's update quit
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 21:48:52 +01:00
igneum-josh
da8b471c46 Console: every update line the app logs sets the OTA state, newest wins (the Mac's card said '0.3.3 is current' with 0.3.4 staged); test
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 21:46:17 +01:00
igneum-josh
797a844c49 Console: a finished update shows as the OTA state ('update check: X is current'), not 'none' (PC 2 on 0.3.4); test
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 21:43:51 +01:00
igneum-josh
b80d4c9690 Miner efficiency sweep: hash per watt per NVIDIA card (lever 3)
src/sweep.rs (new): the cap steps 100% to 50% in 10% steps clamped to the card's limits, per-step rows (mean draw
from nvidia-smi power.draw, mean worker interval rate), the choice (best MH/W, ties to the higher rate then the lower
cap), the nvidia-smi power parser, a state machine on an explicit clock (15 s settle, 60 s hold, 30 s cap readback
limit), the elevated helper scripts (one administrator prompt per sweep: a command file polled by one elevated
process, self-restoring after 20 idle minutes), the unsupported reasons (Apple silicon, AMD). 9 unit tests with
PC 1's recorded RTX 5090 numbers (575 W default, 460 W cap, 290 W draw, memory temperature [N/A]).

Engine: scheduler (once after install, then weekly; one card at a time; only while the card mines, after 120 s
steady, never under a remote job hold, a pause, or inside 600 s of the hour boundary), the cap-mode probe (direct
when the engine runs elevated, else the helper), abort on any fault (card leaves mining, worker error, GPU 90 C,
job, pause, quit) with the cap restored, the chosen cap held and recorded, SWEEP table lines in the app log,
--sweep mode (sweep every supported card, print the table on stdout, leave the caps, quit). Cap floor 50% (was 60).
A readback that matches the asked cap now counts as applied (PC 1 showed "cap NOT applied" for hours at 460 W).

Dashboard: live eff MH/W on each tile, the sweep line (phase, last result, or why unsupported), Sweep now / Stop /
Unpin, "pinned" and "chosen by the sweep" on the cap line, the Settings toggle, the cards-page note, slider min 50.
A cap moved by hand pins the card: the sweep records but does not change it.

PC 1 measurement: relay/playbooks/sweep-5090.ps1 (a run job, elevated, miners stopped; a second engine with --sweep
in a scratch data folder, RESULT SWEEP lines) and docs/plans/miner-eff.md with the publish command. Not published.
Untested on a card.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 21:38:07 +01:00
igneum-josh
f6a2aac986 Variant race: bench-log entry (Metal on the M5 Max, 14 variants, two programs, serve check), the base-only short-circuit, the PC 1 zip's hash in the plan
Under emulation (or --race with no other name) the race no longer times base alone: emu/test.sh passes again
(9 source checks, the serve protocol with prepare, swap and self-heal, 17 sampled hashes equal to igneum-pow).
Mac table: g256 (256 threads per threadgroup) +17.3% and +21.2% over the shipped 32-thread groups on two
programs, with the live app's worker sharing the GPU; the serve check found the unfair mutex (fixed in 32d1c01).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 21:37:27 +01:00
igneum-josh
2d356dccc9 bugs.md: restart proof for the observer diagnostic; Sam's Mac second silence is not a quit
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 21:31:44 +01:00
igneum-josh
4e94f27467 Build job: a PC builds the node and the app engine for Linux and Windows inside WSL2, mining untouched
New job kind `build` (jobs.rs, jobbuild.rs, jobrun.rs run_build): free-space check on both sides (20 GB), the
build-inputs zip by sha256, setup inside the distro as root (mingw-w64 posix, clang for bindgen, protoc, zstd, the
Windows rust target; idempotent), sources extracted with the target dir persisting under /root/igneum-build,
cargo build --release native and for x86_64-pc-windows-gnu, cargo test for the manifest's packages, binaries
zstd-compressed and sent to the relay (fn=upload, Blob PUT, fn=drop; 50 MB each) with sha256 in RESULT lines,
STAGE lines with UTC times, a 40-minute default budget and per-stage caps, the Linux side killed on a cap. The
app's runner stays serial (one Active at a time), so a build never overlaps a shard job; nothing stops the miners.
From this version an unknown job kind is skipped by the app (parse_lenient) instead of rejecting the whole file;
the signer stays strict.

Mac side: packaging/windows/push-build-inputs.sh packs a fork worktree, app/igneum-app, brand/icons and
proto-cuda with a manifest (branch, commit, dirty, builds, tests) and the sha256; publish-jobs.sh add --kind build;
tools/build-job.mjs packs, publishes, watches, fetches, checks both sha256 per file and the PE header of every exe
(plus verify-exe.py on igneum-app.exe), and places the binaries where push-inputs.sh, make-payload.sh and the
cloud-devnet scripts look. relay.mjs drop <file> --body carries the body.

Tested on the Mac: 33 app tests (6 new) and the signer's 21; cargo check for x86_64-pc-windows-gnu; the packer
(7.9 MB zip, no target dirs); the publisher against a scratch folder with the rebuilt signer, the old signer
refusing the kind, a bad job refused at signing; the fetch path against the live relay with a real exe (sha256
and PE pass, a wrong sha256 refused; test items deleted). Not run on a PC: the job itself. docs/plans/build-job.md
has the first job for PC 1 and the rollout order (0.3.4 must be on the PCs before a build job is published).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 21:17:55 +01:00
igneum-josh
115d517bf4 publish-manifest.sh: the live manifest must be byte-identical to the folder's and verify, with retries and named reasons; --verify-only; a failed deploy stops before the check
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 21:17:01 +01:00
igneum-josh
99e87c4eec Merge branch 'master' of https://github.com/igneum-network/igneum 2026-10-04 21:06:13 +01:00
igneum-josh
8d4ad0229e Merge branch 'igneum-wt-finality'
# Conflicts:
#	docs/bench-log.md
2026-10-04 21:06:11 +01:00
igneum-josh
5e6dee36e6 bugs.md: the stopped-versus-silent console row
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 21:05:03 +01:00
igneum-josh
c5e4cda0b7 Finality rule v3 (ledger F21, F22): simulator scenario M, spec 03 Q4/Q5, cloud vote-timing analysis, v3 harness runner, fast-time profile, bench-log entry, devnet rollout plan
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 21:04:12 +01:00
igneum-josh
918ed9cb89 bugs.md: the observer double-lock fix proven on the live stream (21 locks, 0 duplicates)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 21:02:48 +01:00
igneum-josh
73fc2fd578 Observer autosync restarts the observer whenever the checked-out tools/observer tree changes (marker + check mode); console stale mark at 180 s (one missed upload is not stale); bugs.md rows
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 20:48:45 +01:00
igneum-josh
960cd75e66 Bug hunt: bugs.md row for the relay X28/X24 fixes; CLAUDE.md names the live site project (igneum team, GitHub integration)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 20:33:17 +01:00
igneum-josh
c1f59fb034 Relay: secrets compared in constant time (relay/lib/auth.mjs, unit test in CI), HSTS header, tools/relay.mjs prints /r/<token> in list and watch (round 4, X28 and X24 part)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 20:31:22 +01:00
igneum-josh
dde50730af Bug hunt: the site's Vercel project is in the igneum team (link, env and deploy commands in README-ship.md); bugs.md rows for the collect branch and the Vercel link, Sam's Mac closed
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 20:20:32 +01:00
igneum-josh
8fd492c16d Bug hunt: console cards for other/intel workers and a stale mark on old STATUS lines (relay/lib/parse.mjs + test in CI); publish-jobs verifies the live file with retries and named reasons, a verify command, a failed deploy stops, a collect command without $_ is refused; the dl token masked in printed URLs; docs/bugs.md
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 20:15:05 +01:00
igneum-josh
dffb556d4a Fleet learning for the kernel race: the TUNING record, the aggregator, the manifest's tuning object, the PC 1 race job
The engine turns a worker's race line into one TUNING {json} line in the app log (card model as the worker names it,
driver, arch, program class loads and wide loads, every variant's MH/s, winner, gain, the card's power cap and
draw, MH per watt), which the existing intake receives; the card state carries the variant for the dashboard and
one event per race. tools/tuning.mjs aggregates the records from miner_logs per card model (median MH/s or MH per
watt, at least 3 samples, de-duplicated per race) and writes tuning.json; publish-manifest.sh --tuning puts it in
the signed manifest (and now takes --override for consensus.override; both are carried over from the current
manifest when not given, --no-tuning drops it); manifest.rs parses it; ota.rs writes <app data>/tuning.json and
removes it when the manifest drops it; procs::spawn takes an environment and every miner starts with
IGNEUM_TUNING_FILE, which its worker reads at every prepare. Dry run of the publisher against a scratch folder:
tuning and override written, carried over, dropped, signature verified.

docs/plans/miner-perf.md: the signed jobs for PC 1 (fetch the race build of the NVRTC worker, then
relay/playbooks/race-5090.ps1 with the miners stopped: 17 variants, 3 rounds, twice) with the exact publish
commands for the main session; not published by the agent.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 20:08:45 +01:00
igneum-josh
460a99a3a2 Variant racing: the NVRTC and Metal workers compile several kernel variants at every prepare and keep the fastest for the hour
Josh, 4 Oct 2026 evening: "we need to make our miner better than anything else can be". The compile-ahead pipeline
built one kernel per program; it now builds a catalogue (unroll 2 or 8; the dataset load path __ldg, __ldcg, __ldcs
on NVIDIA; a register budget by --maxrregcount or __launch_bounds__, max_total_threads_per_threadgroup on Apple;
2, 4, 8 warps per block or 64 to 256 threads per threadgroup; combinations), self-tests each against the pack's
vector warps (NVIDIA) or the base kernel over 2^16 nonces (Metal), bit for bit or out, and times each for about two
seconds with the job loop paused (one mutex, mining resumes between variants). Base is the pack's text as shipped,
always first, never discarded; a race has a budget (default 120 s against the 600-DAA lead) and keeps the best so
far when it runs out, so the swap is never delayed. One line per race: variants, MH/s each, winner, gain, time.
A tuning file (--tuning, IGNEUM_TUNING_FILE) pins a variant or orders the candidates per card model.

NVIDIA: textual rewrites on the pack's own kernel_bound.cu with exact anchors from igneum-pow's emitter, so the
pack format, the miner and igneum-pow are untouched and old packs race. --race --pack <dir> runs the race alone.
Under IGNEUM_EMU the race is off (the stand-in checks the handed-over text is the pack's). Metal: the MSL hooks in
generateMSL, a lock-protected kernel slot per program, a pair compiled inline races after its first job,
--race-test --seed --day runs the race alone with a table. OpenCL is not raced yet. docs/design/miner-tuning.md.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 20:08:45 +01:00
igneum-josh
58dd36eb75 Bench log: four-shard block proven on the RTX 5090 (run 3), save gap closed; first machine in the United States
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 20:07:21 +01:00
igneum-josh
f47f5df041 Bench log: shard proving on the RTX 5090 measured (10.9 s per shard, 2.2 s aggregation); evidence rows 15 and 16; journey line
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 19:17:16 +01:00
igneum-josh
01c9671939 Merge remote-tracking branch 'origin/review-round-4' 2026-10-04 19:15:02 +01:00
igneum-josh
b0ac0627e2 Ledger P20: the 24-minute save gap measured on the second RTX 5090 run
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 19:15:02 +01:00
igneum-josh
d787d3a47c Relay: run and task posts need the console token (round 4, X23); prove host saves proofs buffered (ledger P20, second gap)
The intake key sits in every miner package, so the relay now lets it report only (drop text and files, ack, done,
register, upload). Posting a run or task, or renaming and re-roling a machine, needs the console token.
The prove host wrote proofs through SP1's unbuffered save: on WSL2 under /mnt/c the 18 MB core proof of a shard
took longer to save than to prove. Proofs now go through a 4 MB buffer with a timed 'saved' line, and
prove-shard.sh keeps results on the Linux side and copies them per stage. Ledger P20 updated.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 19:14:10 +01:00
igneum-josh
fd530ca406 Review round 4 (4 October 2026, afternoon): what is live. 1 fatal, 16 serious, 8 minor, 1 fixed; ledger X18 to X30, G12 to G14, F23, F24, M25 to M29, E16, E17, L9; fixes rows 104 to 116
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 18:05:28 +00:00
igneum-josh
7b55d70b88 Bench log: difficulty v2 activated on the live devnet by height switch
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 18:44:27 +01:00