claude sync: memories + settings
This commit is contained in:
@@ -1,10 +1,4 @@
|
|||||||
{
|
{
|
||||||
"enabledPlugins": {
|
|
||||||
"frontend-design@claude-plugins-official": true
|
|
||||||
},
|
|
||||||
"promptSuggestionEnabled": false,
|
|
||||||
"awaySummaryEnabled": false,
|
|
||||||
"theme": "dark",
|
|
||||||
"permissions": {
|
"permissions": {
|
||||||
"allow": [
|
"allow": [
|
||||||
"Bash(git add:*)",
|
"Bash(git add:*)",
|
||||||
@@ -19,5 +13,13 @@
|
|||||||
"Bash(cd:*)",
|
"Bash(cd:*)",
|
||||||
"Bash(~/claude-projects/global/bin/git-sync:*)"
|
"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 |
@@ -1,3 +1,7 @@
|
|||||||
# Memory Index
|
# 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
|
- [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]]
|
||||||
Reference in New Issue
Block a user