Commit graph

218 commits

Author SHA1 Message Date
igneum-labs
a0cd83f901 Difficulty v2: Hetzner rehearsal passed (12 nodes, one chain through N + 600), binaries for every platform, the devnet rollout plan
rollout-v2.sh stages the Linux igneumd (gateways from the Mac, private nodes from their gateway), rolls one node at a time with
difficulty_v2_activation_daa in every override file, checks the common chain and watches the height; results/2026-10-04/
rollout-v2*.log and v2/ (the hash-rate step under v2 and the v1 comparison). docs/plans/difficulty-v2-rollout-devnet.md: the
binaries and their sha256, the activation rule (N = DAA at publish + 10,800; baked at the cut as DAA + 14,400), the exact
restart lines for the observer node, the seed and Mac node 1, the OTA path for the two PCs through NODE_OVERRIDE_PARAMS in
packaged-config.sh (the engine side landed in 00fff5f), the rehearsal record. Bench-log entry.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 15:19:31 +00:00
igneum-labs
a77fdd7a4b Bench log: the app's prover loop end to end on the Mac (three runs, two tile defects fixed, open-shard fallback); proving-v0 plan status for the app and the packaging
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 15:04:49 +00:00
igneum-labs
2145605c13 Prover service: with nothing assigned, an open shard (past its exclusive window, spec 7.2 item 4) is proven; the tile says open
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 15:02:24 +00:00
igneum-labs
8c31a5d04e Igneum Miner 0.3.3: an unattended Windows miner is never stranded by an update (4 Oct 15:40 incident: both PCs stopped at the installer's UAC prompt). Per-user installer (PrivilegesRequired=lowest, %LOCALAPPDATA%\Programs, migration from Program Files offered only when someone is at the keyboard, firewall rule asked once on first run and mining without it); the Windows helper runs the installer FIRST with the engine still mining and only the installer's own stop step ends it, a declined or unanswered prompt leaves the machine mining with "OTA: waiting for administrator approval" / "administrator approval not given; waits for the next time someone is at this PC" in the log and the intake, retry on Install now, next start or 6 h; machines take turns (apply only in the minute = machine id8 mod 60) and hold while /api/live shows over 30% of identities gone in 10 minutes
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 14:59:51 +00:00
igneum-labs
b01e7a7b84 Prover service: the host and the exporter are polled children, killed when the app quits, proving is switched off or the limit passes; their output goes to per-run log files
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 14:51:08 +00:00
igneum-labs
05fcba3b16 Prover service: a paid shard is found through igneum_getProofRecords for the submitted segment (a slow proof outlives the work list's 60-block window)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 14:50:09 +00:00
igneum-labs
162767fe18 Ledger: F22 placed after F20
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 14:41:42 +00:00
igneum-labs
254600cc0b Ledger F22: certificates carry 8 to 10 of 12 votes, locks sit just above the floor
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 14:41:23 +00:00
igneum-labs
2cbe1aa1fd Bench log: the observer gap was the Mac hibernating
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 14:41:05 +00:00
igneum-labs
8255839d9e Cloud devnet: two Singapore partitions and the hash-rate steps on the 12-node network, results and bench-log entry
partition.sh adapted to private-network mode: the cut sits on the region's gateway (INPUT, OUTPUT and FORWARD
against the far gateways' public IPs over 26611 and the DNAT ports 27001:27099), since a per-node port-26611 rule
leaves the DNAT links up. It now records the locks per side at cut, during, at heal and after convergence, the
first lock after the heal from the journals, and the heal time as each minority node's first chain removal of 5+
blocks (the sink-count criterion is tip churn on a healthy network). hop.sh and partition.sh hold the Mac awake
with caffeinate; analyze.py gains a 10-s hop series (difficulty, block count, 1- and 2-min rates, threads) and an
overshoot table; collect.sh writes hop-series.tsv and hop.md and gzips the journals.

Results 2026-10-04: partition 1 (window still filling) reorg 431/496 on the minority, 2 on the majority, healed in
10 and 14 s; partition 2 (locks active): minority locked nothing during the cut, majority locked every interval at
66.8% to 84.5% of total, 0 conflicting locks over 107 indices, healed in 11 and 15 s, first lock after heal 13 s.
Hash-rate steps x1.42, x0.70, x0.75, x1.32: difficulty overshoots x1.67, x0.66, x0.53, x1.60, settle 751 s,
never in 900 s, 241 s, 646 s. Failures stated in summary.md: the Mac hibernated during the hop (phase 2 ran 94
min), the first partition could not see locks, the script's heal and first-lock figures were artefacts (fixed),
and another agent's v2 rollout restarted every node during the second heal.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 14:39:54 +00:00
igneum-labs
00fff5f611 Igneum Miner: the app log reaches the intake (the uploader sends the file main.rs named instead of guessing a stamp); every upload starts with 'IGNEUM-APP version=<v> machine=<id8> platform=<os> node=<igneumd version>', logged again at every engine start so an OTA-applied restart carries it; token redaction kept
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 14:37:53 +00:00
igneum-labs
c8d9ef42cf Packaging for proving v0: the Mac DMG carries igneum-prove-host and igneum-prove-export, the Windows payload carries the Linux host and exporter under wsl2/bin with the WSL2 scripts and the fixtures; the prover probes the shipped WSL2 binaries first and runs helpers by absolute path; push-inputs takes IGNEUM_NODE_SRC; the test script's --network-only mode
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 14:36:59 +00:00
igneum-labs
74cc799a37 Fast time: the proving_v0_activation_daa row
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 14:26:51 +00:00
igneum-labs
f926335078 Bench log: proving v0 end to end on the 3-node test network (CPU prover, 150.6 s, three nodes agree on the payout)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 14:26:41 +00:00
igneum-labs
0271cfe4c0 Igneum Miner 0.3.2: signed job channel, seed-mismatch and stall guards, power-cap readback, round-4 security fixes, node with the difficulty v2 switch
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 14:11:59 +00:00
igneum-labs
b8f35fc1fb Proving v0: the app's prove setting, Proving tile and Set up hook; spec 7.7 (records, assignment, payout, activation as implemented); proving-v0 plan status; ledger P21 and P22; test script fixes
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 14:09:32 +00:00
igneum-labs
476063b1ab Proving v0: payouts in the shard statement (fixture, ShardInput, executor), the empty-segment plan fix, host modes compressed and verify, exporter reads payouts; the app's prover service (src/prover.rs); the 3-node test network script (tools/proving-v0/run.mjs); proving_v0_activation_daa in the fast-time profile
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 14:06:26 +00:00
igneum-labs
9e4f763b9b Igneum Miner jobs: the remaining helpers by absolute path too (curl, nvidia-smi, tar, powershell, taskkill, bash, nohup through platform::tool)
21e6d8d switched only wsl: BSD sed dropped the alternation. Now every Command::new in src/jobrun.rs goes
through platform::tool (R4.3.3).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 14:00:38 +00:00
igneum-labs
21e6d8d8ee Igneum Miner jobs: every helper by absolute path through platform::tool (R4.3.3: curl, nvidia-smi, wsl, tar, powershell, taskkill, bash, nohup)
The job runner launched its helpers by bare name; binary planting into a writable PATH entry fed an elevated
prompt was the round-4 finding. Fetched files were already sha256-checked before use (fetch and shard-benchmark
refuse a job without a 64-hex sha256 at parse time, fetch_file verifies before the rename).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 14:00:08 +00:00
igneum-labs
0af4a9b050 Igneum Miner round-4 fixes: the dashboard token is never logged and token lines never upload (R4.3.8); every helper by absolute path and Program Files read-only, fallback worker build under the app data folder (R4.3.3); the download and the staged bundle re-verified right before the swap or the elevated run, quarantine stripped only after that (R4.3.5); mutating POSTs refused unless same-origin (R4.3.7); no rollback below min_supported_version and no automatic re-apply of a failed version (R4.3.6); the signed manifest's consensus.override written to override.json for --override-params-file with a safe-moment node restart and 'consensus switch at DAA N' on the node tile, an old node that rejects the file runs without it; devnet vote-key note in the key sheet and READMEs
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:58:23 +00:00
igneum-labs
46ac592d56 Evidence row 30: four machines on the app
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:56:11 +00:00
igneum-labs
8ca095bb8d Site build: the bench scrub is self-contained Node (runs on Vercel and CI), fails on any private string
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:54:16 +00:00
igneum-labs
b838d0deae Igneum console at the relay URL: Machines, Jobs, Builds, Chain, Work log, Results and the relay as tabs
relay/api/console.mjs reads the log intake (miner_logs) and console_items in Neon, the OTA manifest, the
CI json and the jobs file from the downloads host (DL_TOKEN in the project env, never in the client), and
igneum.network/api/live; 10 s cache per answer. tools/console.mjs: post --kind log|build|note, log, machines,
chain, jobs, builds, results, sync-bench, sync-dl, sync-hetzner, sync, url. The two Mac-side build scripts
post build events. Screenshots at 375 px and desktop in docs/design/console/.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:53:33 +00:00
igneum-labs
dbf2de8d2f Evidence: rows 8 and 30 carry the outside Apple silicon laptop on the app (33 blocks, 21.0 MH/s), still tested by the team
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:53:15 +00:00
igneum-labs
fa1dbc7e9d Evidence: 4 October measurements (live hourly swap, first live lock and the 280 locks since, first GPU proof, one-click worker, generator v2, difficulty oscillation and v2 pending, 12-node propagation and partition, clock skew); rows 29 and 30 added; difficulty and floor claims softened
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:52:45 +00:00
igneum-labs
55166fa253 Bench log: first outside machine on the devnet (an Apple silicon laptop through the app)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:51:32 +00:00
igneum-labs
87b9d34697 Public API: no peer addresses, no full key hashes, no payout addresses (R4.6.2, R4.6.8)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:47:39 +00:00
igneum-labs
6f29616eed Site: the engineering log page renders a scrubbed copy of the bench log and the build fails on any private string (R4.6.1)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:46:44 +00:00
igneum-labs
64d8c3ea4f Igneum Miner: the NVIDIA power cap is judged by reading nvidia-smi back (anything but the requested watts = NOT applied), the card tile and Settings say 'power cap: N W applied' or 'power cap NOT applied (needs the administrator prompt)' with a Retry, the elevated step runs through the window host (ShellExecuteEx runas, a UI context) with the PowerShell path as the 150 s fallback, events either way, cap state in the stability line (PC 2 mined uncapped at 118 MH/s on 0.3.1)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:43:04 +00:00
igneum-labs
8bbbeb0e6c Workers answer a job they have no pair for with a need line; the miner prepares the current pair (PC 2 stuck on the previous epoch)
Root cause from the uploads (bench-log entry): the app exported the pack while its node was in IBD inside the previous
epoch, the OpenCL worker started after the boundary with no next epoch within lead, so no prepare was ever sent and
every job was a seed mismatch; the CUDA worker on the same PC had swapped correctly. Both workers now print
need <epoch> <day> before the error; the devnet-v4 miner (3bfe346f) prepares the current pair on a need line or three
mismatches, exits 42 for a worker without prepare support, and restarts a ready worker that completes no job for
60 s with jobs queued. Package rebuilt with the guarded miner (ship build on dc749905), payload inputs published.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:32:58 +00:00
igneum-labs
45fd566bb1 Bench log: the observer stall of 4 Oct 2026, measured, and what changed
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:27:49 +00:00
igneum-labs
266ddf4db3 Observer: decoupled ingest, lag metric, per-minute by header time, feed self-check, restart loop
After the 4 Oct 2026 stall (no block stored from 11:57 to 13:15 UTC, then 7,022
blocks in two minutes). Notifications only enqueue; a drain loop handles them
in bounded batches. Block flush, colour marking and certificate work each run
on their own timer and never wait on one another. Mergesets come from the
notification's verbose data (bounded cache); getBlock only on a miss, four at
a time. live_state gains observer_lag_s and queue_depth; the API serves them;
the page shows "observer N s behind" past 30 s instead of waiting for the
first block. blocks_per_minute and blocks_60s are bucketed by the block's own
timestamp and reseeded from the table on start, so a catch-up fills past
minutes instead of painting a spike. If no blockAdded arrives for 60 s while
the node's block_count advances, the observer resubscribes; after two failed
attempts it exits 2 and tools/observer/run.sh restarts it.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:26:46 +00:00
igneum-labs
61cde8577e Igneum Miner 0.3.1: lock file
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:26:45 +00:00
igneum-labs
62970b2d17 Igneum Miner 0.3.1: the first build with over-the-air updates
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:26:24 +00:00
igneum-labs
e17d3816ba Difficulty: the live oscillation of 4 October, its cause, the DAG replay and rule v2 (reference window 600 behind a height switch)
Live devnet v4: a second RTX 5090 joining 7 minutes into an epoch left the whole-epoch reference lane polluted for the hour; the short lane read 11 to 25% above it and the 25% trigger flipped between the two for 40 minutes (102M to 164M, 54 to 81 blocks a minute). Record and hash-rate truth under sim/difficulty/records/. sim.py gains a DAG model (miners on nodes with igneum-miner's template staleness, GHOSTDAG, the rule as the node runs it) and --live replay: std of log difficulty 0.115 against the record's 0.134, 4.3 peaks of 1.31x against 4 of 1.37x. The brief's candidates (short lane 240/360, ease clamp 3%, clamp once per DAA second, hysteresis, median of three) leave 0.09 to 0.13; capping the reference lane at the newest 600 blocks of the epoch gives 0.026 with no flips. Rule v2 = that cap, epoch lane only, behind difficulty_v2_activation_daa (devnet-v4 fork). Attack suite and synthetic set before and after, 3-node test network of the switch (testnet_v2.py), analysis document, spec 2.3, bench-log entry, ledger M24, fast-time file carries the new field.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:26:23 +00:00
igneum-labs
f123292385 Igneum Miner: over-the-air updates (the project lead's rule: every app updates itself and downloads the update by itself). Signed manifest (Ed25519, key on the Mac, public key compiled in), hourly check with jitter, download with resume and sha256, staged bundle on macOS, silent Inno upgrade on Windows, apply at a safe moment (node synced, no hour boundary within 3 min, no worker starting), red bar and no waiting near a consensus activation height, rollback to .previous / the previous installer, Settings: Check now, Install now, automatic switch; publish-manifest.sh, fetch-ci-artifacts.sh adds the Windows entry; dry run on a private devnet 0.3.0 -> 0.3.1 and back (rollback), screenshots; TEST.md for PC 2
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 13:25:14 +00:00
igneum-labs
ad0f570f1f Brand: before/after Finder renders of the app and DMG volume icons (docs/brand)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 11:51:11 +00:00
igneum-labs
d12f2be8a5 Brand: one master mark (black square, no circle) for every icon, favicon and profile picture
the project lead's rule, 4 October 2026: the mark sits in a black square, never in a circle, never on another colour, 20% clear
space; the Mac app is the model. brand/master/igneum-mark-square.svg (1024, #0C0C0E, the exact header polygons at 62%)
and igneum-mark-square-rounded.svg (Apple's 824-on-1024 grid, DMG volume icon only). make-icons.py now rasterises the
masters (rsvg-convert if installed, else Pillow draws the polygons) into igneum.icns (plain square, 16 to 1024),
igneum-volume.icns, igneum.ico (each size from the vector), the Inno art, the DMG background, site favicons
(favicon.ico 16/32/48, favicon-32, apple-touch 180, 192, 512, maskable 512 + manifest entry), relay favicons, and
brand/profile (400/512/1024, github-org-512, X banner). Every page head's inline SVG favicon and the relay header lose
the ring. The .rc and Info.plist paths are unchanged (same file names). docs/brand/before holds the old set.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 11:39:55 +00:00
igneum-labs
2fab1e95fd Igneum Miner: NVIDIA power cap by default (80% of the card's default limit through an elevated nvidia-smi -pl step at start, restored on quit, per-card slider 60 to 100%), nvidia-smi telemetry on the card tile (draw, cap, GPU and memory temperature with amber over 90 C and red over 95 C), a stability line every 5 min and at quit (draw p95, max temps) for crash correlation (PC 2's 5090 hard-crashed at full power)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 11:39:52 +00:00
igneum-labs
4705c7cb5d Igneum Miner: node state derived from every watch reading (caught up within 2 headers and moving beats a false getInfo flag), an accepted block in the last minute is proof of sync, live height/daa/peers on the node tile; state-machine test for syncing -> clock-refused -> catch-up -> steady (PC 2 showed syncing while mining at 118 MH/s)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 11:32:22 +00:00
igneum-labs
e2e9ef0dd3 Bench log: first machine on the Igneum Miner app (PC 2, 118 MH/s) and the clock-skew finding
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 11:29:56 +00:00
igneum-labs
42794d7bcb Igneum Miner: clock-skew detection (the node's too-far-in-the-future refusals, the median of local minus block time over the EVM RPC, an HTTPS Date header), warn over 5 s, block Start and hold the miners over 10 s, one-click Sync clock per platform; bench-log entry and the node-change note (a 60 s slow node is silently dead)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 11:23:56 +00:00
igneum-labs
72e2f81484 Igneum Miner: identity labels and vote keys come from a per-install machine id, never the hostname (two cloned PCs shared COMPUTERNAME and signed with the same keys); hostname is a display label only, editable in settings; upload fields carry the id
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 11:07:31 +00:00
igneum-labs
491bc2e13e Bench log: the gfx1036 worker fault, the two Apple OpenCL soaks (no reproduction, no leak) and the injected-fault check; ignore the soak outputs
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 11:04:54 +00:00
igneum-labs
0722aedeaa Bench log: first finality lock on the live devnet (checkpoint 242, 77.4% of weight)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 11:04:32 +00:00
igneum-labs
8875e71913 Live DAG: the tip label picks a free spot around the block so it never covers a neighbour on phones
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 11:01:11 +00:00
igneum-labs
94a60ac246 Site: mobile menu button works again (the hero animation's links array shadowed the nav element); tap outside or Escape closes it
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 10:58:47 +00:00
igneum-labs
da11b9ee81 Windows exes carry the coin icon and a version block (the project lead's rule, 4 Oct 2026)
Every Windows executable now ships with the coin icon Explorer shows and the version block Properties shows
(CompanyName Igneum, ProductName Igneum Miner, FileDescription per exe, 0.3.0, LegalCopyright Igneum contributors),
like the Mac app and DMG already do.

- igneumd.exe, igneum-miner.exe: packaging/windows/embed-resources.sh now takes the worktree and target dir
  (defaults vendor/igneum-node-v4 and vendor/igneum-node/target-integration) and relinks with a linker shim first in
  PATH instead of `cargo rustc -- -C link-arg`: cargo rustc takes one package and unifies features differently from
  the two-package cross-build (300 crates differ), and a configured linker is fingerprinted and rebuilds everything;
  the PATH shim changes neither. .rc files moved to 0.3.0.
- igneum-worker-cuda.exe, igneum-worker-opencl.exe: proto-cuda/nvrtc/build-windows.sh compiles the two new .rc
  files with windres and links the objects; the icon is made with make-icons.py if missing.
- igneum-app.exe: app/igneum-app/build.rs runs windres on resources/igneum-app.rc for Windows targets and links it
  (cargo:rustc-link-arg-bins, no crate dependency); it fails the build if the .rc version drifts from Cargo.toml.
- packaging/windows/resources/verify-exe.py: small PE parser that checks the .rsrc section, icon group and version
  strings on the Mac; both build scripts call it, and it checks every exe inside the packages.
- proto-opencl/cl_dynamic.h: clGetEventInfo added to the run-time loader table (83c414a added the call in host.c
  without it, so the one-click OpenCL worker no longer linked under IGNEUM_CL_DYNAMIC).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 10:44:20 +00:00
igneum-labs
83c414a03b OpenCL worker fault guard, miner-side fault state in the launcher, NVRTC annotation rule in the emulation
After PC 2's gfx1036 (prebuilt-generic path) completed 2,000 jobs a second with no hash from 600 s on: every OpenCL
call in host.c's job path is now fatal on error (exit 3, the miner restarts the worker), the dispatch event must read
CL_COMPLETE, a chunk 20x faster per nonce than the running mean or an output buffer unchanged since the previous
dispatch is a fault, and a stats line every 200 jobs carries the live event and buffer counts (a leak over 16 events
or 12 buffers is fatal too). IGNEUM_FAULT_TEST=N exercises the detectors on a healthy device (verified on Apple
OpenCL: the stale-output guard fires on the chunk after the injected fault). The launcher shows 'worker fault' and
'restarting' for the card on the miner's WORKER FAULT line and drops the last rate. The emulation's NVRTC stand-in
now applies NVRTC's execution-space rule (program.h(46) igneum_launch_* declarations are host code unless
-default-device or -DIGNEUM_NO_CUDA), which is what the RTX 5090 reported; test.sh checks the rejection.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 10:42:36 +00:00
igneum-labs
0b713429ef Cloud devnet: private-network mode (4 zone networks, 4 gateways), 12 nodes up, first latency measurement
A new Hetzner account is capped at 10 primary IPs (IPv4 and IPv6 both count), 20 shared vCPUs, 8 dedicated
vCPUs and no Arm, and a network cannot span zones. So: one private network per zone (10.20.<zone>.0/24),
the lowest-index node of each zone keeps a public IPv4 and is its gateway (NAT, MSS clamp, one DNAT port
27000+index per private node, persisted as igneum-nat.service), every other node has no public address.
nodes.tsv gains access, pub and port columns; lib resolves same-zone vs cross-zone dial addresses and jumps
ssh through the gateway for private nodes. All nodes.tsv loops read on fd 3 (a backgrounded ssh drained the
file). TYPE_BY_INDEX puts nodes 8 to 11 on ccx13; node 12 is the last shared one the account allows.
create.sh prints the plan's cost from the live API. provision.sh install takes node names and skips binaries
whose sha256 matches. Binaries copied from the seed's staged v4 build (same sources), no vCPU for a builder.

Results 2026-10-04: RTT matrix (hel1-fsn1 35 ms, ash-sin 289 ms) and a 10-minute propagation window of 644
blocks: p50 343 ms, p90 497 ms, p99 666 ms across 12 nodes in 5 locations.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-04 10:41:23 +00:00