from pathlib import Path
import json,sys,subprocess
R=Path(__file__).resolve().parent;sys.path.insert(0,str(R.parent/'parity_metadata_closure_A22'));from prepare_candidates import forms
P=R/'board/led_driver.kicad_pcb';CLI='/Applications/KiCad/KiCad.app/Contents/MacOS/kicad-cli';removed=[]
for attempt in range(12):
 d=json.loads((R/'drc.json').read_text());v=d['violations']
 if not v:break
 assert all(x['type'] in ['track_dangling','via_dangling'] and all('[/GND]' in t['description'] for t in x['items']) for x in v),v
 ids={t['uuid'] for x in v for t in x['items']};s=P.read_text()
 for tag in ['segment','via']:
  for st,en,t in reversed(list(forms(s,tag))):
   if any(i in t for i in ids):removed.append(t);s=s[:st]+s[en:]
 P.write_text(s)
 subprocess.run([CLI,'pcb','drc','--refill-zones','--save-board','--schematic-parity','--severity-all','--format','json','-o',str(R/'drc.json'),str(P)],check=True)
else:raise RuntimeError('cleanup iteration bound')
(R/'pruned_replaced_ground.txt').write_text('\n'.join(removed));print('Removed replaced dangling GND branch pieces',len(removed))
