refactor: Segment-Antworten als Werte, Modus-Dispatch im Spec-Pfad, Python liest Modus 2/3
Drei herausgeloeste Teile aus doc/todo/spec-modus2-3.md. Der Rest (volle
Spec-Grammatik fuer Modus 2/3, Schritte 3-5 und 7) bleibt bewusst liegen:
Modus-2/3-Journale sind durch ihren SEGS-Eintrag bereits selbst-enthalten
und ohne Zeichnung abspielbar, der Mehrwert einer Spec ist dort also klein.
1. lib/vf_journal_export.py trennt nach Marker. Modus 1 laeuft wie bisher
durch die Grammatik; "linienzug2"/"linienzug3" werden als Rohtokens
ausgegeben, im Format, das tests/test_linienzug.lsp einliest. Vorher lief
die Modus-1-Grammatik auch ueber sie (der startswith-Filter laesst sie
durch) und brach mit "Token 6: STEP erwartet" ab. Gegen die echte
Zeichnung geprueft: die Ausgabe ist identisch mit der bisher von Hand
erzeugten Testdatei.
2. vsp-bau-journal waehlt die Bau-Funktion jetzt anhand des Journals
(vsp-bau-fn-fuer-journal): kein SEGS = Modus 1, SEGS + Formatmarke
"m2v2" = Modus 2, SEGS ohne = Modus 3. Bewusst abgeleitet statt als
zusaetzliches Argument - die Funktion hat zwei Aufrufer, und AutoLISP
verlangt exakte Argumentzahl. Die Ableitung kann der Datenlage auch nicht
widersprechen, weil sie genau das Journal liest, das abgespielt wird.
3. Die Segment-Klassifizierung in Modus 2 journalisiert WERTE statt
Menue-Ziffern: Geradentyp "gf"/"vf", Bogentyp "gf-bogen"/"vario-kurve",
Variante "aussen"/"innen". Konsole UND Wizard-Dialoge legen dieselben
Werte ab. Damit deutet ein Umsortieren der Optionen keine gespeicherte
Kette mehr um - dasselbe Risiko, das beim Lauf-Anfang (833a4b6) real
wurde. Bestandsketten laufen ueber Alt-Tabellen weiter, ein unbekannter
Wert bricht mit Segmentnummer ab statt zu raten.
Statt dreier fast gleicher Normalisierer gibt es einen gemeinsamen
vfl-wert-norm; vfl-m2-anfang-norm delegiert jetzt dorthin.
Nebeneffekt: Bogentyp und Variante benutzten BEIDE "1"/"2" und waren im
Journal nicht zu unterscheiden - deshalb brauchte es die Formatmarke zur
Erkennung von Alt-Journalen. Mit eigenen Wertevorraeten ist das erledigt;
ein Test prueft, dass die Mengen disjunkt bleiben.
Geprueft: TEST_UNIT 883/883 (17 neue Tests). TEST_LINIENZUG_MODUS2 beide
Varianten OK - und zwar mit den AUFGEZEICHNETEN Journalen, die bei den
Segment-Fragen noch die alten Ziffern tragen. Genau darum wurden sie nicht
auf die neuen Werte umgeschrieben: sie sind der Nachweis der
Abwaertskompatibilitaet.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+24
-1
@@ -936,6 +936,29 @@
|
||||
;; sid = Kennung im Record, dim = "2D"/"3D" oder nil (Sitzung),
|
||||
;; fehler = Liste der Spec-Fehler (bei nil-Journal die Begruendung).
|
||||
;; Erwartet den Headless-Rahmen (vsp-headless-an) beim Aufrufer.
|
||||
;; Bau-Funktion AUS DEM JOURNAL ableiten (Rueckgabe: Funktions-Symbol).
|
||||
;; Bewusst abgeleitet statt als zusaetzliches Argument: vsp-bau-journal hat
|
||||
;; zwei Aufrufer, und AutoLISP verlangt exakte Argumentzahl - eine erweiterte
|
||||
;; Signatur muesste jeden davon nachziehen (siehe CLAUDE.md). Die Ableitung
|
||||
;; kann der Datenlage ausserdem nicht widersprechen, weil sie GENAU das
|
||||
;; Journal liest, das gleich abgespielt wird.
|
||||
;;
|
||||
;; Unterscheidung:
|
||||
;; kein SEGS -> Modus 1 (Fragenfluss, Menue-Codes)
|
||||
;; SEGS + STR "m2v2" -> Modus 2 (die Formatmarke schreibt nur
|
||||
;; vf-linienzug-modus2, vfl-m2-formatmarke)
|
||||
;; SEGS ohne "m2v2" -> Modus 3
|
||||
;; Ein Fehlgriff faellt sofort auf: der Ergebnis-Record meldet dann offene
|
||||
;; Eingaben bzw. glieder_soll <> glieder_ist.
|
||||
(defun vsp-bau-fn-fuer-journal (journal)
|
||||
(cond
|
||||
((not (vfl-journal-hat-segs-p journal)) 'vf-linienzug-modus)
|
||||
((vl-some (function (lambda (e)
|
||||
(and (equal (car e) "STR") (equal (cdr e) "m2v2"))))
|
||||
journal)
|
||||
'vf-linienzug-modus2)
|
||||
(t 'vf-linienzug-modus3)))
|
||||
|
||||
(defun vsp-bau-journal (sid journal dim fehler / rec vor-ent alt-error err
|
||||
offen hl meld ist-glieder soll-glieder diff
|
||||
ist-journal jdiff ent ed)
|
||||
@@ -975,7 +998,7 @@
|
||||
(setq alt-error *error*)
|
||||
(vfl-journal-reset)
|
||||
(vfl-journal-replay-start journal)
|
||||
(setq err (vl-catch-all-apply 'vf-linienzug-modus '()))
|
||||
(setq err (vl-catch-all-apply (vsp-bau-fn-fuer-journal journal) '()))
|
||||
(setq offen (vsp-queue-rest))
|
||||
;; Diagnose VOR dem Reset sichern (vfl-journal-reset loescht sie).
|
||||
(setq ist-journal (reverse *vfl-journal*))
|
||||
|
||||
Reference in New Issue
Block a user