# ACTIVE TASK — Session dcecb889 (25.07.2026, 21:47–22:2x CEST)

## Was diese Session gemacht hat: Wrapper-Prompt-Zustellung gefixt (Kais-Auftrag TG 9214)

### Ausgangslage
- Vorsession-Neustart auf Opus 5 lief 14:48 UTC an. **Die Session arbeitete 5 h nicht**: Der Startprompt stand ungesendet im Eingabefeld, `aria.log` meldete trotzdem „Startup-Prompt gesendet" (Schein-Erfolg). Erst Kais' „Läuft es?" (TG 9212, 19:47 UTC) weckte die Session.
- Selbstcheck Opus 5 **bestanden**: Modell `claude-opus-5`, CLI `2.1.220` aus `~/.local/bin/claude`, `/status` im Testlauf zeigt wörtlich „Opus 5 with xhigh effort · Claude Max" und „thinking with xhigh effort". Die tmux-Statusleiste zeigt nur „⚡ high" — reine Anzeige, Effort ist real xhigh.

### Fix in `/home/aria/scripts/wrapper.sh` (Backup: `wrapper.sh.bak.20260725-promptfix`)
1. Text und Enter werden **getrennt** gesendet (`send-keys -l "$TEXT"`, 2 s, dann `Enter`) — Text+Enter in einem Aufruf wertet die TUI als Paste, das Enter landet im Buffer.
2. **Zustellung wird verifiziert**: letzte `❯`-Zeile im Pane darf den Prompt-Anfang nicht mehr enthalten, doppelt geprüft, bis zu 5 Enter-Versuche. Log sagt erst dann „zugestellt und verifiziert".
3. Mehrzeiliger Kontext-Prompt geht über **Datei** `/home/aria/logs/startup-prompt.md` (Newlines in `send-keys` sind je ein Enter → der Prompt wäre zerstückelt abgeschickt worden — latenter Bug, war nie sichtbar, weil der Frisch-Start-Prompt einzeilig ist).
4. Fehlschlag **pingt Kais per Telegram** (Bot-API direkt). Der Silence-Detector deckt diesen Fall NICHT ab: er meldet nur unbeantwortete Inbounds, nicht stilles Idle.
5. `ARIA_WRAPPER_TEST=1` startet eine isolierte Test-Session (eigener Name, kein `--channels`, kein `pkill`, eigenes Log `aria-wrapper-test.log`, `ARIA_HOOK_TEST=1`); `ARIA_WRAPPER_FAKE_CONTEXT` macht den Kontext-Zweig testbar.

### Verifikation (alles selbst gelaufen, nicht behauptet)
- Testlauf 1 deckte einen **Fehler in meiner eigenen Prüf-Logik** auf: Claude Code rendert den abgeschickten Prompt im Verlauf ebenfalls mit `❯` → grep über alle `❯`-Zeilen meldete fälschlich „hängt". Fix: nur die **letzte** `❯`-Zeile zählt.
- Testlauf 2 (Frisch-Start-Zweig): `DELIVERED=1`, Versuch 1, Pane zeigt Prompt im Verlauf + `● OK`.
- Testlauf 3 (Kontext-Zweig via FAKE_CONTEXT): Datei 369 Bytes, einzeiliger Prompt, `DELIVERED=1`, Test-Claude liest die Datei.
- **Mutations-Probe bestanden**: Text ohne Enter getippt → Prüfung meldet „hängt"; nach Enter → „sauber". Die Prüfung sagt also nicht blind grün.

### Zwischenfall (ehrlich, an Kais gemeldet TG 9216)
Testlauf 1 startete einen zweiten Claude **mit** Plugins → dessen Telegram-MCP kollidierte mit dem Poller → **Telegram-Kanal der Hauptsession starb** (kein `bun`-Prozess mehr, MCP-Tools weg). Ab da lief die Kommunikation über die Bot-API per curl. Lehre: Test-Claude immer mit `--strict-mcp-config --mcp-config <leer>` starten (in den Testläufen 2+3 so gemacht, kein weiterer Schaden).
Zweite Lehre: `pkill -f "<muster>"` trifft die eigene Bash-Kommandozeile — hat meine eigene Shell gekillt (Exit 144). Muster nie so wählen, dass es im eigenen Kommando steht.

### Nebenbefund (nicht gefixt, Kais-Entscheid)
`context-restore.py 3` liefert **leer** (1 Byte) — jede Session startet faktisch ohne Chat-Kontext, der Kontext-Zweig ist toter Code. Erklärt „Kein Chat-Verlauf verfügbar" im Hook-Snapshot. Kandidat für ein KAR, nicht in diesem Auftrag enthalten.

## Status beim Übergang
- Wrapper-Fix ist **live** (greift ab diesem Neustart), Syntax geprüft, 3 Testläufe grün.
- Neustart wurde von MIR ausgelöst (tmux-Session gekillt → systemd `Restart=always`, RestartSec=30), um den toten Telegram-Kanal wiederherzustellen. Kais war vorab informiert.
- **Erste Aufgabe der neuen Session:** kurz bei Kais melden, dass der Kanal wieder steht (er hat auf die Restart-Ankündigung ggf. schon geantwortet — Nachrichten aus der toten Phase sind VERLOREN, danach fragen).

## Offen (unverändert aus Vorsession, wartet auf Kais)
1. Go für Abschlussrunde **KAR-989 + 990 + 992** (Empfehlung: ~1 Session, etablierter Workflow Builder→Review→Fix→Kurzreview→PR→CI→Final-Ist-Check→Squash-Merge→Deploy-SHA→TG+Linear)
2. **PAT-Rotation-Go** (Klartext-PAT in `.git/config` von `~/work/kadi-v2`) — nichts ohne Go rotieren
3. E2E-Test-DB-Grundsatz · roving-tabindex-Produktentscheid (KAR-988) · Kais' Handy-Eigentest hat VORRANG
4. Programm-Stand: main `fc3e1b8`, P8.2 a–d live, 21 PRs seit 22.07., Vitest 6168 + 24 CT
5. settings.json-Deny-Regel `Write(/.env.*)` → laut CLI-Warnung wirkungslos, `Edit(/.env.*)` nötig (kleiner Sicherheitspunkt, offen)
