51 lines
6.1 KiB
Markdown
51 lines
6.1 KiB
Markdown
# SDD ledger — plan: .scratch/talk-2-0/plan.md
|
||||
|
|
|
|||
|
|
Repo: ~/p/talk, Branch feat/v1, Start-BASE: (initial commit auf main)
|
|||
|
|
Model-Politik: alle Subagents auf zai-coding-plan/glm-5.3#max (Nutzer-Vorgabe).
|
|||
|
|
|
|||
|
|
## Pre-Flight Scan (Tabelle)
|
|||
|
|
|
|||
|
|
| Paar/Task | Befund | Ruling |
|
|||
|
|
|---|---|---|
|
|||
|
|
| T01 ↔ T02–T11 | T01 erzeugt Modul-Layout, das alle konsumieren | Kein Konflikt; T01 zuerst |
|
|||
|
|
| T02 ↔ T03 | T02 definiert Provider-Interface, T03 erweitert Implementierungen | Sequenziell (Kante gesetzt) — Interface-Signatur in T02 ist Vertrag |
|
|||
|
|
| T04 ↔ T05 | beide berühren internal/queue | Sequenziell; T04 baut Struktur mit Rate-Limit-Platzhalter, T05 verdrahtet |
|
|||
|
|
| T04 ↔ T06 | gleiche HTTP-Oberfläche (/speak) | Sequenziell; T06 erweitert Router, rewrites nicht |
|
|||
|
|
| T07 ↔ T04 | wrap nutzt enqueue-Pfad | Sequenziell; kein Konflikt |
|
|||
|
|
| T08 ↔ T09 | teilen cmd/talk-Dispatch; T09 darf plain-Pfade nicht verändern | Im Brief verankert (TTY-Weiche in derselben Command-Funktion) |
|
|||
|
|
| T11 oto-Cross-Compile | Risiko: CGO-Abhängigkeit bricht statische Targets | Plan verankert Ausweg: build-tag-Plattform-Fallback-Player; Report-Pflicht. Load-bearing für Release |
|
|||
|
|
| T12 greift in AGENTS-Repo | Side effect außerhalb des Worktrees | Nutzer hat Redirect-Stubs in Grilling R4/Q2 explizit freigegeben → dispatch-fähig; nur Branch chore/talk2-migration, kein Push, keine main-Commits |
|
|||
|
|
| T13 talk.sh-Löschung | destruktiv + Key noch nicht rotiert | Parked bis Nutzer Rotation bestätigt. Kein Dispatch |
|
|||
|
|
| T02 espeak-Verfügbarkeit | Dev-Host braucht espeak für OS-TTS-Demo | Faktencheck läuft; falls fehlend: Demo über edge/osbuiltin-Fallback dokumentieren, espeak-Installation bleibt Nutzer-Entscheid |
|
|||
|
|
|
|||
|
|
Keine plan-mandierten Rubrik-Verstöße gefunden (keine assert-losen Tests, keine Duplikations-Vorgaben).
|
|||
|
|
|
|||
|
|
## Verlauf
|
|||
|
|
|
|||
|
|
(befüllt im Lauf)
|
|||
|
|
Task 1: complete (commits c8f3902..fa4f193, review clean; Approved, 0 Critical/Important)
|
|||
|
|
Task 1: minor (deferred): -h-Zweig ungetestet; Version-Test mutiert Package-Var; README-.scratch-Links beim Push prüfen; help-Pseudocommand als additive Surface akzeptiert; "[Flags]"-Kosmetik bei flaglosen Befehlen
|
|||
|
|
Task 1: ⚠️ CI-Runner-Validierung → löst sich beim ersten Push (Gitea-Runner führt Workflow aus)
|
|||
|
|
Task 2: fix round 1/5 (1 Important + 1 Minor addressed, 0 open; commits 8306c6b..ae9f3b6)
|
|||
|
|
Task 2: complete (commits fa4f193..ae9f3b6, review clean nach Fix)
|
|||
|
|
Task 2: minor (deferred): oto-Context-Fehler dauerhaft gecached (Task-4-Thema); WAV-chunk int-Konversion 32-bit-theoretisch; bare talk am Terminal ungetestet
|
|||
|
|
Task 2: Interface-Notiz für Task 3: NewSink(name string, log io.Writer); DirectSpeaker-Erweiterung + ErrNoByteOutput als letzte Kettenstufe berücksichtigen; oto v3.5.0 + BurntSushi/toml v1.6.0 gepinnt; Cross-Compile nur mit CGO_ENABLED=0 (Release-Task merken)
|
|||
|
|
Env-Fakt (Nutzer, 2026-10-18): Windows-Test-VM 192.168.122.115 via WinRM erreichbar (Zugangsdaten vom Nutzer im Chat, bewusst NICHT in Dateien). Ruling: Task 11 erhält echte Windows-Laufzeit-Verifikation (SAPI, Toast, Binary-Smoke) statt nur Cross-Compile; Task 8 doctor darf die VM opportunistisch nutzen. WinRM-Zugriff via ansible/pywinrm zum Zeitpunkt der Nutzung prüfen.
|
|||
|
|
Task 3: implementiert (commits 7a843ae..8351d40), Review ausstehend
|
|||
|
|
Task 3: fix round 1/5 (1 Important addressed, 0 open; commits 8351d40..3b44605)
|
|||
|
|
Task 3: complete (commits ae9f3b6..3b44605, review clean nach Fix)
|
|||
|
|
Task 3: Ruling: Real-Key-Abnahme (plan-mandiert) auf Nutzer-Checkpoint NACH ElevenLabs-Key-Rotation verschoben — Keys nachweislich nicht in Env; Ersatzbeweise (wörtliche Contract-Fakes, realer Edge-Lauf mit 17 kB Audio) stark; natürlicher Nachtest via T8 test/doctor. Kostet falls falsch: ein realer API-Vertrag könnte abweichen — Risiko eingegrenzt.
|
|||
|
|
Task 3: minor (deferred): parseInterspersed bricht --Shielding; io.ReadAll unbegrenzt; unbekannte Config-Sections ohne Warnung; edgeClockSkew package-global; Kommentar-Typos
|
|||
|
|
Task 4-Kontext: Chain (Speak/Synthesize/SpeakDirect, walk einmalig), Player-Interface strukturell == audio.Sink, injizierbar Getenv/Log/Player — Daemon MUSS Chain unverändert wiederverwenden
|
|||
|
|
Task 4: complete (commits 3b44605..dc94f45, review clean; Approved, 0 Critical/Important)
|
|||
|
|
Task 4: minor (deferred): Stale-Lock-Remove-Race (rename-before-remove/PID-Check); waitForItem ohne Timeout; Lost-202-Doppelansage (Idempotien-Key später); setMute lumped errors; Timing-Margins CI-Flake-Risiko; Port-in-use-Pfad ungetestet
|
|||
|
|
Task 4-Kontext für Task 5: RateLimiter-Struktur in internal/queue/rate.go wartet auf Verdrahtung (Seam dokumentiert); /status-Felder erweiterbar; queue rank/loop unverändert lassen
|
|||
|
|
Task 5: complete (commits dc94f45..24ceff3, review clean; Approved, 0 Critical/Important)
|
|||
|
|
Task 5: minor (deferred): quiet_mode TOML-Validierung fehlt (env hat sie); Worker-zeitige Verwurf/toast-Zweige ungetestet; TestRuhezeitToast schwache Log-Assertion ("ersetzt" statt "toast"); Timing-Margins CI-Flake-Risiko; Degraded respektiert nur Mute (akzeptiert, dokumentiert)
|
|||
|
|
Task 6-Kontext: api/server.go Router + types.go StatusResponse (additive Felder via omitempty); Gesetz-Präzedenz mute > now > quiet > rate in rate.go decide(); Prozess-Test-Harness test/ mit Fake-Provider
|
|||
|
|
Task 6: complete (commits 24ceff3..30bd535, review clean; Approved, 0 Critical/Important; nach Resume nach externer Unterbrechung)
|
|||
|
|
Task 6: minor (deferred): Preflight prüft ACRM nicht; Allow-Header-Inkonsistenz GET /mcp; Origin-Syntax-Validierung; MaxBody-Fehlercode -32700; voice im Tool-Schema nicht beworben
|
|||
|
|
Task 6-Kontext: admitSpeak = gemeinsame Aufnahme (Validierung → Mute → Enqueue); MCP + /speak strukturell paritätisch; Remote origin gesetzt (git@code.m3ta.dev) — PUSH BLOCKIERT bis Nutzer ssh-add ~/.ssh/gitea ODER Token; Repo via HTTPS öffentlich lesbar
|
|||
|
|
Task 6: Env-Fakt: Remote https://code.m3ta.dev/m3tam3re/talk vom Nutzer angelegt
|
|||
|
|
Task 7: implementiert (commits a3424c3..acfba19, 5 Conventional) — Dispatch extern unterbrochen NACH Commits, VOR Report/Return; Report-Datei fehlt. Review nachträglich angestoßen (ohne Implementer-Report, Diff-vs-Brief).
|
|||
|
|
Task 7: Handoff-Snapshot für Gitea-Push erstellt (HANDOFF.md + force-add dieses Workspaces)
|