# TODO: Spec-Uebersetzer fuer VF-Linienzug Modus 2 und 3 **Stand:** 2026-10-26 ยท **Prioritaet:** mittel - einzige fehlende FUNKTION im Daten-Pfad (Modus-2/3-Ketten sind nur interaktiv baubar). Herausgeloester Rest von Stufe 1 aus [plan-vf-interactive.md](plan-vf-interactive.md) (dort Abschnitt 4.4, der hiermit ersetzt ist). Schwester-Auftrag: [linienzug-ohne-gui.md](linienzug-ohne-gui.md) (Stufe 2). ## Ausgangslage Der Daten-Pfad `VF_SPEC_BAU` ([vf_spec.lsp](../../Lisp/vf_spec.lsp)) kann nur Modus 1: - `vsp-journal` (vf_spec.lsp:568) kennt nur den Fragenfluss/die Menue-Codes von `vf-linienzug-modus` (z.B. `*vsp-tab-gf-laenge-modus*`, :56). - `vsp-bau-journal` (:939) ruft fest `vf-linienzug-modus` auf (:978). Modus 2 (`vf-linienzug-modus2`, Pfad + Zielhoehe, Marker `"linienzug2"`) und Modus 3 (`vf-linienzug-modus3`, Vorwaerts-Nachbau, Marker `"linienzug3"`) fragen grundlegend anders: erst Pfad-Auswahl (`vfl-in-segmente`), dann je Segment ein Klassifizierungs-Dialog (`vflw_seg_linie_m2`/`_m3`, `vflw_seg_bogen`). Dafuer gibt es weder Uebersetzer noch Bau-Aufruf. Doppelklick-Edit/Neuaufbau funktioniert fuer beide Modi bereits (`vfl-edit-ent-voll`) - es fehlt nur der Bau aus einer Spec-Datei. ## Korrektur des alten Entwurfs (Plan 4.4, Stand 2026-09-02) | alter Entwurf | heute (seit 2026-09-18) | |---|---| | Modus-2-Spec traegt `pfad-handles` (Entity-Handles, Journal-Art `OBJS`), vor dem Bau gegen die reale Zeichnung geprueft | Modus 2 UND 3 journalisieren die **Segment-Essenz** als Journal-Art `SEGS`: je Segment 9 Felder `typ hz laenge bwinkel bseite spx spy epx epy` (`vfl-segs->string`/`vfl-string->segs`, vf_linienzug.lsp). Die Kette ist selbst-enthalten, die Original-LINE/ARC werden nicht mehr gebraucht | | Modus 3 ohne Journal-XDATA, kein Doppelklick-Edit, keine 2D/3D-Konvertierung; Nachruestung zurueckgestellt | Modus 3 schreibt Marker `"linienzug3"` und ist per Doppelklick editierbar | | "Eine Gerade direkt nach einer Vario-Kurve wird nicht gefragt - der Uebersetzer leitet das ab" | gilt vermutlich weiter, am echten Journal pruefen | Folge fuer den Entwurf: Die Spec fuer Modus 2/3 traegt eine **Segmentliste** statt Objekt-Handles plus die Klassifizierung je Segment (Typ, GF-Neigung bzw. Wert, Bogen-Variante) und die Praeambel (Startpunkt, Starthoehe, AS/ES). Sie ist damit wie Modus 1 **ohne Zeichnung** pruefbar. ## Schritte | Schritt | Inhalt | Stand | |---|---|---| | 1 | Referenz-Journale erzeugen: in BricsCAD 2-3 typische Ketten je Modus (2 und 3) bauen, Zeichnung unter `tests/testdata/` ablegen. Abdecken: GF- und VF-Segmente, Bogen, AS/ES ja/nein, bei Modus 3 altes und neues AS/ES-Format | **offen** | | 2 | Python-Lesepfad: `lib/vf_journal_export.py` (+ `vf_linienzug_grammatik.py`) lernen `linienzug2`/`linienzug3` mit `SEGS` (heute: "unbekannter Code") | **offen** | | 3 | Spec-Form fuer Modus 2/3 festlegen (flaches JSON, lesbar von `ssg-load-json`, Segmente als Einzeiler) | **offen** | | 4 | Python-Rundlauf `spec_aus_journal`/`journal_aus_spec` fuer Modus 2/3 in `lib/vf_spec_export.py`, Test in `tests/test_vf_spec.py`: Journal -> Spec -> Journal tokengleich | **offen** | | 5 | LISP: `vsp-journal` je Modus (Dispatch ueber Spec-Feld `modus`), `vsp-pruefen` um Modus-2/3-Regeln erweitern | **offen** | | 6 | `vsp-bau-journal`: Bau-Funktion nach Modus waehlen (`vf-linienzug-modus2`/`-modus3`), Ergebnis-Record wie Modus 1 (`prompts` = 0, `journal_diff` leer) | **offen** | | 7 | CAD-Test analog `TEST_HUNDM05` + Eintrag in `tests/alltests.json`; file-freie Teile als `tu-*` in `tests/test_unit.lsp` | **offen** | ## Hinweise - Korrektheitskriterium Modus 3 ist "gleiches rein, gleiches raus", NICHT "trifft den Zielpunkt" - der Ist/Soll-Ende-Report weicht schon im interaktiven Bau ab. - Alte `"linienzug2"`-Bloecke mit `OBJS`-Journal (vor 2026-09-18) sind nicht mehr editierbar und taugen NICHT als Referenz. - Neue `vfl-in-*`-Wrapper mit `ssget`/`get*` im statischen Waechter `tests/test_vf_headless_statisch.py` eintragen. - Werte selbstbeschreibend in der Spec (Winkel 30/60/90, nicht Index) - siehe CLAUDE.md, Konventionen.