"""Isolated synthetic regression: a back-side body cannot cover a front probe pad.
No production run is altered. No desktop target, captures, or gate receipts exist.
"""
from pathlib import Path
import os,json,subprocess
R=Path(__file__).resolve().parent
results=[]
for side in ['B','F']:
 d=R/side;d.mkdir(exist_ok=True)
 board=d/'fixture.kicad_pcb'
 board.write_text(f'''(kicad_pcb (version 20260206) (generator pcbnew)
 (general (thickness 1.6)) (layers (0 "F.Cu" signal) (2 "B.Cu" signal))
 (footprint "TestPoint" (layer "F.Cu") (at 10 10)
  (property "Reference" "TP1" (at 10 10) (layer "F.SilkS"))
  (pad "1" smd circle (at 0 0) (size 1 1) (layers "F.Cu" "F.Mask") (net "TEST")))
 (footprint "Body" (layer "{side}.Cu") (at 10 10)
  (property "Reference" "U1" (at 10 10) (layer "{side}.SilkS"))
  (fp_rect (start -3 -3) (end 3 3) (stroke (width 0.1) (type default)) (fill none) (layer "{side}.Fab")))
 (gr_rect (start 0 0) (end 30 30) (stroke (width 0.05) (type default)) (fill none) (layer "Edge.Cuts")))''')
 spec=d/'spec.json';spec.write_text('{}')
 # Minimal isolated Run data; only the production check's file inputs are supplied.
 (d/'run.json').write_text(json.dumps({'boards':[str(board)],'board':str(board),'spec':str(spec),'engine':'synthetic regression','steps':{},'outcomes':{},'captures':[]}))
 tests=d/'tests.json';tests.write_text(json.dumps([{'id':'probe','net':'TEST','kind':'waveform','what':'front probe','why':'side regression','expect':'accessible only with bottom body'}]))
 p=subprocess.run(['adom-aiflow','--run',str(d),'--ai-thread','AIFlow synthetic probe-side regression','testplan','check','--tests',str(tests)],env={**os.environ,'AIFLOW_DASHBOARD':'off'},capture_output=True,text=True)
 results.append({'bodySide':side,'expectedExit':0 if side=='B' else 2,'actualExit':p.returncode,'stdout':p.stdout,'stderr':p.stderr})
(R/'results.json').write_text(json.dumps(results,indent=2));print(json.dumps(results,indent=2))
