14 KiB
PENDENZEN — Aufgaben-Queue (Single Source of Truth)
Diese Datei ist die einzige verbindliche Aufgabenliste. HANDOVER.md enthält nur noch Kontext/Konventionen/Environment/Zielmodelle — keinen Backlog mehr.
Arbeitsprotokoll (ZWINGEND)
Worker-Instanz (führt aus):
- Zuerst diese Datei lesen, dann
CONVENTIONS.md+ verlinkte Detailquellen des Items. - Oberstes nicht-blockiertes Item aus 🔧 In Arbeit bzw. sonst ⏭️ Als Nächstes nehmen, fertig machen, verifizieren (
npx tsc --noEmit+npx vitest run+ trace-scan), abhaken, eine Ergebniszeile nach ✅ Erledigt schreiben (mit Commit-Hash, sobald committet). - Rückfrage-Recht: Bei Unklarheit/Design-Entscheid NICHT raten — Item mit
❓markieren, kurze Frage darunter notieren, nächstes freies Item nehmen. Fragen sammeln sich unter ❓ Offene Rückfragen. - Kein Arbeitsschritt endet ohne aktualisierte Liste. Status hier ist immer aktuell, sonst driftet es wieder.
- Worker committet nicht selbst und delegiert nicht weiter (Agent/Task verboten) — das macht die Hauptinstanz. (Konvention HANDOVER.)
Planungs-Instanz (mit dem Nutzer, kuratiert):
- Nimmt Nutzer-Feedback, pflegt daraus die Liste (rein/umpriorisieren/aufspalten). Führt selbst keine Queue-Items aus.
- Prüft ❓-Zeilen mit dem Nutzer, wandelt sie in konkrete Items.
⛔ Blocker (zuerst klären)
Toolchain prüfen— ERLEDIGT 2026-07-04 (macOS-Gerät):node/npm/cargo(1.96.0)/wasm-pack(0.15.0) alle vorhanden.npm install+npm approve-scripts esbuild wasm-pack …(npm gated Install-Scripts →allowScripts-Block inpackage.json, ungetrackt gelassen),rustup target add wasm32-unknown-unknown, beide WASM-Engines gebaut, Frontend gebaut,npm run tauri:build→ Mac-App (cad.app+cad_0.1.0_aarch64.dmg, arm64) läuft. Verifikations-Baseline grün:tsc --noEmitsauber,vitest run230/230,cargo test render3d56/56. Kein Blocker mehr für Engine-Slices auf diesem Gerät.
🔧 In Arbeit
- kernel2d-Port nach Rust/WASM (Plan: PORT_PLAN.md, Crate
src-tauri/kernel2d, TS-Referenz bleibtkernel2d.ts, Differential-Harnesssrc/geometry/kernel2d.parity.test.ts). Fortschritt:- Phase 1: Crate-Skelett + WASM-Fassade +
build:kernel2d—a78e7c7 - Phase 2: Primitive/Schnitt/Fläche/Kreis + Batch-Fassaden + Diff-Harness (Zufall+Golden) —
9e2c521 - Phase 3: Offset (Miter + 1e-9-Fallback) + Fillet —
c8ea2bf - Phase 4: Trim/Split/Join (
trimPolyline,splitAtIntersections,joinChains— Löwenanteil) —28471c1 - Phase 5:
roomBoundary/ceiling/roomArea-Flächen/stair+opening(Nutzer 2026-07-05: opening MITNEHMEN → Signatur-/Aufrufstellen-Änderung erlaubt) - Phase 6: TS-Fassade umstellen (alt →
kernel2d.legacy.ts), Suite grün,npm run build+ WASM sauber
- Phase 1: Crate-Skelett + WASM-Fassade +
⚠️ Zu prüfen (evtl. schon erledigt / Status unklar)
Snap an Wand-Schichttrennlinien— gelandet339202b(wallLayerBoundarySegmentsinsrc/tools/snapping.ts), verifiziert vorhanden.
⏭️ Als Nächstes
- SPIKE — Bild-Texturen in
render3d(RenderStyle::Texturedreal machen). Kleinster ehrlicher Durchstich: beweisen, dass der wgpu-3D-Renderer echte Bild-Texturen auf Wandflächen zeigt, sichtbar imspike3d-Fenster. Voller Auftrag/Übergabe: SPIKE_TEXTUR_render3d.md (Ausgangslage verifiziert, Symbol-Karte, exakter Umfang, harte Randbedingungen, Akzeptanz, Abschlussbericht). Kurz: UVs auf Wandflächen (planar in Metern, Alt-Pfad[pos,normal,color]bitgleich unangetastet) · prozedurales 256×256-Schachbrett (kein Asset, keinimage-Crate) · Textur-Bind-Group group 1 (Globals bleibt group 0) ·MESH_TEXTURED_WGSL(gleiche Beleuchtung, Albedo austextureSample) · Verdrahtung beiRenderStyle::Textured·spike3dumschaltbar (T). Nurrender3d-Crate, keine neuen Deps, Default-Build unverändert. Akzeptanz:cargo testgrün (Mesh-Regression + naga-Test fürMESH_TEXTURED_WGSL),spike3dzeigt weltmassstäbliche Textur. Ist der erste Durchstich der Textur-/PBR-Pipeline (§3D-REST unten) → am Ende ehrliche Lückenliste + Aufwandsschätzung für „richtig gutes" Texturing.
📋 Backlog (Priorität grob absteigend)
-
STRATEGIE — „von BIM-Tool zu echtem CAD". Direkt am Quellcode studierte Referenzen (OpenCADStudio/truck/acadrust) + Web-Import-Landkarte → konkrete, priorisierte Ansätze in RESEARCH_CAD_APPROACHES.md. Kern: (1) generisches Entity-Modell + Trait-Dispatch, (2) modeless Command-System (
StepInput-Funnel + Kommandozeile), (3) DWG/DXF-Round-Trip viaacadrust(MPL-2.0, pure Rust, WASM-tauglich), (4) volle Object-Snap-Schicht, (5) 3D-B-Rep später selektiv viatruck(Apache-2.0, Geometrie-Crates WASM-fähig, Booleans/Fillets noch instabil). Derkernel2d-Rust/WASM-Kurs ist damit bestätigt. Mit Nutzer priorisieren, welcher Ansatz zuerst. -
Schnitt- vs. Ansichts-Darstellung nach Schnitthöhe (BIM-Standard). Kern-Idee (Nutzer): jedes Bauteil bekommt getrennt eine Schnittlinie (kräftig, z. B. 0.25–0.35 mm, + Schnitt-Poché) und eine Ansichtslinie (Haarlinie); WELCHE gilt, entscheidet die z-Ausdehnung des Bauteils vs. die Schnitthöhe des Grundrisses (Default ~1 m):
- Bauteil wird von der Schnittebene GESCHNITTEN → Schnittlinie + Schnitt-Poché (heutiges Wandverhalten).
- Bauteil liegt ganz UNTER der Ebene (z. B. 30-cm-Wand bei 1 m Schnitthöhe, Brüstung, Podest) → nur „von oben gesehen" = Ansichtslinie/Haarlinie, KEINE Schnitt-Poché. ← genau der vom Nutzer genannte Fall.
- Bauteil liegt ganz ÜBER der Ebene (Decke/Slab, Unterzug) → Ansicht, üblicherweise gestrichelte Überkopf-Haarlinie.
- Passt konsistent zum bereits existierenden
viewHatchId(Ansichts-Schraffur) vs. Schnitt-Schraffur — die Linienstärke-Dualität (View-/Cut-Weight je Component) ist die natürliche Erweiterung derselben Logik. - Nicht nur cut/view, sondern cut / AUFSICHT / UNTERSICHT (Nutzer): ein Bauteil sieht von oben anders aus als von unten. Der Grundriss (Blick nach unten) zeigt Bauteile UNTER der Ebene in Aufsicht (Oberseite); ein Deckenspiegel/Reflected Ceiling Plan (Blick nach oben) zeigt Bauteile ÜBER der Ebene in Untersicht (Unterseite — z. B. Kassettendecke, Leuchten). Also je Component potenziell drei Darstellungs-Slots (Schnitt / Aufsicht / Untersicht) × {Schraffur + Linienstärke}. Das heutige
viewHatchIdist faktisch EIN View-Slot und vermischt Auf-/Untersicht; sauber wäre die Trennung. WELCHER Slot gilt, entscheidet die Blickrichtung der Sicht (Grundriss ↓ / Deckenspiegel ↑) UND die z-Lage relativ zur Schnittebene. - Verallgemeinert den Decken-Footprint-Clip (
a2f6923): „Decke unter Wand verdeckt" ist ein Spezialfall von „Ansichtsbauteil vs. schneidende/überdeckende Bauteile". - Aufwand: mittel–groß, phasenweise machbar (1: z-Extent-vs-Schnitthöhe-Klassifikation cut/above/below; 2: Ansichtslinie-Weight je Component + Haarlinie/gestrichelt; 3: 30-cm-Wände & Slabs verdrahten). Nicht zu komplex im Konzept — es ist der reguläre CAD/BIM-Weg (ArchiCAD/Vectorworks/Revit). Mit Nutzer Detailgrade/Defaults festlegen.
-
Ebene-Schraffur editierbar— gelandetdcb6ed5: Kategorie-Dialog (App.tsx,editor.hatch-Feld) hat<select>aufcat.hatch+HatchSwatch-Vorschau. Verifiziert vorhanden. -
GEO-BLOCK (gemeinsame Dateien io/geoContext/swissTopo/terrain/ContextImportDialog/Viewport3D/siteSlice):
- Reale Höhen + Projekt-MüM (EG-Referenzhöhe): Terrain georeferenziert bei realem z relativ dazu, Gebäude auf Terrain drapiert (heute alles z=0).
- Luftbild/SWISSIMAGE-Orthofoto als Textur aufs Terrain-Mesh.
- Importierte Geo-Elemente auf aktives Geschoss (
viewSlice.activeLevelId) + Gelände-Ebene. - Nordstern-Geo-Rendering: importierte Meshes (heute nur three.js
importedMesh/terrainMesh) auch inprojectToModel3deinspeisen. - 3D-Mesh-DXF/DWG-Import (heute DXF nur 2D); Building-Draping; höhere DTM-Auflösung.
-
ResourceManager Bauteile-Tab auf Master-Detail— bereits Master-Detail (ComponentsTab/ComponentDetailinsrc/ui/ResourceManager.tsx, Liste linksres-md-list/ Detail rechts). Verifiziert vorhanden. -
Einstellungs-Fenster (Rest): Verdrahtung ist da (
viewSlice.snapColor/marqueeColor→ PlanViewSnapMarker/Marquee, Defaults austheme/accents.ts, Projekt-MüM-FeldreferenceElevationMasl). Offen bleibt nur: Snap/Endpunkt-Default = ❓„aki" (s.u., derzeit Sora #5FA1C9) — reine Farbentscheidung des Nutzers. -
Bildschraffur: ambientCG/CGI-Colorfiles als Quelle (Material-Lib WIP — erst nach Freigabe); Bild-Filter Sättigung/Helligkeit/Kontrast/SW (
image.filters). -
E2b Schraffur-Kachel-Motiv (MotifEditor für HatchStyle-Tile wiederverwenden).
-
Linienstile aufräumen (Weight-only-Stile → „Volllinie", lineStyleId-Referenzen remappen).
-
2D-Plan z-Anordnen (Kombo-Schraffuren); Bild-Schraffur GL/DXF (heute Fallback).
-
AUDIT (DOSSIER-Studie): A1 Override-Regel-Engine; A2→A3 View-Snapshots → Print-Layout-Blätter (PDF pro Blatt); A5 reichere Öffnungen; B1 Text-Werkzeug (+ Kreis-Tool → Shortcuts 1&3); A4 Tragwerk; B2 Object-Info numerisch. (A6 Bauteil-Schedule-CSV erledigt.) Belege in
/tmp/dossier-ref/rhino/*.py. -
Elemente im Schnitt anwählbar; render3d 2D-Schraffur auf 3D-Flächen.
3D-REST (engine-schwer, bewusst NICHT blind — mit Nutzer angehen)
- Textur-/PBR-Pipeline (Sampler/Bindings/UV in wgpu; dann
textured-Style +Component.texture3d/Material echt rendern). Erster Durchstich als Spike terminiert → SPIKE_TEXTUR_render3d.md (steht unter ⏭️ Als Nächstes). Wand-Schicht-Bänder in 3D Option B— bereits umgesetzt inresolveWallBands(layered=true)(src/plan/toWalls3d.ts:236-241): 3D-Viewer-Pfad liefert je Materiallage ein eigenesWallBand(Dicke + Component-Albedo + Normalen-Versatz),pushSegmentemittiert jede Lage als eigene Voll-Box.dominantLayerColorist nur noch Fallback für den Schnitt-Einkörper-Pfad (layered=false). Verifiziert per Code-Lesung.- Ortho-Ray-Picking (aktuell perspektivischer Pick-Strahl; Front/Top/Side-Presets vor erster Navigation leicht ungenau).
- 3D-Griffe/Editieren (Wand-Endpunkte im 3D ziehen etc. — bisher nur Auswahl + Panel-Edit).
❓ Offene Rückfragen (an den Nutzer)
„aki" Snap/Endpunkt-Farbe— entschieden 2026-07-04: Sora #5FA1C9 als endgültiger Default festgeschrieben (src/theme/accents.tsDEFAULT_SNAP_COLOR, Doc aktualisiert). Frage geschlossen.- Floating-ResourceManager „headless" = ganz ohne Titelleiste? (aktuell MIT)
- Geo-Block: Projekt-MüM zuerst oder Nordstern-Geo-Rendering?
- Verifizieren/klären: Isometrie „echte" orthographische Iso (teilw. durch Locked-Iso
cb8fae5adressiert)? · TopBar-Detailgrad (zoom% ganz aus Footer)? · DOSSIER-Audit welche Features konkret übernommen?
✅ Erledigt (Verlauf, neueste oben)
Nur jüngste Session; ältere Historie siehe git log und HANDOVER-Narrative.
- 2026-07-05 Textur-Spike render3d (
RenderStyle::Texturedreal) — zweiter Vertex-Pfad[pos,normal,uv]aus dem Mesh abgeleitet (Alt-Pfad bitgleich, per Test belegt), prozedurales 256×256-Schachbrett (kein Asset/image-Crate), Textur-Bind-Group group 1,MESH_TEXTURED_WGSL(gleiche Beleuchtung, Albedo aus Sampler), Pipeline bitidentisch zur Haupt-Pipeline,spike3dperTumschaltbar. Umsetzung per Agent, Hauptinstanz verifiziert: cargo test 58/59 (inkl. naga-Test) grün, alle 4 Builds sauber. Visuelle Fenster-Abnahme durch Nutzer bestanden 2026-07-05 (Schachbrett korrekt,T-Umschaltung ok). Erster Durchstich der Textur-/PBR-Pipeline; ehrliche Lückenliste im Bericht —8556037 - 2026-07-04 Grundriss: Decke drückt nicht mehr durch die Wände — Decken-Umriss an Wand-Footprints (OBB) geclippt; Füllfläche strokelos, Umriss nur über unverdeckte Teilstücke (Überstände). Deckungsgleiche Decke ⇒ Umriss entfällt. vitest 230, tsc sauber —
a2f6923 - 2026-07-04 T-Stoss-Putznaht entfernt — L-Seitenlinie nur noch bei materialFREMDEM Nah-Putz; materialgleicher Putz verschmilzt nahtlos (Nutzer-Direktive „Naht entfernen"). TS+Rust synchron, 3 Tests gezogen, cargo 8/8 —
a5ebfa7 - 2026-07-04 Snap-Farbe entschieden: Sora #5FA1C9 als endgültiger Default festgeschrieben (
DEFAULT_SNAP_COLOR, Doc), „aki"-❓ geschlossen. - 2026-07-04 Mac-Build via Tauri + Queue-Abgleich — Toolchain auf macOS-Gerät verifiziert,
cad.app/cad_0.1.0_aarch64.dmggebaut & gestartet. Verifikations-Baseline grün (tsc/vitest 230/cargo 56). Queue-Reconciliation: Toolchain-Blocker, Snap-Slice (339202b), Ebene-Schraffur (dcb6ed5), Bauteile-Tab-Master-Detail, Einstellungs-Verdrahtung UND Wand-Schicht-Bänder 3D (Option B,toWalls3d.ts) waren allesamt bereits gelandet, aber in PENDENZEN noch als offen gelistet → abgehakt. (kein Code-Commit) - 2026-07-04 Öffnungen als echte Boolean-Löcher (+ Deckentrim-nur-3D) — Fenster/Türen = 1 Wandkörper mit rechteckigen
holes(Rechteck-Gitter-Zerlegung + Laibungsquads), Segment-Boxen weg; Deckentrim nur noch im 3D-Pfad, Schnitt volle Höhe. Pflicht-Testfall versetzt-überlappende Fenster grün. cargo test 56, vitest 230, build:engine3d + tsc sauber —1407c68 - 2026-07-04 Joins Phase 1c Durchgangswand am T-Stoss echt aufbrechen (spanCutouts) —
c5a344d - 2026-07-04 Locked-Iso-Fix freie Kamera bleibt nach Ortho-Preset orthografisch —
cb8fae5 - 2026-07-04 3D-Live-Schnittebene mit schraffierten Schnittflächen —
03f0c40 - 2026-07-04 Joins Phase 2 Merge-Regel im Schnitt (gleiche Komponente verschmilzt) —
82d354f