extends SceneTree ## A corrupt transit ID must reject the entire save projection without losing ## real cabin occupants or making the infrastructure collision check fail open. var checks := 0 var failures := 0 func _initialize() -> void: call_deferred("run") func expect(ok: bool, label: String) -> void: checks += 1 if not ok: failures += 1 push_error(label) func run() -> void: var path := PathService.new() var cells: Array[Vector3i] = [Vector3i.ZERO, Vector3i(0, 1, 0)] expect(path.rebuild_graph(cells), "build a normal graph") expect(path.configure_elevator(&"lift", cells[0], cells[1], {&"cabin_capacity": 2}), "configure a real cabin") for actor: StringName in [&"guest:a", &"guest:b"]: expect(path.project_actor_position(actor, cells[0], 10), "position cabin passenger") expect(path.enqueue_elevator_request(&"lift", { &"request_id": StringName("ride." + String(actor)), &"unit_id": actor, &"floor_from": 0, &"floor_to": 1, &"enqueued_at": 10, })[&"ok"], "queue real passenger") expect(path.dequeue_elevator_boarding(&"lift", 0, 11, 2).size() == 2, "board both passengers") var valid: Dictionary = path.create_snapshot() expect(valid[&"transit_actor_ids"].size() == 2, "normal save keeps both cabin occupants") for bad_id: Variant in [123, true, 1.25, Vector3i(3, 2, 1), null]: path._transit_actor_ids[bad_id] = true var before := var_to_bytes(path._transit_actor_ids) var saved: Dictionary = path.create_snapshot() expect(saved.is_empty(), "unsupported transit ID rejects the whole projection") expect(var_to_bytes(path._transit_actor_ids) == before, "refusal preserves all transit IDs") expect(FacilityInfrastructureProjector._has_managed_namespace_collision(SpatialSubslotService.new(), path, {}), "consumer refuses rejected snapshot") saved[&"caller"] = true expect(path.create_snapshot().is_empty(), "repeat refusal returns a new empty projection") path._transit_actor_ids.erase(bad_id) expect(var_to_bytes(path.create_snapshot()) == var_to_bytes(valid), "correction recovers both original occupants") var restored := PathService.new() expect(restored.restore_snapshot(valid) and restored.rebuild_graph(cells), "save restores real passenger references") expect(var_to_bytes(restored.create_snapshot()) == var_to_bytes(valid), "restored full save matches original") print("Path snapshot transit guard: %d checks, %d failures" % [checks, failures]) quit(1 if failures else 0)