Files
ARCADIA-Studio/harness/experiments/delete-native-f7-20260912/checkpoint.py
T

38 lines
1.8 KiB
Python

from pathlib import Path
from datetime import datetime, timezone
import hashlib
import json
import shutil
import subprocess
import sys
root = Path(__file__).resolve().parent.parent
trial = root / '.local/native-qa/delete-20260912'
name, work_name, mode, baseline_name, *extra = sys.argv[1:]
assert name.replace('-', '').isalnum() and mode in ['same', 'removed']
source = (trial / work_name).resolve()
baseline = (trial / baseline_name).resolve()
assert source.is_relative_to(trial) and baseline.is_relative_to(trial)
assert source.is_dir() and baseline.is_dir()
dest = trial / 'checkpoints' / name
assert not dest.exists()
shutil.copytree(source, dest)
checker = root / '.local/native-qa/delete-oracle-warning-fix-42511f0/delete-oracle-warning-fix-42511f0.exe'
command = [str(checker), mode, str(baseline / 'project.arcadia'), str(dest / 'project.arcadia'), *extra]
run = subprocess.run(command, cwd=root, capture_output=True)
files = []
for file in sorted(dest.rglob('*')):
if file.is_file():
raw = file.read_bytes()
rel = file.relative_to(dest)
assert (source / rel).read_bytes() == raw
files.append({'path': rel.as_posix(), 'bytes': len(raw), 'sha256': hashlib.sha256(raw).hexdigest()})
log = trial / 'evidence' / (name + '.log')
log.write_bytes(run.stdout + run.stderr)
record = {'utc': datetime.now(timezone.utc).isoformat(), 'snapshot': str(dest), 'command': command,
'checker_sha256': hashlib.sha256(checker.read_bytes()).hexdigest(), 'exit': run.returncode, 'files': files}
(trial / 'evidence' / (name + '.json')).write_text(json.dumps(record, indent=2) + '\n', encoding='utf-8', newline='\n')
print(run.stdout.decode('utf-8', errors='replace'))
print(json.dumps({'name': name, 'exit': run.returncode, 'files': len(files), 'diagnostic_log': str(log)}))
sys.exit(run.returncode)