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).
- LLM-first Suggestion-Engine ueber den bestehenden Providerpfad; Rule-based bleibt als Fallback/Testpfad.
Umsetzungs-Schritte
- 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.
- 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.
- 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).
- 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.
- 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.
- 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.
- 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.