extends RefCounted ## Sparse whole typed captures. No acceptance flags and no truncation. const Codec := preload("res://tests/fixtures/p08-02/mixed_world.gd") var directory: String var manifest: FileAccess func open(path: String) -> bool: directory = path if DirAccess.dir_exists_absolute(path): return false if DirAccess.make_dir_recursive_absolute(path.path_join("objects")) != OK: return false manifest = FileAccess.open(path.path_join("manifest.jsonl"), FileAccess.WRITE) return manifest != null func object(value: Variant) -> String: var text := JSON.stringify(Codec.new().typed(value)) + "\n" var digest := text.sha256_text() var path := directory.path_join("objects").path_join(digest + ".json") if FileAccess.file_exists(path): return digest if FileAccess.get_sha256(path) == digest else "" var file := FileAccess.open(path, FileAccess.WRITE) if file == null: return "" file.store_string(text) file.close() return digest if FileAccess.get_sha256(path) == digest else "" func capture(label: String, runtime: Variant, view: WorldPreview) -> bool: if manifest == null: return false var state: Dictionary = runtime.create_snapshot() var report := view.get_life_observation_report() var state_hash := object(state) var report_hash := object(report) if state_hash.is_empty() or report_hash.is_empty(): return false manifest.store_line(JSON.stringify({"label": label, "pid": OS.get_process_id(), "ticks_usec": Time.get_ticks_usec(), "state": state_hash, "report": report_hash, "input_method": "diagnostic", "acceptance": "pending"})) manifest.flush() return var_to_bytes(state) == var_to_bytes(runtime.create_snapshot()) func close() -> void: if manifest != null: manifest.close() manifest = null func record(label: String, value: Dictionary) -> bool: if manifest == null: return false var digest := object(value) if digest.is_empty(): return false manifest.store_line(JSON.stringify({"label": label, "pid": OS.get_process_id(), "ticks_usec": Time.get_ticks_usec(), "object": digest})) manifest.flush() return true