P14-03: Versioned shaft-wait saves, keep riders aboard, real-actor proof

- ElevatorService snapshot v2 carries the shaft-wide wait; v1 saves (written
  with every elevator dynamic_cost 0) migrate by deriving it on load, and any
  v2 mismatch, including all zeros, is rejected atomically. A genuine save
  from 50ceca0 is kept as tests/fixtures/p14-03/legacy_rush_v1.
- A guest aboard a cabin no longer decides, leaves or despawns until the
  elevator sets it down at a real landing; previously a rider told to leave
  vanished from a moving cabin.
- test_route_wait_choice now proves the rush detour and route loss with a
  worker who actually walks, every shared rider's arrival cell, service
  elevator and stair congestion, legacy migration and a new-PID restart.
- Register completion markers for the seven suites added this session and
  bring the P14 ledger in line with P14-02's completion.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Takeshi
2026-10-20 16:51:41 +09:00
co-authored by Claude Opus 5.5
parent 62d1dcecad
commit a8edd3c3a1
15 changed files with 562 additions and 113 deletions
+4
View File
@@ -8796,6 +8796,10 @@ func get_guest_decision_record(guest_id: StringName) -> Dictionary:
func _advance_guest_ai_decisions(absolute_minute: int) -> void:
for guest: GuestRuntime in guest_service.get_guests():
# A rider inside a cabin cannot decide, leave or despawn until the
# elevator sets it down at a real landing (P14-03: passengers never vanish).
if elevators.get_actor_trip(_guest_path_actor_id(guest.guest_id)).get(&"state", &"") == PathService.ELEVATOR_REQUEST_BOARDED:
continue
match guest.state:
GuestRuntime.State.SPAWNING:
guest_service.transition_guest(guest.guest_id, GuestRuntime.State.ENTERING, absolute_minute, &"ENTRY_STARTED")