{"queue_id": 8, "relative_path": "Runbooks/HOW_TO_MANUAL_EMAIL_INGEST.md", "title": "Email Ingestion — Kurzanleitung", "import_key": "b2ece884f9641371aac84d7f33c40cc25ab7ee36bf1cec4a9fc056804a70a4f6", "chunk_count": 18, "created_nodes": 19, "created_relationships": 35, "body": null, "chunks": [{"chunk_key": "c9c56c4e5eac971d8caac36ae2d6cd1dbaf94cd772ea07f19241cadbbc98e92f", "chunk_index": 0, "heading": "Email Ingestion — Kurzanleitung", "text": "# Email Ingestion — Kurzanleitung", "text_hash": "ee73abf746d963c4cada2278841164b93403ef2706e42d270643bf9e18430da7"}, {"chunk_key": "e698e3a8bfffb83f89abceee238a1521f010939ba536f4b77fe5f62f36eec800", "chunk_index": 1, "heading": "1. .eml-Datei ablegen", "text": "# Email Ingestion — Kurzanleitung\n## 1. .eml-Datei ablegen\n\nVon lokalem Rechner auf den VPS:\n```bash\nscp -i ~/.ssh/vps_key /lokaler/pfad/email.eml \\\n root@31.70.68.228:/opt/struktur/ingestion/email/inbox/\n```\n\nOder direkt auf dem VPS:\n```bash\ncp /pfad/zur/email.eml /opt/struktur/ingestion/email/inbox/\n```\n\n---", "text_hash": "59357e5acb440978bcee26001be51b975e1de173f42314e07d065eeafcb2d36f"}, {"chunk_key": "0bc1f0ef1e4f113aa468a728302d8610968d16421478b5a55e602bc6d69aae6f", "chunk_index": 2, "heading": "2. Ingestion starten", "text": "68.228:/opt/struktur/ingestion/email/inbox/\n```\n\nOder direkt auf dem VPS:\n```bash\ncp /pfad/zur/email.eml /opt/struktur/ingestion/email/inbox/\n```\n\n---\n## 2. Ingestion starten\n\n```bash\npython3 /opt/struktur/ingestion/ingest_email.py \\\n /opt/struktur/ingestion/email/inbox/email.eml\n```\n\nDie Datei wird nach Abschluss automatisch nach processed/ verschoben.\nBei Fehler landet sie in failed/.\n\n---", "text_hash": "69b8ee75efd4575e3368912431931c790b1e2bcc0c49ab324a5b297a88afbec3"}, {"chunk_key": "82c125f6aad772bc66abe63d3feddf5c259cd90e8f9c27bba1a3b1600ea43a38", "chunk_index": 3, "heading": "3. Ergebnis pruefen", "text": "ktur/ingestion/email/inbox/email.eml\n```\n\nDie Datei wird nach Abschluss automatisch nach processed/ verschoben.\nBei Fehler landet sie in failed/.\n\n---\n## 3. Ergebnis pruefen\n\n```bash", "text_hash": "c4ba8b8c334834c66e57892ecdfa7d50cfcb324a32851a6711b370e4f999b31f"}, {"chunk_key": "b3a00dccfb2ddfbc87d90509129bcd36962494a405c28eae885a43d69bcafa0c", "chunk_index": 4, "heading": "Zusammenfassung letzter Lauf", "text": "## 3. Ergebnis pruefen\n\n```bash\n# Zusammenfassung letzter Lauf\ncat /opt/struktur/ingestion/email/last_ingestion_result.json", "text_hash": "3e8e199e5da1f0a2218adac6e47f165f07414182d94659694a52ad8d643ad4e7"}, {"chunk_key": "145ce4dcbc37c6425dfe508431b1d50167d202e73425e303dbc59fceaf5ba68a", "chunk_index": 5, "heading": "Audit-Log letzter Lauf", "text": "# Zusammenfassung letzter Lauf\ncat /opt/struktur/ingestion/email/last_ingestion_result.json\n# Audit-Log letzter Lauf\ntail -20 /opt/struktur/ingestion/email/ingestion_audit.jsonl", "text_hash": "073bce65bbc9658f1762abb30b38a1611c386078e9abd91524c701cdd83d11dc"}, {"chunk_key": "8560782c067976181054e30232cc819bcfbeed11ef0d1d169544a9a33cf920f1", "chunk_index": 6, "heading": "Neue Reviews anzeigen", "text": "# Audit-Log letzter Lauf\ntail -20 /opt/struktur/ingestion/email/ingestion_audit.jsonl\n# Neue Reviews anzeigen\nls -lt /opt/struktur/memory/review-queue/ | head -10", "text_hash": "1c9661dcbafc315f2c57aefdd60946a76d9a592b88b81b1b8275e00ba229b6a7"}, {"chunk_key": "7b5d5e354359ae94a5c1479e1568da1a3209e3bcc463996958a165febafdff78", "chunk_index": 7, "heading": "Review-Inhalt lesen", "text": "# Neue Reviews anzeigen\nls -lt /opt/struktur/memory/review-queue/ | head -10\n# Review-Inhalt lesen\ncat /opt/struktur/memory/review-queue/REVIEW-DATUM-UHRZEIT-ID.json\n```\n\n---", "text_hash": "42e78bce522b2a5818b0f961c96bc6a011465acb017b895e646de34452469dfd"}, {"chunk_key": "5cd531b2a734c7c8266fca9b7768cefc5ee0f8f268fd18387b1df0341fda1e28", "chunk_index": 8, "heading": "4. Duplikattest", "text": "# Review-Inhalt lesen\ncat /opt/struktur/memory/review-queue/REVIEW-DATUM-UHRZEIT-ID.json\n```\n\n---\n## 4. Duplikattest\n\n```bash", "text_hash": "9d52b701e89415c179771ae060c960ce545ddd76cc69cb249263f1bee25e39d9"}, {"chunk_key": "5a0cf7d31a24e055a3a37ff0d5aa5a6b5057d3132e667938d12c517d90dcb231", "chunk_index": 9, "heading": "Kopie der bereits verarbeiteten Datei erstellen", "text": "## 4. Duplikattest\n\n```bash\n# Kopie der bereits verarbeiteten Datei erstellen\ncp /opt/struktur/ingestion/email/processed/email.eml \\\n /opt/struktur/ingestion/email/inbox/email-dup.eml\n\npython3 /opt/struktur/ingestion/ingest_email.py \\\n /opt/struktur/ingestion/email/inbox/email-dup.eml", "text_hash": "45efa1310a18aaeadd56abe7cc5c80df446d7826167fac2e9a139a023816da94"}, {"chunk_key": "2f230ce2a8d1df3d452300cea533928c11ca0d16f2eb01f225da29baae05183a", "chunk_index": 10, "heading": "Erwartetes Ergebnis:", "text": "pt/struktur/ingestion/email/inbox/email-dup.eml\n\npython3 /opt/struktur/ingestion/ingest_email.py \\\n /opt/struktur/ingestion/email/inbox/email-dup.eml\n# Erwartetes Ergebnis:", "text_hash": "452c61a5c8f32ac7e5fc9923e1de688b37cdc7815f4340b8fe017742f4453ffe"}, {"chunk_key": "541aa0833f9eafdc42e57da1cb6f8cf0945a43d5b3e10fa56e289e4d39f764e1", "chunk_index": 11, "heading": "[DUPLICATE] duplicate_check Bereits verarbeitet — Pipeline gestoppt", "text": "# Erwartetes Ergebnis:\n# [DUPLICATE] duplicate_check Bereits verarbeitet — Pipeline gestoppt", "text_hash": "69eb3b939786b7951169b3484e8b13751437d630a36678529e69e1ef492c6a55"}, {"chunk_key": "ee83a46d8378d1573a58d1f82c0bc3a271564bacf9a703ec919770f5948f2000", "chunk_index": 12, "heading": "status: \"duplicate\"", "text": "# [DUPLICATE] duplicate_check Bereits verarbeitet — Pipeline gestoppt\n# status: \"duplicate\"\n```\n\n---", "text_hash": "292be42301a252a4c6882b55fdf9157363b13623f2a414ba2eee27d1e0d40f26"}, {"chunk_key": "7321c29a1c7668cb2498c877854b5b81933649c0e836603efbfeaf0866516fb7", "chunk_index": 13, "heading": "5. Was bei failed/ pruefen", "text": "# status: \"duplicate\"\n```\n\n---\n## 5. Was bei failed/ pruefen\n\n```bash", "text_hash": "013eff0a3e0ecd5bcbf535479038e2fd6ef1c9dc6810f1526fa6ebc8ac9e20d1"}, {"chunk_key": "33f88d05a95f8339b98a8f80cdf4641726646d2de64b705dc75647e43850c134", "chunk_index": 14, "heading": "Dateien in failed/ auflisten", "text": "## 5. Was bei failed/ pruefen\n\n```bash\n# Dateien in failed/ auflisten\nls /opt/struktur/ingestion/email/failed/", "text_hash": "46b8a9f09e717adc7aef759dccbd70b9e79ee44b9c3ffa46d7329ee0e76984f7"}, {"chunk_key": "f5a9fb576df2bcceef8c9f43d0114695234704fe07ef7a2dbe1f24a193465f78", "chunk_index": 15, "heading": "Fehlerprotokoll lesen", "text": "# Dateien in failed/ auflisten\nls /opt/struktur/ingestion/email/failed/\n# Fehlerprotokoll lesen\ncat /opt/struktur/ingestion/email/failed/SHA256_error.json\n```\n\nHaeufige Ursachen:\n- .eml nicht les- oder dekodierbar: body leer, Fallback auf Subject\n- Gateway-Timeout: Retrieval schlaegt fehl, Pipeline laeuft trotzdem weiter\n- Review-Queue-Verzeichnis fehlt (sollte nicht passieren)\n\nBei unerklärlichem Fehler:\n```bash\ntail -30 /opt/struktur/ingestion/email/ingestion_audit.jsonl\n```\n\n---", "text_hash": "e98ba1127d2bf5c8f7805ef1bda55ab613794edb395f31e979cfcea645f110aa"}, {"chunk_key": "ec893d1be1fff15d18bc33ecf798f1281268e18bf935d23a9c0880c29f7b1e29", "chunk_index": 16, "heading": "Verzeichnisstruktur", "text": "e-Verzeichnis fehlt (sollte nicht passieren)\n\nBei unerklärlichem Fehler:\n```bash\ntail -30 /opt/struktur/ingestion/email/ingestion_audit.jsonl\n```\n\n---\n## Verzeichnisstruktur\n\n```\n/opt/struktur/ingestion/email/\n├── inbox/ <-- hier .eml ablegen (vor Ingestion)\n├── processed/ <-- erfolgreich verarbeitet\n├── failed/ <-- Fehler (inkl. _error.json)\n├── rejected/ <-- Duplikate\n├── raw/ <-- Original-Inhalte (write-once)\n├── masked/ <-- PII-bereinigter Text\n└── last_ingestion_result.json <-- Ergebnis letzter Lauf\n```\n\n---", "text_hash": "eceb8468f10ef6a12f22e60c7849485523cd48e64851ba5dc94cd5a7e08b81d6"}, {"chunk_key": "064c109116bd824bd039f93928f0d2900f8a91bf3988685967c376e444bfcd2a", "chunk_index": 17, "heading": "Alle offenen Reviews anzeigen", "text": " <-- Original-Inhalte (write-once)\n├── masked/ <-- PII-bereinigter Text\n└── last_ingestion_result.json <-- Ergebnis letzter Lauf\n```\n\n---\n## Alle offenen Reviews anzeigen\n\n```bash\npython3 /opt/struktur/ingestion/list_reviews.py\n```\n\nOder inline:\n```bash\npython3 -c \"\nimport json\nfrom pathlib import Path\nq = Path('/opt/struktur/memory/review-queue')\nrows = []\nfor f in sorted(q.glob('*.json')):\n r = json.load(open(f))\n if r['status'] == 'pending':\n conflict = '[!]' if r.get('conflict_detected') else ' '\n rows.append(f\\\"{conflict} {r['review_id']} | {r.get('source_project','?'):12} | {r['proposed_fact'][:55]}\\\")\nprint(f'{len(rows)} offene Reviews:')\nfor row in rows:\n print(' ', row)\n\"\n```\n\n---\n\n*Anleitung: /opt/struktur/hermes-carlo/ingestion/HOW_TO_MANUAL_EMAIL_INGEST.md*\n*Protokoll: /opt/struktur/hermes-carlo/ingestion/EMAIL_MANUAL_TEST_PROTOCOL.md*", "text_hash": "5662321b1967507d33a0b65a3def7ea8e39a01bdf526603b0d9265c8abc171b5"}], "elapsed_s": 0.056}