fast-time, the matched pair 959b57c9 (igneumd 519ee6c4..., igneum-pow a2d333d6) under lease pool class v5: the crossing run 19:49:33Z to 20:04:00Z (the prelude reads v4 at epochs 0 and 1 on b1680b57; rung 1 by signal from epoch 6 at 19:56:38Z; class v5 by signal from epoch 8 at rung 1 at 19:58:31Z, 3 of 3, byte 6 at 9,985 bps; 11 of 11 program ids equal to the CPU verifier's; the stale node refused 122 of 122 after the first refresh; the restart step FAIL: the IBD catch-up engaged and did not complete, n2 on its own fork), the digest case PASS at 20:08:30Z (one digest c0d6998e for the v5 key absent, at never and on the 0.3.23 control 2720d8d2; the set key 8d8f6208 refused with the line in the control's log; 180 s of mixed mining, 79 new and 101 old blocks, 0 rejected, one sink at 180); the second-step check reads the rule (a step at or after the earliest allowed epoch is the rule, 12 here, decided after the window closed)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
igneum-labs 2026-10-07 20:08:49 +00:00
parent a98c18694f
commit de213c19b5
5 changed files with 1935 additions and 3 deletions

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,110 @@
19:49:33.798 override: every key known to the binary
19:49:33.800 case cross-959b57c9: 4 nodes, bytes 6/6/6/6, ladder up/up/up/up; class v4 sub-version 3 from genesis at rung 0; class window 60 DAA x 7 (the first epoch that can cross to v5 is 8, DAA 480), ladder window 45 DAA x 7 (the first epoch that can step is 6, DAA 360); v5 floor 900 (epoch 15); stale node 3; restart node 2 (stop at DAA 455, start at 500); 60 DAA per epoch, lead 10; run 960 s or 11 epochs; node /srv/artefacts/v5-pair-959b57c9/igneumd
19:49:38.066 CPU verifier on the Devnet 3 genesis pack: cli e5a4ac5978462156 pack e5a4ac5978462156 expected e5a4ac5978462156: OK
19:49:39.617 n0 up pid 1481638 json 29862 p2p 29861 exec 29863, byte 6, ladder up
19:49:41.127 n1 up pid 1482006 json 29872 p2p 29871 exec 29873, byte 6, ladder up
19:49:42.631 n2 up pid 1482205 json 29882 p2p 29881 exec 29883, byte 6, ladder up
19:49:44.138 n3 up pid 1482548 json 29892 p2p 29891 exec 29893, byte 6, ladder up
19:49:44.138 n0: Program class v5 from the override file: enabled, the floor at epoch 15 (DAA score 900 rounded up to the epoch boundary at 900); the class v | this node signals object version 6 | this node signals up
19:49:44.139 n1: Program class v5 from the override file: enabled, the floor at epoch 15 (DAA score 900 rounded up to the epoch boundary at 900); the class v | this node signals object version 6 | this node signals up
19:49:44.139 n2: Program class v5 from the override file: enabled, the floor at epoch 15 (DAA score 900 rounded up to the epoch boundary at 900); the class v | this node signals object version 6 | this node signals up
19:49:44.139 n3: Program class v5 from the override file: enabled, the floor at epoch 15 (DAA score 900 rounded up to the epoch boundary at 900); the class v | this node signals object version 6 | this node signals up
19:49:44.139 n0 digest: 6fa8e71d7fb9aa0d
19:49:45.155 epoch -1 -> 0 at daa 0, 7.1 s: template class 4 (next 4) rung 0 (27 passes, next rung 0), v5 share at the sink 0 bps (weakest of 7: 0), ladder up weakest 0 bps, this node signals byte 6, v5 by signal at epoch none, step at epoch 0
19:49:45.183 t=7.1 s daa 0 epoch 0 class 4 rung 0 v5 0 bps (weakest 0) up weakest 0 blocks/sink per node 0/234e082d 0/234e082d 0/234e082d 0/234e082d
19:50:00.237 t=22.2 s daa 2 epoch 0 class 4 rung 0 v5 0 bps (weakest 0) up weakest 0 blocks/sink per node 2/e99754f8 0/234e082d 0/234e082d 2/e99754f8
19:50:15.268 t=37.2 s daa 4 epoch 0 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 0 blocks/sink per node 4/cb5915f7 4/cb5915f7 4/cb5915f7 4/cb5915f7
19:50:30.308 t=52.2 s daa 5 epoch 0 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 0 blocks/sink per node 5/c01581e7 5/c01581e7 5/c01581e7 5/c01581e7
19:50:45.344 t=67.3 s daa 9 epoch 0 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 0 blocks/sink per node 9/5438fb76 9/5438fb76 9/5438fb76 9/5438fb76
19:51:00.368 t=82.3 s daa 13 epoch 0 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 0 blocks/sink per node 13/a834a02d 13/a834a02d 13/a834a02d 13/a834a02d
19:51:15.395 t=97.3 s daa 18 epoch 0 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 0 blocks/sink per node 18/db511010 18/db511010 18/db511010 18/db511010
19:51:30.422 t=112.4 s daa 29 epoch 0 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 0 blocks/sink per node 29/d7e5a340 29/d7e5a340 29/d7e5a340 29/d7e5a340
19:51:45.461 t=127.4 s daa 51 epoch 0 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 0 blocks/sink per node 51/4a5a7d41 51/4a5a7d41 51/4a5a7d41 51/4a5a7d41
19:51:49.469 epoch 0 -> 1 at daa 60, 131.4 s: template class 4 (next 4) rung 0 (27 passes, next rung 0), v5 share at the sink 10000 bps (weakest of 7: 0), ladder up weakest 0 bps, this node signals byte 6, v5 by signal at epoch none, step at epoch 0
19:51:49.477 stream for epoch 1 (seed 55eac09ae07b93fc): root 0xc50996925456ca09 16 records, from n0
19:52:00.521 t=142.5 s daa 66 epoch 1 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 0 blocks/sink per node 66/76d59f07 66/76d59f07 62/96473f19 66/76d59f07
19:52:15.560 t=157.5 s daa 87 epoch 1 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 0 blocks/sink per node 87/47ba8d0b 87/47ba8d0b 87/47ba8d0b 87/47ba8d0b
19:52:30.595 t=172.5 s daa 104 epoch 1 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 0 blocks/sink per node 104/9e63ed99 104/9e63ed99 104/9e63ed99 104/9e63ed99
19:52:41.624 epoch 1 -> 2 at daa 120, 183.6 s: template class 4 (next 4) rung 0 (27 passes, next rung 0), v5 share at the sink 10000 bps (weakest of 7: 0), ladder up weakest 0 bps, this node signals byte 6, v5 by signal at epoch none, step at epoch 0
19:52:41.632 stream for epoch 2 (seed cdb60950b9c5e6a1): root 0xb699642223214c8e 17 records, from n0
19:52:45.647 t=187.6 s daa 120 epoch 2 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 0 blocks/sink per node 120/efb37b2d 120/efb37b2d 120/efb37b2d 120/efb37b2d
19:53:00.678 t=202.6 s daa 142 epoch 2 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 0 blocks/sink per node 142/92c4f2ef 142/92c4f2ef 142/92c4f2ef 142/92c4f2ef
19:53:15.711 t=217.6 s daa 156 epoch 2 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 0 blocks/sink per node 156/a7564db3 156/a7564db3 156/a7564db3 156/a7564db3
19:53:30.755 t=232.7 s daa 170 epoch 2 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 0 blocks/sink per node 170/96dd1e0c 170/96dd1e0c 170/96dd1e0c 170/96dd1e0c
19:53:43.781 epoch 2 -> 3 at daa 180, 245.7 s: template class 4 (next 4) rung 0 (27 passes, next rung 0), v5 share at the sink 10000 bps (weakest of 7: 0), ladder up weakest 0 bps, this node signals byte 6, v5 by signal at epoch none, step at epoch 0
19:53:45.789 stream for epoch 3 (seed 96dd1e0c73b01e08): root 0x3500068c39eb2771 17 records, from n0
19:53:45.791 t=247.7 s daa 180 epoch 3 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 0 blocks/sink per node 180/e87914d8 180/e87914d8 180/e87914d8 180/e87914d8
19:54:00.830 t=262.8 s daa 197 epoch 3 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 0 blocks/sink per node 197/5e2c33bd 197/5e2c33bd 197/5e2c33bd 197/5e2c33bd
19:54:15.866 t=277.8 s daa 216 epoch 3 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 0 blocks/sink per node 216/3339ba39 216/3339ba39 216/3339ba39 216/3339ba39
19:54:30.900 t=292.8 s daa 232 epoch 3 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 0 blocks/sink per node 232/05f58252 232/05f58252 232/05f58252 232/05f58252
19:54:39.922 epoch 3 -> 4 at daa 240, 301.9 s: template class 4 (next 4) rung 0 (27 passes, next rung 0), v5 share at the sink 10000 bps (weakest of 7: 0), ladder up weakest 0 bps, this node signals byte 6, v5 by signal at epoch none, step at epoch 0
19:54:41.928 stream for epoch 4 (seed 29eba3de40ec0780): root 0xf25e8bcf0a604ef4 17 records, from n0
19:54:45.938 t=307.9 s daa 242 epoch 4 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 0 blocks/sink per node 242/e46923dd 242/e46923dd 242/e46923dd 242/e46923dd
19:55:00.991 t=322.9 s daa 260 epoch 4 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 0 blocks/sink per node 260/8164be22 260/8164be22 260/8164be22 260/8164be22
19:55:16.029 t=338.0 s daa 275 epoch 4 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 10000 blocks/sink per node 275/7bdb9e2e 275/7bdb9e2e 275/7bdb9e2e 275/7bdb9e2e
19:55:31.068 t=353.0 s daa 296 epoch 4 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 10000 blocks/sink per node 296/b1724f2c 296/b1724f2c 296/b1724f2c 296/b1724f2c
19:55:35.077 epoch 4 -> 5 at daa 300, 357.0 s: template class 4 (next 4) rung 0 (27 passes, next rung 0), v5 share at the sink 10000 bps (weakest of 7: 0), ladder up weakest 10000 bps, this node signals byte 6, v5 by signal at epoch none, step at epoch 0
19:55:38.085 stream for epoch 5 (seed a9991e020658a88f): root 0xd087ae22d0e8b455 17 records, from n0
19:55:46.109 t=368.0 s daa 303 epoch 5 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 10000 blocks/sink per node 303/fb3b9bb5 304/52581858 305/29ff4e8c 303/fb3b9bb5
19:56:01.141 t=383.1 s daa 320 epoch 5 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 10000 blocks/sink per node 320/29420389 320/29420389 320/29420389 320/29420389
19:56:16.188 t=398.1 s daa 335 epoch 5 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 10000 blocks/sink per node 335/86733d38 335/86733d38 335/86733d38 335/86733d38
19:56:31.235 t=413.2 s daa 353 epoch 5 class 4 rung 0 v5 10000 bps (weakest 0) up weakest 10000 blocks/sink per node 353/a5d5489d 353/a5d5489d 353/a5d5489d 353/a5d5489d
19:56:38.248 epoch 5 -> 6 at daa 360, 420.2 s: template class 4 (next 4) rung 1 (35 passes, next rung 1), v5 share at the sink 10000 bps (weakest of 7: 0), ladder up weakest 10000 bps, this node signals byte 6, v5 by signal at epoch none, step at epoch 6
19:56:38.249 LADDER STEP: the template is rung 1 (35 shadow passes) from epoch 6 (daa 360) at 420.2 s wall
19:56:38.257 stream for epoch 6 (seed 9be0b5cb7eecb143): root 0x7e38de4162ec8605 17 records, from n0
19:56:46.281 t=428.2 s daa 363 epoch 6 class 4 rung 1 v5 10000 bps (weakest 0) up weakest 10000 blocks/sink per node 363/952dc9df 363/952dc9df 363/952dc9df 363/952dc9df
19:57:01.311 t=443.2 s daa 381 epoch 6 class 4 rung 1 v5 10000 bps (weakest 10000) up weakest 10000 blocks/sink per node 381/e2c596a8 381/e2c596a8 381/e2c596a8 381/e2c596a8
19:57:16.347 t=458.3 s daa 395 epoch 6 class 4 rung 1 v5 10000 bps (weakest 10000) up weakest 10000 blocks/sink per node 395/64f05f82 395/64f05f82 395/64f05f82 395/64f05f82
19:57:31.386 t=473.3 s daa 415 epoch 6 class 4 rung 1 v5 10000 bps (weakest 10000) up weakest 10000 blocks/sink per node 415/41c3d2b7 415/41c3d2b7 415/41c3d2b7 415/41c3d2b7
19:57:35.393 epoch 6 -> 7 at daa 420, 477.3 s: template class 4 (next 4) rung 1 (35 passes, next rung 1), v5 share at the sink 10000 bps (weakest of 7: 10000), ladder up weakest 10000 bps, this node signals byte 6, v5 by signal at epoch none, step at epoch 6
19:57:38.402 stream for epoch 7 (seed 8756ff2962258e0b): root 0x2e5d7d9ef9dfe2fc 17 records, from n0
19:57:46.429 t=488.4 s daa 422 epoch 7 class 4 rung 1 v5 10000 bps (weakest 10000) up weakest 10000 blocks/sink per node 422/ef21940b 422/ef21940b 422/ef21940b 422/ef21940b
19:58:01.462 t=503.4 s daa 436 epoch 7 class 4 rung 1 v5 10000 bps (weakest 10000) up weakest 10000 blocks/sink per node 436/f959ec8a 436/f959ec8a 436/f959ec8a 436/f959ec8a
19:58:10.497 RESTART STEP: n2 and its miner stopped at daa 457 (512.4 s), 23 DAA before the expected v5 boundary 480
19:58:16.511 t=518.4 s daa 465 epoch 7 class 4 rung 1 v5 10000 bps (weakest 10000) up weakest 10000 blocks/sink per node 465/036375dd 465/036375dd down 465/036375dd
19:58:31.538 epoch 7 -> 8 at daa 480, 533.5 s: template class 5 (next 5) rung 1 (35 passes, next rung 1), v5 share at the sink 10000 bps (weakest of 7: 10000), ladder up weakest 10000 bps, this node signals byte 6, v5 by signal at epoch 8, step at epoch 6
19:58:31.538 CLASS SWITCH: the template is class v5 from epoch 8 (daa 480) at rung 1 (35 passes), 533.5 s wall
19:58:31.542 stream for epoch 8 (seed b9ed187e0cb7146b): root 0xf2b8c858a8862f3b 17 records, from n0
19:58:31.543 t=533.5 s daa 480 epoch 8 class 5 rung 1 v5 10000 bps (weakest 10000) up weakest 10000 blocks/sink per node 480/91d08984 480/91d08984 down 480/91d08984
19:58:46.569 t=548.5 s daa 481 epoch 8 class 5 rung 1 v5 10000 bps (weakest 10000) up weakest 10000 blocks/sink per node 481/91d08984 481/91d08984 down 481/91d08984
19:59:01.600 t=563.5 s daa 488 epoch 8 class 5 rung 1 v5 10000 bps (weakest 10000) up weakest 10000 blocks/sink per node 488/532e881b 488/532e881b down 488/532e881b
19:59:10.124 n2 RESTARTED pid 1594690 json 29882 p2p 29881 exec 29883, byte 6, ladder up (own datadir kept)
19:59:10.131 RESTART STEP: n2 started on its own datadir at daa 500 (572.1 s), 20 DAA after the boundary; its miner restarted with its key
19:59:17.168 t=579.1 s daa 511 epoch 8 class 5 rung 1 v5 10000 bps (weakest 10000) up weakest 10000 blocks/sink per node 511/88a31e60 511/88a31e60 457/0acb1c28 511/88a31e60
19:59:32.264 t=594.2 s daa 529 epoch 8 class 5 rung 1 v5 10000 bps (weakest 10000) up weakest 10000 blocks/sink per node 529/e3db87bc 530/6f30f140 461/9b93e5c9 529/e3db87bc
19:59:44.300 epoch 8 -> 9 at daa 540, 606.2 s: template class 5 (next 5) rung 1 (35 passes, next rung 1), v5 share at the sink 10000 bps (weakest of 7: 10000), ladder up weakest 10000 bps, this node signals byte 6, v5 by signal at epoch none, step at epoch 6
19:59:44.304 stream for epoch 9 (seed 6f30f14060fc2634): root 0xedac00573b062258 17 records, from n0
19:59:47.311 t=609.2 s daa 540 epoch 9 class 5 rung 1 v5 10000 bps (weakest 10000) up weakest 10000 blocks/sink per node 540/4ca81d09 540/4ca81d09 480/ea12bf2e 540/4ca81d09
20:00:02.355 t=624.3 s daa 548 epoch 9 class 5 rung 1 v5 10000 bps (weakest 10000) up weakest 10000 blocks/sink per node 548/4f6b6a33 548/4f6b6a33 482/9fb3e5a2 548/4f6b6a33
20:00:17.414 t=639.3 s daa 554 epoch 9 class 5 rung 1 v5 10000 bps (weakest 10000) up weakest 10000 blocks/sink per node 554/e04e96b5 554/e04e96b5 488/1d2c1f93 550/ea079477
20:00:32.475 t=654.4 s daa 570 epoch 9 class 5 rung 1 v5 10000 bps (weakest 10000) up weakest 10000 blocks/sink per node 570/0455cd08 570/0455cd08 511/35112c79 570/0455cd08
20:00:47.531 t=669.5 s daa 597 epoch 9 class 5 rung 1 v5 10000 bps (weakest 10000) up weakest 10000 blocks/sink per node 597/ac7a725e 597/ac7a725e 531/1b87a5b5 597/ac7a725e
20:00:52.542 epoch 9 -> 10 at daa 600, 674.5 s: template class 5 (next 5) rung 1 (35 passes, next rung 1), v5 share at the sink 10000 bps (weakest of 7: 10000), ladder up weakest 10000 bps, this node signals byte 6, v5 by signal at epoch none, step at epoch 6
20:00:52.548 stream for epoch 10 (seed 07368c240a4db82d): root 0x0d6f800de3e53d97 17 records, from n0
20:01:02.581 t=684.5 s daa 601 epoch 10 class 5 rung 1 v5 10000 bps (weakest 10000) up weakest 10000 blocks/sink per node 601/df4387e3 601/df4387e3 540/0986ca89 601/df4387e3
20:01:17.634 t=699.6 s daa 619 epoch 10 class 5 rung 1 v5 10000 bps (weakest 10000) up weakest 10000 blocks/sink per node 619/428a251c 619/428a251c 557/c4befbea 619/428a251c
20:01:32.690 t=714.6 s daa 641 epoch 10 class 5 rung 1 v5 10000 bps (weakest 10000) up weakest 10000 blocks/sink per node 641/a690bd01 641/a690bd01 575/b2ef6a56 641/a690bd01
20:01:47.732 t=729.7 s daa 658 epoch 10 class 5 rung 1 v5 10000 bps (weakest 10000) up weakest 10000 blocks/sink per node 658/94c6d918 658/94c6d918 594/362ab829 658/94c6d918
20:01:53.750 epoch 10 -> 11 at daa 660, 735.7 s: template class 5 (next 5) rung 1 (35 passes, next rung 1), v5 share at the sink 10000 bps (weakest of 7: 10000), ladder up weakest 10000 bps, this node signals byte 6, v5 by signal at epoch none, step at epoch 6
20:01:56.757 stream for epoch 11 (seed aefd841e35b2c478): root 0x0b289f8d0d27752c 17 records, from n0
20:04:00.648 SUMMARY FAIL (cross-959b57c9) 2026-10-07T20:04:00.647Z: rung 1 (35 passes) from epoch 6 at DAA 360; v5 from epoch 8 at DAA 480 at rung 1; epochs e0:v4:r0:0bps e1:v4:r0:0bps e2:v4:r0:0bps e3:v4:r0:0bps e4:v4:r0:0bps e5:v4:r0:0bps e6:v4:r1:0bps e7:v4:r1:10000bps e8:v5:r1:10000bps e9:v5:r1:10000bps e10:v5:r1:10000bps e11:v5:r1:10000bps; chain bytes {"0":1,"6":660} (9985 bps at byte 6), ladder bits {"none":1,"up":660}; blocks 482 / 179 across DAA 480; rejected miners 0/0/0/121 nodes 0/0/0/122 (submit timeouts 3/1/0/1); accepted after the flip 134/140/266/23; sinks 80c450eaaaa0df91 80c450eaaaa0df91 50f0153baca29b7c 80c450eaaaa0df91 (DIFFER) at 660/660/600/660; step lines 4/4 (epochs 6/6/6/6), v5 signal lines 4/4 (epochs 8/8/8/8, weakest 10000/10000/10000/10000); stale n3 accepted after the first refresh 0 rejected 122; restart n2 stopped at DAA 457, started at DAA 500, lock faults 0, IBD refusals 2, accepted after 266; dn3 id OK
20:04:00.648 PROGRAM ID epoch 0 v4 rung 0 (27 passes) seed 234e082d653dc69d: miners 83dab9f31f2e2dba (4 of 4) cli 83dab9f31f2e2dba other-class 343287b6df5996ed OK
20:04:00.648 PROGRAM ID epoch 1 v4 rung 0 (27 passes) seed 55eac09ae07b93fc: miners 3cbf563866bb3316 (4 of 4) cli 3cbf563866bb3316 other-class 7af70c3151ab260d state 0xc50996925456ca09 (16 records) OK
20:04:00.648 PROGRAM ID epoch 2 v4 rung 0 (27 passes) seed cdb60950b9c5e6a1: miners c4ec135fbc86e2f1 (4 of 4) cli c4ec135fbc86e2f1 other-class ee0af0ecb275dc7c state 0xb699642223214c8e (17 records) OK
20:04:00.648 PROGRAM ID epoch 3 v4 rung 0 (27 passes) seed 96dd1e0c73b01e08: miners 32ee239049ca6a99 (4 of 4) cli 32ee239049ca6a99 other-class 768cd3fa3def1df8 state 0x3500068c39eb2771 (17 records) OK
20:04:00.648 PROGRAM ID epoch 4 v4 rung 0 (27 passes) seed 29eba3de40ec0780: miners bc97414b048ca586 (4 of 4) cli bc97414b048ca586 other-class a5d0b7f5edf49b05 state 0xf25e8bcf0a604ef4 (17 records) OK
20:04:00.648 PROGRAM ID epoch 5 v4 rung 0 (27 passes) seed a9991e020658a88f: miners b74ddd44bfff8bfe (4 of 4) cli b74ddd44bfff8bfe other-class a6e0441569dec4b5 state 0xd087ae22d0e8b455 (17 records) OK
20:04:00.648 PROGRAM ID epoch 6 v4 rung 1 (35 passes) seed 9be0b5cb7eecb143: miners 5e2a827244c1859e (4 of 4) cli 5e2a827244c1859e other-class eb381d87a22e1df7 state 0x7e38de4162ec8605 (17 records) OK
20:04:00.648 PROGRAM ID epoch 7 v4 rung 1 (35 passes) seed 8756ff2962258e0b: miners c3b2c851dfbc952e (4 of 4) cli c3b2c851dfbc952e other-class 87d8e6f688d81057 state 0x2e5d7d9ef9dfe2fc (17 records) OK
20:04:00.648 PROGRAM ID epoch 8 v5 rung 1 (35 passes) seed b9ed187e0cb7146b: miners 2464501581ec715c (3 of 4) cli 2464501581ec715c other-class bb9c1a674cb5444d rung0 fc32095d4e3655c7 state 0xf2b8c858a8862f3b (17 records) OK
20:04:00.648 PROGRAM ID epoch 8 FORK v5 rung 1 (35 passes) seed 944e9ac09748d833: miners 90a3bf44d3005e67 (1 of 4) cli null other-class e09c8f37fcc0881e rung0 80e3377797844c86 MISMATCH
20:04:00.648 PROGRAM ID epoch 9 v5 rung 1 (35 passes) seed 6f30f14060fc2634: miners e61766ee9de1f94f (3 of 4) cli e61766ee9de1f94f other-class a4c43b8005e7c626 rung0 761e0ccfa1dccc96 state 0xedac00573b062258 (17 records) OK
20:04:00.648 PROGRAM ID epoch 9 FORK v5 rung 1 (35 passes) seed 53cbfef14968885f: miners c123c3517b20ec12 (1 of 4) cli null other-class f388cb162d733657 rung0 dee064a86a7148a1 MISMATCH
20:04:00.648 PROGRAM ID epoch 10 v5 rung 1 (35 passes) seed 07368c240a4db82d: miners 8333379b25760be3 (3 of 4) cli 8333379b25760be3 other-class 92efb3a1eee7c20e rung0 077ced8242cf3536 state 0x0d6f800de3e53d97 (17 records) OK
20:04:00.648 PROGRAM ID epoch 11 v5 rung 1 (35 passes) seed aefd841e35b2c478: miners 7e8f6b46d1b701c7 (2 of 4) cli 7e8f6b46d1b701c7 other-class d043e4b7d0f6c646 rung0 66520aafa84ece52 state 0x0b289f8d0d27752c (17 records) OK
20:04:00.648 FAILED CHECK no_second_step
20:04:00.648 FAILED CHECK sinks_agree
20:04:00.648 FAILED CHECK block_counts_agree
20:04:00.648 FAILED CHECK restarted_node_resynced
20:04:00.648 FAILED CHECK restarted_node_ibd_not_refused
20:04:00.648 summary: /tmp/igneum-fast-time-v5x-cross-959b57c9/summary.json and /srv/builds/igneum-wt-v5-fasttime/docs/design/class-v5-harness/fasttime/cross-959b57c9.json

View file

@ -0,0 +1,211 @@
{
"pass": true,
"case": "digest-959b57c9",
"utc": "2026-10-07T20:08:30.751Z",
"checks": {
"new_absent_new_never_and_old_absent_print_one_digest": true,
"the_set_v5_field_moves_the_digest": true,
"n0_peers_with_n1_and_n2": true,
"old_node_peers_with_the_new_hub": true,
"v5_set_node_has_no_peer": true,
"refusal_line_in_the_pre_v5_node_log": true,
"refusal_line_in_the_v5_set_node_or_hub_log": true,
"v5_set_node_prints_the_floor_line": true,
"new_node_mined_blocks": true,
"old_node_mined_blocks": true,
"old_miner_started": true,
"zero_rejected_on_the_shared_chain": true,
"one_sink_on_n0_n1_n2": true,
"equal_counts_on_n0_n1_n2": true,
"every_mined_header_is_block_version_2_object_byte_7": true
},
"new": "/srv/artefacts/v5-pair-959b57c9/igneumd",
"old": "/srv/artefacts/0323-2720d8d2/node-lane/igneumd",
"override_keys_dropped": [],
"floor": 900,
"secs": 180,
"digests": [
"c0d6998e35a55983",
"c0d6998e35a55983",
"c0d6998e35a55983",
"8d8f620872b96308"
],
"peers": [
2,
1,
1,
0
],
"refusal_lines": {
"old": [
"Refusing peer 127.0.0.1:49582: consensus params digest mismatch, local c0d6998e35a559836eebafafae318655245be83234505e4212b26ce95d27f5aa remote 8d8f620872b963089995d98571a04d20c55bf59dfbb43cd40f8634135da47b15 (the peer's ",
"Refusing peer 127.0.0.1:60904: consensus params digest mismatch, local c0d6998e35a559836eebafafae318655245be83234505e4212b26ce95d27f5aa remote 8d8f620872b963089995d98571a04d20c55bf59dfbb43cd40f8634135da47b15 (the peer's "
],
"set": [
"Refusing peer 127.0.0.1:30201: consensus params digest mismatch, local 8d8f620872b963089995d98571a04d20c55bf59dfbb43cd40f8634135da47b15 remote c0d6998e35a559836eebafafae318655245be83234505e4212b26ce95d27f5aa (the peer's ",
"Refusing peer 127.0.0.1:30221: consensus params digest mismatch, local 8d8f620872b963089995d98571a04d20c55bf59dfbb43cd40f8634135da47b15 remote c0d6998e35a559836eebafafae318655245be83234505e4212b26ce95d27f5aa (the peer's "
],
"hub": [
"Refusing peer 127.0.0.1:36744: consensus params digest mismatch, local c0d6998e35a559836eebafafae318655245be83234505e4212b26ce95d27f5aa remote 8d8f620872b963089995d98571a04d20c55bf59dfbb43cd40f8634135da47b15 (the peer's ",
"Refusing peer 127.0.0.1:44458: consensus params digest mismatch, local c0d6998e35a559836eebafafae318655245be83234505e4212b26ce95d27f5aa remote 8d8f620872b963089995d98571a04d20c55bf59dfbb43cd40f8634135da47b15 (the peer's "
]
},
"accepted": {
"new": 79,
"old": 101
},
"rejected": [
0,
0,
0,
0
],
"sinks": [
"d770ebb80bdd8af9",
"d770ebb80bdd8af9",
"d770ebb80bdd8af9",
"234e082d653dc69d"
],
"counts": [
180,
180,
180,
0
],
"header_versions": {
"1794": 178
},
"object_bytes": {
"0": 1,
"7": 180
},
"blocks": 181,
"samples": [
{
"t": 5,
"counts": [
0,
0,
0,
0
],
"sinks": [
"234e082d",
"234e082d",
"234e082d",
"234e082d"
],
"peers": [
2,
1,
1,
0
]
},
{
"t": 35.1,
"counts": [
21,
21,
21,
0
],
"sinks": [
"9093797a",
"9093797a",
"9093797a",
"234e082d"
],
"peers": [
2,
1,
1,
0
]
},
{
"t": 65.2,
"counts": [
60,
60,
60,
0
],
"sinks": [
"a85159d1",
"a85159d1",
"a85159d1",
"234e082d"
],
"peers": [
2,
1,
1,
0
]
},
{
"t": 95.3,
"counts": [
88,
88,
88,
0
],
"sinks": [
"0bef0b9b",
"0bef0b9b",
"0bef0b9b",
"234e082d"
],
"peers": [
2,
1,
1,
0
]
},
{
"t": 125.5,
"counts": [
121,
121,
122,
0
],
"sinks": [
"bb7179ad",
"bb7179ad",
"b727d573",
"234e082d"
],
"peers": [
2,
1,
1,
0
]
},
{
"t": 155.6,
"counts": [
161,
161,
161,
0
],
"sinks": [
"98d7cb01",
"98d7cb01",
"98d7cb01",
"234e082d"
],
"peers": [
2,
1,
1,
0
]
}
]
}

View file

@ -0,0 +1,17 @@
20:05:20.900 override: every key known to both binaries
20:05:20.904 case digest-959b57c9: new /srv/artefacts/v5-pair-959b57c9/igneumd, old /srv/artefacts/0323-2720d8d2/node-lane/igneumd; A = the v5 key absent, B = at never, C = 900; 180 s of mixed mining
20:05:22.475 n0 new, v5 key absent up pid 1661184 p2p 30201: digest c0d6998e35a55983, (no v5 line: a pre-v5 binary)
20:05:23.986 n1 new, v5 key at never up pid 1661786 p2p 30211 addpeer 30201: digest c0d6998e35a55983, Program class v5 from the override file: never (the byte stays 5, the amended v4's; a byte 6 on the chain counts for not
20:05:25.494 n2 OLD (pre-v5), v5 key absent up pid 1661942 p2p 30221 addpeer 30201: digest c0d6998e35a55983, (no v5 line: a pre-v5 binary)
20:05:27.002 n3 new, v5 key set at 900 up pid 1662327 p2p 30231 addpeer 30201,30221: digest 8d8f620872b96308, Program class v5 from the override file: enabled, the floor at epoch 15 (DAA score 900 rounded up to the epoch boundary
20:05:27.006 mining: the new node n0 and the old node n2, 4 CPU thread(s) each, 180 s
20:05:32.015 t=5.0 s blocks/sink 0/234e082d 0/234e082d 0/234e082d 0/234e082d peers 2/1/1/0
20:06:02.142 t=35.1 s blocks/sink 21/9093797a 21/9093797a 21/9093797a 0/234e082d peers 2/1/1/0
20:06:32.246 t=65.2 s blocks/sink 60/a85159d1 60/a85159d1 60/a85159d1 0/234e082d peers 2/1/1/0
20:07:02.352 t=95.3 s blocks/sink 88/0bef0b9b 88/0bef0b9b 88/0bef0b9b 0/234e082d peers 2/1/1/0
20:07:32.470 t=125.5 s blocks/sink 121/bb7179ad 121/bb7179ad 122/b727d573 0/234e082d peers 2/1/1/0
20:08:02.596 t=155.6 s blocks/sink 161/98d7cb01 161/98d7cb01 161/98d7cb01 0/234e082d peers 2/1/1/0
20:08:30.752 SUMMARY PASS (digest-959b57c9) 2026-10-07T20:08:30.751Z: digests new-absent c0d6998e35a55983 new-never c0d6998e35a55983 old-absent c0d6998e35a55983 new-set 8d8f620872b96308; peers 2/1/1/0; refusal lines old 3 set 6 hub 3; mixed mining 180 s: new accepted 79, old accepted 101, rejected 0/0/0/0, sinks d770ebb80bdd8af9 d770ebb80bdd8af9 d770ebb80bdd8af9 at 180/180/180; header versions {"1794":178}
20:08:30.752 Refusing peer 127.0.0.1:49582: consensus params digest mismatch, local c0d6998e35a559836eebafafae318655245be83234505e4212b26ce95d27f5aa remote 8d8f620872b963089995d98571a04d20c55bf59dfbb43cd40f8634135da47b15 (the peer's
20:08:30.752 Refusing peer 127.0.0.1:30201: consensus params digest mismatch, local 8d8f620872b963089995d98571a04d20c55bf59dfbb43cd40f8634135da47b15 remote c0d6998e35a559836eebafafae318655245be83234505e4212b26ce95d27f5aa (the peer's
20:08:30.752 summary: /tmp/igneum-fast-time-v5d-digest-959b57c9/summary.json and /srv/builds/igneum-wt-v5-fasttime/docs/design/class-v5-harness/fasttime/digest-959b57c9.json

View file

@ -361,6 +361,16 @@ const stepLines = nodes.map(n => n.grepLog(STEP_LINE).map(l => l.replace(/^.*?(L
const stepParsed = stepLines.map(ls => { const m = ls[0] && STEP_LINE.exec(ls[0]); return m ? { epoch: +m[1], rung: +m[2], reps: +m[3], weakest_up: +m[5] } : null; });
// the 0.3.23 line logs one step twice (the template's lead path and the boundary); a second STEP is a new (epoch, rung) pair
const distinctSteps = stepLines.map(ls => new Set(ls.map(l => { const m = STEP_LINE.exec(l); return m ? `${m[1]}:${m[2]}` : l; })).size);
// the rule allows the next step once the oldest of seven windows begins at or after the step's seed block (DAA L e - lead - 1),
// so the earliest second step is the first epoch whose seed block is at least seven windows above it; a step line for an
// earlier epoch is a fault, one at or after it is the rule at work (the 959b57c9 run: epoch 12 moves to rung 2, decided
// after the observation window closed at DAA 660 while the end-of-run reads ran)
const stepSeedDaa = step ? step.epoch * EPOCH - LEAD - 1 : null;
let EARLIEST_SECOND_STEP = null;
if (step) { EARLIEST_SECOND_STEP = step.epoch + 1; while (EARLIEST_SECOND_STEP * EPOCH - LEAD - 1 < stepSeedDaa + WINDOWS * LADDER_WINDOW) EARLIEST_SECOND_STEP++; }
const stepEpochsLogged = stepLines.map(ls => ls.map(l => { const m = STEP_LINE.exec(l); return m ? +m[1] : null; }).filter(e => e != null));
const earlySecondSteps = step ? stepEpochsLogged.flat().filter(e => e !== step.epoch && e < EARLIEST_SECOND_STEP) : [];
const laterSteps = step ? [...new Set(stepEpochsLogged.flat().filter(e => e !== step.epoch))] : [];
const signalLines = nodes.map(n => n.grepLog(SIGNAL_LINE).map(l => l.replace(/^.*?(Program class v5 by miner signal)/, '$1')));
const signalParsed = signalLines.map(ls => { const m = ls[0] && SIGNAL_LINE.exec(ls[0]); return m ? { epoch: +m[1], share: +m[2], weakest: +m[3] } : null; });
const floorLines = nodes.map(n => n.grepLog(FLOOR_LINE)[0]?.replace(/^.*?(Program class v5 from)/, '$1') ?? null);
@ -395,7 +405,7 @@ const checks = {
stepped_at_the_first_full_window_epoch: step != null && step.epoch === FIRST_STEP_EPOCH,
step_line_on_every_node_same_epoch: stepParsed.every(s => s != null && s.rung === 1) && new Set(stepParsed.map(s => s?.epoch)).size === 1 && stepParsed[0]?.epoch === step?.epoch,
step_weakest_up_at_or_above_threshold: stepParsed.every(s => s != null && s.weakest_up >= LADDER_THRESHOLD),
no_second_step: step != null && afterStep.length >= 2 && afterStep.every(r => r === 1) && distinctSteps.every(n => n === 1),
no_second_step_before_the_rule_allows: step != null && afterStep.length >= 2 && afterStep.every(r => r === 1) && earlySecondSteps.length === 0,
rung0_ids_equal_the_cli_rung0_id: rung0Rows.length > 0 && rung0Rows.every(r => r.cli != null && r.cli === r.miners_id && !r.disagree),
rung1_ids_equal_the_cli_rung1_id: rung1Rows.length > 0 && rung1Rows.every(r => r.cli != null && r.cli === r.miners_id && !r.disagree && r.cli_other !== r.miners_id),
// the crossing: v5 by signal at byte 6 exactly, at the first full-window epoch, before the floor, on every honest node
@ -435,7 +445,7 @@ const pass = Object.values(checks).every(v => v === true || v === null);
const summary = {
pass, case: CASE, utc: new Date().toISOString(), checks, signals: SIGNAL, ladder: LADDER, class_window: CLASS_WINDOW, ladder_window: LADDER_WINDOW, windows: WINDOWS, class_threshold_bps: CLASS_THRESHOLD, ladder_threshold_bps: LADDER_THRESHOLD,
floor: FLOOR ?? 'never', floor_epoch: FLOOR_EPOCH, epoch_blocks: EPOCH, lead: LEAD, first_step_epoch: FIRST_STEP_EPOCH, first_flip_epoch: FIRST_FLIP_EPOCH, boundary_daa: BOUNDARY,
node: IGNEUMD, miner: CPU_MINER, pow: IGNEUM_POW, override_keys_dropped: DROPPED, dn3_genesis_check: dn3, ladder_step: step, class_switch: flip, run_ended_at_s: endAt, final_daa: lastDaa, max_epoch_seen: maxEpochSeen,
node: IGNEUMD, miner: CPU_MINER, pow: IGNEUM_POW, override_keys_dropped: DROPPED, earliest_second_step_epoch: EARLIEST_SECOND_STEP, later_step_epochs_logged: laterSteps, distinct_steps_per_node: distinctSteps, dn3_genesis_check: dn3, ladder_step: step, class_switch: flip, run_ended_at_s: endAt, final_daa: lastDaa, max_epoch_seen: maxEpochSeen,
epochs: Object.fromEntries(epochRows), streams: Object.fromEntries([...streams.entries()].map(([e, s]) => [e, { root: s.root, records: s.records, block: s.block, roots_per_node: s.roots }])),
blocks: { total: blocks.length, before_boundary: before.length, after_boundary: after.length, object_bytes: objectBytes, byte_6_share_bps: byte6Share, ladder_bits: ladderBits, up_share_bps: upShare },
program_id_rows: idRows, fork_rows: forkRows.length, miners_expected_on_a_row: MINERS_EXPECTED, accepted_per_miner: accepted, accepted_after_flip_per_miner: acceptedAfterFlip, rejected_by_miners: rejectedMiner, submit_timeouts_per_miner: submitTimeouts, rejected_by_nodes: rejectedNode,
@ -445,7 +455,7 @@ const summary = {
};
writeFileSync(`${TMP}/summary.json`, JSON.stringify(summary, null, 2));
try { mkdirSync(OUT, { recursive: true }); writeFileSync(`${OUT}/${CASE}.json`, JSON.stringify(summary, null, 2)); } catch (e) { log(`could not write ${OUT}/${CASE}.json: ${e.message}`); }
log(`SUMMARY ${pass ? 'PASS' : 'FAIL'} (${CASE}) ${summary.utc}: ${step ? `rung ${step.rung} (${step.reps} passes) from epoch ${step.epoch} at DAA ${step.daa}` : 'no rung step'}; ${flip ? `v5 from epoch ${flip.epoch} at DAA ${flip.daa} at rung ${flip.rung}` : 'no v5 epoch'}; epochs ${epochRows.map(([e, v]) => `e${e}:v${v.class}:r${v.rung}:${v.v5_weakest_bps}bps`).join(' ')}; chain bytes ${JSON.stringify(objectBytes)} (${byte6Share} bps at byte 6), ladder bits ${JSON.stringify(ladderBits)}; blocks ${before.length} / ${after.length} across DAA ${BOUNDARY}; rejected miners ${rejectedMiner.join('/')} nodes ${rejectedNode.join('/')} (submit timeouts ${submitTimeouts.join('/')}); accepted after the flip ${acceptedAfterFlip.join('/')}; sinks ${sinks.join(' ')} (${checks.sinks_agree ? 'agree' : 'DIFFER'}) at ${counts.join('/')}; step lines ${stepParsed.filter(Boolean).length}/${N} (epochs ${stepParsed.map(s => s?.epoch ?? '-').join('/')}), v5 signal lines ${signalParsed.filter(Boolean).length}/${N} (epochs ${signalParsed.map(s => s?.epoch ?? '-').join('/')}, weakest ${signalParsed.map(s => s?.weakest ?? '-').join('/')}); stale n${STALE ?? '-'} accepted after the first refresh ${staleAcceptedAfterRefresh ?? 'n/a'} rejected ${STALE != null ? rejectedNode[STALE] : 'n/a'}; restart n${RESTART ?? '-'} ${restart.stopped ? `stopped at DAA ${restart.stopped.daa}` : 'not stopped'}${restart.started ? `, started at DAA ${restart.started.daa}` : ''}${restart.resynced ? `, resynced ${restart.resynced.after_s} s later` : ''}, lock faults ${restartFaults.length}, IBD refusals ${restartIbdRefusals.length}, accepted after ${restartAcceptedAfter ?? 'n/a'}; dn3 id ${dn3 ? (dn3.ok ? 'OK' : 'MISMATCH') : 'skipped'}`);
log(`SUMMARY ${pass ? 'PASS' : 'FAIL'} (${CASE}) ${summary.utc}: ${step ? `rung ${step.rung} (${step.reps} passes) from epoch ${step.epoch} at DAA ${step.daa}` : 'no rung step'}; ${flip ? `v5 from epoch ${flip.epoch} at DAA ${flip.daa} at rung ${flip.rung}` : 'no v5 epoch'}; epochs ${epochRows.map(([e, v]) => `e${e}:v${v.class}:r${v.rung}:${v.v5_weakest_bps}bps`).join(' ')}; chain bytes ${JSON.stringify(objectBytes)} (${byte6Share} bps at byte 6), ladder bits ${JSON.stringify(ladderBits)}; blocks ${before.length} / ${after.length} across DAA ${BOUNDARY}; rejected miners ${rejectedMiner.join('/')} nodes ${rejectedNode.join('/')} (submit timeouts ${submitTimeouts.join('/')}); accepted after the flip ${acceptedAfterFlip.join('/')}; sinks ${sinks.join(' ')} (${checks.sinks_agree ? 'agree' : 'DIFFER'}) at ${counts.join('/')}; step lines ${stepParsed.filter(Boolean).length}/${N} (epochs ${stepParsed.map(s => s?.epoch ?? '-').join('/')}; later steps logged ${laterSteps.join(',') || 'none'}, earliest allowed ${EARLIEST_SECOND_STEP ?? '-'}), v5 signal lines ${signalParsed.filter(Boolean).length}/${N} (epochs ${signalParsed.map(s => s?.epoch ?? '-').join('/')}, weakest ${signalParsed.map(s => s?.weakest ?? '-').join('/')}); stale n${STALE ?? '-'} accepted after the first refresh ${staleAcceptedAfterRefresh ?? 'n/a'} rejected ${STALE != null ? rejectedNode[STALE] : 'n/a'}; restart n${RESTART ?? '-'} ${restart.stopped ? `stopped at DAA ${restart.stopped.daa}` : 'not stopped'}${restart.started ? `, started at DAA ${restart.started.daa}` : ''}${restart.resynced ? `, resynced ${restart.resynced.after_s} s later` : ''}, lock faults ${restartFaults.length}, IBD refusals ${restartIbdRefusals.length}, accepted after ${restartAcceptedAfter ?? 'n/a'}; dn3 id ${dn3 ? (dn3.ok ? 'OK' : 'MISMATCH') : 'skipped'}`);
for (const r of idRows) log(`PROGRAM ID epoch ${r.epoch}${r.fork ? ' FORK' : ''} ${r.class} rung ${r.rung ?? '?'} (${r.reps ?? '?'} passes) seed ${r.seed}: miners ${r.miners_id} (${r.miners} of ${N}${r.disagree ? ', DISAGREE' : ''}) cli ${r.cli} other-class ${r.cli_other}${r.cli_rung0 ? ` rung0 ${r.cli_rung0}` : ''}${r.state_root ? ` state ${String(r.state_root).slice(0, 18)} (${r.state_records} records)` : ''} ${r.cli === r.miners_id ? 'OK' : 'MISMATCH'}`);
for (const [k, v] of Object.entries(checks)) if (v === false) log(`FAILED CHECK ${k}`);
log(`summary: ${TMP}/summary.json and ${OUT}/${CASE}.json`);