#!/usr/bin/env python3
"""
AA-043-P2T: Fix the legacy post-queue path in the PRODUCTION importer copy.
After bridge returns status='queued':
- transition to 'queued' with message 'AA-043 queued for single writer'
(existing contract status 'queued' — no new status invented)
- NO immediate Graphiti/Inventory verification (check())
- NO 'Graphiti POST completed' transition
- NO source_failure / set_run_block for missing episode
status='no_write' -> 'done' (already present, adopted semantics)
status='blocked' -> 'review' (existing identity_review semantics, no new state)
"""
p = "/opt/struktur/obsidian-graphiti-import/importer.py"
src = open(p, encoding="utf-8").read()
old = ''' transition(c,row['id'],'processing','processing','POST /episodes',started); c.commit()
result=post(row); c.execute('update files set attempts=attempts+1,last_attempt=? where id=?',(NOW(),row['id'])); transition(c,row['id'],'graphiti_created','graphiti_created','Graphiti POST completed',started); c.execute('update files set graphiti_episode_name=?,graphiti_episode_uuid=?,episode_ref=? where id=?',(result.get('name'),result.get('uuid'),result.get('name'),row['id'])); c.commit()
verified=check(row)
if len(verified)!=1: raise RuntimeError('verification did not find exactly one episode')'''
new = ''' transition(c,row['id'],'processing','processing','AA-043 reconciliation enqueue',started); c.commit()
result=post(row); c.execute('update files set attempts=attempts+1,last_attempt=? where id=?',(NOW(),row['id']))
if result.get('status')=='queued':
transition(c,row['id'],'queued','aa043_queued','AA-043 queued for single writer (action='+str(result.get('action'))+')',started); c.commit(); done+=1; continue
if result.get('status')=='no_write':
transition(c,row['id'],'done','aa043_no_write','AA-043: source already present, no write needed',started); c.commit(); done+=1; continue
if result.get('status')=='blocked':
transition(c,row['id'],'review','aa043_blocked','AA-043 blocked classification: '+str(result.get('classification')),started); c.commit(); continue
raise RuntimeError('aa043_bridge unknown status: '+str(result))'''
assert old in src, 'legacy block not found'
src = src.replace(old, new)
# remove the now-orphaned legacy verification/verified/done lines that followed
old2 = ''' verified=check(row)
if len(verified)!=1: raise RuntimeError('verification did not find exactly one episode')
if os.getenv('OBSIDIAN_IMPORT_FAILPOINT_ID') == str(row['id']):
e=verified[0]; c.execute('update files set graphiti_episode_name=?,graphiti_episode_uuid=?,episode_ref=?,graphiti_created_at=? where id=?',(e.get('name'),e.get('uuid'),e.get('name'),str(e.get('created_at')),row['id']))
transition(c,row['id'],'graphiti_created','post_write_failpoint',f"test failpoint; episode_name={e.get('name')}; episode_uuid={e.get('uuid')}; run_id={started}",started); c.commit(); raise SystemExit(75)
transition(c,row['id'],'verified','verified','episode verified',started); c.execute('update files set last_verified_at=?,last_error=null where id=?',(NOW(),row['id'])); transition(c,row['id'],'done','verified','complete',started); done+=1
'''
assert old2 in src, 'legacy verification block not found'
src = src.replace(old2, '')
open(p, "w", encoding="utf-8").write(src)
import py_compile
py_compile.compile(p, doraise=True)
print("post-queue path fixed + SYNTAX_OK")