fix: VF-Linienzug Journal-Reset, Spec-Grammatik (auf-ab/Linie-GF) und hz-Bug in HundM05

- vfl-journal-reset-lauf ans Funktionsanfang verschoben (Modus 1/2/3,
  Lisp/vf_linienzug.lsp): stand bisher nach der Startpunkt/Hoehe/AS-
  Praeambel und loeschte diese beim Reset selbst wieder - Journal begann
  mit dem ersten STEP-Marker statt PT, betraf jede Kette.
- Spec-Grammatik erweitert (Lisp/vf_spec.lsp, lib/vf_linienzug_grammatik.py,
  lib/vf_spec_export.py): "auf-ab" bei bereits flach ankommender Kette
  (Richtungswahl statt Zielhoehe) und neue Linie-GF-Fragereihenfolge
  (Kettenende direkt nach laenge_modus, inkl. vorgezogenem ES). Tests in
  tests/test_vf_spec.lsp/.py angepasst.
- lib/vf_linienzug_grammatik.py: _linie("kettenende_ziel") erwartete
  faelschlich ein hz-REAL nach der Distanz - der reale Bauablauf
  (vfl-body-abschluss) leitet die Richtung dort aus dem Frame ab und
  fragt sie nie. Fuehrte zu einem Token-Desync beim Dekodieren echter
  Kettenende-Journale.
- tests/testdata/hundm05.json (VF_hundm05_LZ_01): 5 ueberfluessige
  hz-Felder entfernt. vsp-linie injiziert bei JEDEM vorhandenen hz-Feld
  einen Richtungs-Token, unabhaengig vom tatsaechlichen Bauablauf - die
  Felder desyncten den Replay und liessen die Kette stumm mit der
  falschen (verkuerzten) Geometrie fertig bauen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Samer Ayadi
2026-09-15 15:13:07 +02:00
co-authored by Claude Sonnet 5
parent 6f12cab86f
commit 4a057862a8
7 changed files with 402 additions and 119 deletions
+11 -9
View File
@@ -139,10 +139,11 @@
(append (tsp-pre-mit-as)
(list (cons "STEP" "Linie-GF") (cons "STR" "1")
(cons "STR" "1") ; laenge_modus: endpunkt
(cons "STR" "1") ; Kettenende: ja mit ES
(cons "STR" "90") (cons "STR" "2") ; ES-Winkel/-Seite (vorgezogen)
(cons "DL" 5500.0) (cons "REAL" 0.0)
(cons "STR" "2") (cons "STR" "2") ; Separator vor / nach
(cons "STR" "2") (cons "REAL" 3.0) (cons "STR" "1")
(cons "STEP" "ES") (cons "STR" "90") (cons "STR" "2")))
(cons "STR" "2") (cons "REAL" 3.0)))
(vsp-journal spec))
;; --- Linie-GF, Zielhoehe zuerst (laenge_modus "hoehe") ---
@@ -161,10 +162,10 @@
(append (tsp-pre-mit-as)
(list (cons "STEP" "Linie-GF") (cons "STR" "1")
(cons "STR" "2") ; laenge_modus: hoehe
(cons "STR" "3") ; Kettenende: nein
(cons "REAL" 0.0) ; reine Richtungswahl, kein DL
(cons "STR" "1") (cons "STR" "2") ; Separator vor(ja)/nach(nein)
(cons "REAL" 1800.0) (cons "REAL" 3.0)
(cons "STR" "3")))
(cons "REAL" 1800.0) (cons "REAL" 3.0)))
(vsp-journal spec))
;; --- Linie-GF, Sonderfall Steigend, Endpunkt-Unterwahl ---
@@ -178,10 +179,10 @@
(append (tsp-pre-mit-as)
(list (cons "STEP" "Linie-GF") (cons "STR" "1")
(cons "STR" "3") ; laenge_modus: steigend
(cons "STR" "3") ; Kettenende: nein
(cons "STR" "1") ; steigend_modus: endpunkt
(cons "DL" 800.0) (cons "REAL" 0.0)
(cons "REAL" 2.0)
(cons "STR" "3")))
(cons "REAL" 2.0)))
(vsp-journal spec))
;; --- Linie-GF, Sonderfall Steigend, Zielhoehe-Unterwahl ---
@@ -197,10 +198,10 @@
(append (tsp-pre-mit-as)
(list (cons "STEP" "Linie-GF") (cons "STR" "1")
(cons "STR" "3") ; laenge_modus: steigend
(cons "STR" "3") ; Kettenende: nein
(cons "STR" "2") ; steigend_modus: hoehe
(cons "REAL" 0.0) ; reine Richtungswahl, kein DL
(cons "REAL" 1810.0) (cons "REAL" 1.5)
(cons "STR" "3")))
(cons "REAL" 1810.0) (cons "REAL" 1.5)))
(vsp-journal spec))
;; --- Horizontal-VF: horizontaler Erstkoerper ---
@@ -263,9 +264,10 @@
(append (tsp-pre-mit-as)
(list (cons "STEP" "Linie-GF") (cons "STR" "1")
(cons "STR" "1") ; laenge_modus: endpunkt (Default)
(cons "STR" "3") ; Kettenende: nein
(cons "DL" 3000.0) (cons "REAL" 180.0)
(cons "STR" "2") (cons "STR" "2") ; Separator vor/nach (Default: nein)
(cons "STR" "1") (cons "REAL" 2500.0) (cons "STR" "3")
(cons "STR" "1") (cons "REAL" 2500.0)
(cons "STEP" "GF-Bogen") (cons "STR" "1")
(cons "INT" 60) (cons "STR" "2")))
(vsp-journal spec))