HANDOVER: Übergabe an neue Instanz — Nordstern 2/3/4/5 gelandet, Schnitt-UI-Anbindung offen

This commit is contained in:
2026-07-03 18:18:52 +02:00
parent b4c4a2cc6b
commit 3402e6ac96
+79 -25
View File
@@ -41,38 +41,92 @@ Code/Doku noch in der Git-Historie.
vor dem Edit frisch lesen (der „modified since read"-Guard verhindert blindes vor dem Edit frisch lesen (der „modified since read"-Guard verhindert blindes
Überschreiben). Überschreiben).
## >>> STAND 2026-07-03 (Nordstern-Session) — ZUERST LESEN <<< ## >>> STAND 2026-07-03 Abend (Nordstern-Session, Übergabe an neue Instanz) — ZUERST LESEN <<<
Ein Master-Branch (alle Feature-/Worktree-Branches konsolidiert und gelöscht), alles auf Ein Master-Branch (alle Feature-/Worktree-Branches konsolidiert und gelöscht), alles auf
origin/master gepusht. Heute gelandet (jeweils eigene Commits, Reihenfolge = Historie): origin/master gepusht, Working Tree sauber bis auf eine vorbestehende, unabhängige
- **7ca5197** Resource Manager: Materialien-Tab (PBR-Kugel-Vorschau via geteiltem Offscreen- Materials-Library-WIP (`.gitignore`, `public/assets/materials/manifest.json`,
`src/materials/library.ts`, `scripts/fetch-materials.mjs` — NICHT anfassen/reverten, ist
fremde in Arbeit befindliche Sache, nicht Teil der Engine-Session). Heute gelandet, acht
Commits in dieser Reihenfolge:
1. **7ca5197** Resource Manager: Materialien-Tab (PBR-Kugel-Vorschau via geteiltem Offscreen-
Renderer, Suche + Kategorie-Chips, lazy per IntersectionObserver). Renderer, Suche + Kategorie-Chips, lazy per IntersectionObserver).
- **c8a4188** render3d als WASM/WebGPU-Viewport in der App (`?engine=wasm` bzw. localStorage 2. **c8a4188** render3d als WASM/WebGPU-Viewport in der App (`?engine=wasm` bzw. localStorage
`cad.rendererMode`; three.js bleibt Default). Geteilter wgpu-22-Shim in `cad.rendererMode`; three.js bleibt Default). Probe: scripts/probe-engine3d.mjs (HEADFUL=1
src/engine/requestDeviceShim.ts. Probe: scripts/probe-engine3d.mjs (HEADFUL=1 nötig — nötig — headless Chromium präsentiert keine WebGPU-Frames, gilt auch für render2d).
headless Chromium präsentiert keine WebGPU-Frames, gilt auch für render2d). 3. **54211b1 + 76029db** render3d/src/section.rs: Schnittebene → Cut-Polygone + sichtbare/
- **54211b1 + 76029db** render3d/src/section.rs: Schnittebene → Cut-Polygone + sichtbare/
verdeckte projizierte Kanten, inkl. Öffnungen (Brüstung/Sturz-Teilrechtecke, Durchblick). verdeckte projizierte Kanten, inkl. Öffnungen (Brüstung/Sturz-Teilrechtecke, Durchblick).
29 Tests, Beweis-SVG docs/welle-c-hlr-spike/section-engine-proof.svg, Doku 29 Tests, Beweis-SVG docs/welle-c-hlr-spike/section-engine-proof.svg, Doku
docs/design/engine-section-pipeline.md. Eigen-Engine-Ersatz für den OCCT-Pfad (66 MB WASM). docs/design/engine-section-pipeline.md. Eigen-Engine-Ersatz für den OCCT-Pfad (66 MB WASM).
- **ce6bd26** 2D-Engine-Parität: WASM-Pfad deckungsgleich zum SVG-Referenzpfad (?gl=0!). **mesh.rs (3D-Vollkörper-Extrusion) berücksichtigt Öffnungen weiterhin NICHT** — dokumentierte,
Fixes: text_scale entkoppelt, glyphon ColorMode::Web, z-basierte Maler-Reihenfolge bewusst offene Lücke (Cut/Ansicht-Pipeline und 3D-Solid-Mesh sind bis dahin inkonsistent).
(draw_sequence), CSS-Klassenfarben in toRenderScene, greyed 0.3, Dämmwellen-Bézier + 4. **ce6bd26** 2D-Engine-Parität: WASM-Pfad deckungsgleich zum SVG-Referenzpfad (**Referenz ist
userSpaceOnUse-Anker + widthScreen-Schraffurbreite. Probe: scripts/probe-engine-parity.mjs. `?gl=0`**, nicht der Default!). Fixes: text_scale entkoppelt, glyphon ColorMode::Web,
- **4b02e40** render2d Headless: Feature `headless`, HeadlessRenderer ohne Surface (Vulkan), z-basierte Maler-Reihenfolge (draw_sequence), CSS-Klassenfarben in toRenderScene, greyed 0.3,
CLI-Bin render_png, Golden-Test (bit-exakt auf dieser Maschine) tests/golden/demo.png, Dämmwellen-Bézier + userSpaceOnUse-Anker + widthScreen-Schraffurbreite. Probe:
Doku docs/design/engine-headless.md. scripts/probe-engine-parity.mjs.
5. **4b02e40** render2d Headless: Feature `headless`, HeadlessRenderer ohne Surface (Vulkan),
CLI-Bin render_png, Golden-Test (bit-exakt) tests/golden/demo.png, Doku
docs/design/engine-headless.md.
6. **382771b** Vektor-PDF aus der RenderScene (**Nordstern 2 abgeschlossen**): exportPdf baut
jetzt `planToRenderScene(plan)` — derselbe Aufruf wie der Viewport — und serialisiert über
den neuen `src/export/sceneToPrintSvg.ts` nach Papier-mm (PEN_STEPS-Quantisierung wie bisher,
widthScreen-Schraffurbreiten korrekt in mm umgerechnet, Texte jetzt als echte Vektor-Texte —
der alte Pfad liess sie komplett weg). `planToPrintSvg.ts` bleibt nur als Referenz stehen
(Kopfkommentar markiert sie als abgelöst). Verifiziert per `pdftoppm`: 53.51×43.69mm vs.
erwartet 53.45×43.45mm bei 1:100. **Bekannte Alt-Lücke, nicht neu:** Zeilenabstand
mehrzeiliger Stempeltexte in `toRenderScene.ts` ist nur bei Massstab 1:100 exakt (STAMP_REF_N),
bei anderen Export-Massstäben proportional leicht daneben — betrifft Viewport identisch, nicht
PDF-spezifisch, absichtlich nicht mitgefixt (out of scope für den additiven Umbau).
7. **b4c4a2c** wgpu 22 → 29, glyphon 0.6 → 0.11 (glyphon pinnt `^29`, obwohl wgpu 30 existiert).
`src/engine/requestDeviceShim.ts` komplett entfernt (das 22er-Limit
`maxInterStageShaderComponents` wird von 29 nicht mehr gesendet). Verifiziert: cargo check
nativ (render2d/render3d/src-tauri), cargo test render2d 17/17 + Golden weiterhin bit-exakt,
render3d 29/29, wasm32 --features web für beide, tsc + npm build — alles grün.
**Bei Abbruch dieser Session evtl. noch unfertig im Working Tree** (Agents liefen noch): **Damit sind Nordstern 2, 3, 4 (Kern) und 5 gelandet.** Verifiziert per Screenshot: App läuft im
(a) Vektor-PDF aus der RenderScene: src/export/sceneToPrintSvg.ts (neu) + exportPdf.ts- Electron-Fenster (`env -u ELECTRON_RUN_AS_NODE npm run electron`), 3D-Perspektive rendert das
Umstellung — Ziel: PDF aus derselben Szene wie der Viewport (Nordstern 2). (b) wgpu-Upgrade echte Modell über den Engine-Renderer (Umschalter unten rechts: WebGL2/Engine).
22→aktuell in render2d+render3d inkl. glyphon-Mithub und Ausbau von requestDeviceShim.ts.
Gates für beide: tsc/build/vitest bzw. cargo check/test nativ+wasm32, Proben probe-pdf.mjs / **WICHTIG — was NICHT fertig ist (User hat das selbst am Screenshot bemerkt):** Die
probe-engine-parity.mjs / probe-engine3d.mjs. Wenn die Diffs sauber und Gates grün: committen Zeichnungsebenen vom Typ „Schnitt"/„Ansicht" (z.B. „Schnitt A", „Ansicht Süd" in der
(Regeln oben beachten). Danach als Nächstes: Schnitt-Pipeline an UI/TS anbinden (SectionOutput Ebenen-Liste rechts) sind weiterhin **Stubs** — sie zeigen KEINEN echten Inhalt. Das
→ Plan-Primitive, Schnitt-Views statt Stubs), src-tauri/-Ordner umbenennen/entflechten (User render3d-Schnitt-Modul (section.rs, Commits 54211b1/76029db) liefert das Rohmaterial
will keine Tauri-Reste im Namensraum; Electron ist die Shell), mesh.rs-Öffnungen, (SectionOutput: cut_polygons + visible_edges/hidden_edges), ist aber **noch nicht an
Nordstern 1 (mm-Strichbreiten-Audit). Nicht-Engine-Backlog weiter unten. App.tsx/das Dokumentmodell angebunden** — es gibt noch keinen Code-Pfad, der beim Öffnen
einer Schnitt-/Ansichts-Zeichnungsebene das render3d-Modell durchschneidet und das Ergebnis
in Plan-Primitive für PlanView/render2d übersetzt. Das ist der wichtigste nächste Schritt
(Nordstern 4b, siehe Liste unten).
**Nächste Schritte, priorisiert:**
1. **[Nordstern 4b] Schnitt-Pipeline an UI anbinden** — grösster Brocken: SectionOutput
(Rust/render3d) → TS-Seite (WASM-Aufruf analog `toWalls3d.ts`/`nativeSync.ts`) → neue
Plan-Primitive-Kind(e) für Cut-Polygone + sichtbare/gestrichelte Kanten → generatePlan.ts
bindet das für DrawingLevel vom Typ Schnitt/Ansicht ein, statt des aktuellen Stub-Verhaltens.
PlanView.tsx rendert es wie normale Primitive (Parität-Infrastruktur aus ce6bd26 gilt 1:1).
2. **mesh.rs: Öffnungen im 3D-Vollkörper** — 3D-Ansicht zeigt Öffnungen zwar korrekt (das war
schon vorher so, per Mesh-Aussparung), aber das Schnitt-Modul rechnet gegen dieselben
Prismen — sobald 4b. steht, hier gegenprüfen ob mesh.rs nachgezogen werden muss oder ob es
getrennte Datenwege bleiben.
3. **Aufräumen:** `src-tauri/`-Ordner umbenennen/entflechten — User will keine Tauri-Reste im
Namensraum, Electron ist die Shell. render2d/render3d/geometry sind eigenständige Workspaces
ohne Tauri-Abhängigkeit, könnten z.B. nach `engine/` oder `crates/` wandern. Toten Tauri-Host
(`cad-tauri`, tauri.conf.json, native.rs/native2d/native3d) explizit mit dem User klären:
behalten (Beweis für späteren All-Native-Schritt) oder entfernen.
4. **[Nordstern 1]** Papier-mm-exakte Strichbreiten-Audit über den gesamten Engine-Pfad
(Screen bei jedem Zoom/Massstab = Druck) — nach 2/3/4/5 jetzt der einzige verbliebene
unbearbeitete Nordstern-Punkt.
5. Nicht-Engine-CAD-Backlog (Wand-Referenzlinien, Editier-Welle, nahtfreie Verschneidung,
Overrides/Multi-Page-Layouts) — weiter unten in diesem Dokument, nachrangig zur Engine-Arbeit.
**Arbeitsweise dieser Session (fortführen):** Pipeline aus bis zu 2 parallelen Sonnet-Subagents
(User-Regel: immer 2 am Laufen halten, nachfüllen sobald einer fertig ist). Jeder Agent bekommt
explizit zugewiesenes Terrain (Dateipfade), damit sich parallele Agents nicht überschreiben.
Ergebnisse werden von der Hauptinstanz verifiziert (Screenshots ansehen, Gates laufen lassen)
und committet — Agents committen nie selbst. Nach Prozessabstürzen (kam heute zweimal vor)
lässt sich ein Agent per SendMessage mit seiner agentId aus dem Transcript fortsetzen, sein
Working-Tree-Zwischenstand bleibt erhalten.
## >>> ENGINE-NORDSTERN (User-Direktive 2026-07-02): die volle Engine-Vision <<< ## >>> ENGINE-NORDSTERN (User-Direktive 2026-07-02): die volle Engine-Vision <<<