extends "res://tests/special/peeping_room_fixture.gd" func _run() -> void: var f := fixture() var runtime: Variant = f[&"runtime"] var room := place(f) enable_fixture(f, room) var old_target: StringName = f[&"target"] var old_evidence: Dictionary = runtime.peeping_room_service.controlled_fixture_record_evidence(room, &"fixture.event", f[&"clock"].absolute_minute) expect(old_evidence[&"ok"], "fixture evidence before removal") expect(runtime.submit_command(&"demolish_facility", {&"instance_id": old_target}).is_success(), "real Runtime demolition") var lost: Dictionary = runtime.peeping_room_service.get_room(room) expect(lost[&"link_state"] == &"TARGET_LOST" and lost[&"stopped"], "target removal immediately marks lost and stopped") expect(runtime.peeping_room_service.record_evidence(room, &"fixture.after_loss", f[&"clock"].absolute_minute)[&"reason"] == &"STOPPED", "collection rejected after loss with prescribed stopped precedence") expect(not runtime.peeping_room_service.controlled_fixture_set_stopped(room, false), "lost target cannot resume even through fixture") var lost_snapshot: Dictionary = runtime.create_snapshot() expect(runtime.restore_snapshot(lost_snapshot), "lost reference roundtrip retains historical identity") expect(var_to_bytes(lost_snapshot) == var_to_bytes(runtime.create_snapshot()), "lost snapshot exact typed roundtrip") expect(runtime.submit_command(&"build_facility", {&"definition_id": &"public_bath", &"origin": Vector3i(-6, 0, 0)}).is_success(), "rebuild at same geometry starts") f[&"clock"].advance_minutes(runtime.definition_registry.get_facility(&"public_bath").build_minutes) var new_target: StringName = runtime.world_service.get_occupant(Vector3i(-6, 0, 0)) expect(new_target != old_target, "rebuild receives different target identity") expect(runtime.peeping_room_service.get_room(room)[&"target_instance_id"] == old_target, "no implicit relink on geometry reuse") var rejected: CommandResult = runtime.submit_command(&"peeping_room_relink", {&"room_id": room, &"target_instance_id": old_target}) expect(not rejected.is_success(), "explicit old target relink rejected") expect(runtime.submit_command(&"peeping_room_relink", {&"room_id": room, &"target_instance_id": new_target}).is_success(), "explicit new target full validation") var linked: Dictionary = runtime.peeping_room_service.get_room(room) expect(linked[&"stopped"] and linked[&"stop_reason"] == &"RELINKED_PENDING_RESUME", "explicit relink never auto resumes") f[&"target"] = new_target enable_fixture(f, room) var new_evidence: Dictionary = runtime.peeping_room_service.controlled_fixture_record_evidence(room, &"fixture.event", f[&"clock"].absolute_minute) expect(new_evidence[&"ok"] and new_evidence[&"evidence_id"] != old_evidence.get(&"evidence_id"), "same room/event on different target never aliases") var linked_snapshot: Dictionary = runtime.create_snapshot() expect(runtime.restore_snapshot(linked_snapshot) and var_to_bytes(linked_snapshot) == var_to_bytes(runtime.create_snapshot()), "relinked ledger keeps both historical target bindings") expect(runtime.facility_service.unregister_instance(new_target).is_success(), "equivalent FacilityService removal path") expect(runtime.peeping_room_service.get_room(room)[&"link_state"] == &"TARGET_LOST", "unregister signal also invalidates target") finish("Peeping room reference")