import sqlite3, datetime, subprocess, json, time
# Connect to databases
k = sqlite3.connect('/opt/struktur/youtube-research/knowledge.db')
s = sqlite3.connect('/opt/struktur/obsidian-graphiti-import/obsidian_graphiti_import.db')
# Get current state before
done_before = k.execute(
"select count(*) from graphiti_import_queue "
"where reconciliation_record_id like 'aa043:%' and graphiti_status='done'"
).fetchone()[0]
print(f"=== AA-043-P2Z-F START ===")
print(f"Time: {datetime.datetime.now(datetime.timezone.utc).strftime('%H:%M UTC')}")
print(f"Done before: {done_before}")
# Find eligible queue item (lease_expired with no episode)
eligible = k.execute("""select id, obsidian_path, source_version_id
from graphiti_import_queue
where reconciliation_record_id like 'aa043:%'
and graphiti_status='lease_expired'
order by id limit 1""").fetchone()
if not eligible:
print("No lease_expired items found")
raise SystemExit(1)
qid, path, version_id = eligible
print(f"\nSelected Queue ID {qid} for recovery test:")
print(f" Path: {path}")
# Try the writer
start_time = time.time()
result = subprocess.run(
['bash', '-c', f'dev/null /opt/struktur/obsidian-graphiti-import/aa043-writer-batch.sh --queue-id={qid}'],
capture_output=True, text=True, timeout=600, cwd='/opt/obsidian-vault'
)
end_time = time.time()
duration = end_time - start_time
print(f"\nWriter result:")
print(f" Duration: {duration:.1f}s")
print(f" Return code: {result.returncode}")
if result.stdout.strip():
print(f" Output: {result.stdout[:500]}")
if result.stderr.strip():
print(f" Errors: {result.stderr[:200]}")
# Check status after
done_after = k.execute(
"select count(*) from graphiti_import_queue "
"where reconciliation_record_id like 'aa043:%' and graphiti_status='done'"
).fetchone()[0]
print(f"\nDone after: {done_after} (+{done_after-done_before})")
# Show final distribution
print("\nQueue distribution:")
for st, c in k.execute(
"select graphiti_status, count(*) from graphiti_import_queue "
"where reconciliation_record_id like 'aa043:%' group by 1"
).fetchall():
print(f" {st}: {c}")