#!/usr/bin/env python3
"""Fix the manual ADD_KNOWLEDGE upsert: bindings were shifted (rid landed in
action column). Rewrite with explicit named placeholders."""
src = open('/opt/struktur/obsidian-graphiti-import-staging-p2i/p2i_e2e.py').read()
i = src.find(' kc.execute("""INSERT INTO graphiti_import_queue(source_type,video_id,')
j = src.find('rows = queue_rows', i) if 'rows = queue_rows' in src[i:] else -1
# find the end of the broken execute block: up to kc.commit()
j = src.find('kc.commit()', i)
old = src[i:j]
new = ''' ak_rid = decision.reconciliation_record_id
import hashlib as _h
payload_json = _json.dumps({"note": "ADD_KNOWLEDGE pilot",
"action": "ADD_KNOWLEDGE"},
ensure_ascii=False, sort_keys=True)
payload_hash = _h.sha256(payload_json.encode("utf-8")).hexdigest()
post_request_id = _h.sha256((ak_rid + "|" + now).encode()).hexdigest()[:24]
kc.execute("""INSERT INTO graphiti_import_queue
(source_type, video_id, obsidian_path, content_hash, file_modified_at,
graphiti_status, created_at, updated_at, reconciliation_record_id,
source_version_id, knowledge_unit_identity, action,
payload_hash, payload_json, post_request_id)
VALUES
('obsidian', NULL, :obsidian_path, :content_hash, NULL,
'queued', :now, :now, :rid, :vid,
'__source__', 'ADD_KNOWLEDGE',
:payload_hash, :payload_json, :post_request_id)
ON CONFLICT(obsidian_path, content_hash) DO UPDATE SET
reconciliation_record_id=excluded.reconciliation_record_id,
source_version_id=excluded.source_version_id,
action=excluded.action,
updated_at=excluded.updated_at,
payload_hash=excluded.payload_hash,
payload_json=excluded.payload_json,
post_request_id=excluded.post_request_id""",
{"obsidian_path": "P2I/e2e-note.md", "content_hash": HEX_A,
"now": now, "rid": ak_rid, "vid": vid,
"payload_hash": payload_hash, "payload_json": payload_json,
"post_request_id": post_request_id})
'''
src = src[:i] + new + src[j:]
open('/opt/struktur/obsidian-graphiti-import-staging-p2i/p2i_e2e.py', 'w').write(src)
import py_compile
py_compile.compile('/opt/struktur/obsidian-graphiti-import-staging-p2i/p2i_e2e.py', doraise=True)
print('manual upsert rewritten with named params + SYNTAX_OK')