[FEAT] VF-Linienzug ohne GUI/Konsole baubar (Stufe 0) + hundm05-Testfall
Ziel: eine VF_n-Kette soll aus einem Stapel Eingabedaten gebaut werden koennen - ohne Dialog, ohne Konsolenfrage. Fahrplan und Begruendungen in doc/TODO-plan-vf-interactive.md. Alle Aenderungen sind No-Ops, solange *ssg-gui-aus* und *vfl-headless* nil sind. Produktion (Lisp/vf_linienzug.lsp, Lisp/vf_core.lsp): - vfl-journal-reset im Dispatcher VOR die Modus-cond gezogen. Bisher nur im Modus-1-Zweig: ein frischer Modus-2-Lauf erbte das Journal des Vorlaufs und schrieb es in die XDATA, ein spaeterer Doppelklick spielte fremde Eingaben vor. - Lokale Variable "member" in vf-linienzug-modus2 umbenannt. Sie verdeckte im selben Scope das Builtin member, das weiter unten gebraucht wird - jedes Kletterer-Segment waere in "bad function" gelaufen. - Neu vfl-meldung: sammelt den Text nach *vfl-meldungen* + dbgmsg und zeigt ihn nur bei erlaubter GUI modal, sonst per princ. Die 12 Bau-Pfad-alerts darauf umgestellt; ein Alert blockierte sonst jeden Batch-Lauf, und sein Text ist die einzige Auskunft, WELCHE Sektion abgewiesen wurde. Die reinen Interaktiv-Alerts (fehlendes DCL, "nicht editierbar", "kein Journal") bleiben alert. - Neu *vfl-headless* (+ vfl-headless-p/-abbruch/-notausgang/-ort, Diagnose *vfl-headless-fehler*, optionaler Antwort-Hook *vfl-headless-antwort-fn*): eine erschoepfte Replay-Queue ist damit ein harter Abbruch MIT Fundstelle (Art der Eingabe, Glied- und Eingabe-Nummer) statt eines stillen Rueckfalls auf Live-Eingabe. Eingebaut in vfl-in-value, vfl-in-value-p, vfl-in-selection und vfl-in-abstand. - vfl-journal-reset loescht Meldungen und Diagnose mit (gehoeren zum Lauf); vfl-view-refresh ueberspringt headless _PLAN/_ZOOM. Testfall HundM05 (5 echte Ketten aus data/polylines.dxf): - tests/testdata/hundm05.json neu erzeugt aus den XDATA-Journalen der VF_n-Bloecke (lib/vf_journal_export.py) - flach, weil ssg-load-json zeilenweise liest. Die drei kopierten Ketten bekommen ihren echten Einfuegepunkt, nicht das veraltete HOEHE_VON-Attribut. - tests/test_hundm05.lsp arbeitet jetzt per Journal-Replay statt mit Eingabe-Mocks: ein echtes Journal fuehrt die geerbte Fahrtrichtung nicht mit (vfl-in-abstand journalisiert hz nur beim ersten Segment), ein Mock kann sie also nicht kennen. Schaltet *vfl-headless* ein und schreibt prompts, headless_fehler und meldungen ins Ergebnis-JSON. - Kettenschleife fangt je Kette: ein Fehler NACH dem Bau nimmt nicht mehr die restlichen Ketten mit. - entprev gibt es in AutoLISP nicht (nur entnext/entlast) - die Suche nach dem fertigen Block laeuft vorwaerts ab dem Zeichnungsstand vor dem Bau. Dieselbe Falle in tests/test_mubea.lsp mitbehoben; sie schlug dort nie zu, weil entlast immer sofort traf. Absicherung ohne CAD: - tests/test_vf_headless_statisch.py: eingechecktes Inventar aller alert/get*/ssget/new_dialog-Fundstellen je Funktion (ein neues getreal in einer Bau-Funktion faellt auf, auch wenn sein Zweig im Test nie erreicht wird), Praesenz des Riegels in allen vier Wrappern, Diagnose-Reset und die Reset-Reihenfolge im Dispatcher. Dazu ein Waechter gegen erfundene AutoLISP-Funktionen (entprev u.a.) - diese Fehlerklasse kostet sonst jedes Mal einen CAD-Lauf. - tests/test_hundm05.py prueft zusaetzlich prompts == 0, keine Headless-Abbrueche und keine Bau-Meldungen. tests/alltests.json: hundm05-Zeile laedt VarioFoerderer (nicht KreiselInsert) und bleibt bis zu einem gruenen CAD-Lauf abgeschaltet. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -445,6 +445,58 @@ Optionen, bei "Eigene Werte" zusaetzlich L_GF1 als Zahl) -> Bestaetigung
|
||||
|
||||
---
|
||||
|
||||
## 8b. Nicht-interaktiver Betrieb (Headless)
|
||||
|
||||
Fuer Tests, Batch-Nachbau und den geplanten Spec-Bau (Fahrplan:
|
||||
`doc/TODO-plan-vf-interactive.md`) muss eine Kette **ohne** Dialog und ohne
|
||||
Konsolenfrage laufen. Drei Schalter greifen dabei ineinander:
|
||||
|
||||
| Schalter | Datei | Wirkung |
|
||||
|---|---|---|
|
||||
| `*ssg-gui-aus*` (`ssg-gui-aus`/`-an`/`ssg-gui-p`) | `ssg_core.lsp` | DCL-/Wizard-Dialoge aus, Module fallen auf ihren Konsolen-/`get*`-Pfad zurueck |
|
||||
| `*vfl-wizard-mode*` (`VF_WIZARD_AUS`) | `vf_linienzug.lsp` | Linienzug-Assistent aus (die `vflw-*`-Dialoge) |
|
||||
| `*vfl-headless*` (`vfl-headless-p`) | `vf_linienzug.lsp` | **keine Live-Eingabe mehr**: eine erschoepfte Replay-Queue wird zum harten Abbruch statt zum stillen Rueckfall auf `getpoint`/`getreal` |
|
||||
|
||||
Der dritte Schalter ist der entscheidende. Ein Replay
|
||||
(`vfl-journal-replay-start`) liefert die Werte nur so lange, wie die Queue
|
||||
reicht; danach fragten die `vfl-in-*`-Wrapper bisher **stillschweigend** live
|
||||
weiter - im Batch ein Haenger ohne Hinweis, wo der Ablauf von den Daten
|
||||
abgewichen ist. Mit `*vfl-headless*` = T bricht statt dessen
|
||||
`vfl-headless-abbruch` ab und legt in `*vfl-headless-fehler*` die Fundstelle
|
||||
ab (Art der Eingabe, Glied-Nummer, Eingabe-Nummer). Eingebaut ist der Riegel
|
||||
an den vier Eingabe-Engstellen: `vfl-in-value`, `vfl-in-value-p` (deckt
|
||||
`vfl-in-point`/`-string`/`-real`/`-int` und alle `vfl-menu*` ab),
|
||||
`vfl-in-selection` (Objektauswahl: auch eine unvollstaendige Handle-Aufloesung
|
||||
bricht ab - eine Teilauswahl wuerde die Fragenzahl des Modus-2-Ablaufs still
|
||||
verschieben) und `vfl-in-abstand` (eigene Zwei-Eintrags-Logik: DL, und beim
|
||||
ersten Segment die Richtung).
|
||||
|
||||
Optional darf `*vfl-headless-antwort-fn*` eine Rueckfrage doch noch
|
||||
beantworten (`(fn was ort)` -> Wert). Gedacht fuer die eine nicht
|
||||
vorhersagbare Frage: `vfl-waehle-winkel` fragt nur dann, wenn mehrere
|
||||
Winkel-Kandidaten geometrisch gueltig sind, was von der real gemessenen
|
||||
Restlaenge abhaengt. Jede so gelieferte Antwort wird protokolliert, damit ein
|
||||
solcher Lauf nicht als "sauber" durchgeht.
|
||||
|
||||
**Meldungen statt Alerts**: die Bau-Pfade melden abgewiesene Sektionen jetzt
|
||||
ueber `vfl-meldung` (Text nach `*vfl-meldungen*` + `dbgmsg`, dann `alert` nur
|
||||
bei erlaubter GUI, sonst `princ`). Interaktiv sieht das unveraendert aus; im
|
||||
Batch blockiert nichts mehr und der Text - die einzige Auskunft, *welche*
|
||||
Sektion warum nicht baubar war - bleibt erhalten. Die reinen Interaktiv-Alerts
|
||||
(fehlende DCL-Datei, "Glied nicht editierbar", "kein Journal") sind bewusst
|
||||
`alert` geblieben. `vfl-journal-reset` loescht `*vfl-meldungen*` und
|
||||
`*vfl-headless-fehler*` mit: beides gehoert zum einzelnen Lauf.
|
||||
|
||||
Beispiel: `tests/test_hundm05.lsp` (5 echte Ketten aus `data/polylines.dxf`)
|
||||
setzt alle drei Schalter mit Save/Restore, ersetzt `getpoint`/`getstring`/
|
||||
`getint`/`getreal`/`alert` zusaetzlich durch **zaehlende** Stubs (Netz fuer
|
||||
Prompts ausserhalb der Wrapper) und schreibt `prompts`, `headless_fehler` und
|
||||
`meldungen` in `tests/output/hundm05_results.json`. Noch nicht umgestellt:
|
||||
`vfl-konvertiere-ent` (Batch-2D/3D-Konvertierung) laeuft weiter ohne
|
||||
`*vfl-headless*` - dort ist eine Live-Rueckfrage bisher gewolltes Verhalten.
|
||||
|
||||
---
|
||||
|
||||
## 9. Wiederverwendete Bausteine
|
||||
|
||||
**Geruestoptionen** (`*ssg-geruest-optionen*` in `ssg_core.lsp`, auch bei
|
||||
|
||||
Reference in New Issue
Block a user