Issue #38 (partial): egg camo-color validation + paint forensics

Respawn-paint investigation: 10 forced respawns on the i22 rig showed
paint STABLE across in-place respawns on both master and replicant --
the in-place reset does NOT repaint.  Two real findings landed:

1. 'Red' is NOT a camo color (the vehicle table authors Crimson=red for
   camo; Red exists only as a PATCH color) -- an egg with color=Red
   paints the mech silent gray from first spawn (the engine tolerates
   the table miss by design).  The relay now WARNS at egg load on any
   color= outside the camo set; our MPSHORT test egg had exactly this
   bug (fixed).
2. [paint] log now carries the entity id, so the one-time-observed
   nondeterministic video-model rebuilds (sernos 2-5 with swapped
   colors, run 1 only) will be attributable when they recur.

The reported color/style change on respawn remains unreproduced in the
deterministic rig -- needs the observer detail (whose mech, which view)
from the next field sighting.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-24 00:22:42 -05:00
co-authored by Claude Opus 4.8
parent 3d8bfdeba6
commit ac7f0cb13a
3 changed files with 266 additions and 1 deletions
+17
View File
@@ -235,6 +235,12 @@ VEHICLE_TAGS = {"blkhawk", "loki", "bhk1", "madcat", "thor", "owens",
MATCHLOG_CAP = 8 * 1024 * 1024 # matchlog upload frame cap (client caps at 8MB)
SEAT_RESERVE_SECONDS = 60.0
ABORT_SETTLE_SECONDS = 8.0 # issue #33: egg-release hold after a round abort
# issue #38: the vehicle table's CAMO colors (a color= outside this set
# paints the mech silent-gray -- 'Red' is a PATCH color, the camo is
# 'Crimson'; caught live when a test egg authored color=Red).
VALID_CAMO_COLORS = {"Black", "Brown", "Crimson", "Green", "Grey", "Tan",
"White"}
HELLO_MAGIC = 0x31525442 # 'BTR1' little-endian
FRAME_CAP = 1600 # NETWORKMANAGER_BUFFER_SIZE (NETWORK.h:89)
FIRST_GAME_HOST_ID = 2 # FirstLegalHostID(1) == the console; pods 2..N+1
@@ -262,6 +268,17 @@ def parse_egg_roster(egg_path):
continue
if in_pilots and line.lower().startswith(b"pilot="):
entries.append(line.split(b"=", 1)[1].decode("ascii", "replace"))
# issue #38: an unknown camo color paints the mech SILENT GRAY (the
# engine tolerates the vehicle-table miss by design) -- warn the
# operator at load instead of letting a hand-edited egg ship it.
for raw in open(egg_path, "rb").read().replace(b"\r\n", b"\n").split(b"\n"):
line = raw.strip()
if line.lower().startswith(b"color="):
color = line.split(b"=", 1)[1].decode("ascii", "replace").strip()
if color and color not in VALID_CAMO_COLORS:
print(f"[relay] WARNING: egg color={color!r} is not a camo "
f"color (valid: {sorted(VALID_CAMO_COLORS)}) -- that "
f"mech will paint GRAY", flush=True)
return entries