7.6: the late node synced from genesis across a switched-on span holds every block (313 of 313 for the burn, 331 of
331 for the bonus, one sink each, 0 rule error lines, 5 s) and the payouts read as before (0.8000 and 0.9000, the
pool 0.25 and 0.35). The first reading's failure is kept for the record. Not yet shown and named: a fresh node
syncing a span longer than two weight windows, where the vote records behind the pruning horizon are the one
node-local input left.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Section 7.5: five runs recorded. The first idled nothing and never asked the gate; the second found the depth gap
(fixed 3301cf32); the third found the extension shortcut (fixed aa0182aa: a candidate on the sink's chain is not let
through, the depth along its own chain decides); the fourth, on aa0182aa, PASSES (B 2,750 bps at the fork, 183 DAA
deep, heavier by 183, A kept its chain for 150 s and learned 177 of B's blocks, 268 refusal lines, one per refused
block); the known-failed case PASSES (gate off, A reorged onto a 2,083 bps key's 162-DAA chain 25 s after the heal);
the harness's failed shape FAILS as it must. Three harness faults fixed on the way (shared ports, an RPC call before
the socket opened, a reorg test by key instead of by chain) and one build fault (ledger N5, the stub-engine node).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Ledger N5: cargo build -p kaspad alone leaves the igneum-pow feature off (kaspad/Cargo.toml, default kHeavyHash
stub); igneum-miner turns kaspa-pow/igneum-pow on, and feature unification carries it into kaspad only when the two
are built together. A node built alone refused every real block (two fork-gate chains, 0 blocks), the same miner
mined 118 and 115 blocks against nodes built with both packages. Recommendation: igneum-pow a default feature of
kaspad for 0.3.17, the engine named in the version string (igneum_getNodeInfo's powEngine carries it now).
Node document 7.5 and 7.6: vote-or-burn none PASS, the known-failed case FAILS, burn and bonus PASS on the payout
(0.8000 and 0.9000, the pool 0.25 and 0.35) and FAIL on the replay (a node synced from genesis across the span
disqualified 240 blocks as UTXO-invalid: its silence reading differs from a present node's; both switches stay
never until the reading is a pure function of the block's past); the replay gate's own failed shape (another
digest) refuses at the handshake. Fork gate: the rule's known-failed case PASSES (a 32.5 percent key's 171-DAA deep
fork took A's sink 25 s after the heal under the rule as written); the gate-on case found the depth gap (fixed on
the fork, 3301cf32) and then PASSED on the rebuilt pair (B 2,810 bps, 193 DAA deep, heavier by 193, A held, A learned
188 of B's blocks) with a log flood fixed next (9a44fcb8); the harness now waits for each node's RPC and clears
leftover nodes before a case. The chain on the final pair runs; its three lines land in the table when it closes.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
network.md 5.11 and proposal 1: Kaspa's relay requests one round per batch, so at 10 bps and a 2-s RTT the hub took
one spoke block in three (every block a chain block, two thirds of the network's hash merged nowhere); at 400 ms it
took all of them. The fourth gate for any rate step: relay delivers the full block rate at the measured inter-region
RTT with margin. CLAUDE.md's block-rate line carries it. The live 1 bps devnet offers under one block per RTT and is
nowhere near it. Controller rows (node document 7.2): rule v3 at 600 ms holds 9.93 blocks/s with the difficulty 4.5
percent over the hash-implied value; the live rule v2 reads 22 percent under on the same DAG shape.
Ledger N4: the vote weigh-up's silent desktop key, upload by upload from miner_logs and the observer: the voter never
died and --no-vote was never set; the node fell off the network (a digest-mismatch refusal, then a same-digest peer
that relayed nothing), its tip froze for 53 minutes, and the miner hashed and voted on the frozen template with
synced=true throughout while the node accepted 1,750 blocks into a dead branch. The fix pair on the fork (miner
e6e1fbe2, node 96619b7d); infra/fast-time/miner-stall.mjs: stall PASS (STALLED at 30 s, exit 45 at 31.5 s), moving
PASS, today's miner FAILS as it must.
infra/fast-time/fork-gate.mjs and vote-or-burn.mjs with the replay gate (--replay). First lines: vote-or-burn none
PASS, the known-failed case FAILS, burn PASS on the payout (ratio 0.8000, pool 0.25) but the REPLAY FAILS: a node
synced from genesis across the span disqualified 240 blocks as UTXO-invalid (its silence reading differs from a
node that was present), so both vote switches stay never until the reading is a pure function of the block's past;
fork gate: the first run idled the honest side and the depth read 0 (fixed on the fork, 3301cf32: depth along both
chains), the re-run's lines follow. The tree ships as 0.3.17 (node document section 7).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
class-v4-signal.mjs now runs the 0.3.16 rule (95 percent in each of 7 consecutive windows ending at the seed block;
the flip at epoch 4 with the 30-DAA window), requires a floor for a signalling case (the canary rule: no floor, no
signal; the floor-less first pass read every chain byte 0), reads programClassV4SignalWeakestBps and checks that the
signal line names seven windows. The four cases on 6 October 2026, 20:57 to 21:25Z: two of three signal, no flip
(weakest 5,666 to 6,333 bps); all three, flip at epoch 4 (DAA 241 seen, boundary 240; 3 of 3 signal lines; the id
assertion on epochs 4 to 6); nobody, the floor at 360, flip at epoch 6 and not before; the known-failed case FAILS on
nine checks. Summaries in docs/plans/counter-asic-3-gate/class-v4-signal7-*.json.
infra/fast-time/difficulty-v3.mjs (Horizon lane 5 proposal 2's harness case): three nodes in a star through a TCP
delay proxy (the document's propagation delay d over Kaspa's three relay legs, inv, request, block, so d / 3 per
leg; the handshake's first 5 s undelayed, the version exchange times out at 4 s), override-60x.json re-rated to
10 bps (the override-params.md example's k 124 and limits, depths x10, PoW epoch 600 DAA so an epoch stays 60 s),
one CPU miner per node, pass = DAG rate within 10 percent of target and the sink's expected hashes per block within
10 percent of the miners' summed hash x T after 600 of 900 s; the red share and chain step spacing reported. Results
follow in their own commit (the runs are in progress at 21:30Z).
docs/design/execution-layer.md 8.2: the igneum_getRecentBlocks row (fork eec34ac3).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
PC 2 job run-ca3-shadow-pc2-20261006 (card empty, every pack bit-exact against the Mac): the 5090 holds its rate to
150,800 ops per hash and loses 2.7 percent at 199,600 under the app's 431 W cap, which binds from 102,100 ops up and
takes the clock from 3,037 to 1,834 MHz (86 MH/s at 330,700 ops); 350 W at the control, 2.65 to 3.27 microjoules per
hash; marginal ALU energy 10 to 13 pJ per counted op. Clock rows OWED (nvidia-smi refused -lgc without rights). Chip
side at N = 100,000 and k = 1: 2.1x over the 5090 on GDDR7, 0.9x over the M5 Max. GO at mx8+sh256x27.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>