map dropdown = the AUTHENTIC console catalog; the relay names a phantom-map stall instead of holding silently

THE 40-MINUTE OUTAGE'S REAL FIX.  The GUI's map dropdown offered every RES
name passing the type-14+26 existence check -- which includes INTERNAL
FRAGMENTS: artrucks is an include-node of arena1 (PROGRESS_LOG map anatomy:
arena1 -> {arenall -> cavern, artrucks}), not a mission.  Picking it stalled
every pod's mission load forever with no error anywhere, and End/Re-arm kept
restoring the poisoned egg -- 22:02..22:49, three "different" failures, one
cause.

  * eggmodel.CONSOLE_MAPS: the Mac 4.10 operator console's own adventure-tree
    catalog (Console.ini; the same 8 the solo menu ships in btl4fe.cpp kMaps):
    cavern grass rav polar3 polar4 arena1 arena2 dbase.  ValueSets.maps now
    offers exactly that, catalog order, filtered to what the RES carries
    (permissive fallback only if the intersection is empty -- a foreign RES
    must not present zero maps).  artrucks is the one fragment the old filter
    let through; now hidden.
  * The relay WARNS at egg load/reload when the mission names a non-catalog
    map (the camo-color-warning precedent: hand-edited eggs still work, the
    operator just cannot miss it).
  * The launch hold gains the PHANTOM-MISSION SIGNATURE diagnostic: 0/N ready
    for 60s means every pod is stalled in shared mission content -- one line
    naming the egg's map and the recovery (End Mission -> fix map -> Re-arm),
    instead of the silent 10s HELD drumbeat the operator stared at for 40
    minutes.  Hint re-arms per launch.

VERIFIED: new suite scratchpad/test_map_guard.py (5 checks: catalog exact +
ordered, artrucks hidden, warning fires on a doctored egg, silent on a real
one, the 60s hint names the map); all five console suites pass.  Python-only.

(While placing the hint, a blind text-insert broke the launch-received block's
indentation -- caught by py_compile before anything ran, repaired, and the
whole area re-verified by the rearm suite.)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
arcattack
2026-07-27 00:19:20 -05:00
co-authored by Claude Opus 5
parent becaddb662
commit ef0ec48f9a
3 changed files with 140 additions and 1 deletions
+17 -1
View File
@@ -45,6 +45,17 @@ DROPZONES = ["one"] # only confirmed-valid name (embedded in map streams)
# crash). Canonical 8-mech names first for the operator dropdown; the
# short variants (bhk1/mad1/lok2/...) are alternate ModelList entries of
# the same stable. "camera" = the spectator CameraShip, not a mech.
# The AUTHENTIC operator map catalog -- the Mac 4.10 console's adventure tree
# (Console.ini; provenance docs/GLASS_COCKPIT.md 2026-07-19; same list the solo
# menu ships in game/glass/btl4fe.cpp kMaps). The RES also holds INTERNAL
# FRAGMENTS (artrucks, arenall, adrop, pol4sfx...) that pass the type-14+26
# existence check but are include-nodes, not missions -- picking one stalls
# every pod's load forever (the 2026-07-26 games-night outage: map=artrucks
# held six players at 0/6 ready for 40 minutes). Offer what the 1995 console
# offered.
CONSOLE_MAPS = ["cavern", "grass", "rav", "polar3", "polar4",
"arena1", "arena2", "dbase"]
KNOWN_GOOD_VEHICLES = ["bhk1", "madcat", "avatar", "blkhawk", "loki",
"owens", "sunder", "thor", "vulture"]
CANDIDATE_VEHICLES = ["ava1", "lok1", "lok2", "mad1", "mad2", "own1",
@@ -105,7 +116,12 @@ class ValueSets:
# maps: need BOTH type 14 and type 26
maps14 = {r.name for r in by_type[14]}
maps26 = {r.name for r in by_type[26]}
self.maps = sorted(maps14 & maps26)
present = maps14 & maps26
# catalog order, filtered to what THIS RES actually carries; fall back
# to the permissive set only if the intersection is somehow empty (a
# foreign RES), so the tool never presents zero maps.
self.maps = [m for m in CONSOLE_MAPS if m in present] or sorted(present)
self.all_map_streams = sorted(present) # fragments included (debug)
# vehicletable (type 25)
self.colors, self.badges, self.patches = [], [], []
for r in by_type[25]: