From 830a976192b2dd9bab6c6c72403ce574f3dda7d7 Mon Sep 17 00:00:00 2001 From: Joe DiPrima Date: Thu, 30 Jul 2026 09:37:07 -0500 Subject: [PATCH] #81: 4-node stress PASS -- 56 overlapping death cycles, zero strands; DEATHS tally exact Four simultaneous networked nodes, all dying every ~35s on staggered timers so respawn handshakes overlap (the field condition that stranded 6 of 8 cycles): 56 cycles, every completed one START->RESET, 0 swallowed / 0 mismatch / 0 discarded / 0 ghost / 0 crash. Scoreboard: every node's PLAYER_DEAD rows show deaths=N tally=N in lockstep (13/13/15/15) -- exactly one increment per death, so removing the duplicate VehicleDead dispatch did not drop the DEATHS column and the latch release did not double it. The kill-credit path evaluated all 56 deaths and correctly declined each self-kill (NOCREDIT self=1); KILLS uses the separate ScoreMessage path the fix never touched. content/MP4.EGG: the 4-pilot bench egg (ports 1502/1602/1702/1802, novice). Co-Authored-By: Claude Fable 5 --- content/MP4.EGG | 312 ++++++++---------------------------- docs/GHOST_MECH_ANALYSIS.md | 8 + 2 files changed, 73 insertions(+), 247 deletions(-) diff --git a/content/MP4.EGG b/content/MP4.EGG index 505f176..dc7e6cb 100644 --- a/content/MP4.EGG +++ b/content/MP4.EGG @@ -1,8 +1,8 @@ [mission] adventure=BattleTech -map=arena1 +map=cavern scenario=freeforall -time=day +time=night weather=clear temperature=27 length=600 @@ -156,206 +156,95 @@ x=128 y=32 width=8 [pilots] -pilot=10.99.0.1:1502 -pilot=10.99.0.2:1502 -pilot=10.99.0.3:1502 -pilot=10.99.0.4:1502 -[10.99.0.1:1502] +pilot=127.0.0.1:1502 +pilot=127.0.0.1:1602 +pilot=127.0.0.1:1702 +pilot=127.0.0.1:1802 +[127.0.0.1:1502] hostType=0 advancedDamage=1 loadzones=1 -name=ALPHA +name=Aeolus bitmapindex=1 -experience=expert +experience=novice badge=VGL patch=Yellow role=Role::Default dropzone=one -vehicle=madcat +vehicle=bhk1 vehicleValue=1000 color=White -[10.99.0.2:1502] +[127.0.0.1:1602] hostType=0 advancedDamage=1 loadzones=1 -name=BRAVO +name=Boreas bitmapindex=2 -experience=expert +experience=novice badge=VGL patch=Yellow role=Role::Default dropzone=one -vehicle=thor +vehicle=ava1 vehicleValue=1000 -color=Crimson -[10.99.0.3:1502] +color=Red +[127.0.0.1:1702] hostType=0 advancedDamage=1 loadzones=1 -name=CHARLIE +name=Caicias bitmapindex=3 -experience=expert +experience=novice badge=VGL patch=Yellow role=Role::Default dropzone=one -vehicle=vulture +vehicle=bhk1 +vehicleValue=1000 +color=Blue +[127.0.0.1:1802] +hostType=0 +advancedDamage=1 +loadzones=1 +name=Deimos +bitmapindex=4 +experience=novice +badge=VGL +patch=Yellow +role=Role::Default +dropzone=one +vehicle=ava1 vehicleValue=1000 color=Green -[10.99.0.4:1502] -hostType=0 -advancedDamage=1 -loadzones=1 -name=DELTA -bitmapindex=4 -experience=expert -badge=VGL -patch=Yellow -role=Role::Default -dropzone=one -vehicle=avatar -vehicleValue=1000 -color=Tan [largebitmap] -bitmap=BitMap::Large::ALPHA -bitmap=BitMap::Large::BRAVO -bitmap=BitMap::Large::CHARLIE -bitmap=BitMap::Large::DELTA -[BitMap::Large::ALPHA] +bitmap=BitMap::Large::Aeolus +[BitMap::Large::Aeolus] bitmap=00000000000000000000000000000000 bitmap=00000000000000000000000000000000 bitmap=00000000000000000000000000000000 bitmap=00000000000000000000000000000000 bitmap=00000000000000000000000000000000 bitmap=00000000000000000000000000000000 -bitmap=000001F803C001FFE07807807E000000 -bitmap=000001FC03C001FFF07807807F000000 -bitmap=000001FC03C001FFF87807807F000000 -bitmap=000003FC03C001FFFC780780FF000000 -bitmap=000003DE03C001E07C780780F7800000 -bitmap=000003DE03C001E03C780780F7800000 -bitmap=000007DE03C001E03C780781F7800000 -bitmap=0000078F03C001E07C780781E3C00000 -bitmap=0000078F03C001FFFC7FFF81E3C00000 -bitmap=00000F8F03C001FFF87FFF83E3C00000 -bitmap=00000F0783C001FFF07FFF83C1E00000 -bitmap=00000F0783C001FFC07FFF83C1E00000 -bitmap=00001FFF83C001E000780787FFE00000 -bitmap=00001FFFC3C001E000780787FFF00000 -bitmap=00001FFFC3C001E000780787FFF00000 -bitmap=00003E03C3C001E00078078F80F00000 -bitmap=00003C01E3FFF1E00078078F00780000 -bitmap=00003C01E3FFF1E00078078F00780000 -bitmap=00007C01E3FFF1E00078079F00780000 -bitmap=00007800F3FFF1E00078079E003C0000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -x=128 -y=32 -width=8 -[BitMap::Large::BRAVO] -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00003FFC07FFC007E0F001E03F800000 -bitmap=00003FFE07FFE007F07803C0FFE00000 -bitmap=00003FFF07FFF007F07803C1FFF00000 -bitmap=00003FFF87FFF80FF07803C3FFF80000 -bitmap=00003C0F8780F80F783C0787E0FC0000 -bitmap=00003C078780780F783C0787803C0000 -bitmap=00003C078780781F783C078F803E0000 -bitmap=00003C0F0780F81E3C1E0F0F001E0000 -bitmap=00003FFF07FFF01E3C1E0F0F001E0000 -bitmap=00003FFE07FFF03E3C1E0F0F001E0000 -bitmap=00003FFF07FFE03C1E0E0E0F001E0000 -bitmap=00003FFF87FF803C1E0F1E0F001E0000 -bitmap=00003C07C787C07FFE0F1E0F001E0000 -bitmap=00003C03C783E07FFF071C0F803E0000 -bitmap=00003C03C781E07FFF07BC07C07C0000 -bitmap=00003C07C781F0F80F07BC07E0FC0000 -bitmap=00003FFFC780F8F00783B803FFF80000 -bitmap=00003FFF878078F00783F801FFF00000 -bitmap=00003FFF07807DF00781F000FFE00000 -bitmap=00003FFE07803FE003C1F0003F800000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -x=128 -y=32 -width=8 -[BitMap::Large::CHARLIE] -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=007F00F00F00FC01FFF01E000F0FFFF0 -bitmap=01FFC0F00F00FE01FFF81E000F0FFFF0 -bitmap=03FFE0F00F00FE01FFFC1E000F0FFFF0 -bitmap=07FFF0F00F01FE01FFFE1E000F0FFFF0 -bitmap=0FC1F0F00F01EF01E03E1E000F0F0000 -bitmap=0F00F8F00F01EF01E01E1E000F0F0000 -bitmap=1F0060F00F03EF01E01E1E000F0F0000 -bitmap=1E0000F00F03C781E03E1E000F0F0000 -bitmap=1E0000FFFF03C781FFFC1E000F0FFFE0 -bitmap=1E0000FFFF07C781FFFC1E000F0FFFE0 -bitmap=1E0000FFFF0783C1FFF81E000F0FFFE0 -bitmap=1E0000FFFF0783C1FFE01E000F0FFFE0 -bitmap=1E0060F00F0FFFC1E1F01E000F0F0000 -bitmap=1F00F8F00F0FFFE1E0F81E000F0F0000 -bitmap=0F00F8F00F0FFFE1E0781E000F0F0000 -bitmap=0FC3F0F00F1F01E1E07C1E000F0F0000 -bitmap=07FFF0F00F1E00F1E03E1FFF8F0FFFF0 -bitmap=03FFE0F00F1E00F1E01E1FFF8F0FFFF0 -bitmap=01FFC0F00F3E00F1E01F1FFF8F0FFFF0 -bitmap=007F00F00F3C0079E00F9FFF8F0FFFF0 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -x=128 -y=32 -width=8 -[BitMap::Large::DELTA] -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=00000000000000000000000000000000 -bitmap=000007FF807FFF8F003FFFC1F8000000 -bitmap=000007FFE07FFF8F003FFFC1FC000000 -bitmap=000007FFF07FFF8F003FFFC1FC000000 -bitmap=000007FFF07FFF8F003FFFC3FC000000 -bitmap=00000780F878000F0000F003DE000000 -bitmap=000007807878000F0000F003DE000000 -bitmap=000007807C78000F0000F007DE000000 -bitmap=000007803C78000F0000F0078F000000 -bitmap=000007803C7FFF0F0000F0078F000000 -bitmap=000007803C7FFF0F0000F00F8F000000 -bitmap=000007803C7FFF0F0000F00F07800000 -bitmap=000007803C7FFF0F0000F00F07800000 -bitmap=000007803C78000F0000F01FFF800000 -bitmap=000007807C78000F0000F01FFFC00000 -bitmap=000007807878000F0000F01FFFC00000 -bitmap=00000780F878000F0000F03E03C00000 -bitmap=000007FFF07FFF8FFFC0F03C01E00000 -bitmap=000007FFF07FFF8FFFC0F03C01E00000 -bitmap=000007FFE07FFF8FFFC0F07C01E00000 -bitmap=000007FF807FFF8FFFC0F07800F00000 +bitmap=000003FE0000000001E0000000000000 +bitmap=000007FF0000000001E0000000000000 +bitmap=00000F8F8000000001E0000000000000 +bitmap=00000F078000000001E0000000000000 +bitmap=00000F0781FF00FF81E0F0781FC00000 +bitmap=00000F0783FF81FFC1E0F0783FE00000 +bitmap=00000F0787C7C3E3E1E0F0783C700000 +bitmap=00000F078783C3C1E1E0F07878300000 +bitmap=00000F078783C3C1E1E0F07878000000 +bitmap=00000FFF8783C3C1E1E0F0787C000000 +bitmap=00000FFF8783C3C1E1E0F0787F000000 +bitmap=00000F0787FFC3C1E1E0F0783FC00000 +bitmap=00000F0787FFC3C1E1E0F0781FE00000 +bitmap=00000F07878003C1E1E0F07807F00000 +bitmap=00000F07878003C1E1E0F07801F00000 +bitmap=00000F07878003C1E1E0F07800F00000 +bitmap=00000F078780C3C1E1E0F07860F00000 +bitmap=00000F0787C1C3E3E1E078F871E00000 +bitmap=00000F0783FF81FFC1E07FF83FE00000 +bitmap=00000F0781FF00FF81E03F781FC00000 bitmap=00000000000000000000000000000000 bitmap=00000000000000000000000000000000 bitmap=00000000000000000000000000000000 @@ -366,87 +255,16 @@ x=128 y=32 width=8 [smallbitmap] -bitmap=BitMap::Small::ALPHA -bitmap=BitMap::Small::BRAVO -bitmap=BitMap::Small::CHARLIE -bitmap=BitMap::Small::DELTA -[BitMap::Small::ALPHA] -bitmap=0000000000000000 -bitmap=0000000000000000 -bitmap=0000000000000000 -bitmap=00038C1F98C70000 -bitmap=00038C18D8C70000 -bitmap=0006CC18D8CD8000 -bitmap=0006CC18D8CD8000 -bitmap=0006CC18DFCD8000 -bitmap=0006CC1F98CD8000 -bitmap=000FEC1818DFC000 -bitmap=000C6C1818D8C000 -bitmap=000C6FD818D8C000 -bitmap=0000000000000000 -bitmap=0000000000000000 -bitmap=0000000000000000 -bitmap=0000000000000000 -x=64 -y=16 -width=4 -[BitMap::Small::BRAVO] -bitmap=0000000000000000 -bitmap=0000000000000000 -bitmap=0000000000000000 -bitmap=000FCFC3B0678000 -bitmap=000C6C6398CCC000 -bitmap=000C6C66D8D86000 -bitmap=000C6C66D8D86000 -bitmap=000FCFC6CD986000 -bitmap=000C6CC6CD986000 -bitmap=000C6C6FED986000 -bitmap=000C6C6C670CC000 -bitmap=000FCC3C67078000 -bitmap=0000000000000000 -bitmap=0000000000000000 -bitmap=0000000000000000 -bitmap=0000000000000000 -x=64 -y=16 -width=4 -[BitMap::Small::CHARLIE] -bitmap=0000000000000000 -bitmap=0000000000000000 -bitmap=0000000000000000 -bitmap=00798C71F9837E00 -bitmap=00CD8C718D836000 -bitmap=01818CD98D836000 -bitmap=01818CD98D836000 -bitmap=0181FCD9F9837E00 -bitmap=01818CD999836000 -bitmap=01818DFD8D836000 -bitmap=00CD8D8D8D836000 -bitmap=00798D8D87FB7E00 -bitmap=0000000000000000 -bitmap=0000000000000000 -bitmap=0000000000000000 -bitmap=0000000000000000 -x=64 -y=16 -width=4 -[BitMap::Small::DELTA] -bitmap=0000000000000000 -bitmap=0000000000000000 -bitmap=0000000000000000 -bitmap=0003E3F61F9C0000 -bitmap=00033306061C0000 -bitmap=00031B0606360000 -bitmap=00031B0606360000 -bitmap=00031BF606360000 -bitmap=00031B0606360000 -bitmap=00031B06067F0000 -bitmap=0003330606630000 -bitmap=0003E3F7E6630000 -bitmap=0000000000000000 -bitmap=0000000000000000 -bitmap=0000000000000000 -bitmap=0000000000000000 +bitmap=BitMap::Small::Aeolus +[BitMap::Small::Aeolus] +bitmap=00000000000000000000000000000000 +bitmap=0000000000000000003E00000C000000 +bitmap=006300000C00000000631F0F8CC63C00 +bitmap=00633198CCC66200007F3198CCC66000 +bitmap=00633F98CCC6780000633018CCC61E00 +bitmap=00633018CCC6060000633098CCC64600 +bitmap=00631F0F8C7E3C000000000000000000 +bitmap=00000000000000000000000000000000 x=64 y=16 width=4 diff --git a/docs/GHOST_MECH_ANALYSIS.md b/docs/GHOST_MECH_ANALYSIS.md index b698cca..a4e6ed8 100644 --- a/docs/GHOST_MECH_ANALYSIS.md +++ b/docs/GHOST_MECH_ANALYSIS.md @@ -19,6 +19,14 @@ own duplicate (8 of 8 deaths, a 100 % base rate, which is why it correlated with either alone makes things visibly worse, which is why earlier passes at #57/#55 kept adding clear-sites instead of finding the root. The binary broke the tie. +**Verified (4-node stress, 2026-07-30):** four simultaneous networked nodes, all dying every ~35 s +on staggered timers so respawn handshakes overlap (the field condition): **56 death cycles, every +completed one `START`→`RESET`, 0 swallowed / 0 mismatch / 0 discarded / 0 ghost / 0 crash** across +all four. Scoreboard: every node's `PLAYER_DEAD` matchlog rows show `deaths=N tally=N` in lockstep, +one increment per death (13/13/15/15) — the DEATHS column the comms panel draws is exact; the +kill-credit path evaluated all 56 deaths and correctly declined each self-kill (`NOCREDIT self=1`), +KILLS untouched by the fix (separate `ScoreMessage` path). Bench: `scratchpad/night6/mp4_stress.sh` ++ `content/MP4.EGG`. **Verified:** solo **17 consecutive death/respawn cycles**, every one `START`→`RESET`, 0 swallowed / 0 mismatch / 0 crash (pre-fix this strands permanently after cycle 1). Two-node MP over a real network path with cross-machine drop-zone replies: A 11 cycles, B 12, 0 swallowed / 0 mismatch /