Commit Graph
782 Commits
Author SHA1 Message Date
Michael StanglandClaude Opus 5.5 4100cbfb97 refactor: create_numbers ohne Kopie von error_collector
Fehler/Warnungen als zwei einfache Listen (neue_meldungen,
meldungen_als_dict) statt der aus kabellaengen kopierten
ErrorCollector-Klasse; lib/error_collector.py entfernt. Format der
Fehlerdatei unveraendert, an sechs Testzeichnungen gegen das Original
verglichen (identische Nummern und Fehlerdateien).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 17:00:42 +01:00
Michael StanglandClaude Opus 5.5 8abb6b3c65 feat: HW Planung - Symbole erzeugen, Nummerierung, Ausgabeziel-Dialog
- Symbole erzeugen (HW_SYMBOLE, Einzelbefehle HW_SYM_*): Bauteile nach
  cfg/io_regeln.json (reduzierte Kopie aus kabellaengen), Symbole aus
  cfg/hw_symbole.json katalog-identisch nachgebaut (lib/hw_symbole.py),
  REALE_POSITION mit x auf dem Bauteil, Paare uebereinander, Ausweichen
  in y ohne Ueberlappung
- Symbole nummerieren (HW_NUMMERIEREN): lib/create_numbers.py samt
  error_collector.py und cfg/enumerate.cfg aus kabellaengen uebernommen
- Ausgabeziel per Dialog dcl/hw_ausgabe.dcl: aktuelle Zeichnung,
  bestehende Datei ergaenzen oder neue Datei
- Materialfluss mit XDATA SSG_HW_MF, ergaenzt vorhandene Datei
- Doku doc/hw_planung.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 16:39:37 +01:00
Simon HenschandClaude Opus 5.5 d2729140ff [CHANGE] Lager-Export nur noch als JSON mit Kennwerten, Gitterkorb unter Regalreihen
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-03 15:37:49 +01:00
Simon Hensch 3c729ea604 Merge branch 'master' of https://gitea.schoenenberger.de/Schoenenberger_Systeme_GmbH/dxfmakros 2026-11-03 07:40:21 +01:00
Simon Hensch 98106a6af4 [FIX] Omniflo TEF einfügen entlang Gerade funktioniert wieder; Omniflo Gerade ist aus dem Menü entfernt worden, da entweder über das Menü Fahrstrecke oder nur als Linie gezeichnet wird 2026-11-03 07:40:01 +01:00
Michael StanglandClaude Opus 5.5 2bd6ca0243 chore: alle .dbg-Ausgaben standardmaessig aus
*dbg-active* nil, alle vorregistrierten Debug-Schalter auf 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 16:43:07 +01:00
Michael StanglandClaude Opus 5.5 6a875cc8a0 feat: Menue HW Planung - Materialfluss-Skizze <dwg>_HW.dxf aus dem CSV-Export
HW_MATERIALFLUSS ruft EXPORTCSV und lib/hw_materialfluss.py: Kreisel-Rechtecke
in Drehrichtung, Strecken AS -> Separatoren -> ES, Weichen, Be-/Entladungen.
HW_SYMBOLE vorerst Platzhalter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-02 16:43:06 +01:00
Michael Stangl 43f4c0bd80 Länge des Kreisel an die Länge aus dem Elektroplanungs Layout angepasst 2026-11-02 10:21:54 +01:00
Michael StanglandClaude Sonnet 5.5 d2318bc3c6 feat: Kreisel-Beschriftung von unten/links lesbar (180 Grad Drehung bei SM/MS)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-02 10:20:45 +01:00
Simon Hensch afc5dce13a Merge branch 'master' of https://gitea.schoenenberger.de/Schoenenberger_Systeme_GmbH/dxfmakros 2026-11-02 09:56:08 +01:00
Simon Hensch b324362351 [FIX] Lagerbereiche für GOH werden nun korrekt gezählt und in die yaml geschrieben 2026-11-02 09:56:03 +01:00
Michael Stangl 3cc771b5d4 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	CLAUDE.md
2026-10-31 08:32:37 +01:00
Michael StanglandClaude Opus 5.5 3d2d4ad47d docs: Verweis auf io-Zuordnung im Kabeltool (kabellaengen)
Pruefskript io_zuordnung_pruefen, Konverter altZuNeu und das gemeinsame
Regelwerk cfg/io_regeln.json liegen in kabellaengen; dort werden die
dxfmakros-Mechanikbloecke erkannt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 08:29:14 +01:00
Yuelin WangandClaude Sonnet 5.5 503b02a005 refactor: Kettenfoerderer als Seitenansicht mit Beschriftung und Hoehenmass, Draufsicht als eigener Hilfsblock KF2D_n
- Hauptblock KF_n: flache, ungedrehte Seitenansicht mit Beschriftung und Hoehenmass; nur er wird exportiert
- Draufsicht KF_2D als getrennter Hilfsblock KF2D_n (projizierte Laenge, frei verschiebbar, per KF_EDIT regenerierbar), Verknuepfung ueber XDATA-Schluessel
- L_KF_mm = waagerechte Laenge, Sivas-Zeile ohne Laenge, Export nur KF_<Ziffern>
- ensure-block-loaded: Block ohne ILS-Datei (KF_2D) nicht mehr als fehlend melden
- Layer kettenfoerderer_beschriftung, Dispatcher-Zweig KF2D_*, Sprachdateien und Unit-Tests angepasst

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-30 15:42:58 +01:00
Simon Hensch d9043ebca5 Merge branch 'goh-storage' 2026-10-30 13:36:54 +01:00
Yuelin WangandClaude Sonnet 5.5 61372e9104 fix: KF_EDIT loeste den Block auf - Blocknummer jetzt ueber die Blocktabelle
KF_EDIT loescht beim Neuaufbau den alten Foerderer. kf-naechste-nummer zaehlte
nur die Referenzen im Modell und vergab dadurch dieselbe Nummer erneut, obwohl
die Block-Definition KF_<n> weiter in der Blocktabelle steht. _.-BLOCK traf auf
den vorhandenen Namen, die "Neu definieren?"-Abfrage verschluckte die
Folge-Eingaben, der Block entstand nicht und die Einzelteile blieben lose im
Modell liegen. GF_n und VF_n pruefen aus demselben Grund die Blocktabelle.

- kf-freie-nummer ueberspringt jede Nummer mit vorhandener Block-Definition
- kf-nummer-aus-name liest nur rein numerische Namen (KF_2D, KF_UM_26 und
  KF_LAENGE tragen dasselbe Praefix, atoi("2D") waere 2)
- KF_EDIT nutzt zuerst die vorgewaehlte Auswahl (Doppelklick), entsel nur als
  Rueckfall, und akzeptiert nur echte KF_<n>
- Unit-Tests fuer Namens-Parser und Nummernvergabe
- KF_2D.dwg: ueberarbeitete Draufsicht

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-30 12:17:06 +01:00
Simon Hensch 5821619e12 [MERGE] Lager branch in main 2026-10-30 11:44:19 +01:00
Simon Hensch 473aeec5bf [ADD] Modul zum Erstellen von Hängewarenlagerbereichen und Stockwerken mit Attributsdefinition für den Export in ein Anforderungsdokument für Ausschreibungen 2026-10-30 11:11:20 +01:00
Yuelin WangandClaude Opus 5 989ee398ce docs: Spec-Uebersetzer und Stufe-2-Funktionstrennung abgeschlossen
Zwei TODO-Punkte aus doc/todo.md entfernt - beide nicht, weil die Arbeit
getan waere, sondern weil ihr Anlass entfallen ist. Abschnitt 1 der Liste
schrumpft damit von drei auf einen Punkt.

**Stufe-2-Funktionstrennung** (doc/todo/linienzug-ohne-gui.md):
zurueckgestellt. Sie sollte den Journal-Replay-Umweg ueberfluessig machen -
nur ist der keiner mehr: ein Linienzug-Journal traegt mit SEGS die komplette
Segment-Essenz und laeuft ohne Zeichnung, worauf schon die Streichung des
Spec-Uebersetzers beruhte (4a19ac0). Die Modus-2-Regressionstests fahren
genau diesen Pfad. Dem gegenueber stehen die offenen Schritte 5c/6/8/9/10,
die den Code anfassen, in dem die Reihenfolge selbst Geometrie ist (geklammerte
dL-Kette, vfl-acc-*-Reihenfolge, lazy gelesene AS/ES-Winkel) - hoher Einsatz,
kein Funktionsgewinn. Die Datei nennt jetzt drei konkrete Bedingungen fuer
eine Wiederaufnahme.

**Spec-Uebersetzer Modus 2/3** (doc/todo/spec-modus2-3.md): abgeschlossen.
Die Schritt-Tabelle war veraltet - sie fuehrte alle sieben Schritte als
offen, obwohl der Kopf der Datei das Gegenteil sagte; jetzt steht je Schritt
erledigt / gestrichen.

Offen war dort zuletzt NICHT "ein Test fuer Modus 3", sondern dessen
Segment-Klassifizierung: sie vergleicht roh gegen Menue-Ziffern "1".."4" und
schreibt sie genauso ins Journal (Marker linienzug3). Wer die Optionen
umsortiert, ergaenzt oder entfernt, deutet damit jede gespeicherte Kette
still um - real passiert beim Lauf-Anfang (833a4b6). Modus 2 ist davon
befreit (selbstbeschreibende Werte + Alt-Tabelle ueber vfl-wert-norm); Modus
3 nicht, weil ohne aufgezeichnetes Journal der Beweis fehlt, dass
Bestandsketten die Umstellung ueberstehen.

Nutzer-Entscheidung 2026-10-29: fuer Modus 3 vorerst kein Testfall, bei
Problemen im Einsatz wird getestet und korrigiert. Das Risiko bleibt damit
bestehen - und wandert dorthin, wo es gefaehrlich wird: als Warnblock direkt
ueber der Segment-Auswahl in vf_linienzug.lsp, statt in eine TODO-Datei, die
beim Umsortieren einer Option niemand aufschlaegt. Er nennt auch den Ausweg:
Journal mit lib/vf_journal_export.py aus der Zeichnung ziehen, dann ist die
Umstellung derselbe Handgriff wie bei Modus 2.

Beide Fahrplaene bleiben liegen - spec-modus2-3.md ist aus
lib/vf_journal_export.py an drei Stellen referenziert, eine davon landet im
Beschreibungstext frisch exportierter Testdaten.

Am LISP-Code ist ausschliesslich Kommentar geaendert. TEST_UNIT 897/897.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-29 14:38:39 +01:00
Yuelin WangandClaude Opus 5 b709f89404 test: U-Form-Faelle, Formkriterium laengs und Reihenanordnung der Linienzug-Tests
Drei neue Modus-2-Testfaelle aus echten Laeufen, ein Kriterium, das eine
heute eingebaute Fehlgeometrie gefunden haette, und ein aufgeraeumtes
Layout der Testketten.

1. Drei U-Form-Faelle (tests/testdata/linienzug_modus2_uform_*.json),
   aufgezeichnet mit lib/vf_journal_export.py. Gefaltete Laeufe: der Pfad
   wechselt ueber zwei 90-Grad-Vario-Kurven dreimal die Fahrtrichtung, die
   Kletterstrecke liegt in einem ANDEREN Schenkel als der Lauf-Eingang -
   genau der am 2026-10-29 korrigierte Fall. Variiert werden GF-Verteilung
   (alles am Einlauf vs. 1/2+1/2) und Winkel; beides ist noetig, weil die
   Verteilung entscheidet, ob ueberhaupt GF im fremden Schenkel steht, und
   der Restfehler der alten Bilanz mit L_GF skalierte.
   c:TEST_LINIENZUG_MODUS2 ist dafuer tabellengesteuert - ein weiterer Fall
   ist jetzt eine Zeile in *tlz-m2-faelle*.

2. RUECKNAHME des Schluss-Solves (vfl-zsolve-schluss-ziel, heute frueh
   eingebaut). Er loeste den letzten Fueller gegen Richtung UND Laenge und
   traf den Zielpunkt dadurch in X und Y exakt - um den Preis, dass er die
   letzte Gerade um 6.15 Grad verdrehte (hz-plan -90 -> -96.15), in der
   Zeichnung als schiefer Schenkel sichtbar. Das widerspricht der
   Entscheidung vom 2026-10-26: quer MUSS 0 sein, LAENGS DARF ABWEICHEN -
   der Hauptstrang bleibt gerade, der seitliche Versatz des ES-Elements ist
   dessen Bauform. Die Messwerte von heute (0.56 / 0.7 mm quer) stammen
   nicht von dieser Aenderung, sondern von der Laengenbilanz des gefalteten
   Laufs (35ebee1) - der Zweig blieb dort ungenutzt. Die Begruendung steht
   jetzt an der Aufrufstelle, damit niemand den Solve erneut baut.

3. laengs wird geprueft - als FORM-, nicht als Genauigkeitskriterium
   (erwartung_laengs_mm, Toleranz 5 mm). Der Wert ist die Ausladung des
   ES-Elements und je Fall eine Konstante (104.68 bei ES_Element_30,
   637.58 bei ES_Element_90). Punkt 2 war am Querwert NICHT erkennbar - die
   Verdrehung macht ihn gerade null, der Test meldete OK, gefunden wurde sie
   mit dem Auge. Ein verdrehter Hauptstrang zielt auf den Endpunkt und
   drueckt laengs auf ~0; daran faellt er auf. Gegengeprueft: mit kuenstlich
   auf 0.01 mm gesetzter Toleranz kippen alle fuenf Faelle auf ABWEICHUNG.

4. Alle sieben Ketten des Menueeintrags entstehen als Reihe auf Y=0, 20 m
   Abstand, statt verstreut. Die Modus-1-Skripte brauchen dafuer nur ihren
   EINEN point_abs (alles Weitere ist point_rel mit dL/hz); bei Modus 2
   mussten PT-Eintraege UND die Pfadkoordinaten in SEGS (Felder 6..9)
   mitwandern, sonst zeigt der Pfad woanders hin als Start und Ziel.
   Reine Translation - Laengen, Winkel und die geprueften Abweichungen sind
   davon unabhaengig; Z blieb stehen, weil die Starthoehe ein Eingabewert
   des Solvers ist. Geprueft: erstes Segment beginnt exakt am Startpunkt,
   letztes endet exakt am Zielpunkt, Messwerte unveraendert.

5. Die drei letzten Verweise auf doc/VarioFoerderer_Linienzug_Prinzipien.md
   (bewusst unversioniert) tragen ihre Begruendung jetzt selbst: Entkopplung
   Neigung/XY, warum es genau EINEN Kletterer je Lauf gibt, und warum ein
   VF-Sub-Segment auf der 3-Grad-Basis beginnen und enden muss.

Geprueft: TEST_UNIT 897/897 (die 7 Tests der entfernten Funktion sind mit
ihr gegangen), TEST_LINIENZUG_MODUS2 5 von 5 OK, voller Menueablauf baut
sieben Ketten an den vorgesehenen Stellen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-29 14:28:57 +01:00
Yuelin Wang 11e334d0a2 Merge remote-tracking branch 'origin/master' 2026-10-29 12:14:20 +01:00
Yuelin WangandClaude Opus 5 35ebee1e88 fix: Laengenbilanz des gefalteten Modus-2-Laufs (U-Form)
Gefaltete VF-Laeufe wurden zu kurz gebaut, weil der Solver Posten dem
falschen Schenkel zurechnete. Vier Aenderungen, alle nach demselben
Leitsatz: die letzten freien Groessen folgen der GEMESSENEN Ist-Lage,
nicht einer vorab verteilten Gesamtplanung.

1. vfl-zsolve-schluss-ziel (neu): endet der Lauf auf einem flachen
   Fueller, werden RICHTUNG und LAENGE gemeinsam gegen den Zielpunkt
   geloest statt nur die Laenge. Geschlossene Loesung ueber
   A = sqrt(|D|^2 - P^2), hz = Winkel(D) - atan2(P, A); C und P sind
   von hz unabhaengig, daher ohne Iteration. Bisher uebernahm der
   Solve die Richtung aus dem gezeichneten Pfad - ein Querversatz der
   realen Eck-Bauteile war damit prinzipiell unerreichbar, weil eine
   Laenge die Kette nur entlang ihrer Achse verschiebt.

2. Eingangs-Hardware bei gefaltetem Lauf: Umlenkstation + Separator
   stehen auf dem Eingangs-Schenkel und verbrauchen die Kletterspanne
   nicht; ihr Laengenanteil wird der Spanne wieder zugeschlagen.
   feste-vf bleibt unveraendert - sein sin3-Hoehenanteil ist real.

3. kletter-ende-fp: endet der Lauf auf einem KLETTERER, gibt es keinen
   Schluss-Fueller, der Motorstation + Separator + ES abzieht - sie
   standen in keinem Budget. Nur bei flacher Zone, Pfadende und
   vorhandenem ES, sonst sind sie bereits anderweitig verbucht.

4. Nachrechner wieder aktiv (8 statt 4 Runden): GF1 steht im Budget,
   aber im Eingangs-Schenkel. Die Kollision mit filler-A-len, wegen
   der er abgeschaltet war, ist entfallen.

3 und 4 wirken NUR gemeinsam - die Betraege heben sich teilweise auf,
eine einzeln eingebaute Korrektur verschiebt den Fehler bloss in die
andere Richtung (GF1 1636.9 - (Motor+Sep+ES) 1235.1 = 401.8 mm).

Gemessen am selben Pfad: 9 Grad 0.56 mm, 12 Grad 0.7 mm quer (vorher
1424 bzw. 934 mm), dZ 0.1 mm. Beide Modus-2-Regressionsketten weiter
OK; TEST_UNIT 904/904 mit 7 neuen file-freien Tests.

doc/todo.md: Punkt "Modus-2-Solver: achsenweise Laengen-Bilanz" ist
damit erledigt. Die Detaildatei bleibt liegen, weil vier Kommentare in
vf_linienzug.lsp auf ihren Pfad verweisen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-29 12:14:13 +01:00
Michael StanglandClaude Sonnet 5 0d4b7c4cfc test: Referenzdateien nach gepruefter Lauf-Analyse aktualisiert
Nur Dateien, deren Abweichung gegenueber dem letzten Lauf erklaert und
unbedenklich ist (reine Attribut-/Merkmal-Erweiterung, Namenszaehler-Fix,
Kreisel-Hoehen-Neuberechnung, Zuordnungs-Logik aus fea6014) - siehe
Vergleichsprotokoll in der Session. Bewusst NICHT aktualisiert:
foerderer_results.json (unerklaerte ~1mm-Drift), mubea_* (VF_4-Etage-Solver-
Aenderung + Kreisel2-Drehrichtung brauchen fachliche Pruefung),
hundm05_attribute.json (braucht dxf_vf_abbild.py --schreibe-referenz statt
Kopie), kreisel_export.csv/kreisel_sivas.csv/kreisel_tests.dxf (kein
frischer Lauf in dieser Session).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-29 10:20:50 +01:00
Michael StanglandClaude Opus 5.5 321dcfde64 feat(export): Merkmal "Einsortiert in" an nach Lage einsortierten Separatoren
Folgewerkzeuge (sps_skel: sepliste-Gegenprobe) erkennen daran, dass ein
Separator in TrackIds, aber zu Recht nicht im Bauprotokoll der Strecke
steht. CLAUDE.md beschreibt den neuen Export-Schritt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 23:12:50 +01:00
Michael Stangl 5368f5b447 Drehrichtungen der Kreisel waren falsch rum eingetragen 2026-10-28 18:20:54 +01:00
Michael StanglandClaude Opus 5.5 2bb00bb48f fix(export): freie Separatoren nach Lage in die Kette ihrer Strecke einsortieren
Eigenstaendige Separatoren, deren Zuordnung eine VF/GF nennt, die aber nicht
beim Bau der Strecke entstanden, fehlten in deren sepliste und damit in
TrackIds und Nachbarn (Mubea VF_3: 0037/0038). Sie werden jetzt beim Export
nach Lage zwischen AS und ES aufgenommen - nur im Speicher des Laufs, die
sepliste-XDATA bleibt Bauprotokoll (Lisp paart sie per Anzahl je Typ mit den
Bausteinen und fuehrt reservierte AS/ES-IDs unter der lfdnr).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 17:22:36 +01:00
Michael StanglandClaude Sonnet 5 c3b4bf9db3 fix(kreisel): Mindestabstand 800mm gegen beruehrende Endkreise
Unterhalb des Kreisel-Durchmessers (*kreisel-durchmesser*, Default 800mm)
wuerden sich AN8/SP8 beruehren bzw. ueberschneiden. draw-module prueft das
als harte Sperre fuer alle Aufrufer; KreiselInsert/-Connect/-Redraw fragen
bei Unterschreitung erneut ab statt abzubrechen, KreiselEdit zeigt den
Dialog erneut (Projektmuster wie GERUEST).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-28 11:02:44 +01:00
Michael StanglandClaude Opus 5.5 9e3e8e16ae fix(tests): Testlauf haengt nicht mehr an Export-Rueckfragen, Laufprotokoll je Test
TEST_LINIENZUG (ebenso hmrec:stubs-aus und vsp-headless-aus) schaltete die
GUI am Ende pauschal wieder ein. Unter SSG_RUN_ALL_TESTS fragte der direkt
folgende EXPORTSIVAS dann nach Hoehen-Check/Bereinigen und der Lauf blieb
stehen. Alle drei stellen jetzt den Vorzustand von *ssg-gui-aus* wieder her.

SSG_RUN_ALL_TESTS schaltet zusaetzlich *csv-hoehencheck-fragen* und
*csv-bereinigen-vor-export* fuer den Lauf ab (unmittelbar vor jedem Export
erneut, export.lsp belegt nil beim Nachladen wieder mit T), erzwingt GUI aus
mit Warnung und stellt am Ende die Vorgaben wieder her.

Neues Laufprotokoll DXFM_LOG/testlauf_<name>.dbg je Test (Debug-Schalter
"testlauf", Standard ein): Zustand vor/nach dem Test, Fehler, Ergebnis-JSON,
Export-Schritte. Eigene Datei mit sofortigem Schreiben statt dbgopen, damit
die Module mit ihren eigenen .dbg-Dateien es nicht umlenken und bei einem
Haenger der letzte Schritt sichtbar ist.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 09:52:10 +01:00
Yuelin WangandClaude Sonnet 5.5 9fb43b3881 fix: Geruest-Zeilen im Sivas-Export in Dispogruppe 30 statt 20
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 13:32:55 +01:00
Yuelin WangandClaude Sonnet 5.5 e2237fde10 feat: Bereinigung (PURGE) vor Sivas-Export und zusammengefasste CSV je Dispogruppe
EXPORTSIVAS bereinigt die Zeichnung vorab per -PURGE (abschaltbar ueber
*csv-bereinigen-vor-export*). export_sivas.py schreibt zusaetzlich je
Dispogruppe eine Datei <stamm>_zusammengefasst_dispo<N>.csv.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 13:29:43 +01:00
Yuelin WangandClaude Opus 5 f2a5f6ca75 docs: TODO-Stand nach der Modus-2-Arbeit nachgezogen
Vier Eintraege geprueft, drei davon betroffen:

- Spec-Uebersetzer Modus 2/3: Entscheidung dokumentiert, dass die Spec dort
  NICHT gebaut wird (SEGS macht die Journale selbst-enthalten), welche drei
  Schritte stattdessen umgesetzt wurden und warum die uebrigen gestrichen
  sind. Offen bleibt nur dasselbe fuer Modus 3 - dort fehlt ein
  aufgezeichnetes Journal als Netz.
- Achsenweise Laengen-Bilanz: teilweise entschaerft. AS-Element,
  Abschlussbogen+Motorstation und die Eck-Differenzen gehen seit ce4ad0f an
  das Segment, auf dem sie stehen - vfl-eck-extra ist bereits die hier
  geforderte Form (Zuschlag je Segment statt Skalar). SKALAR geblieben sind
  feste-vf und gf-total, und genau die verursachen den U-Form-Fehler; das
  Symptom bleibt also bestehen. Mit Hinweis, dass die neuen
  Zuschlags-Meldungen der schnellste Einstieg in die Diagnose sind.
- Linienzug ohne GUI, Schritt 11: war zurueckgestellt, bis echte
  Modus-2-Journale als Referenz vorliegen. Diese Vorbedingung ist erfuellt;
  der Schritt selbst bleibt offen.

Unveraendert: Stufe-3-Winkelwahl "Ab"-Zweig - von dieser Arbeit nicht
beruehrt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-27 12:12:50 +01:00
Yuelin WangandClaude Opus 5 4a19ac0ae0 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>
2026-10-27 12:09:05 +01:00
Yuelin WangandClaude Opus 5 e3c7fb0d25 docs: Begruendung im Repo statt Verweis auf eine lokale Datei
doc/VarioFoerderer_Linienzug_Prinzipien.md ist bewusst nicht versioniert
(siehe ce00233). Die drei Stellen, die von dort die Begruendung geholt
haben, tragen sie jetzt selbst: warum quer und dZ null sein MUESSEN und
laengs abweichen DARF - naemlich weil beides zugleich geometrisch nicht
geht und der Hauptstrang gerade bleiben soll.

Ein Verweis auf eine Datei, die im Repo fehlt, kostet den naechsten Leser
mehr Zeit als die zwei Zeilen Text.

Nicht angefasst: die aelteren Verweise in vf_linienzug.lsp (Abschnitt 14,
14.1) und vf_standard.lsp - sie stammen nicht aus dieser Arbeit und
zeigen auf Inhalte, die hier niemand kennt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-27 11:47:43 +01:00
Yuelin WangandClaude Opus 5 ce00233348 chore: Prinzipien-Dokument wieder aus der Versionierung nehmen
doc/VarioFoerderer_Linienzug_Prinzipien.md war in ce4ad0f versehentlich
mit eingecheckt worden. Auf Wunsch des Autors bleibt es eine lokale
Arbeitsdatei - die Datei selbst ist unveraendert vorhanden, nur nicht
mehr getrackt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-27 11:44:33 +01:00
Yuelin WangandClaude Opus 5 cf626d721e test: Linienzug Modus 2 als Journal-Replay, Richtungsfrage in den Modus-1-Skripten
Neu: TEST_LINIENZUG_MODUS2 spielt zwei echte Laeufe DERSELBEN Strecke ab -
einmal mit der 90-Grad-Ecke als Vario-Kurve (waagerecht, mit flacher Zone),
einmal als GF-Bogen (geneigt, ohne flache Zone). Beide muessen quer zur
ES-KS_AUS-Achse ~0 und dZ ~0 erreichen; laengs darf um die Ausladung des
ES-Elements abweichen (Leitsatz, doc/VarioFoerderer_Linienzug_Prinzipien.md
Abschnitt 0). Gemessen am 2026-10-27: beide 0.2 mm quer, dZ 0.

Das Paar ist Absicht. Die beiden Varianten laufen durch VERSCHIEDENE Zweige,
und erst ihr Vergleich hat die Fehler dieser Woche sichtbar gemacht - der
ES-Fussabdruck wurde vom falschen Segment abgezogen, was sich nur in der
GF-Bogen-Variante zeigte (878 mm). Einen der beiden zu loeschen nimmt dem
Test seinen Wert.

Anders als die Modus-1-Faelle braucht Modus 2 KEINE Mocks und KEINEN
gezeichneten Pfad: sein Journal traegt einen SEGS-Eintrag mit der kompletten
Segment-Essenz, ist also von den Original-Objekten unabhaengig. Der Test
spielt daher das echte, mit lib/vf_journal_export.py aus der Zeichnung
gelesene Journal ab. Jeder Eintrag fuehrt seine Art mit (PT/STR/REAL/SEGS),
womit die Verschiebe-Anfaelligkeit des Mock-Replays entfaellt.

Dazu: vf-linienzug-modus2 legt die gemessene Abweichung in
*vfl-m2-abweichung* ab (laengs quer dz). Sonst muesste ein Test sie aus der
Konsolenausgabe zurueckparsen.

Ausserdem behoben: beide Modus-1-Testskripte brachen mit
"bad argument type <\"5\"> expected <CONS> at [cdr]" ab. Commit fb56794
(Rueckwaerts-Bau) hat eine Frage VOR die AS-Praeambel gesetzt. Fuer Journale
ist sie abwaertskompatibel, fuer die MOCK-Skripte nicht: der Mock beantwortet
jede getstring-Abfrage aus der Queue, eine fehlende Antwort verschiebt also
alles Folgende um eine Position. Beide Dateien haben den Eintrag jetzt, mit
Begruendung im Kommentar.

Menue: Tests -> Foerderer-Linienzug ruft den neuen Fall mit auf. Die
kompilierte SSG_LIB.cui ist bewusst NICHT mit committet - ihre Aenderung
besteht groesstenteils aus fremden Eintraegen und verschobenen UIDs;
BricsCAD erzeugt sie beim naechsten _MENULOAD neu aus der .mnu.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-27 11:42:31 +01:00
Yuelin WangandClaude Opus 5 c2ceab973c docs: Linienzug-Modus-2-Referenzfaelle mit Soll-Werten festhalten
Die beiden Laeufe vom 2026-10-26 als dokumentierte Referenz: derselbe Pfad,
einmal mit Vario-Kurve und einmal mit GF-Bogen an der 90-Grad-Ecke. Beide
muessen quer ~0 und dZ 0 erreichen; laengs darf um die ES-Ausladung
abweichen.

Der Wert liegt im VERGLEICH der beiden Varianten: ein einzelner Lauf haette
nicht gezeigt, dass der ES-Fussabdruck vom falschen Segment abgezogen wurde
(878 mm Abweichung nur in der GF-Bogen-Variante). Darum sind beide als Paar
festgehalten, mit den erwarteten Protokollzeilen - eine FEHLENDE
Zuschlagszeile ist das Warnsignal.

Noch nicht automatisiert (Pfad muesste per entmake gezeichnet und das
Journal replayt werden); die reinen Rechenkerne sind in test_unit.lsp
bereits mit genau diesen Messwerten abgedeckt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-26 14:31:06 +01:00
Yuelin WangandClaude Opus 5 ce4ad0f328 fix: Fussabdruecke aller Festbauteile im Segmentbudget (Modus 2)
Leitsatz, aus dem alle Einzelaenderungen folgen (neu als Abschnitt 0 in
doc/VarioFoerderer_Linienzug_Prinzipien.md): die gezeichneten GERADEN
besitzen den Pfad, ein gezeichneter Bogen ist Hilfsgeometrie und nennt nur
Ort und Drehsinn. Jedes fest gebaute Teil zieht seine Laenge von dem
Segment ab, auf dem es steht - und zwar in LAENGEN- UND HOEHENbilanz mit
demselben, GEMESSENEN Wert.

Behoben:
- AS-Element: Fussabdruck wurde bei vf-start = 0 gar nicht abgezogen
  (die Trimmung lief nur im Front-Lauf, der dort leer ist). Jetzt gemessen
  aus dem gebauten KS_AUS - ein aus dem Block-dx gerechneter Wert lag
  184 mm daneben.
- Abschlussbogen + Motorstation: standen auf dem letzten Segment des
  VF-Laufs, fehlten aber im Budget (feste-vf traegt den Motor nur im Zweig
  OHNE flache Zone).
- ES-Element: die letzte Gerade reservierte nur den Laengsanteil. Jetzt die
  Strecke, die auch den Querversatz aufhebt (vfl-es-achs-reserve) - Vorgabe:
  quer zur KS_AUS-Achse MUSS 0 sein, laengs darf abweichen, dZ MUSS 0 sein.
- ES-Abzug griff auch, wenn ein Back-Lauf zwischen VF-Lauf und ES liegt,
  und verkuerzte dann das falsche Segment um die volle ES-Laenge (878 mm).
  Jetzt nur noch bei direktem Anschluss (vf-ende = n-1).
- Eck-Bauteile: Vario-Kurve/Gefaellebogen ersetzen den gezeichneten Bogen
  mit eigenem Fussabdruck. Die Differenz der Tangentenabstaende geht als
  Zuschlag an beide angrenzenden Geraden (vfl-eck-korrekturen/-zerlegen),
  damit die Mittellinie beide beruehrt. Der gezeichnete Radius kuerzt sich
  dabei heraus. GF-Boegen werden geneigt eingebaut - ihr Grundriss-
  Fussabdruck wird mit vfl-projiziere-neigung projiziert.
- Kletterlaenge wurde anteilig mit der Planlaenge im Zaehler und dem
  korrigierten climber-span im Nenner verteilt; die Anteile summierten sich
  dadurch auf weniger als 1.
- Absturz bei fehlendem Uebergangsbogen: get-bogen-mass wurde zweimal fuer
  dieselbe Suche aufgerufen und sein nil ungeprueft an
  vfl-projiziere-neigung gereicht.

Messreihe ueber die Sitzung (gleicher Pfad, Abweichung quer):
695.7 -> 270 -> 139.5 -> 98.5 -> 45.7 -> 2.4 -> 0.2 mm, dZ durchgehend 0.
Beide Pfad-Varianten (Ecke als Vario-Kurve bzw. als GF-Bogen) landen auf
demselben Wert - 0.2 mm ist die Messaufloesung, kein Restfehler.

21 neue file-freie Unit-Tests mit den echten Messwerten; TEST_UNIT 866/866.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-10-26 14:29:43 +01:00
Michael StanglandClaude Opus 5.5 aabac03d7c fix: run_tests.bat --lisp bricht ab, wenn BricsCAD bereits laeuft
BricsCAD reicht einen /b-Start an eine offene Instanz weiter: test_unit.scr
lief dann in der Sitzung des Benutzers und das abschliessende _.QUIT blieb
an der Speichern-Rueckfrage haengen (bzw. haette die Sitzung beendet).
Pruefung per tasklist|findstr - nicht find, das ist unter Git-Bash im PATH
das Unix-find und haette eine laufende Instanz nie erkannt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 14:12:26 +01:00
Yuelin WangandClaude Sonnet 5.5 5cb1d4a582 docs: Modus-2-Kommentare nachgezogen (VF-Zweige gebaut, Separatoren ueber GF-Geraden), erledigte TODO-Punkte entfernt
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 11:46:14 +01:00
Yuelin WangandClaude Sonnet 5.5 0dfea8754d fix: flache Schleife am selben Kreisel im Hoehen-Check einzeln fragen
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 11:27:13 +01:00
Yuelin WangandClaude Sonnet 5.5 35339b270a fix: kf-auswahl-wert faengt fehlende Liste vor nth ab, veraltete TYP-Tests auf FOERDERERTYP umgestellt
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 11:27:13 +01:00
Michael StanglandClaude Opus 5.5 399728c7f9 fix(tests): Linienzug-Testdaten, HundM05-Zusatzobjekte, Nummernzaehler je Testzeichnung
- TEST_LINIENZUG: seit 1cc163d/cccd362 fragt Modus 1 nach der AS-Seite die
  optionale Zufuehrungsachse ab. Der Test mockt get* direkt (keine
  Replay-Queue), die neue Punktfrage verschluckte die naechste Antwort und
  der Lauf desynchronisierte (FEHLER, 21 Schritte offen). Neuer Schritt-Typ
  "point_none" (getpoint -> nil) und in beiden Linienzug-Testdaten nach
  der AS-Seite eingetragen.
- test_hundm05.py: Zusatzobjekt-Ergebnisse filterten nur kind "kreisel" -
  Separatoren/Scanner/BTMT (kind "sensor") fehlten, test_je_objekt_ein_
  ergebnis schlug faelschlich fehl.
- SSG_RUN_ALL_TESTS: #VF/#GF/#Kreisel/#Eckrad_LetzteNr vor jedem Test auf 0.
  Der Lauf bleibt im Namensraum des Startdokuments, die Zaehler liefen
  sonst ueber alle Tests weiter (VF_5/Kreisel12 in frischer Zeichnung) und
  machten jeden Referenz-Diff von der Testreihenfolge abhaengig.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 11:04:52 +01:00
Yuelin WangandClaude Sonnet 5.5 f9eb41cdcc feat: HOEHEN_CHECK Phase 3 (Buehnen-Familien), Menueeintrag und Rueckfrage vor EXPORTSIVAS
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-26 10:50:34 +01:00
Michael StanglandClaude Opus 5.5 2befdf2c33 fix: Testlauf-Export bei DWG-Tests ohne doppelten Dateinamen
Nach vla-saveas ist die Zeichnung benannt, export:dwg-praefix setzt
"<name>_tests_" selbst davor - SSG_RUN_ALL_TESTS hatte ihn schon im
Namen. Ergebnis war "<name>_tests_<name>_tests_export.csv" fuer
foerderer/linienzug/gefaellestrecke, das Warten lief ins Timeout und
die Python-Pruefungen (test_foerderer/test_gefaellestrecke) wurden
mangels Datei still uebersprungen. testrun:ohne-praefix zieht den
Praefix vor dem Umbiegen der Dateinamen ab (DXF-Tests unveraendert).

doc/todo.md: erledigten Eintrag "Statisches Inventar veraltet" entfernt
(test_vf_headless_statisch.py ist seit 0babf78 gruen).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 10:47:10 +01:00
Michael StanglandClaude Opus 5.5 8db446ce0f feat: Linienzug-Batch-Konvertierung headless, alter Block bleibt bis zum Erfolg
- vfl-konvertiere-ent laeuft unter *vfl-headless* (Wizard/GUI aus): reicht
  ein Journal nicht, Abbruch mit Fundstelle statt Live-Rueckfrage im Batch
- alter VF_n-Block wird erst nach erfolgreichem Neubau geloescht; bei
  Fehlschlag raeumt vfl-konvert-aufraeumen die Teil-Geometrie weg
- SSG_DIM_ALL_2D/_3D listet fehlgeschlagene Bloecke am Ende auf und
  konvertiert jetzt auch Modus-3-Bloecke (linienzug3 wurde uebersprungen)
- statischer Headless-Test: vfl-menu-strwert/vflw-radio-wahl-impl erlaubt
- TODO: Stufe 2 und Spec-Uebersetzer Modus 2/3 in eigene Dateien ausgelagert

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 10:22:30 +01:00
Michael StanglandClaude Opus 5.5 7242d95411 docs: Anleitung zur CAD-Datenaufbereitung, Einstiegsverweise im README
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 09:37:27 +01:00
Michael StanglandClaude Opus 5.5 4bceb49665 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>
2026-10-26 09:29:04 +01:00
Michael StanglandClaude Opus 5.5 b4f9c43ae3 chore: verwaiste stueckliste.dcl und create_tests.bat entfernt, object_data-Verweise umgestellt
- dcl/stueckliste.dcl: wurde von keinem Code geladen (ssg-sl-dialog existiert nicht)
- bin/create_tests.bat: rief das nicht mehr vorhandene tests/ILS_test.scr auf;
  Ersatz ist run_tests.bat bzw. SSG_RUN_ALL_TESTS
- Kommentare in lib/ und tests/ verweisen statt auf das geloeschte
  tests/testdata/object_data.md auf doc/json-input-lisp.md, mit den dort
  gueltigen Abschnittsnummern (alt 5 -> 2, 3.1 -> 3, 2.1 -> 4.1, 8 -> 6)
- CLAUDE.md / doc/kommandos.md / doc/json-input-lisp.md nachgezogen

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 09:22:27 +01:00
Michael StanglandClaude Opus 5.5 640a988fa3 docs: README, CLAUDE.md und Befehlsdoku auf aktuellen Stand gebracht
- README.md: Menuebaum neu aus SSG_LIB.mnu (Weichenpunkte, Eckrad-Edit,
  QC-Linie, Fahrstrecke, KettenFoerderer, Schwenkschienen, Stueckliste,
  Din Formate, alle Bloecke 2D/3D ...), Projektstruktur (logs/, lang/,
  tools/, data/ ist eingecheckt), Ladeweg, pytest-Aufruf
- CLAUDE.md: entfernte Dummy-Befehle ILS_ETF_*/ILS-Kurven raus, Module
  Connection_Edit/Jam_Edit/TEFInsert und fehlende DCLs ergaenzt,
  SSG_BLOCKEDIT-Zweige vervollstaendigt, veraltete Verweise
  (geruest-dcl-listenhoehe, object_data.md) korrigiert, Entwicklungsstand
- Lisp/README.md: Kurven-Dummys entfernt, tests.lsp -> external_call.lsp,
  Geruest-Dialog als DCL-Vorlage, GR_* -> EATTEDIT, neue Abschnitte fuer
  JAM_EDIT, KettenFoerderer, Stueckliste/DIN, Export-Hilfen, Pflege-Module
- doc/kommandos.md: ~25 fehlende Befehle ergaenzt, OMNI_KettenFoerderer
  entfernt, create_tests.bat als veraltet markiert (ILS_test.scr fehlt)
- doc/plan/Entwicklungsplan.md: Meilenstein-Status nachgezogen
- doc/todo/*: Pruefvermerk 2026-10-26 - beide Fahrplaene weiterhin offen

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 09:15:20 +01:00
Yuelin WangandClaude Sonnet 5.5 f8b8a4175b fix: KF_EDIT baute gedrehte Foerderer ungedreht neu
Der Drehwinkel wird beim Bau in die Geometrie eingerechnet, die Blockreferenz
selbst hat immer Drehung 0 (ssg-block-wrap-welt). KF_EDIT las die Drehung nur
aus Gruppencode 50 und baute einen mit z.B. 90 Grad gebauten Foerderer beim
Bearbeiten daher ungedreht neu.

Der gebaute Winkel steht jetzt als XDATA (SSG_KF_EDIT) am Block. KF_EDIT
addiert eine spaeter von Hand vorgenommene Drehung der Referenz
(Gruppencode 50); Altbestand ohne XDATA verhaelt sich wie bisher.

- kf-block-erstellen: neuer Parameter drehung, beide Aufrufer angepasst
- reiner Kern kf-drehung-gesamt (auf -180..180 normalisiert) mit Unit-Tests

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-23 15:43:36 +02:00