import importlib.util
import json
from pathlib import Path
import subprocess
import yaml

R=Path(__file__).parent
s=importlib.util.spec_from_file_location('run',R/'run.py');o=importlib.util.module_from_spec(s);s.loader.exec_module(o)
plan=o.read('plan.json');first=o.read('final.json');sid='tmp16-0915-g1-c3'
assert sid in plan['temporary'] and not (R/'reconcile-before.json').exists()
q=o.api('/api/v1/streams/'+sid)
assert q['state']=='stopped' and not q.get('cleanup_pending') and not q.get('cleanup_error')
assert q['run_id']==first['states'][sid]['run_id'] and q['run_generation']==first['states'][sid]['run_generation']
assert q['last_cleanup']['completed'] and q['last_cleanup']['generation']==q['run_generation']
o.save('reconcile-before.json',dict(state=q,action='First DELETE only; Stop not repeated'))
logs=subprocess.run(['docker','logs','--since','2026-09-15T21:12:40+09:00','--until','2026-09-15T21:13:00+09:00',
                     '--tail','2500','contextra-analytics-1'],capture_output=True,text=True,timeout=10)
(R/'cleanup-error-bounded.log').write_text((logs.stdout+logs.stderr)[-4*1024**2:])
o.save('reconcile-delete.json',o.api('/api/v1/streams/'+sid,'DELETE'))
final=dict(first,states=o.states(),registry=yaml.safe_load(o.REG.read_text()),publisher=o.api('/api/v1/metadata/status'),
           resources=o.resources(),inventory=o.p.base.inventory(),sender=o.p.prior.ops.prior.prev.sender(),
           original_settings={k:o.api('/api/v1/streams/'+k+'/settings')['configured'] for k in plan['states']})
assert final['registry']==plan['registry']
assert final['original_settings']==plan['settings']
assert all(final['states'][k]['state']==v['state'] and final['states'][k]['run_id']==v['run_id'] for k,v in plan['states'].items())
assert final['publisher']['metrics']['workers']==3 and not final['publisher']['metrics']['workerErrors']
o.save('final-reconciled.json',final)
print('Original registry/settings/runs preserved; all temporary API registrations removed; workers3; STOP500 evidence retained.')
