Files
karim 961b3c0396 Snapshot: Wand/Öffnung Multi-Surface-Select + Z-Drag + Brüstungs-Mitnahme
Stable working state after a long iteration session. The plugin now supports:
- Multi-Surface-Select für alle Element-Typen (Türen/Fenster/Treppen/Tragwerk)
- Wand-Z-Drag → unbound mode (UK/OK-Override, Wand vom Geschoss entkoppelt)
- Wand-Z-Drag nimmt verknüpfte Öffnungen mit (Brüstung += delta_z via Idle-Pfad)
- Öffnungs-XY-Drag snapt direktional auf Wand-Tangente
- Öffnungs-Z-Drag passt Brüstung an (Fenster sofort sync, Tür deferred)
- Wand-Delete kaskadiert Öffnungen (deferred via Idle, robust gegen _Rotate/_Move)
- Source-Cascade beim Öffnungs-Delete (deferred analog Wand-Kaskade)
- Listener-Cleanup robust gegen _reset_panels.py Reload (Refs in
  _dossier_runtime_event_refs gespeichert, vor Re-Install deregistriert)
- _count_same_id_type filtert IsDeleted (verhindert Source-Duplikat-Bug bei Move)
- Frontend: Brüstungs-Slider für Tür ("Schwelle"), Flügel-Block nur bei Fenster

Plus aus früherer Phase dieser Session:
- Dossier-Launcher Auto-Load via Rhinos StartupCommands-XML
- Default-Pfad zeigt auf gebundeltes startup.py (out-of-the-box für neue User)
- Splash-Window beim Plugin-Load mit native macOS rounded corners
- Diverse Launcher-Verbesserungen (Brüstungs-Default, tauri.conf, capabilities)

Known issue: bei Multi-Select-Move mit vielen Sub-Volumen kann sporadisch
"Unable to transform" auftreten (Rhinos Move-Operation kollidiert mit Wand-
Regen). Tür-spezifischer Defer-Pfad mildert das, Fenster läuft sync.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-18 01:50:45 +02:00

6.4 KiB

Dossier — Projekt-Anweisungen für Claude

Was das ist

Dossier ist ein Rhino 8 Plugin (Mac) mit React-WebView-Panels für architektonische Workflows (Wände, Decken, Öffnungen, Räume, SIA-416, Plan-Layouts). Teil der OpenStudio-Suite. Schwester-App: Rapport.

Dossier-Launcher ist eine separate Tauri-App (launcher/), die Projekte verwaltet, Settings hält (auch für den Plugin), Auto-Updates liefert und im System-Tray lebt.

Runtime: Python 3.9 CPython (verifiziert 2026-05-17)

Dieser Ordner DOSSIER/ läuft mit Rhinos neuem Python-3-Engine (CPython 3.9.10 via Script Editor). Der Vorgänger rhino-panel/ bleibt frozen als IPy-2.7-Referenz.

Wie geladen wird (WICHTIG):

  • _ScriptEditor → Datei öffnen + Run-Button → CPython 3.9 (Shebang #! python3 wird respektiert). Das ist der funktionierende Pfad.
  • Rhino Options → General → Command Lists → „Run these commands every time a model is opened" → Form: _-RunPythonScript "/voller/pfad.py" (mit Dash + Quotes). Persistiert in Options/General/StartupCommands der settings-Scheme__Default.xml. Lädt das Skript bei jedem Rhino-Start silent, ohne File-Dialog. Trotz Dash bleibt Shebang #! python 3 wirksam → CPython 3.9 (verifiziert 2026-05-17 Mac Rhino 8). Der Launcher trägt diesen Eintrag automatisch ein.
  • ⚠️ _-RunPythonScript "path.py" mit Dash in der interaktiven Command- Line → IronPython 2.7 (Legacy). NICHT benutzen für DOSSIER, sonst crasht die SectionStyle-Logik etc.
  • ⚠️ _RunPythonScript path.py ohne Dash — in der Command-Line OK (Py3 via Shebang, ohne Quotes, in einer Zeile). Im StartupCommands-Feld öffnet diese Form aber einen File-Dialog statt zu laufen.

Migration-Stand:

  • Repo kopiert nach DOSSIER/, alle Pfade umgestellt
  • Shebangs aller Files auf #! python3 (ohne Space) — Format das Rhino erkennt
  • Code war bereits Py3-syntax-kompatibel (kein xrange/iteritems/unicode())
  • Plugin läuft als CPython 3.9.10, alle 9 Panels registrieren
  • Reflection.Emit + Eto.Forms + Bridge funktionieren
  • Rhino.DocObjects.SectionStyle() instanziierbar + layer.SetCustomSectionStyle() verfügbar — die volle Section-Style-API ist jetzt zugänglich (Anlass der Migration)

Bei Code-Arbeit — Reihenfolge

  1. ARCHITECTURE.md zuerst lesen — Module-Map, Konventionen, Schwachstellen.
  2. Dann das relevante Modul lesen. Nicht raten was drin steht.
  3. Erst danach editieren.

Anti-Over-Engineering

Diese Regeln sind nicht verhandelbar — Verstöße kosten Zeit beim Aufräumen.

  • Keine Abstraktionen einführen, die ein konkretes Problem lösen. Drei ähnliche Zeilen sind besser als eine Hilfsfunktion mit drei Aufrufstellen.
  • Kein „aufräumen drumherum". Ein Bugfix bleibt ein Bugfix.
  • Kein Error-Handling für Szenarien, die nicht eintreten können.
  • Keine Feature-Flags, keine Migrations-Shims parallel zur alten Funktion.
  • Keine Kommentare die WAS sagen — nur WARUM-Kommentare wenn nicht-offensichtlich.
  • Keine erfundenen Module/Funktionen/Flags. Erst grep, dann editieren.

Anti-Patterns (aus echten Sessions)

  • try/except: pass als Bug-Verstecker. Lieber print("[MODUL] err:", ex) und weiter.
  • Sticky-Reads ohne is not None-Check. Siehe ARCHITECTURE.md §4.4.
  • „Cleveres" Refactoring von Wand-Geometrie. elemente.py (7244 LOC) enthält BIM-Logik die in Echtbau-Projekten läuft. NIE in einem Rutsch modularisieren ohne expliziten Auftrag + Test-Plan.
  • Mac vs. Windows Rhino-Pfade verwechseln. Mac Rhino 8 speichert Window-Layouts als XML in Scheme__Default/workspaces/<GUID>.xml, nicht als .rwl.
  • Python-Runtime annehmen statt prüfen. Diagnose mit print(sys.version) — das hat uns 4 Wochen versteckte IPy2.7 gekostet.
  • document.title mit Umlauten kaputt machen. UI-Strings dürfen Umlaute; Python-Backend bevorzugt ue/oe/ae in Identifiern, Layer-Codes, UserString-Values.

Python-Konventionen — POST-MIGRATION TARGET

Sobald die Migration durch ist, gilt:

  • Datei-Header: # ! python3 + # -*- coding: utf-8 -*- (werden dann wirksam)
  • Aufruf in Rhino: _RunPythonScript "path" (ohne Dash!) — sonst startet IPy 2.7. Alternative: _-ScriptEditor mit Code-Engine
  • print(x) — IMMER mit Klammern (Python-3-Style)
  • builtins statt __builtin__
  • f-strings erlaubt: f"value: {x}"
  • CLR: import clr; clr.AddReference("System.Drawing"); from System.Drawing import Color
  • UI-Strings dürfen Umlaute, Code-Identifier nicht (tuer, nicht tür)

Build & Reset (Cheatsheet)

# Rhino-Panels Frontend
npm run build                          # im Repo-Root

# Launcher Frontend
cd launcher && npm run build

# Launcher Backend Check
cd launcher/src-tauri && cargo check

# Launcher Release (signiert, schreibt latest.json)
cd launcher && ./scripts/release.sh

# Python-Syntax-Check (kein Rhino nötig)
python3 -c "import ast; ast.parse(open('rhino/elemente.py').read())"

# Runtime-Verify in Rhino (welcher Python-Engine läuft wirklich?)
_RunPythonScript /Users/karim/STUDIO/DOSSIER/rhino/startup.py
# Erste Zeile sollte zeigen: [STARTUP] Python: 3.x ... nach Migration

Plugin reset in Rhino (nach Python-Änderungen):

_RunPythonScript /Users/karim/STUDIO/DOSSIER/rhino/_reset_panels.py

Design-System

  • Petrol-Grün --accent: #5fa896 (Hauptakzent), dunkles Petrol #2f5d54
  • Hintergrund --bg: #0e1413
  • Fonts: Krungthep/Archivo Black für „DOSSIER"-Logo, Playfair Display für Headings, DM Mono für Body
  • Konsistent zur Website (/Users/karim/STUDIO/DOSSIER-WEBSITE/)

Settings-Files (Pfade)

  • Launcher → Rhino IPC (file-based, kein Socket): ~/Library/Application Support/ch.gabrielevarano.Dossier/dossier_settings.json
  • Legacy-Fallback (read-only): ~/Library/Application Support/RhinoPanel/dossier_settings.json
  • Launcher-Cache: ~/Library/Application Support/ch.gabrielevarano.Dossier/recent.json

Vorgänger-Codebase

Der alte Ordner /Users/karim/STUDIO/rhino-panel/ bleibt als read-only Referenz stehen. Wenn ein Feature dort funktioniert das hier noch nicht portiert ist — dort schauen, dann hier neu in Python-3-Style implementieren. Nicht einfach kopieren, sondern beim Übertragen den Migrations-Style anpassen.

Wenn unklar — fragen, nicht raten

Wenn die Aufgabe ambig ist oder Konsequenzen über die offensichtlichen hinausgehen: erst nachfragen.