#!/usr/bin/env python3
"""Capture unedited verbose test output for the symlink-guard proof matrix."""
import datetime
import hashlib
import json
import os
from pathlib import Path
import shlex
import subprocess

SCRATCH = Path(__file__).resolve().parent
PRELOAD = SCRATCH / "no-symlink-preload.cjs"
EXPECTED_HASH = "e364864529ef79a816183b75d210f52b7fc134bc220b318de3dcaddf93cecdde"
assert hashlib.sha256(PRELOAD.read_bytes()).hexdigest() == EXPECTED_HASH
RUN = SCRATCH / datetime.datetime.now(datetime.timezone.utc).strftime("run-%Y%m%dT%H%M%S.%fZ")
RUN.mkdir()
CHECKOUTS = {
    "P": (Path("/home/ubuntu/wt/pr-25970-base"), "e9236274a3a6e0c731a7df4092db1e686f039068"),
    "H": (Path("/home/ubuntu/wt/pr-25970"), "bfd52848f9c02add53ab87e4a7dff31aae12b745"),
}
PACKAGES = {
    "S": ("apps/server", ["src/serverSettings.test.ts", "src/project/AgentSessionScanner.test.ts"]),
    "O": ("packages/provider-opencode", ["--config", "../../vite.config.ts", "--dir", ".", "src/server/usage.test.ts"]),
    "A": ("packages/provider-acp", ["--config", "../../vite.config.ts", "--dir", ".", "src/server/clientPolicy.test.ts"]),
}
results = []
for group in PACKAGES:
    for side, capability in [("P", "N"), ("P", "E"), ("H", "N"), ("H", "E")]:
        row = f"{group}-{side}-{capability}"
        root, sha = CHECKOUTS[side]
        package, arguments = PACKAGES[group]
        cwd = root / package
        assert subprocess.check_output(["git", "rev-parse", "HEAD"], cwd=root, text=True).strip() == sha
        assert not subprocess.check_output(["git", "status", "--porcelain"], cwd=root, text=True).strip()
        prefix = ["env", "-u", "NODE_OPTIONS"] if capability == "N" else ["env", f"NODE_OPTIONS=--require={PRELOAD}"]
        command = prefix + ["vp", "test", "run"] + arguments + ["--reporter=verbose"]
        log = RUN / f"{row}.txt"
        print(f"Starting {row}: {log}", flush=True)
        with log.open("wb") as output:
            def write(text):
                output.write(text.encode())
                output.flush()
            def record(cmd):
                write("$ " + shlex.join(cmd) + "\n")
                code = subprocess.run(cmd, cwd=cwd, stdout=output, stderr=subprocess.STDOUT).returncode
                output.flush()
                return code
            record(["git", "rev-parse", "HEAD"])
            write(f"row: {row}\nharness: Vitest verbose test-run transcript (no rendered UI)\n")
            write(f"UTC: {datetime.datetime.now(datetime.timezone.utc).isoformat()}\n")
            record(["pwd"])
            record(prefix + ["node", "--version"])
            record(prefix + ["vp", "exec", "node", "--version"])
            record(prefix + ["node", "-p", "'NODE_OPTIONS=' + (process.env.NODE_OPTIONS ?? '<unset>')"])
            write(f"EPERM preload active: {'yes' if capability == 'E' else 'no'}\n")
            record(["sha256sum", str(PRELOAD)])
            record(["uname", "-a"])
            write("rendering: none; device emulation, DPR, font scaling, viewport, theme, frozen clock: N/A\n")
            exit_code = record(command)
            write(f"\nexit code: {exit_code}\n")
        results.append({"row": row, "sha": sha, "preload": capability == "E", "command": shlex.join(command), "cwd": str(cwd), "exit_code": exit_code, "transcript": log.name})
        (RUN / "manifest.json").write_text(json.dumps(results, indent=2) + "\n")
        print(f"Finished {row}, exit {exit_code}", flush=True)
print(f"Captured {len(results)} rows in {RUN}", flush=True)
