import http.server, threading, tempfile, pathlib, json, os, subprocess, datetime, sys, re
root=pathlib.Path(__file__).parent
out=root/datetime.datetime.now(datetime.timezone.utc).strftime('%Y%m%dT%H%M%SZ'); out.mkdir()
class Descriptor(http.server.BaseHTTPRequestHandler):
 def do_GET(self):
  if self.path != '/.well-known/t3/environment': self.send_error(404); return
  self.send_response(200); self.send_header('Content-Type','application/json'); self.end_headers()
  self.wfile.write(json.dumps(dict(environmentId='synthetic-pair-environment',label='synthetic-pair',platform=dict(os='linux',arch='x64'),serverVersion='0.0.45',orchestrationProtocolVersion=1,capabilities=dict(repositoryIdentity=True))).encode())
 def log_message(self,*args): pass
server=http.server.HTTPServer(('127.0.0.1',0),Descriptor)
threading.Thread(target=server.serve_forever,daemon=True).start()
try:
 for side,checkout,sha in [('before',sys.argv[1],'7d517188bdda54b96ae988adab071d50b67e47f8'),('after',sys.argv[2],'be15ddb3f8c83c1bc6b645fa0fb4e3d8ad19c752')]:
  home=out/side/'synthetic-home'; (home/'userdata').mkdir(parents=True)
  port=server.server_port
  (home/'userdata/server-runtime.json').write_text(json.dumps(dict(version=1,pid=os.getpid(),host='127.0.0.1',port=port,origin=f'http://127.0.0.1:{port}',startedAt='2026-11-12T00:00:00.000Z')))
  proc=subprocess.run(['node','apps/server/src/bin.ts','pair','--base-dir',str(home)],cwd=checkout,env={**os.environ,'NO_COLOR':'1','T3CODE_DEV_SEED':'0'},capture_output=True,text=True,timeout=90)
  # Replace only the scratch home in published output; no private machine paths are published.
  output=re.sub(r'\x1b\[[0-9;]*m','',proc.stdout+proc.stderr).replace(str(home),'<synthetic-home>').replace(checkout,'<checkout>')
  transcript=f'{side.upper()} | Linux x64 | Node {subprocess.check_output(["node","--version"],text=True).strip()}\nCommit: {sha}\nFixture: live HTTP descriptor, server 0.0.45 / protocol 1\nFresh synthetic home; no database seeded\n\n$ t3 pair --base-dir <synthetic-home>\n{output}\nExit code: {proc.returncode}\n'
  (out/f'{side}.txt').write_text(transcript)
  print(transcript)
finally: server.shutdown(); server.server_close()
print('Evidence directory:',out)
