from pathlib import Path
from datetime import datetime,timezone
import shutil
B=Path('/opt/struktur/obsidian-graphiti-reconciler-staging'); O=Path('/opt/struktur/knowledge-pipeline-aggregator-staging'); t=datetime.now(timezone.utc).isoformat()
p=B/'AA-042.md'; s=p.read_text(); marker='\nArbeitsauftrag AA-042 erledigt.\n'; section=f'''\n## 18. Aktuelle layer-separierte Live-Zahlen\n\nPrüfzeitpunkt: `{t}` (UTC).\n\n- `/opt/struktur/youtube-research/knowledge.db`, Tabelle `videos`: 1051 Zeilen, 1051 eindeutige `youtube_id`.\n- `graphiti_import_queue`: 880 Zeilen; `done=675`, `processing=0`, `retry_wait=199`, `failed_permanent=0`, zusätzlich `queued=6`. Queue-Zeilen sind kein Neo4j-Nachweis.\n- `source_processing_registry`: 618 Registry-Zeilen.\n- `/opt/struktur/obsidian-graphiti-import/obsidian_graphiti_import.db`, Tabelle `files`: `done=31`, `duplicate=1`, `failed=116`, `retry=36`.\n- `/opt/obsidian-vault`: 2153 aktuelle Markdown-Dateien. Markdown-Dateien sind keine eindeutigen Videos.\n- `GET http://127.0.0.1:8644/episodes/inventory`: 2584 Graphiti-Episoden. Episoden sind keine eindeutigen Video-IDs.\n\nDiese Zahlen sind live zum angegebenen Prüfzeitpunkt; historische AA-040-Werte bleiben separat und werden nicht als Live-Status verwendet.\n'''
s=s.replace(marker,section+marker);p.write_text(s);shutil.copy2(p,O/'AA-042.md');print(t)
