Grok-vs-Qwen A/B-Test P0 vorbereitet
why
what
- A/B-Testplan und `todo.md` um Handoff-Regeln, P0/P1-Messstände und Übernahmehinweise erweitert.
- Metrik-/Handoff-Verzeichnis angelegt: `openclaw/workspace/metrics/grok-ab/`.
- Backups der relevanten Cron-/Opinion-/LLM-Dateien unter `openclaw/workspace/metrics/grok-ab/backups/20260527T194626Z/` abgelegt.
- DashScope-Inventar erzeugt: 42 aktive OpenClaw-Crons nutzen `dashscope-coding/*`; alle sehen nach Script-Runner-Jobs aus.
- `llm_client.py` um einen schmalen xAI-Pfad via `openclaw infer model run --gateway` erweitert.
- `tyrone-opinion-writer.py` und `kimi-opinion-writer.py` um `--model`, ENV-Override und `--limit` für Shadow-Smokes erweitert.
- Keine Cron-Modelle, keine Telegram-Live-Routen und kein `[private-config]` geändert.
verification
- `python3 -m py_compile` für `llm_client.py`, `tyrone-opinion-writer.py`, `kimi-opinion-writer.py`.
- Grok-Gateway-Smoke: gültiges JSON.
- `call_llm(... model="xai/grok-4.3", json_mode=True)`: gültiges JSON.
- `tyrone-opinion-writer.py --dry-run --force --limit 1 --model xai/grok-4.3`: erfolgreich, kein produktiver Write.
- `kimi-opinion-writer.py --dry-run --force --limit 1 --model xai/grok-4.3`: erfolgreich, kein produktiver Write.
nachlauf p1
- Daily-Briefing-Telegram-400 root-caused: `daily-decision-briefing.py` nutzt Telegram Legacy-Markdown, übernahm aber rohe Hermesto-Markdown-Snippets wie `**Datum:**` und `morning-sweep-*.log`; Telegram kann das als `can't parse entities` mit HTTP 400 ablehnen.
- `daily-decision-briefing.py` gehärtet: HTTPError-Body wird geloggt, und nur bei Markdown-Parse-400 wird dieselbe Nachricht automatisch ohne `parse_mode` nachgesendet.
- Verifiziert ohne Live-Send: `py_compile`, `--print` und gemockter Telegram-400-Parse-Fehler mit erfolgreichem Plaintext-Fallback. Nächster echter CEO-Briefing-Lauf muss die Zustellung noch live bestätigen.
nachlauf p2
- Drittstimmen-Testpfad festgelegt: Grok als zweite Stimme mit separatem Kimi-/Drittstimmen-Prompt. Das ist für den 6-Tage-Test nutzbar, bleibt aber für die finale Alibaba-Kündigung nur gelb, weil es keine echte Modell-Diversität ist.
- `tyrone-opinion-writer.py` und `kimi-opinion-writer.py` um optionale Shadow-Flags erweitert: `--max-age-days` und `--shadow-dir`; produktive Cron-Defaults bleiben unverändert.
- `daily-decision-briefing.py` kann Shadow-Opinion-Ordner und Header-Labels lesen (`--tyrone-opinions-dir`, `--kimi-opinions-dir`, `--tyrone-label`, `--kimi-label`).
- P2-Shadow auf 4 aktuellen CEO-Inputs: Tyrone-Prompt/Grok 4/4 ok in 74.1s, Kimi-Prompt/Grok 4/4 ok in 84.5s, Daily-Briefing-Shadow rendert 4 Items ohne Send/Snapshot.
- Maschinen-Cron-Runner isoliert getestet: temporärer Disabled-Cron mit `xai/grok-4.3`, `--tools exec`, `--no-deliver` führte nur `printf OPENCLAW_GROK_CRON_SMOKE_OK` aus; Run ok, `jobs.json` nach Cleanup byteidentisch.
- Artefakte: `metrics/grok-ab/p2-shadow-2026-05-27/`, `p2-daily-briefing-grok-shadow-2026-05-27.md`, `p2-summary-2026-05-27.md`.
nachlauf p3-minismoke
- Temporärer Grok-Cron mit Telegram-Delivery live getestet: `xai/grok-4.3`, isolierte Session, `announce` an `telegram:[redacted]`.
- Ergebnis: Run `ok`, Summary exakt `P3_GROK_TELEGRAM_OK 2026-05-27`, Telegram `deliveryStatus=delivered`, `jobs.json` nach Auto-Delete/Remove byteidentisch.
- Scope bleibt klein: Das ist nur ein Live-Smoke, noch kein vollständiges Telegram-Testfenster und kein CEO-Abendzyklus.