Commit graph

448 commits

Author SHA1 Message Date
igneum-josh
0e710e995e site: honest buttons and labels for the conceded ledger items (X1, X2, X7, X8, X10, E5, G4, C2); partials rebuilt into every page
Home: hero and job-card buttons say what exists; the dev fee named beside the emission split; 0 admin keys in consensus; the log's day-one note. Miner and wallet pages: downloads open at the public testnet, the devnet is private. Nav CTA is The miner; footer gets the issues route. Journey phase 6 drops listings.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 16:39:31 +01:00
igneum-josh
3756063953 litepaper: the conceded ledger items worded honestly (M2, M4, M7, M9, M13, F5, F10, P1, P4, P6, P7, P10, E5, G1, G2, G4, G6, C2, C3, C5, C6, C8, C10, C11, M18, X1, X7, X8, X9)
Precedents table replaces the firsts table, with state and sources; labels Measured, Implemented, Designed, Target, Open where the ledger asks; one Who paragraph; no listings; private repository until the public testnet; issues route.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 16:38:18 +01:00
igneum-josh
23d11d5c5e Merge branch 'release-0.3.8' 2026-10-05 15:08:33 +01:00
igneum-josh
e557634a21 release-0.3.8 plan: the cut, the proving rollout, the first cross-verified shard 2026-10-05 15:08:31 +01:00
igneum-josh
560a7e0624 site: rebuilt (journey picks up the program id entry) 2026-10-05 14:17:12 +01:00
igneum-josh
7ce02b19b3 Igneum Miner 0.3.8: pinned proving programs (one program id on every machine, the verifier answers in about 2 s), the update card, the Windows exporter path fix, re-stamped WSL scripts; node 2b6d23ef unchanged 2026-10-05 14:17:12 +01:00
igneum-josh
97afe52737 Merge branch 'update-popup' into release-0.3.8
# Conflicts:
#	.github/workflows/ci.yml
2026-10-05 14:14:52 +01:00
igneum-josh
8d6e6afb92 ci: the pinned-guests check ignores comment lines
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 14:01:38 +01:00
igneum-josh
b58836713a Merge program-id: pinned shard and aggregator guests (elf/ + manifest), fast verify with the pinned key, CI check
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

# Conflicts:
#	proving/igneum-prove/host/build.rs
2026-10-05 14:00:54 +01:00
igneum-josh
b8b40a5a92 Proving: pinned guest programs, the verifier on SP1's light verifier
On 5 October 2026 the Mac's host (shard program id 0x0559759b...) rejected every
proof from PC 2's host (0x05db1aca...). Both were built from the same guest
sources: host/build.rs compiled the guests on each machine and the ELF depends
on where it is built (cargo's -C metadata for a path crate includes the checkout
path; a worktree on the same Mac gave a third id, 0x0dfade07...). The node's
verifier also spent 114 s to 138 s per proof in the prover client and both key
setups before a 0.1 s to 0.4 s verify.

- elf/: both guest ELFs, their verifying keys and manifest.json (sha256, ids);
  host/src/pinned.rs embeds and checks them at every start; the prove modes
  refuse when SP1's setup does not derive the manifest's id
- --mode verify: LightProver with the pinned key, no prover client, no key
  setup; prints the proof's own program id next to ours ("IS NOT OURS")
- --mode id; igneum-prove-pin and pin-guests.sh to re-pin; build.rs builds a
  guest only under IGNEUM_BUILD_GUESTS=1
- tools/ci/pinned-guests-check.sh: elf/ must match its manifest, no script
  builds a guest outside pin-guests.sh; make-package.sh and build-dmg.sh print
  the pinned ids
- unit tests on the pinned set; bench-log entry with the three ids, the cause
  and the timing: 127.0 s wall per verify before, 1.8 s to 2.4 s after
- rollout order in proving/README.md: every prover and verifier moves together

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 13:54:31 +01:00
igneum-josh
94957a5e49 CLAUDE.md: the credential helper returns the igneum-josh token by name
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 12:52:21 +01:00
igneum-josh
17b9d2275f CLAUDE.md: the origin URL carries the igneum-josh login
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 12:51:58 +01:00
igneum-josh
5bb7e86174 Merge prover-match: the empty-shard fixture and end-to-end export tests, source stamps in the prover tools
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 12:51:24 +01:00
igneum-josh
bb522db3ac Prover: the 5 October post-root assertion explained (stale build, empty-segment plan), fixture 58927, fixture test, source stamp
The fact: PC 2's exporter failed blocks 58,752 to 58,843 (and the task's 58,584 to 58,984) at
shard.rs:175, "shard 0 post-root from the witness", while three empty shards were later proven, verified and
paid. Every failing block is empty: one blue block, one reward, the pool credit, no transactions, no payouts
(igneum_exportSegments 0x0..0xe738 from the Mac node, fork 2b6d23ef). The proven block 59,507 has the same
shape and the same miner as the failing 58,927. So the difference is not block content.

The rule that differed: the planner's post-root of an empty segment. The exporter on PC 2 was a stale build
whose core predated commit 1251f0a (the assertion sits at line 175 there and at 179 since). That planner
returned root_at(end) for a segment with no transactions, which is the pre-root; the statement applied the
rewards and the pool credit, as the node does (vendor/igneum-node-036/igneum/exec/src/executor.rs,
execute_segment) and as spec 7.7 item 8 says. Left = the root after the rewards (the node's), right = the root
before them; PC 2's export log for 58,752 shows exactly that pair. Reproduced here: master's core with that one
rule put back fires the same assertion on 58,927 with left 0x7886b9cf (the node's root) and right 0xea9db302
(the pre-root). Master's core as it is reproduces 58,927 and 59,192 with the node's roots, the host's native
mode matches the fixture, and the SP1 executor runs shard 0 to post-root 0x7886b9cf.

So the prover core needs no rule change: the fix is commit 1251f0a, which PC 2 received with the 10:49 and
10:52 UTC rebuilds (job-rebuild-prover-pc2-037 and 037b), after which its proofs were paid. What this commit
adds is the regression and the guard for the class:

- proving/fixtures/block-58927-empty-reward.json: the failing shape cut from the devnet (33 KB).
- proving/igneum-prove/export/tests/fixtures.rs: every fixture in proving/fixtures reproduces (block
  statement, plan, every shard statement from its witness, the chain of roots and links), and the empty
  segment's shard ends at the root after the rewards, never the pre-root. With the pre-1251f0a rule put back
  the test fails. The test lives in the export crate so the core's manifest, part of the guest build, stays
  untouched.
- export/build.rs and host/build.rs stamp each binary with a hash of the native sources it was built from,
  printed on the first line of every run, so a stale build names itself in the log instead of in a line
  number (the stale-build class of 4 and 5 October).
- docs/bench-log.md: the row under the first paid proofs.

The guest is unchanged: built in one directory, this branch and master give byte-identical loadable segments
for the shard program and the aggregator, so no prover needs a rebuild for this commit. Noted on the way and
left open: the same sources built in three directories on this Mac gave two different guest ELFs, so the
program id is not yet a pure function of the sources on a native build.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 12:50:40 +01:00
igneum-josh
7c37ca17a9 site: journey and bench rebuilt with the first paid proofs
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 11:54:56 +01:00
igneum-josh
de79359bf9 Bench log: the first shards proven, verified and paid on the live devnet (5 October 2026)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 11:54:47 +01:00
igneum-josh
0861586b4e wsl scripts: the re-stamp prunes every target dir, not only one level deep (touching target made cargo skip the rebuild)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 11:51:10 +01:00
igneum-josh
2f60b202b0 Merge release-0.3.6 plan commits (0.3.7 results)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 11:36:39 +01:00
igneum-josh
6d51e5393d app: the WSL exporter path is built as a Linux path (PathBuf::join wrote a backslash on Windows and broke every export on PC 2)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 11:36:25 +01:00
igneum-josh
33d03400cb benchmarks: the vmmap captures carry no local timezone stamp (identity check)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 11:31:44 +01:00
igneum-josh
0a9778417e release-0.3.6 plan: every reachable machine on 0.3.7 with node state, the open items 2026-10-05 11:31:26 +01:00
igneum-josh
682f7b1a2d site: rebuilt after the release merge
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 11:31:15 +01:00
igneum-josh
e2bf4d0a85 Merge release-0.3.6: Igneum Miner 0.3.6 and 0.3.7 (instant jobs, verifier on every node, one notice strip, latency, packaged config, hidden windows, WSL scripts from files, runtime DLL gate)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 11:31:04 +01:00
igneum-josh
74830647f6 release-0.3.6 plan: the three Windows machines on 0.3.7 with their nodes up 2026-10-05 11:29:19 +01:00
igneum-josh
19814a9818 release-0.3.6 plan: the Mac on 0.3.7 2026-10-05 11:27:46 +01:00
igneum-josh
ddb842a764 release-0.3.6 plan: the update-now job's run times per machine 2026-10-05 11:27:34 +01:00
igneum-josh
f6d41211d1 release-0.3.6 plan: the jobs file mirrored into the NEXT folder by hand (publish-jobs.sh does not) 2026-10-05 11:22:37 +01:00
igneum-josh
77bde6fb85 release-0.3.6 plan: the 0.3.7 ship, both manifests compared, the update-now job, the baseline 2026-10-05 11:18:18 +01:00
igneum-josh
c528ce8b62 release-0.3.6 plan: the 0.3.7 cross-built exes, the -static-libstdc++ result 2026-10-05 11:10:01 +01:00
igneum-josh
bbbbdd4509 release-0.3.6 plan: the watch's end 2026-10-05 10:59:51 +01:00
igneum-josh
07f5974383 release-0.3.6 plan: the PC-built Windows node dies at start even with matching DLLs; 0.3.7 ships the Mac cross-build; 0.3.8 open item 2026-10-05 10:56:22 +01:00
igneum-josh
61ef09d106 release-0.3.6 plan: the OTA helper logs of the three machines 2026-10-05 10:50:32 +01:00
igneum-josh
0d372d2522 release-0.3.6 plan: PC 2 and the Mac after the publish, the node restart loop on the PCs 2026-10-05 10:50:05 +01:00
igneum-josh
26b10a9b36 release-0.3.6 plan: the 0.3.7 DMG 2026-10-05 10:49:51 +01:00
igneum-josh
b74f700778 release-0.3.6 plan: section 9, the 0.3.6 Windows runtime incident and the 0.3.7 hotfix 2026-10-05 10:47:12 +01:00
igneum-josh
b65cc64502 Igneum Miner 0.3.7: the Windows runtime DLLs come from the toolchain that linked the exes, and a gate refuses a payload whose exe imports a symbol the shipped DLL lacks
0.3.6 on both PCs: igneumd.exe (built on PC 1 with GCC 13's mingw) shipped with the Mac toolchain's GCC 16
libstdc++-6.dll, which no longer exports seven symbols the exe imports (std::codecvt_utf8_utf16 and a
stringbuf::seekpos); Windows refused the node with Entry Point Not Found. -C link-arg=-static had never removed
the libstdc++ import (0.3.5's Mac-built exe carries it too).
- packaging/windows/check-runtime-dlls.sh: objdump imports per DLL against the DLL's exports; shown to fail
  the 0.3.6 pairing (7 missing) and pass 0.3.5's; run by push-inputs.sh before signing and by make-payload.sh
- push-inputs.sh: DLLs next to the exes first, then the Mac toolchain
- jobbuild.rs: the PC's windows stage copies its own toolchain's three DLLs into the pack (unit test);
  build-job.mjs accepts the small DLL PE files and places them next to the exes
- cross-build.sh: -static-libstdc++ added as a try (measured on the 0.3.7 build)
- the six version files: 0.3.7
2026-10-05 10:46:49 +01:00
igneum-josh
bdde87aa6b publish-jobs: the signed jobs file goes to both downloads folders while the rotation runs
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 10:44:32 +01:00
igneum-josh
4c2a403691 release-0.3.6 plan: the machines after the publish, PC 1 first 2026-10-05 10:39:36 +01:00
igneum-josh
662d1112c2 release-0.3.6 plan: verify and console steps, the ship's close 2026-10-05 10:35:53 +01:00
igneum-josh
04054c0b2c release-0.3.6 plan: the ship, the live manifest compared field by field 2026-10-05 10:35:31 +01:00
igneum-josh
f315112645 Miner app 0.3.7: the update card, one centred card over the window for an update
The strip under the header stays; the card is the first sight of an update. The mark with a progress ring, "Igneum
Ember 0.3.7", one line (is available, is downloading with the percent, is ready to install, Installing. The app
restarts itself., did not install with the one-line cause and Try again), up to three lines of release notes from the
manifest with the rest behind "What changed", the size, Install now and Later. Escape and the backdrop are Later.
Reduced motion is honoured.

Rules (UpdateCard, pure, app/igneum-app/ui/update-card.test.mjs): the card never opens while a job runs, in the
engine's first 60 s, while the key sheet is up or while the app quits; it waits and comes once the block lifts.
Later hides this version at this stage and leaves the strip; the card comes back for a newer version, or when the
download is ready and automatic updates are off (with them on it installs by itself). An open card follows its
update through downloading, ready, installing and failed; installing and failed never open a card by themselves.

?update=<kind>[&auto=0][&card=1] and ?uptime= on the page show every state without an engine. CI runs the new test
file next to notices.test.mjs.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 10:33:17 +01:00
igneum-josh
8a79f355fa Merge origin/master (2766b26) into release-0.3.6: site pages, litepaper v0.2, the PCs build rule; the testnet-prep MetaMask page moves to /metamask (master's /wallet is the product page), the testnet terms card stays on the home page 2026-10-05 10:31:35 +01:00
igneum-josh
5483322db1 release-0.3.6 plan: PC 1 take 2 binaries and hashes, the PC 2 pair read precisely, the finality test-isolation finding 2026-10-05 10:27:28 +01:00
igneum-josh
bd18b999b2 inputs: pin node 2b6d23ef for 0.3.6 (payload-inputs.json signed and deployed) 2026-10-05 10:27:28 +01:00
igneum-josh
d89acf095a release-0.3.6 plan: the DMG hash 2026-10-05 10:19:49 +01:00
igneum-josh
5b2856ef40 release-0.3.6 plan: PC 2 suite result (M30 pow-cache queue under full-suite parallelism), the two follow-up jobs, the DMG with the 0.3.5 prover 2026-10-05 10:19:14 +01:00
igneum-josh
4ef1a78341 Merge app-ui (the notice strip) into update-popup 2026-10-05 10:15:50 +01:00
igneum-josh
a7e1181a8b release-0.3.6 plan: the PC 1 build failure (cargo mtime freshness over the persistent target dir), the fix, take 3, the PC 2 suites job 2026-10-05 10:13:59 +01:00
igneum-josh
ac13387db0 Stale-build class closed: every script that copies sources re-stamps them before building, CI check, repo rule
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 10:12:38 +01:00
igneum-josh
021a7158d5 build job: the extract stage stamps every unpacked file (the PC's persistent target dir judged 0.3.6 sources unchanged since the 0.3.5 build and linked new callers against stale crates); the packer stamps too, this guard holds if it regresses 2026-10-05 10:12:27 +01:00