Files
ARCADIA-Studio/harness/experiments/navigation-prerelease-review-20260911/payload/run-review.py
T

33 lines
1.6 KiB
Python

"""Preserve each independent evaluator invocation and its raw terminal streams."""
from datetime import datetime, timezone
from pathlib import Path
import hashlib
import json
import subprocess
import sys
import time
out = Path(__file__).resolve().parent
scope = sys.argv[1]
assert scope in ('artifact', 'server')
sha = lambda p: hashlib.sha256(p.read_bytes()).hexdigest()
paths = {key: out / (scope + '-' + key + suffix) for key, suffix in (('stdout', '.log'), ('stderr', '.log'), ('command', '.json'))}
assert all(not p.exists() for p in paths.values())
command = [sys.executable, '-X', 'utf8', str(out / 'review.py'), scope]
result = {'started_utc': datetime.now(timezone.utc).isoformat(), 'command': command,
'cwd': str(out), 'script_sha256': sha(out / 'review.py'),
'frozen_inputs_sha256': sha(out / 'frozen-inputs.json')}
started = time.monotonic()
with paths['stdout'].open('xb') as stdout, paths['stderr'].open('xb') as stderr:
completed = subprocess.run(command, cwd=out, stdout=stdout, stderr=stderr, check=False)
result.update(exit_code=completed.returncode, elapsed_seconds=time.monotonic() - started,
finished_utc=datetime.now(timezone.utc).isoformat(),
stdout_sha256=sha(paths['stdout']), stderr_sha256=sha(paths['stderr']),
script_unchanged=sha(out / 'review.py') == result['script_sha256'],
frozen_inputs_unchanged=sha(out / 'frozen-inputs.json') == result['frozen_inputs_sha256'])
with paths['command'].open('x', encoding='utf-8', newline='\n') as f:
json.dump(result, f, indent=2)
f.write('\n')
print(json.dumps(result, indent=2))
sys.exit(completed.returncode)