# Autofill Preview/Apply/Regenerate Plan ## Ziel Einen echten, reviewbaren Suggestion-Workflow fuer Draft/Build einfuehren: Vorschlaege separat persistieren, im UI als Preview anzeigen und nur explizit anwenden (global/per-field), inklusive Regenerate (global/per-field) ohne stilles Ueberschreiben von Feldwerten. ## Leitplanken - Draft/Review/Build bleibt Kontrollpfad; kein Direkt-Build aus Suggestions. - Persistenz ist Kernbestandteil: Suggestions werden am Draft gespeichert. - Kleine, nachvollziehbare Aenderungen in bestehender Architektur (`mapping`/`draftsvc`/`handlers`/`store`). - Rule-based Suggestion-Engine bleibt (kein externer LLM-Call). ## Umsetzungs-Schritte 1. Domain + Persistenz vorbereiten - `domain.BuildDraft` um `SuggestionStateJSON` erweitern. - Neue Domain-Typen fuer Suggestionen einfuehren: - Suggestion Item (fieldPath, slot, value, reason, source, status, generatedAt, updatedAt) - Suggestion Status (`suggested`, `applied`, `dismissed` als Basis) - Suggestion State (Map nach FieldPath plus optionaler Metadatenraum fuer spaeteres Section-Scoping). - SQLite-Migration `005_*` fuer neue Spalte `suggestion_state_json` in `build_drafts`. - SQLite + Memory Store (create/update/select/scan/clone) auf neue Spalte aktualisieren. 2. Suggestion-Service in `mapping` erweitern - Bestehende Suggestion-Generierung so erweitern, dass sie auch fuer bereits befuellte Felder laufen kann (UI-Preview fuer alle Felder moeglich). - Neue Helper einbauen: - GenerateAllSuggestions (aus fields + globalData + draftContext + optional bestehendem State) - RegenerateAllSuggestions - RegenerateFieldSuggestion - ApplySuggestionToField - ApplySuggestionsToEmptyFields - Stabilitaetsregel: Apply schreibt nur bei explizitem Apply in `fieldValues`; kein implizites Ueberschreiben. 3. Draft-Service fuer Suggestion-State erweitern - `draftsvc.UpsertDraftRequest` um `SuggestionState` erweitern. - `SaveDraft` soll Suggestion-State JSON persistieren und bei fehlender Angabe bestehenden State behalten (analog DraftContext). 4. UI-Flow/Handler implementieren - Neue UI-Action fuer Autofill einbauen (z. B. `POST /builds/drafts/autofill`). - Handler verarbeitet Aktionen: - `generate_all` - `regenerate_all` - `apply_all_empty` - `regenerate_field` (mit `target_field_path`) - `apply_field` (mit `target_field_path`) - Handler liest aktuelles Form + fieldValues + suggestionState aus Request, berechnet neuen Zustand, speichert Draft (wenn Draft-ID vorhanden) und rendert dieselbe Build-Seite mit aktualisiertem Vorschauzustand. - Struktur so halten, dass spaeter `target_section` ohne Redesign ergaenzbar ist. 5. UI/Template anpassen - Feldtextareas zeigen nur echte Feldwerte, nicht mehr auto-eingefuellt aus Suggestion. - Suggestion separat unterhalb des Feldes anzeigen (Value + Reason + Status). - Controls ergaenzen: - Global: Generate all, Regenerate all, Apply all to empty - Pro Feld: Apply, Regenerate - Hidden Inputs fuer Suggestion-State + Ziel-Feldpfad/Action integrieren. 6. Tests - `internal/mapping/suggestions_test.go` erweitern: - Vorschlaege auch bei befuellten Feldern generierbar - Apply-all-empty ueberschreibt keine bestehenden Werte - Field-Regenerate aktualisiert nur Ziel-Feld - Handler-Tests in `internal/httpserver/handlers` fuer Autofill-Action-Parsing/Anwendungslogik. - Store-/Draftsvc-Tests dort erweitern, wo Suggestion-JSON durchgereicht wird. 7. Doku aktualisieren - README: neuen Autofill Preview/Apply/Regenerate Stand kurz beschreiben. - `docs/TARGET_STATE_AND_ROADMAP.md`: Status in Abschnitt LLM-Assistenz auf teilweise umgesetzt aktualisieren, ohne LLM-Fertigstellung vorzutaeuschen. ## Abgrenzung fuer diesen Schritt - Keine per-section Buttons in diesem Commit, aber Daten- und Action-Struktur vorbereitet (`target_scope`/`target_field_path`), damit per-section spaeter additiv hinzufuegbar ist. - Keine Security- oder Auth-Aenderungen. - Kein Build-Flow-Bypass.