Files
TheTree_mock/docs/plans/original-completion-2026-10-02/execution/verify_transit_guard.py
T
Takeshi b84bade045 Save The Tree implementation and acceptance work in progress
Preserve production code, regression fixtures, audio assets and provenance, test infrastructure, and the original-completion plan and progress ledger. Final game and Windows acceptance remain pending; excluded local artifacts and native experiments are not part of this snapshot.
2026-10-11 15:58:00 +09:00

144 lines
7.6 KiB
Python

"""Accept the retained one-file transit guard against the 1396 source baseline.
Only disposable stages are changed. Whole-state/event oracle comparisons and
transport regressions are new runs; full regression follows the merged changes.
"""
from datetime import datetime
import argparse
import hashlib
import json
import os
from pathlib import Path
import shutil
import subprocess
import time
import uuid
from zoneinfo import ZoneInfo
ROOT = Path(__file__).resolve().parents[4]
OUT = ROOT / "artifacts/original-completion-2026-10-02/p03-transit-guard"
PACKET = ROOT / "artifacts/path-transit-snapshot-partial-success-guard-candidate-2026-10-01"
PATH_TARGET = "scripts/world/path_service.gd"
def sha(path):
return hashlib.sha256(path.read_bytes()).hexdigest()
def write(path, data):
path.write_text(json.dumps(data, ensure_ascii=False, indent=2) + "\n")
def main():
global OUT
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--output", type=Path, default=OUT)
args = parser.parse_args()
OUT = args.output.resolve()
OUT.mkdir(parents=True, exist_ok=False)
baseline_map = json.loads((ROOT / "artifacts/facility-need-pricing-production-scale-adoption-2026-10-01-r01/after.json").read_text())
pins = json.loads((PACKET / "source-pins.json").read_text())
assert baseline_map[PATH_TARGET] == pins["target_base"][PATH_TARGET]
assert sha(PACKET / "candidate" / PATH_TARGET) == pins["target_candidate"][PATH_TARGET]
assert sha(ROOT / "scripts/world/facility_infrastructure_projector.gd") == pins["unchanged_projector_sha256"]
run_id = uuid.uuid4().hex[:12]
stage_root = Path("/private/tmp") / ("thetree-original-guard-" + run_id)
stage_root.mkdir()
assert shutil.disk_usage(stage_root).free > 3 * 1024**3
info = {"source_head": subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=ROOT, text=True).strip(),
"started_at_jst": datetime.now(ZoneInfo("Asia/Tokyo")).isoformat(),
"baseline_files": len(baseline_map), "stages": {}, "rows": [], "production_applied": False}
write(OUT / "source-baseline.json", baseline_map)
for variant in ("reference", "candidate"):
stage = stage_root / variant
stage.mkdir()
for name, expected in baseline_map.items():
source = ROOT / name
destination = stage / name
destination.parent.mkdir(parents=True, exist_ok=True)
if source.is_file() and sha(source) == expected:
shutil.copyfile(source, destination)
else:
# A parallel save fix may already change production; recover
# only the exact committed baseline, never mix generations.
payload = subprocess.check_output(["git", "show", "HEAD:" + name], cwd=ROOT)
assert hashlib.sha256(payload).hexdigest() == expected, name
destination.write_bytes(payload)
profile_name = "TheTreeGoalGuard-" + run_id + "-" + variant
profile = Path.home() / "Library/Application Support" / profile_name
project = stage / "project.godot"
config = project.read_text()
project.write_text(config.replace("[application]", '[application]\nconfig/use_custom_user_dir=true\nconfig/custom_user_dir_name="' + profile_name + '"', 1))
qa = stage / "tests/diagnostic/transit_snapshot_guard"
qa.mkdir(parents=True)
for name in ("frozen_full_snapshot_path.gd", "transit_snapshot_guard_boundary.gd"):
shutil.copyfile(PACKET / "qa" / name, qa / name)
shutil.copyfile(ROOT / "artifacts/path-snapshot-lazy-default-storage-budget-prep-2026-09-30/drivers/profile_current_whole.gd", qa / "whole.gd")
if variant == "candidate":
shutil.copyfile(PACKET / "candidate" / PATH_TARGET, stage / PATH_TARGET)
info["stages"][variant] = {"path": str(stage), "profile": str(profile), "path_sha256": sha(stage / PATH_TARGET)}
write(OUT / "execution.json", info)
def run(variant, label, script=None, extra=None):
stage = Path(info["stages"][variant]["path"])
env = dict(os.environ)
env.update(THE_TREE_TRANSIT_SNAPSHOT_GUARD_STAGE=str(stage),
THE_TREE_TRANSIT_SNAPSHOT_GUARD_PROFILE=info["stages"][variant]["profile"])
if extra:
env.update(extra)
command = ["godot", "--headless", "--path", str(stage)]
command += ["--script", "res://" + script] if script else ["--editor", "--import"]
start = time.monotonic()
log = OUT / (label + ".log")
with log.open("w") as stream:
try:
code = subprocess.run(command, cwd=stage, env=env, stdout=stream,
stderr=subprocess.STDOUT, timeout=1200).returncode
except subprocess.TimeoutExpired:
code = 124
content = log.read_text()
unicode_lines = [line for line in content.splitlines() if "Unicode parsing error" in line]
passed = code == 0 and "Godot Engine v4.7.2" in content and not any(t in content for t in ("SCRIPT ERROR:", "\nERROR:"))
# The historical importer emits two known NUL diagnostics. Retain and
# expose them, while requiring clean script execution for this fix.
if script and unicode_lines:
passed = False
row = {"variant": variant, "label": label, "script": script, "exit_code": code,
"seconds": round(time.monotonic() - start, 3), "passed": passed,
"unicode_diagnostics": unicode_lines, "diagnostics_clear": not unicode_lines,
"log": log.name, "log_sha256": sha(log)}
info["rows"].append(row)
write(OUT / "execution.json", info)
print(json.dumps(row), flush=True)
assert passed, label
return content
run("reference", "reference-import")
run("candidate", "candidate-import")
boundary = run("candidate", "boundary", "tests/diagnostic/transit_snapshot_guard/transit_snapshot_guard_boundary.gd")
assert "failures=0" in boundary and boundary.count("TRANSIT_SNAPSHOT_GUARD checks=") == 1
oracle = str(stage_root / "whole-oracle.var")
for variant, mode in (("reference", "oracle"), ("candidate", "check")):
report = OUT / (variant + "-whole.json")
run(variant, variant + "-whole", "tests/diagnostic/transit_snapshot_guard/whole.gd",
{"THE_TREE_WHOLE_MODE": mode, "THE_TREE_WHOLE_REPORT": str(report),
"THE_TREE_WHOLE_ORACLE": oracle, "THE_TREE_PROFILE_VARIANT": variant,
"THE_TREE_PROFILE_SOURCE_SHA": hashlib.sha256(json.dumps(baseline_map, sort_keys=True).encode()).hexdigest()})
data = json.loads(report.read_text())
assert data["failures"] == 0 and data["checked_ticks_including_midpoint_replay"] == 1200
assert data["uncompared_delivered_event_count"] == 0
for test in ("tests/s1/test_path_service.gd", "tests/s1/test_path_congestion.gd",
"tests/transport/test_transport_save.gd", "tests/s1/test_runtime_infrastructure_integration.gd",
"tests/s6/test_runtime_save_lifecycle.gd"):
run("candidate", test.replace("/", "__"), test)
info.update(finished_at_jst=datetime.now(ZoneInfo("Asia/Tokyo")).isoformat(),
focused_acceptance_passed=True, full_merged_regression_pending=True,
original_full_acceptance=False, performance_acceptance=False,
unresolved_import_diagnostics=any(not r["diagnostics_clear"] for r in info["rows"]))
write(OUT / "execution.json", info)
print("Transit guard focused acceptance passed; merged full regression remains required.")
if __name__ == "__main__":
main()