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>
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#! python3wird 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 inOptions/General/StartupCommandsdersettings-Scheme__Default.xml. Lädt das Skript bei jedem Rhino-Start silent, ohne File-Dialog. Trotz Dash bleibt Shebang#! python 3wirksam → 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.pyohne 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
ARCHITECTURE.mdzuerst lesen — Module-Map, Konventionen, Schwachstellen.- Dann das relevante Modul lesen. Nicht raten was drin steht.
- 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: passals Bug-Verstecker. Lieberprint("[MODUL] err:", ex)und weiter.- Sticky-Reads ohne
is not None-Check. SieheARCHITECTURE.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.titlemit Umlauten kaputt machen. UI-Strings dürfen Umlaute; Python-Backend bevorzugtue/oe/aein 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:_-ScriptEditormit Code-Engine print(x)— IMMER mit Klammern (Python-3-Style)builtinsstatt__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, nichttü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.