Commit graph

495 commits

Author SHA1 Message Date
igneum-labs
4df339fdf8 bench-log: the 9070 XT's four drops on 5 October and the kit wiped by the 0.3.10 install; the playbook notes the re-fetch rule
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 22:25:06 +00:00
igneum-labs
185d843848 bench-log: the RTX 5090 power-limit sweep measured (best 400 W floor at 0.369 MH/W, 0.8% hash cost; 431 W sits on the flat part); 0.3.10 card keys carry no device index
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 22:16:08 +00:00
igneum-labs
ed41077aa6 amd-card-test playbook: the precondition reads the live rate twice (state mining and hash_now above 0, 10 s apart) before switching the card off, and aborts when a worker still holds the card's OpenCL index
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 21:25:27 +00:00
igneum-labs
9931dcb119 AMD clock and power control (ADLX / amdgpu sysfs) in igneum-gpu-telemetry, the AMD lever in the app's efficiency sweep, the one-card test playbook; the 9070 XT sweep is OWED (the eGPU left PC 1's bus at 20:40 UTC)
the project lead: "can anything be done to redeem AMD?". The control is built and unit-tested; the measurement was not taken
because the RX 9070 XT (and the Sonnet box itself) vanished from PC 1's USB4 and PnP lists before the run (relay
probes #202 and #203, 20:40 and 20:45:34 UTC; a PnP rescan did not bring it back; nobody restarts PC 1 tonight).

proto-opencl/gpu-telemetry.c: --tune (per card: max GPU clock range and value, power-limit range and offset, factory
flag), --card N --set-gmax MHZ, --card N --set-plimit PCT (offset from default), --card N --reset (ResetToFactory);
ADLX IADLXManualGraphicsTuning2 and IADLXManualPowerTuning on Windows, pp_od_clk_voltage and hwmon power1_cap on
Linux (fixture-verified); every sample line carries plimit_pct and gmax_mhz, the limits in force. host.c:
--probe-mib takes a list (4,64,96,1024 for the 7900 XTX's 96 MB cache).
sweep.rs: Lever (NVIDIA watts, AMD power percent, AMD max clock), plan_amd_power_steps, plan_amd_clock_steps, the
read-back tolerance per lever, Row::line_for, unsupported_reason_for with the AMD case; engine.rs: parse_amd_tune,
the --tune read at the AMD child's start, the AMD paths in sweep_begin (no nvidia-smi probe, no elevated helper),
sweep_set_cap (the helper command) and sweep_drive (the read-back by lever), the AMD draw feeding the samples,
the start gate; state.rs: the AMD ordinal, limits in force, ranges and amd_tunable. Tests: 87 pass (the planners,
the machine on percent read-backs, the tune and sample parsers on captured lines).
relay/playbooks/amd-card-test.ps1: one AMD card through the list fold check, memprobe, a 120 s hash run, the
telemetry window, the clock and power sweeps with the memory clock watched, factory reset with read-back, the
bench-log table and the MH/W and MH per pound line; parameter $Gfx (gfx1201, gfx1100).
docs/bench-log.md: the owed rows with the reason and time, the gfx1100 expectation by reasoning from gfx1201.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 21:20:37 +00:00
igneum-labs
423936bf89 AMD telemetry: igneum-gpu-telemetry (ADLX on Windows, amdgpu sysfs on Linux, PDH utilisation fallback) feeds the card row's draw, temperature, fan, memory clock and MH/W; measured on PC 1: 9070 XT 198.9 W, 64 C, 657 rpm, 17.73 MH/s = 0.089 MH/W beside the 5090 at 307.6 W, 122.30 MH/s = 0.398 MH/W
the project lead watched the 9070 XT at 90% usage with its fans barely turning and the app could not say what it drew: the
draw, temperature and MH per watt line came from nvidia-smi only, and the earlier per-watt figure used the board
rating. proto-opencl/gpu-telemetry.c prints one line per AMD card per sample (bus from SetupAPI by the display
device's name, kind, name, watts, temp_c, fan_rpm, fan_pct, mclk_mhz, gclk_mhz, util_pct, source), built by
build-windows.sh against vendor/adlx (the SDK clone), shipped by make-payload.sh and push-inputs.sh. The engine
runs it with -l 5 beside nvidia-smi (Source::AmdTelemetry, tick_amd_telemetry), parse_amd_telemetry fills
power_w, temp_gpu, fan_pct, fan_rpm, mclk_mhz, util_pct and telemetry_at on the AMD card matched by kind and
ordinal, so eff_mhw and the dashboard's existing line show it; app.js shows fan and memory clock when present.
Tests: three on the parser with lines captured on PC 1 and the Mac fixture; the sysfs path ran on a fixture tree.

Measured over 20:27:45 to 20:29:41 UTC with both cards mining (docs/bench-log.md, under the 9070 XT ceiling table):
9070 XT 198.9 W (193 to 212), 64 C, 657 rpm, 2,505 MHz memory, 3,290 MHz shader, 100% busy, 17.73 MH/s =
0.089 MH/W; RTX 5090 307.6 W, 69 C, 44% fan, 122.30 MH/s = 0.398 MH/W.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 19:31:27 +00:00
igneum-labs
d366f01abd opencl worker: the 9070 XT on the eGPU measured (2.5 G random reads/s is the card's ceiling), duplicate AMD platform folded, GPU-side select read-back, kernel report and memprobe; app: --list parser with tests, one pack export at a time
Measured on PC 1 (docs/bench-log.md, "the 9070 XT on the eGPU"): the hash runs at 18.0 MH/s against a dependent
random-read ceiling of 2.42 to 2.68 G loads/s at 1 GiB (--memprobe), 128 loads per hash, so 92% of what the card does
for this access pattern; group-warps 1/2/4/8 and the old platform all give 18.0; wave32, no spills; the stream probe
reads 635 GB/s of the rated 640, random 64 B lines run at the same count as random 4 B loads. Not the eGPU link: the
link only carried the 16 MiB per-job read-back (7.3 ms per 2^21-nonce job), which the select pass removes
(124.2 to 117.3 ms per job, 16.88 to 17.87 MH/s inside jobs, kernel 116.0 ms on both).

host.c: the same card on an older platform of the same vendor is marked and hidden from --list (PC 1 ran two workers
on one 9070 XT at 8.9 + 9.4 MH/s); the default pick skips it; printKernelInfo on every path (preferred multiple,
private memory, sub-group size); --readback select|full with the transfer and time budget in the stats line;
--memprobe (chase, indep x8, 64 B lines, stream, ALU) with a fresh seed per repetition; test_host.c covers the fold.
detect.rs: parse_opencl_list with three tests (the PC 1 listing, a CPU device, a repeated index).
engine.rs: EXPORT_LOCK serialises igneum-miner export-pack across the per-card threads (PC 1's packs\devnet held
one epoch's program.h with another's seeds.txt after an epoch change and every OpenCL worker start refused it).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
(cherry picked from commit 23810dfe58)
2026-10-05 19:30:42 +00:00
igneum-labs
5aa75166d8 Merge remote-tracking branch 'origin/master' into release-0.3.9 2026-10-05 18:19:29 +00:00
igneum-labs
995769d0e6 finality-v3-devnet-publish.md: the app nodes, the sweep (every live node on 1f4b4425), the Mac app's external-node finding, the checkpoint read 2026-10-05 18:19:03 +00:00
igneum-labs
4c7a1d0f1a site: download cards point at Igneum Miner 0.3.9 (regenerated by the 0.3.9 ship)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 18:18:26 +00:00
igneum-labs
2260a43053 docs/plans/finality-v3-devnet-publish.md: N3 = 135,200, digest 1f4b4425, the hand nodes, the seed and the three manifests 2026-10-05 18:09:05 +00:00
igneum-labs
135f67ab2a Merge remote-tracking branch 'origin/master' into release-0.3.9 2026-10-05 17:55:57 +00:00
igneum-labs
c30b0c0f09 release-0.3.9 plan: the ship, the proving rollout, the fee switch (H 210,000, digest ab8847da) and the sweep; restart-hand-nodes.sh: grep -c instead of grep -q under pipefail, lines() never ends the script 2026-10-05 17:55:35 +00:00
igneum-labs
7d09857f91 observer: a watchdog forces a reconnect after ten failed ticks (the live page went stale for an hour after a node restart)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 17:22:22 +00:00
igneum-labs
a96bcea470 Merge key-custody: key inventory, encrypted offline backup and restore scripts, the two-signing-key plan, a no-secrets CI check
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 17:01:53 +00:00
igneum-labs
addeb660fd Key custody: inventory, encrypted backup and restore, no-secrets CI check
docs/security/keys.md: every key the project depends on (the folder, the gh
keyring, the Vercel env of three projects, the GitHub secrets) with where it
lives, what it unlocks, the blast radius lost and leaked, who rotates it and
the rotation status, written from the files and the scripts that read them.
No value, no private fingerprint. Section 4: the second OTA signing key kept
offline, the app change (a key list plus revocation in the manifest), 0.3.9
as the carrier, and the emergency path if the one key leaks today (a manifest
signed with a new key is useless to 0.3.x apps; the mitigation in order).

tools/keys/backup.sh: ~/Desktop/igneum-keys-<date>.dmg, AES-256, hdiutil's
own prompt (never argv, history or a file), the folder minus build-slots,
dlsite-dir and pytools/, plus a README; attached read-only, every file
compared by sha256, listed, detached. --dry-run lists. restore.sh: --check
compares the image against the live folder without printing values, --to
copies back with 0600/0644 and 0700. test-backup.sh: the end-to-end test on a
scratch folder with a throwaway passphrase, 8 steps, passed.

tools/ci/no-secrets-check.sh, in ci.yml: no tracked file named like a key of
~/.config/igneum, no 64-hex value assigned to a token/key/secret name outside
tests and the allowlist (the OTA public key, the published Hardhat and Anvil
accounts); a --self-test fires on a known-bad tree first. 776 files, 0 hits.

Also: ~/.config/igneum, vercel/ and txgen/ are 0700 now (were 0755).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 17:01:01 +00:00
igneum-labs
8d80195869 release-0.3.9 plan: the cut so far (branch, tests, node builds, hand nodes and seed on a24ab01a, DMG, package) 2026-10-05 16:51:20 +00:00
igneum-labs
c8a9d4346c site: rebuilt on this tree (the pre-push hook's build differed from master's copy of the two generated files) 2026-10-05 16:50:12 +00:00
igneum-labs
8b4b1e500a Merge origin/master (974805b) into release-0.3.9: fud-a round 6, the entity imprint, the conflict-marker check; docs/bench-log.md both entries, the site taken from master and rebuilt (519 links, 0 broken) 2026-10-05 16:48:00 +00:00
igneum-labs
974805b9df ci: no conflict markers in tracked files (check + pre-push hook that also builds the site)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 16:45:09 +00:00
igneum-labs
042bdce16a site: conflict markers removed from the generated journey data, every page rebuilt
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 16:44:16 +00:00
igneum-labs
f8efe7d22c site: the home page's journey block merged and rebuilt (a conflict marker had slipped into the merge)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 16:43:10 +00:00
igneum-labs
ee7cfa9c27 Merge entity: Igneum Labs LTD and the DIFC address as the entity and contact everywhere, repository public at the public testnet, ledger published with it, no team page
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

# Conflicts:
#	docs/fud-ledger.md
#	site/bench.html
#	site/index.html
#	site/journey.json
2026-10-05 16:42:40 +00:00
igneum-labs
5fc4252734 infra/devnet: the restart scripts take the fork tip's commit and the seed's cross-built binary by variable (0.3.9: a24ab01a; the seed's glibc 2.36 refuses the PC 1 build) 2026-10-05 16:42:37 +00:00
igneum-labs
02b19ed761 Entity, contact route and repository date: Igneum Labs LTD imprint in the footer, litepaper and miner fee, hello@igneum.network as the flaw route, repository public at the public testnet
Footer partial: imprint line with the registered address and the mailbox; Report a flaw mails hello@igneum.network with the spec issues as the second route. Litepaper: Who are you names the entity that ships the software, the team is pseudonymous with no team page, the ledger and the benchmark source are public with the repository at the public testnet, the last paragraph gives the mailbox and the address. Miner: the dev fee goes to Igneum Labs LTD. Evidence (md and page): repository private until the public testnet. Trademark FILING.md: applicant Igneum Labs LTD at the DIFC address. Identity check: the ledger and fixes file join the export list; the forbidden list notes that the registered address is allowed. Site rebuilt (bench page and journey picked up the txgen log entry).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 16:41:38 +00:00
igneum-labs
0c92c5faa1 Ledger and fixes: published with the repository at the public testnet, submissions to hello@igneum.network, no team page (decisions of 5 October 2026)
The ledger's header and submission lines, G3's status line, and the fixes file's legend, row 9, decision (b) note and section 5 record the four decisions. Two literal pattern mentions reworded so the identity check passes with both files on its export list.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 16:41:38 +00:00
igneum-labs
acd6f86cb2 site: rebuilt after fud-a
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 16:33:16 +00:00
igneum-labs
8703d9e731 Merge fud-a: ledger sweep round 6 (11 fixes closed with rollout evidence, M1/M11/M16/M21/P3/P9/P14/X5 measured, C4 finding, F16 options)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

# Conflicts:
#	docs/bench-log.md
2026-10-05 16:33:15 +00:00
igneum-labs
fb32312383 Merge remote-tracking branch 'origin/master' into release-0.3.9 2026-10-05 16:32:53 +00:00
igneum-labs
381cbd29df Windows payload inputs: node a24ab01a (push-inputs.sh, signed, live 16:32Z) 2026-10-05 16:32:29 +00:00
igneum-labs
ff6be6ccdb FUD sweep round 6, C4 measured: the overlay holds during a split and fails at the heal in the shipped node (a certificate over an off-chain block stays pending, GHOSTDAG never reorgs to it, the heavier side locks alone one window later); module-off control converges
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 16:32:04 +00:00
igneum-labs
ef3cbaf4f5 Merge housekeeping: the signed jobs envelope, build-job test flags, the PC-built node cause and the parallel finality tests recorded
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

# Conflicts:
#	tools/build-job.mjs
#	tools/ship-app.mjs
2026-10-05 16:30:47 +00:00
igneum-labs
38486f9551 Igneum Miner 0.3.9: the prover mirrors the fee switch (new pinned guest, shard id 0x2b1a81cb...), node a24ab01a (igneum_exportSegments names the mergeset and every entry's block and body position), the devnet fee-switch runbook; the six version files 2026-10-05 16:28:36 +00:00
igneum-labs
3a96e7371c Merge fee-switch into release-0.3.9: the prover mirrors both fee tables and fees_v1_activation_daa (new pinned guest), the devnet runbook for H = 210,000
Conflicts: proving/igneum-prove/export/src/main.rs (the two use lines: master's ensure kept, fee-switch's FeeParams and FeeSchedule taken, SHARD_PROVING_GAS_BUDGET gone), docs/bench-log.md (both entries), docs/testnet/README.md (both sentences), site/index.html and site/journey.json (master's, then node site/build.mjs: 518 links, 0 broken).
2026-10-05 16:28:21 +00:00
igneum-labs
4bfb5d3928 release-0.3.6 plan: why the PC-built Windows node died at start, answered and fixed in the fork (static libstdc++); the stale comments on the Windows DLLs
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 16:26:05 +00:00
igneum-labs
24aaa0e254 Prover mirrors the fee switch: both tables and fees_v1_activation_daa in the shard input, guest re-pinned, devnet runbook for H = 210,000
igneum-prove-core carries the node's fees.rs (PgasTable, FeeParams PROTOTYPE and CALIBRATED_V1,
FeeSchedule::at); the shard input and every fixture carry the schedule and the block's DAA score; the executor
reads the set at that score, raises the base fees to its floors and meters with its intrinsic, B_p and modexp
entry, as the node's execute_segment does. The 328-byte statement is unchanged: the node's native veto pins the
schedule (a new layout would be a consensus change for every node). Exporter: schedule and daaScore from the
dump (gen.mjs writes them), per-segment switch on replay, S_p from the set. Fixtures from one simnet chain across
the switch at DAA 800: fees-switch-prototype (block 51), fees-v1-shards2 (351), fees-v1-shards3 (355); 358
segments replayed, every state root the node's. Host tests on both sides. Guest re-pinned: shard
0x2b1a81cb..., aggregator 0x474678f3...; pinned-guests-check passes.

Node fork 2b6d23ef unchanged (igneum-exec tests 11 passed). Digest for the override with
fees_v1_activation_daa 210000: ab8847da538dead1dc10e046dfaadab3c1c35928e3748810c4e050d4a886087a.
Runbook docs/plans/fee-switch-devnet.md; infra/devnet/restart-hand-nodes.sh and restart-seed.sh take the
override object (the hand nodes and the seed run 20139145 today and must move to 2b6d23ef first). One line on
the live page, spec 5.11, the testnet README, the floor analysis, the bench log and the journey.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 16:24:35 +00:00
igneum-labs
142ca73731 Merge txgen: the devnet transaction generator, proving watch, exporter block reconstruction fix with node-plan fixtures, bench log and evidence
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 16:22:26 +00:00
igneum-labs
3be4e3ef2a txgen: real transactions on the devnet, the first non-empty shard proven and paid, the exporter's block structure fixed
tools/txgen/run.mjs funds generated wallets from the devnet dev-fee key and sends transfers at a steady rate through
one node (nonce tracking from the pool's pending nonce, two-strike drop verdict, pool back-pressure counted as
deferred, spend cap, clean stop, summary JSON); tools/txgen/proving-watch.mjs watches the proving layer and builds the
per-block report. Two runs through the Mac node: 2,275 sent at 2/s, 2,161 included at 1.86/s (run 1), 1,650 sent,
1,633 included at 1.71/s with no failure (run 2, fixed code). Block 72704 shard 0 (29 transfers, 5,800 pgas) proven on
PC 2 in 34 s, verified on the Mac in 0.297 s, paid 1.7623 IGN.

Block 72803 (seven skipped copies, no executed transaction) failed the native-execution veto: the exporter rebuilt the
including blocks from an export that names no block, position or skipped copy's miner, sorting skipped copies out
of their block, merging consecutive blocks of one miner, dropping empty blocks (the node counts them in the link's
block index) and guessing the zero address. blocks_of now rebuilds from the 0.3.9 export's "blocks", "block" and
"position" fields (the fork change on vendor/igneum-node-txgen branch txgen-export), keeps an old export in its
order and refuses a skipped-only block without a miner. Fixtures block-72803-skipped-copies and
block-72854-empty-block-first with the node's shard plan beside each; the fixture test now checks the cut's links,
roots, gas, pgas and counts against the node's plan (shown failing on the old 72854 cut). No change under core/.

Bench-log entry and evidence rows 15 and 21.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 16:18:32 +00:00
igneum-labs
26d255737c FUD sweep round 6: bench-log entry (live rollout evidence, fleet codegen, 5090 race, verifier in a phone-sized tab, block sizes and k, weight window) and fud-fixes section 2.6
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 16:06:24 +00:00
igneum-labs
d9736b3c06 Merge testnet-infra: testnet seed profile, DNS and RPC installers, build-job watcher fix, docs/testnet, the go checklist
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 16:05:16 +00:00
igneum-labs
6621ec3b51 FUD sweep round 6: M1 program space counted, M11 fleet boundary and 5090 race measurements, M16 cost model, M21 block sizes and k, P3 certificate verify in a phone-sized tab, P9 parameter table, P14 one definition, F16 two options priced, X5 independence measurement defined; decision owners named on L1 to L5 and G3
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 16:04:48 +00:00
igneum-labs
97f0cf14ac docs/plans/testnet-go.md: the go checklist with the state of every line at 16:05 UTC, the final genesis, the cost
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 16:04:09 +00:00
igneum-labs
f2416a39de build-job.mjs: the watcher reads the SUMMARY wherever it sits in the report (the closing report starts with the app header; two finished builds showed as still running on 5 October 2026)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 16:02:47 +00:00
igneum-labs
e6a3f8bab1 FUD sweep round 6 (evening, 5 October): eleven rolled-out fixes moved to Fixed with live measurement lines, F21/F22 shipped but switch not thrown, M20 closed on the 0.3.5 merge; P14 one base-fee definition in spec 05; M16 recompute-attacker cost model; C4 overlay-against-GHOSTDAG runner
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 16:02:02 +00:00
igneum-labs
a015f67eac Merge public-release: token-free public downloads, site buttons with live versions, HiveOS 0.3.8 package, the faucet (prepared)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

# Conflicts:
#	site/index.html
#	site/miner.html
#	site/wallet.html
2026-10-05 16:01:08 +00:00
igneum-labs
53dae0ddf1 release-0.3.6 plan: the two finality tests under the parallel suite answered (fork 7003055b); build-job.mjs forwards --node-tests, --app-tests, --no-app
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 15:59:59 +00:00
igneum-labs
8fb0fafe17 Seed env values quoted (the launcher sources the file; --netsuffix=1 ran as a command on the first testnet start)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 15:59:53 +00:00
igneum-labs
3551069c51 Public testnet launch, the public side: dl/public downloads path, site download buttons, HiveOS package, faucet
Downloads: packaging/ota/publish-public.sh publishes the current installers, the HiveOS package and the two signed
manifests into dl/public/ with no token in any URL, writes the four /public/ aliases as vercel.json rewrites and an
unsigned index for the site; publish-manifest.sh --public and ship-app.mjs --public run it on every release (dry run
and self-test cover it). Nothing removed from the token folders.

Site: the miner and wallet buttons link the public aliases and show the version and size from the index, read at
build time (site/downloads.json is the offline snapshot); TESTNET_OPEN in build.mjs drops the "Public testnet: not yet
open" line on the go; the HiveOS Flight Sheet install line on the miner page; /faucet page.

HiveOS: igneum-hive-0.3.8.tar.gz from the 0.3.8 node (2b6d23ef, PC build job) and the zig-built Linux workers.

Faucet: site/api/faucet.mjs (10 IGN per address and per IP per day, Neon table faucet_grants, EIP-1559 transfer signed
by site/lib/eth.mjs with no dependencies: keccak, RLP, secp256k1 with RFC 6979), FAUCET_KEY and FAUCET_RPC from the
Vercel env only; 15 unit tests with a fake database and node, run in CI.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 15:59:31 +00:00
igneum-labs
340553a4cc Testnet seeds: debian-13 images (the PC build's glibc 2.39), a glibc check before the upload, the final genesis in docs/testnet/README.md
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 15:58:18 +00:00
igneum-labs
6cecbd4c67 jobs: one signed object (igneum-jobs.signed.json) so a file and a signature from two deployments can never pair
The 13:19:41Z refusal on PC 2: fetch_jobs took igneum-jobs.json and .sig in two requests while the edge was
still serving the previous deployment for one of them. The signer wraps the verified pair into one object and
reads it back; the app fetches that object (the pair only when none is published); publish-jobs.sh writes and
mirrors all three files and verifies every folder after the deploy; tools/jobs.mjs reads the envelope.
Tests: jobs.rs signed_envelope_binds_file_and_signature, packaging/ota/test-publish-jobs.sh (24 checks).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 15:52:34 +00:00
igneum-labs
72351e8270 Testnet seeds: NET=testnet profile for the seed scripts, seeds-testnet.tsv (3 Hetzner VMs), dns.sh (deSEC), the public RPC allowlist and nginx site, build-job.mjs forwards --node-tests
seed1.testnet nbg1 195.201.35.33, seed2.testnet ash 5.161.232.205, seed3.testnet sin 5.223.52.210 (5 October 2026). Ports 26810/26811/28810/26890
from seed.env; provision-seed.sh BUILD_WHERE=cross takes the PC build job's Linux igneumd from infra/cross/out.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-05 15:46:22 +00:00