# 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

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.
