CEO-Bus Carry-Overs durchgezogen — Phase C, outbox-reader Cron, Schema-Doku
why
what
- `ceo-outbox-reader.py`: Audit-Log-Schreiben mit `if not args.dry_run` gegated. Mini-Bug eliminiert.
- jobs.json: neuer Eintrag `ceo-outbox-reader-5min` mit cron `*/5 * * * *` Europe/Berlin, `delivery.mode: "none"`. Total 74 Jobs (vorher 73).
- Phase C Reply-Routing als CLI-Tool statt Telegram-Poller: Gateway-Bot konsumiert Updates schon, ein zweiter Poller würde rennen. Separate-Bot-Lösung wäre BotFather-Setup, das User selbst machen müsste — deferred als Phase C-2.
- `briefing-reply.py`: liest `_briefings/<date>-state.json`, validiert Item-Nummer + Aktion, routet:
- `ja` → kopiert Hermesto-Datei nach `~/.openclaw/agents/doug/inbox/`, archiviert, Audit-Log
- `nein` → archiviert, Audit-only
- `claude` / `codex` → fügt Eintrag in `## Handoff: Claude / Codex`-Sektion in todo.md ein, archiviert, Audit-Log
- Idempotent über File-Existenz in Outbox-Root (geroutete Items sind weg, zweiter Versuch ergibt `skip-already-routed`).
- Batch-Modus: `--batch "1:ja,2:codex,3:nein"` für mehrere Routings auf einmal.
- `--date YYYY-MM-DD` falls auf älteres Briefing geantwortet wird.
- Tyrone-Position wird beim Handoff-Eintrag automatisch in den Task aufgenommen, damit Claude/Codex-Session sofort Kontext hat.
- `daily-decision-briefing.py`: schreibt zusätzlich `_briefings/<date>-state.json` mit Item-Nummer→Slug-Mapping, neuer `--no-telegram`-Flag um State-File zu generieren ohne erneuten Telegram-Send.
- `w3yh.xyz/AGENTS.md`: Beispiel-Block für Changelog-Header auf De-facto-Schema umgeschrieben (`agent | model | title [marker]`), Legacy-Schema als deprecated markiert aber Parser-kompatibel dokumentiert.
verification
- `briefing-reply.py --help` zeigt vollständige Usage mit allen Aktionen + Beispielen.
- `daily-decision-briefing.py --no-telegram` schreibt `_briefings/2026-05-09-state.json` mit korrekten 4 Items (n→slug→hermesto_file→topic) ohne erneuten Send.
- jobs.json validiert: 74 Jobs, davon 5 ceo-bus-Einträge enabled. `ceo-outbox-reader-5min` mit `*/5 * * * *` schedule.
- Reply-Tool nicht live an echten Items getestet — sind Dominiks Entscheidungen, sollten nicht von Claude vorweggenommen werden.
carry-overs
- Phase C-2 (Telegram-Reply-Auto-Routing über separaten Bot): braucht BotFather-Setup durch Dominik, dann zweiter Poller-Skript der `getUpdates` ruft und briefing-reply.py-Logik intern aufruft. Erst wenn CLI-Workflow zu mühsam wird.
- Briefing-Items, die nicht in das `decision-*.md`-Schema passen (z.B. heute alle 4 sind Risk-Analyses/Briefing-Antworten ohne `## Entscheidung`-Sektion), werden vom outbox-reader.py weiterhin ignoriert. Das Reply-Tool routet sie aber sauber. Schema-Klärung mit Hermesto folgt.
- Aux-Modell-Drift in Insights (`qwen3-coder-plus` aktiv obwohl Profil `qwen3.6-plus` vorsieht) bleibt offen.