docs: zentrale TODO-Liste doc/todo.md, woechentliche Doku-Pruefung in CLAUDE.md

- doc/todo.md sammelt alle offenen Punkte (VF/Linienzug, Export, Geruest,
  Omniflo, ILS, Tests, spaetere Meilensteine); detaillierte Fahrplaene in
  doc/todo/*.md und cfg/sivas_merkmal_zuordnung.md nur kurz verlinkt
- CLAUDE.md: Konvention "Woechentliche Doku- und TODO-Pruefung (freitags)"
- CLAUDE.md/README.md verweisen auf doc/todo.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-26 09:29:04 +01:00
parent b4f9c43ae3
commit 4bceb49665
3 changed files with 97 additions and 2 deletions
+2 -1
View File
@@ -180,6 +180,7 @@ Werden via `bin/setenv.bat` gesetzt. Wichtigste:
- **Wiederverwendung vor Neuschaffung bei LISP-Routinen**: Neue Funktionen moeglichst als Erweiterung/Ergaenzung bestehender Funktionen anlegen. Bevor eine NEUE Bibliothek (`.lsp`-Datei) geschaffen wird, immer zuerst pruefen, ob es bereits thematisch passende Routinen gibt, in die die Funktionalitaet gehoert (z.B. Einfuege-Primitiven in `ssg_ks_insert.lsp`, Kern-Helfer in `ssg_core.lsp`, Konstanten in `vf_konstanten.lsp`). Erst wenn nichts passt, ein neues Modul. - **Wiederverwendung vor Neuschaffung bei LISP-Routinen**: Neue Funktionen moeglichst als Erweiterung/Ergaenzung bestehender Funktionen anlegen. Bevor eine NEUE Bibliothek (`.lsp`-Datei) geschaffen wird, immer zuerst pruefen, ob es bereits thematisch passende Routinen gibt, in die die Funktionalitaet gehoert (z.B. Einfuege-Primitiven in `ssg_ks_insert.lsp`, Kern-Helfer in `ssg_core.lsp`, Konstanten in `vf_konstanten.lsp`). Erst wenn nichts passt, ein neues Modul.
- **Neue LISP-Routinen nach Moeglichkeit in die LISP-Testsuite aufnehmen**: Jede neue LISP-Routine soll moeglichst einen Test bekommen. **Vorrang haben Routinen, die OHNE Zeichnung/Dateien testbar sind** (reine Berechnung, Parser, String-/Listen-Helfer, cfg-/JSON-Aufloesung) - die gehoeren als `tu-*`-Testblock in `tests/test_unit.lsp` (Befehl `TEST_UNIT`), der komplett file- und zeichnungsfrei laeuft. Zeichnungs-/geometrieabhaengige Routinen ueber ein Szenario-Modul (`tests/test_<name>.lsp` + Eintrag in `tests/alltests.json`, ausgefuehrt von `SSG_RUN_ALL_TESTS`) abdecken. Die reinen Berechnungspfade einer solchen Routine trotzdem, wo moeglich, zusaetzlich als file-freien Unit-Test herausziehen. - **Neue LISP-Routinen nach Moeglichkeit in die LISP-Testsuite aufnehmen**: Jede neue LISP-Routine soll moeglichst einen Test bekommen. **Vorrang haben Routinen, die OHNE Zeichnung/Dateien testbar sind** (reine Berechnung, Parser, String-/Listen-Helfer, cfg-/JSON-Aufloesung) - die gehoeren als `tu-*`-Testblock in `tests/test_unit.lsp` (Befehl `TEST_UNIT`), der komplett file- und zeichnungsfrei laeuft. Zeichnungs-/geometrieabhaengige Routinen ueber ein Szenario-Modul (`tests/test_<name>.lsp` + Eintrag in `tests/alltests.json`, ausgefuehrt von `SSG_RUN_ALL_TESTS`) abdecken. Die reinen Berechnungspfade einer solchen Routine trotzdem, wo moeglich, zusaetzlich als file-freien Unit-Test herausziehen.
- **Headless-Testlauf**: Die Unit-Tests laufen ohne GUI ueber `bin/run_tests.bat --lisp` - das startet BricsCAD im Batch-Modus (`/nologo /b`) mit `tests/test_unit.scr` und fuehrt `TEST_UNIT` aus. **BricsCAD steht dafuer ueber die Umgebungsvariable `BRICSCAD` zur Verfuegung** (in `bin/setenv.bat` gesetzt, auf die installierte `bricscad.exe` zeigend); `run_tests.bat` bricht mit Hinweis ab, wenn sie fehlt. Ein neuer file-freier Unit-Test ist damit auch ohne interaktive BricsCAD-Sitzung fahrbar. (Python-seitige Tests siehe `.venv` + `pytest tests/`.) - **Headless-Testlauf**: Die Unit-Tests laufen ohne GUI ueber `bin/run_tests.bat --lisp` - das startet BricsCAD im Batch-Modus (`/nologo /b`) mit `tests/test_unit.scr` und fuehrt `TEST_UNIT` aus. **BricsCAD steht dafuer ueber die Umgebungsvariable `BRICSCAD` zur Verfuegung** (in `bin/setenv.bat` gesetzt, auf die installierte `bricscad.exe` zeigend); `run_tests.bat` bricht mit Hinweis ab, wenn sie fehlt. Ein neuer file-freier Unit-Test ist damit auch ohne interaktive BricsCAD-Sitzung fahrbar. (Python-seitige Tests siehe `.venv` + `pytest tests/`.)
- **Woechentliche Doku- und TODO-Pruefung (freitags)**: Einmal pro Woche, am besten freitags in einer Sitzung mit dem Benutzer, werden `README.md`, `CLAUDE.md`, `Lisp/README.md`, `tests/README.md` und alle `doc/*.md` (inkl. `doc/plan/`, `doc/todo/`) auf Aktualitaet geprueft: stimmen Befehle, Dateien, Funktionen und Menuestruktur noch mit dem Code (`menu/SSG_LIB.mnu`, `defun c:`-Liste) ueberein? Dabei die zentrale TODO-Liste `doc/todo.md` durchgehen - Erledigtes entfernen, neu Hinzugekommenes eintragen, Fahrplaene in `doc/todo/*.md` nur loeschen, wenn sie vollstaendig erledigt sind. Ergebnis kurz mit dem Benutzer abstimmen, dann committen.
- **Regelmaessiges Tote-Code-Review**: Wiederkehrend auf tote/nicht mehr verwendete LISP-Routinen pruefen und aufraeumen - vorzugsweise zu Wochenbeginn, wenn in der betreffenden Woche ohnehin an den LISP-Routinen gearbeitet wird. - **Regelmaessiges Tote-Code-Review**: Wiederkehrend auf tote/nicht mehr verwendete LISP-Routinen pruefen und aufraeumen - vorzugsweise zu Wochenbeginn, wenn in der betreffenden Woche ohnehin an den LISP-Routinen gearbeitet wird.
- **Wiederherstellungs-/Editierdaten gehoeren in XDATA/Journal, nicht in `.dbg`**: Alles, was zum Neuaufbau/Editieren eines Blocks noetig ist (z.B. das VF-Linienzug-Eingabe-Journal `SSG_VF_EDIT`), wird als XDATA am Block gefuehrt. Die `.dbg`-Dateien (`ssg_dbg.lsp`) sind reine AUSGABE, werden von keinem Befehl gelesen und bei jedem Lauf neu angelegt - nie als Datenquelle nutzen. - **Wiederherstellungs-/Editierdaten gehoeren in XDATA/Journal, nicht in `.dbg`**: Alles, was zum Neuaufbau/Editieren eines Blocks noetig ist (z.B. das VF-Linienzug-Eingabe-Journal `SSG_VF_EDIT`), wird als XDATA am Block gefuehrt. Die `.dbg`-Dateien (`ssg_dbg.lsp`) sind reine AUSGABE, werden von keinem Befehl gelesen und bei jedem Lauf neu angelegt - nie als Datenquelle nutzen.
- **Editierbarkeit: festes Schema vs. Sektions-Ruecksprung**: Konstrukte mit FESTER Feldstruktur (feste Anzahl/Typen von Werten, z.B. AS/ES/GF-Bogen/Vario-Kurve im VF-Linienzug) ueber ein deklaratives Schema als einzeln editierbare Records fuehren (Einzel-Glied-Edit per Feld-Splice). Konstrukte mit VARIABLEM Dialog-Fluss (datenabhaengige Feldzahl, z.B. Horizontal-Koerper/Auf-Ab-Foerderer) NICHT per fragilem "n Felder abschneiden"-Splice editieren, sondern per Sektions-Ruecksprung: ab dem gewaehlten Glied zuruecksetzen und live neu aufbauen. Ein fester Splice ueber eine datenabhaengige Feldgrenze ist genau das Muster des Winkel-Index-Bugs. - **Editierbarkeit: festes Schema vs. Sektions-Ruecksprung**: Konstrukte mit FESTER Feldstruktur (feste Anzahl/Typen von Werten, z.B. AS/ES/GF-Bogen/Vario-Kurve im VF-Linienzug) ueber ein deklaratives Schema als einzeln editierbare Records fuehren (Einzel-Glied-Edit per Feld-Splice). Konstrukte mit VARIABLEM Dialog-Fluss (datenabhaengige Feldzahl, z.B. Horizontal-Koerper/Auf-Ab-Foerderer) NICHT per fragilem "n Felder abschneiden"-Splice editieren, sondern per Sektions-Ruecksprung: ab dem gewaehlten Glied zuruecksetzen und live neu aufbauen. Ein fester Splice ueber eine datenabhaengige Feldgrenze ist genau das Muster des Winkel-Index-Bugs.
@@ -230,7 +231,7 @@ Abhaengigkeiten: `ezdxf`, Standard-Library. Benoetigen Umgebungsvariablen (`DXFM
## Entwicklungsstand ## Entwicklungsstand
Siehe `doc/plan/Entwicklungsplan.md` fuer Meilensteinplanung und Aufwandsschaetzung. Siehe `doc/plan/Entwicklungsplan.md` fuer Meilensteinplanung und Aufwandsschaetzung.
Fertig (DONE, Stand 2026-10-26): ILS Kreisel, ILS Eckrad, ILS Variofoerderer (Standard/Etage/Linienzug), ILS Gefaellestrecke, ILS BTMT Be-/Entladung, Geruest (Rohrabhaenger, Saeulen, Wandbefestigung, Traeger), Omniflo Boegen, Weichen, Verbinder, Fahrstrecke, Ladeschleifen, Kettenfoerderer, CSV-/Sivas-Export. Offen u.a.: Gattertraeger, Omniflo-Boegen fuer Weichen (`OMNI_APBW_*`, Dummy), eigenstaendige ILS-Weichen-/Kurvengeometrie. Offene Fahrplaene: `doc/todo/`. Fertig (DONE, Stand 2026-10-26): ILS Kreisel, ILS Eckrad, ILS Variofoerderer (Standard/Etage/Linienzug), ILS Gefaellestrecke, ILS BTMT Be-/Entladung, Geruest (Rohrabhaenger, Saeulen, Wandbefestigung, Traeger), Omniflo Boegen, Weichen, Verbinder, Fahrstrecke, Ladeschleifen, Kettenfoerderer, CSV-/Sivas-Export. Offen u.a.: Gattertraeger, Omniflo-Boegen fuer Weichen (`OMNI_APBW_*`, Dummy), eigenstaendige ILS-Weichen-/Kurvengeometrie. Alle offenen Punkte: `doc/todo.md` (Detail-Fahrplaene in `doc/todo/`).
## Debug ## Debug
Wenn Werte für das Debug in der Bricscad Konsole ausgegeben werden z.B. mit princ, soll der Benutzer dazu ermuntert werden, statt dessen die Lisp dbg Routinen zu verwenden, welche dann eine .dbg file im log folder erzeugen. Diese können ja über eine zentrale globale Sammlung von Schalter an und abgeschaltet werden, so dass die Files per default auch nicht geschrieben werden, nur wenn der passende Schalter auf 1 gesetzt wird. Damit können debug aufrufe auch im Code verbleiben. Wenn Werte für das Debug in der Bricscad Konsole ausgegeben werden z.B. mit princ, soll der Benutzer dazu ermuntert werden, statt dessen die Lisp dbg Routinen zu verwenden, welche dann eine .dbg file im log folder erzeugen. Diese können ja über eine zentrale globale Sammlung von Schalter an und abgeschaltet werden, so dass die Files per default auch nicht geschrieben werden, nur wenn der passende Schalter auf 1 gesetzt wird. Damit können debug aufrufe auch im Code verbleiben.
+1 -1
View File
@@ -133,7 +133,7 @@ Zeichnungs-/Szenario-Tests laufen interaktiv in BricsCAD ueber das Menue `Tests`
## Dokumentation ## Dokumentation
Ausfuehrliche Modul- und Befehlsdokumentation: `CLAUDE.md` (Projektanweisungen) und `Lisp/README.md`. Weitere Anwender-/Entwickler-Themen direkt in `doc/` (u.a. `kommandos.md` - Uebersicht aller Befehle und Skripte, `variofoerderer.md`, `vf_linienzug_modus1_anleitung.md`, `csv-export.md`, `json-input-lisp.md`, `faq.md`). Architektur-Analysen und Planungsdokumente in `doc/plan/` (u.a. `translate.md`, `Entwicklungsplan.md`), offene Fahrplaene/TODOs in `doc/todo/`. Ausfuehrliche Modul- und Befehlsdokumentation: `CLAUDE.md` (Projektanweisungen) und `Lisp/README.md`. Weitere Anwender-/Entwickler-Themen direkt in `doc/` (u.a. `kommandos.md` - Uebersicht aller Befehle und Skripte, `variofoerderer.md`, `vf_linienzug_modus1_anleitung.md`, `csv-export.md`, `json-input-lisp.md`, `faq.md`). Architektur-Analysen und Planungsdokumente in `doc/plan/` (u.a. `translate.md`, `Entwicklungsplan.md`), alle offenen TODOs gesammelt in `doc/todo.md` (Detail-Fahrplaene in `doc/todo/`).
## Lizenz ## Lizenz
+94
View File
@@ -0,0 +1,94 @@
# Offene TODOs
Zentrale Sammlung aller offenen Punkte. Wo ein eigener Fahrplan in `doc/todo/`
existiert, steht hier nur die Kurzfassung mit Verweis. Erledigtes wird
entfernt (Historie steht in git), nicht abgehakt stehen gelassen.
Stand: 2026-10-26. Wird woechentlich (freitags) mit der Doku geprueft, siehe
`CLAUDE.md` -> Konventionen.
---
## 1. VarioFoerderer / Linienzug
- **Modus-2-Solver: achsenweise Laengen-Bilanz.** Gefaltete VF-Laeufe (U-Form)
werden falsch gebaut (erste GF zu lang, Kletterstrecke zu kurz, Motor/ES
falsch), weil der Solver die festen Fussabdruecke skalar von EINER Spanne
abzieht. Als Zwischenloesung zumindest gefaltete Laeufe mit Meldung
abweisen. -> `doc/todo/modus2-achsenweise-bilanz.md`
- **VF-Linienzug ohne GUI/Konsole, Stufe 2** (Funktionstrennung):
Schritte 5c, 6, 8, 9, 10 offen (u.a. `vfl-spec-ausfuehren`, Daten-Pfad ohne
Replay-Umweg), Schritt 11 (Modus 2) zurueckgestellt. Bringt Architektur,
keine neue Funktion. -> `doc/todo/plan-vf-interactive.md`
- **Spec-Uebersetzer fuer Modus 2/3** (Stufe 1 Rest): `vsp-journal` kann nur
Modus-1-Ketten. Braucht erst 2-3 echte `linienzug2`/`linienzug3`-Journale
als Referenz; Abschnitt 4.4 des Plans auf das `SEGS`-Journalformat
anpassen. -> `doc/todo/plan-vf-interactive.md`
- **`vfl-konvertiere-ent` headless?** Die Batch-2D/3D-Konvertierung laeuft
ohne `*vfl-headless*` (Live-Rueckfrage bisher gewollt). Entscheiden, ob sie
auf den Ergebnis-Record umgestellt wird.
- **Stufe 3 Winkelwahl: "Ab"-Zweig** (`vf_standard.lsp`, Kommentar bei der
Fuellstueck-Berechnung): nur "Auf" implementiert, "Ab" bleibt bewusst offen,
bis ein konkreter Bedarfsfall vorliegt. Ebenso `schon-flach` in Stufe 3.
- **Modus 2: Separatoren vor GF-Boegen** werden noch nicht gesetzt; GF-Bogen
mit fester Eigen-Neigung erzeugt bei unterschiedlichen Nachbar-Neigungen
einen (akzeptierten) Knick (`vf_linienzug.lsp`, Kopfkommentar "MODUS 2:
3D-OBJEKTE WAEHLEN").
- **Veralteter Kommentar** im selben Kopf: "VF-Zweige als TODO (Meilenstein 2)
... uebersprungen" - die VF-Laeufe sind inzwischen gebaut (Bau-Schleife
"Meilenstein 2: GF + VF-Laeufe"). Kommentar nachziehen.
## 2. Export / Sivas
- **Separator-/Scanner-Aufteilung GF/VF** in Streckengruppen: Merkmale
4337/4339 (Gefaelle-Anteil) stehen fest auf `"0"`, 4381/4383 (Vario-Anteil)
tragen den kompletten Blockwert. Haengt an einer Ueberarbeitung der
Separator-/Scanner-Zuordnung im Zeichnungsmodell.
-> `cfg/sivas_merkmal_zuordnung.md` ("Offener Punkt")
- **TOS von Geruest-Import ins Sivas** (Entwicklungsplan Meilenstein 2).
## 3. Geruest
- **Gattertraeger**: nur Menue-Platzhalter auf `GERUEST` (zeigt einen Hinweis).
Daten sollen spaeter in `data/json/geruest_traeger.json`.
- **Edit-Pfad `GERUEST_EDIT`** fehlt: Doppelklick auf `GR_*` oeffnet nur
`EATTEDIT`, kein Neuaufbau ueber den Dialog.
## 4. Omniflo
- **Boegen fuer Weichen `OMNI_APBW_*`** (14 Befehle): Dummy, im Menue
ausgegraut.
- **TEF-Geraden aus Omniflo-Geraden** (Umwandlungsmakro): bisher nur
`TEF_FOERDERER_LINIE` (Linie mit TEF-Geraden belegen), keine Umwandlung
bestehender Omniflo-Geraden.
## 5. ILS
- **ILS-Weichen als Geometrie**: Weichenpunkte werden ermittelt und exportiert
(`KREISEL_WEICHEN`), eine eigene Weichen-Geometrie gibt es nicht.
- **Horizontal-Variobogen / Gefaellebogen als eigenstaendige Befehle**: nur
innerhalb der Streckengruppe (Vario-Kurve, GF-Bogen); die frueheren
Dummy-Befehle `ILS_K*` sind entfernt.
## 6. Tests
- **Statisches Inventar veraltet**: `tests/test_vf_headless_statisch.py`
(`test_alert_nur_in_interaktiv_pfaden`, `test_eingabe_fundstellen_unveraendert`)
- das eingecheckte Soll-Inventar `ALERT_ERLAUBT`/`EINGABE_ERLAUBT` kennt die
neueren Funktionen (`vfl-body-abschluss`, `vflw-gruppe-*-impl` ...) nicht.
Inventar nach Pruefung aktualisieren.
- **`tests/test_vf_geometrie.py`** braucht BricsCAD-erzeugte DXF-Referenzdaten,
die headless fehlen -> schlaegt ohne vorherigen CAD-Lauf fehl.
- CAD-Laeufe `TEST_VF_SPEC` und `VF_SPEC_BAU` + `tests/test_vf_spec.py`
gegen `tests/output/hundm05_results.json` (Beweis "Spec-Pfad ==
Journal-Pfad" auf Geometrie-Ebene). -> `doc/todo/plan-vf-interactive.md`
## 7. Spaetere Meilensteine (Entwicklungsplan)
Nur Ueberschriften, Details in `doc/plan/Entwicklungsplan.md`:
- Meilenstein 4: Flex (DWGs, Produktprogramm, CSV-Export, TOS)
- Meilenstein 5: 3D-Modelle (Omniflo Bogen/Weiche, Geruest-Modelle)
- Meilenstein 6: Metafunktionen (Geruest ueber Bereich, Strecke aus Polylinie,
Kreisel-Verbindung auf unterschiedlicher Hoehe, Puffer aus Flaeche,
Separator-/Scanner-Positionierung, Arbeitsplatz-Makro)