claude sync: memories + settings

This commit is contained in:
marcus.hinz
2026-06-24 19:07:54 +02:00
parent 567aac33ad
commit 4ae1b76049
8 changed files with 117 additions and 7 deletions
+9 -7
View File
@@ -1,10 +1,4 @@
{
"enabledPlugins": {
"frontend-design@claude-plugins-official": true
},
"promptSuggestionEnabled": false,
"awaySummaryEnabled": false,
"theme": "dark",
"permissions": {
"allow": [
"Bash(git add:*)",
@@ -19,5 +13,13 @@
"Bash(cd:*)",
"Bash(~/claude-projects/global/bin/git-sync:*)"
]
}
},
"enabledPlugins": {
"frontend-design@claude-plugins-official": true,
"swift-lsp@claude-plugins-official": true
},
"promptSuggestionEnabled": false,
"awaySummaryEnabled": false,
"tui": "fullscreen",
"theme": "dark"
}
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 435 KiB

+4
View File
@@ -1,3 +1,7 @@
# Memory Index
- [Würth plato-backend ist strikt read-only](wuerth-plato-backend-read-only.md) — niemals Änderungen in /home/marcuh/git/wuerth/fahrzeugeinrichtung-plato-backend
- [adesso-cpq Verbau-Architektur](cpq-verbau-architektur.md) — Product/Modell/Graph, BLAST-Validierung, Speedmaxx-Quelle; morgen früh zuerst: BLAST-Entities + Converter
- [Keine Spekulation/Unterstellung](feedback-keine-intent-unterstellung.md) — keine „vermutlich"-Sätze über Absichten Dritter oder technische Ursachen; bei Unklarheit „weiß ich nicht"
- [adesso-cpq MR-Ziel](cpq-branching-mr-ziel.md) — MRs künftig auf development/Integration statt main; Branch bald einrichten
- [Kein nextTick](feedback-kein-nexttick.md) — Vue nextTick hartes Verbot; Timing reaktiv über watch/v-if lösen
@@ -0,0 +1,16 @@
---
name: cpq-branching-mr-ziel
description: "adesso-cpq MRs sollen künftig nicht auf main zielen, sondern auf einen Integrations-/development-Branch"
metadata:
node_type: memory
type: project
originSessionId: 00f129fd-620a-465c-8fdf-02b2ba4c3ba6
---
In adesso-cpq (git.heron.at/pzm/geko/adesso-cpq) sollen Merge Requests **nicht direkt auf `main`** zielen. Der User will einen Integrations-/`development`-Branch als MR-Ziel — existiert noch nicht (Stand 2026-06-24).
**Why:** Bei MR #12 (chore/dev-tooling-and-hygiene → main) hat der User explizit gesagt, dass ihm `main` als Ziel nicht gefällt. Nicht sofort ändern, aber bald einrichten.
**How to apply:** Bei neuen MRs nachfragen/prüfen, ob schon ein development-Branch existiert, und dann dorthin statt auf `main` zielen. Default `origin/HEAD → main` nicht blind übernehmen.
Bezug: [[cpq-verbau-architektur]]
@@ -0,0 +1,56 @@
---
name: cpq-verbau-architektur
description: "adesso-cpq Verbau/Modell-Architektur (Product/Modell/Graph, BLAST-Validierung) + nächster Schritt für morgen früh"
metadata:
node_type: memory
type: project
originSessionId: d789290f-6631-426e-9639-e7ea7a60e8f9
---
Stand der Architektur-Diskussion adesso-cpq (Schutzzaun-Konfigurator). Repos: ~/projects/adesso-cpq (frontend/CPQ), ~/projects/geko-core (Speedmaxx-Backend). Constraint-Typen folgen noch; jetzt erst Infrastruktur.
## Kernmodell (erarbeitet, trägt)
- **Product = zweigeteilt:** (1) Graph mit PMIs/Collidern/Transforms = der „wertlose" Graph (keine Autorität, nur Darstellung + Approximationsdaten); (2) Variablen = Config + Constraints.
- **Product = Entity** (BaseEntity, BLAST-validiert). **Konstrukt aus Produkten = auch Entity = Modell.** Rekursiv: Modell = Produkt (Blatt) | Konstrukt aus Modellen. Aus den Entities wird am Ende der wertlose Graph projiziert.
- **Quellen (mehrere!):** Speedmaxx ist führend (~60%), daneben eigene Modelle (optimaler gestaltbar) + weitere Lieferanten. Darum muss BLAST gegen ein **normalisiertes** Modell validieren, nicht gegen Quell-Spezifika oder den rohen Graphen. Im Zweifel ein **Converter**, der Speedmaxx & whatever normalisiert.
## Speedmaxx-Realität (Quelle der Wahrheit, NICHT der cpq-Mock)
- Branch geko-core `feature/get-scene-from-speedmaxx`: `executeCommand``ExecuteCommandResponse { ui: Record<string,SpeedmaxxVariable>, viewing, error }`.
- `ui` = Config+Constraints: `domain.{min,max,step,valuelist,default}`, `required/visible/editable/multivalue/datatype/unit/...`. Hier stecken „≤6m / ≤10 Teile".
- `viewing` = die Szene (wertloser Graph). Controller `loadScene` ruft `combo1_cmd`, ProductCategory "Schutzzaun", Variables wizard → gibt `result.viewing`.
- Format des Graphen (= Alttool = `assets/scenes/zaun.json`): `sceneGraph_entity { handles[] }`; Hierarchie flach über `component_transform.key/parentKey` (root → asm_root → produkt-node → ~50 Blatt-Teile); `component_pmi` (z.B. CS_SVS/CS_BASIS am Produkt-Knoten) = Andockpunkte; `component_collider`; Länge teils in `scale.z` eingebacken.
- **FALSCH in cpq:** `packages/frontend/src/util/speedMaxx2Visual.ts` erfindet `{environmentId, nodes:[{id,label}]}` — gibt es bei Speedmaxx nicht. Muss korrigiert werden.
## Validierung / BLAST (entschieden)
- Variablen → BLAST direkt (per-Produkt + Querregeln).
- Geometrie-Constraints (≤10 Teile, Gesamtlänge, PMI-Kompatibilität, Platz/Kollision) stehen NICHT in Variablen → ergeben sich aus PMIs/Collidern/Transforms.
- Geometrie-RECHNUNG läuft in der Engine (nicht im BLAST-Kern, der ist geometrie-agnostisch). Aber: **Engine wird AUS BLAST getriggert.** BLAST ist der Orchestrator und reaktiv (Änderung → sofort wirksam), Cache sparse pro Entity-ID → Engine läuft nur für den betroffenen Bauzug.
- Zwei Topos-Ebenen: per Einzelteil + konsolidiert (Bauzug). Konsolidierter Topos ruft die Engine, holt Verdikt, validiert.
- Hebel = Abhängigkeitsschärfe (welcher Topos hängt woran). Wird über Constraint-Typen geregelt (kommt noch).
- Roher Graph geht NIE nach BLAST; nur Variablen + destillierte Graph-Fakten/Verdikte.
## Schichten (Zielbild)
- **UI** spricht nur mit dem **Scene/Model-Service** (Name noch offen), gibt dessen Ergebnis als Graph/Commands an fire.
- **Scene/Model-Service** (core): hält Modell/Bauzüge, PMI-Verbindungen, rechnet Constraints, projiziert Modell → Graph. Intern getrennt: Modell/Constraint (entscheidet, kennt Platz) vs. Projektion (stumpf, entscheidet nichts).
- **ProductService** (gehört nach **core**, FE-agnostisch): getProduct/updateProduct, liefert nur Einzelteile, **quelle-agnostisch** über die Asset-Abstraktion (datamanager-Connectors in environment.config.json: path+typeKey-Templates; dev=Assets, live=Server). Darf NICHT wissen, woher.
- **fire/Graph**: rendert, ist außerhalb unserer Engine interaktiv und arbeitet mit Näherungen (Collider). Wir haben das letzte Wort; nach jeder Interaktion **Vollaustausch** des Graphen.
- **Gemeinsame Constraint-Sprache nötig** (3x bestätigt): zwischen zwei gemeldeten Interaktionen handelt fire autonom; es braucht dieselben Constraints. Lösung: **deklarative Daten im Graph** (Collider/PMI/Grenzen), kein geteilter Code. Offen: diese deklarativen Constraints und die exakten BLAST-Regeln müssen aus EINER Quelle stammen, sonst Drift.
## Bestand an Typen (adesso-cpq)
- shared: `BaseEntity { id }`. core: nur `EntityStore`, keine Typen.
- blast: `ObjectSchema<T extends BaseEntity>`, `ToposKey`, `BehaviourResolver`, `HintResolver`, `Diagnostic`, `Severity('error'|'warn'|'info')`, `Behaviours`, `Hint`, `FieldState`, `ItemResult`, `BlastValidator`.
- visual-runtime: `Visual3D` (setScene/execute/subscribe/camera), `CameraTransformation{translation,rotation,scale}`, `ConnectorConfig`, `Visual3DConfig`, `Observable<T>`.
- **Szenegraph-Format-Typen (SceneGraph/Handle/Component, component_transform/pmi/collider) sind HEIMATLOS** — nur in `utils/sceneMerger.ts` (fliegt raus) und als `any` in Fire3D.vue/DefaultCommandProzessor/SceneReplayProcessor. Brauchen EINEN Besitzer (Fundament für Product/Scene/fire).
- `utils/sceneMerger.ts`: addProductInstance/mergeScene/generateUniqueIds/positionScene/calculateNextPosition — fliegt raus (falscher Ort `utils`, zu groß, vermischt Mechanik/Platzierung/Instanz). generateUniqueIds vom User als „Mist" markiert.
## Offene Baustelle aus dieser Session
- `packages/frontend/src/services/product-service.ts` habe ich angelegt (getProduct/updateProduct, AssetLoader, lokaler SceneGraph-Typ). User-Kritik: zu nah an UI (gehört nach core), zuviel vorab definiert (Interfaces/Typen ohne Plan). Morgen entscheiden: behalten/verschieben/löschen. NICHT eigenmächtig Typen streuen.
## MORGEN FRÜH ZUERST
1. GENAU auf die **Entities für BLAST** schauen: was ist exakt die normalisierte Entity (Product, Modell). Wahrscheinlich ein **Converter** rein, der Speedmaxx (ui+viewing) und andere Quellen normalisiert. Das MUSS sitzen, sonst Schmerzen.
2. Dann Infrastruktur/Schichten verorten (ProductService → core, Format-Typen-Heimat).
3. Constraint-Typen erst danach.
## Arbeitsregeln des Users (hart)
- Sehr knapp, exakt das Gefragte, KEINE ungefragten Optionen/Vorschläge/Typen. Eins nach dem anderen, langsam. Nicht 3 Schritte vorausbauen. Keine Antwort mit Rückfrage/Angebot beenden. Kein Claude-Hinweis in Commits. Vor verändernden Aktionen kurz Plan + Go abwarten.
- Branch+MR-Workflow (adesso-CLAUDE.md); frontend→core ist paketübergreifend → nur mit explizitem Go. Git-Remotes heron.at: HTTPS+Token (osxkeychain), SSH (Port 22) ist geblockt.
@@ -0,0 +1,16 @@
---
name: feedback-kein-nexttick
description: "Hartes Verbot: niemals Vue nextTick verwenden"
metadata:
node_type: memory
type: feedback
originSessionId: 26b7ea78-4681-479e-b73a-64b2ce89a046
---
`nextTick` (Vue) ist verboten — niemals verwenden.
**Why:** Der User hat sehr deutlich reagiert, als ich ein Timing-Problem (Fire3D liest `props.config` einmalig beim Mount) mit `await nextTick()` gelöst habe. nextTick gilt als Symptombehandlung statt sauberer reaktiver Lösung.
**How to apply:** Reihenfolge-/Mount-Timing reaktiv lösen — `watch` auf Template-Refs, `v-if`-Gating, eigene ready-Signale. Eingetragen in globaler CLAUDE.md (# Code) und adesso-cpq/CLAUDE.md (### Kein nextTick).
Bezug: [[cpq-verbau-architektur]]
@@ -0,0 +1,16 @@
---
name: feedback-keine-intent-unterstellung
description: "Keine Vermutungen/Spekulationen anhängen — weder über Personen-Absichten noch über technische Ursachen; nur Fakten, sonst „weiß ich nicht\""
metadata:
node_type: memory
type: feedback
originSessionId: 00f129fd-620a-465c-8fdf-02b2ba4c3ba6
---
Keine „vermutlich"-Sätze. Gilt zweifach: (1) nicht raten, was ein Dritter (PL, Kollege, fire-Team) „eigentlich meint/will" — Aussagen des Users wörtlich nehmen; (2) keine spekulative Ursache anhängen (z. B. „dein Node liegt vermutlich hinter einem Versionsmanager"). Wenn die Ursache unklar ist: „weiß ich nicht", Punkt.
**Why:** Zweimal scharf korrigiert in einer Session. Einmal: „der Punkt, den die PL vermutlich meint, ist X" — PL meinte exakt das schon Gesagte. Einmal: nach „node nicht im PATH" eine geratene Begründung angehängt. Beides als Unterstellung empfunden.
**How to apply:** Frage auf Basis der gegebenen Aussage / der gemessenen Fakten beantworten. Keinen Absatz anhängen, der Intention oder Ursache rekonstruiert/rät. Geht über „Kompetenz unterstellen" hinaus: auch wohlwollende/plausible Spekulation unterlassen. Unklarheit ehrlich als Unklarheit benennen.
Bezug: [[cpq-verbau-architektur]]