commit d9d46f1f567b4b8696f5ab6c5995f54590889720 Author: marcus.hinz Date: Thu Jul 9 09:08:11 2026 +0200 Initial commit diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 0000000..b51f1a1 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,24 @@ +{ + "autoMemoryDirectory": "~/claude-projects/limbach/memory", + "hooks": { + "SessionStart": [ + { + "hooks": [ + { + "command": "jq -Rs '{systemMessage: ., hookSpecificOutput:{hookEventName:\"SessionStart\", additionalContext: .}}' /Users/marcus.hinz/claude-projects/limbach/OFFENE-PUNKTE.md", + "type": "command" + } + ] + } + ] + }, + "permissions": { + "additionalDirectories": [ + "~/projects/limbach" + ], + "allow": [ + "Edit(~/projects/limbach/**)", + "Edit(~/claude-projects/limbach/**)" + ] + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a74792f --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +!.claude/ +!CLAUDE.md +.DS_Store diff --git a/OFFENE-PUNKTE.md b/OFFENE-PUNKTE.md new file mode 100644 index 0000000..aabbff6 --- /dev/null +++ b/OFFENE-PUNKTE.md @@ -0,0 +1,3 @@ +# Offene Punkte — bei jedem Start prüfen und abhaken + +Keine offenen Punkte. diff --git a/ai-control.json b/ai-control.json new file mode 100644 index 0000000..1e34cc0 --- /dev/null +++ b/ai-control.json @@ -0,0 +1,7 @@ +{ + "pool": "private", + "terminal": { + "theme": "dracula", + "icon": "limbach.png" + } +} diff --git a/memory/MEMORY.md b/memory/MEMORY.md new file mode 100644 index 0000000..732e5eb --- /dev/null +++ b/memory/MEMORY.md @@ -0,0 +1,5 @@ +- [Limbach Workshop / Outline](limbach-workshop-outline.md) — Wissensaufbau in Outline für Workshop 15./16.06.2026 +- [adesso Styling](adesso-styling.md) — Corporate-Template-Quelle & Design-Tokens für Folien 2–4 (adesso_style.py) +- [Integrationsserver Aufwand](integrationsserver-aufwand.md) — grobe Aufwandsschätzung Event-Sourcing-Integrationsserver (~300–530 PT) +- [Git-Permission-Scope offen](git-permission-scope-offen.md) — Plan: git/cd/Datei prompt-frei je Projekt via update_scripts-Command (Wrapper + Pfad-Globs aus additionalDirectories), globales cd/git raus +- [Keine rhetorischen Fragen](feedback-keine-rhetorischen-fragen.md) — Aussagen statt Fragen, kein Belehr-Ton diff --git a/memory/adesso-styling.md b/memory/adesso-styling.md new file mode 100644 index 0000000..2e32147 --- /dev/null +++ b/memory/adesso-styling.md @@ -0,0 +1,18 @@ +--- +name: adesso-styling +description: Corporate-Template-Quelle und Design-Tokens für das adesso-Styling der Workshop-Folien +metadata: + node_type: memory + type: reference + originSessionId: 38920718-90c7-440b-acfe-8a06dc15263b +--- + +Die Workshop-Folien (Folie 2–4) wurden auf das **adesso-Corporate-Template** umgestylt. + +- **Referenz-Deck:** `/Users/marcus.hinz/Documents/schnzz.pptx` (adesso-Masterdeck, 96 Folien; LibreOffice exportiert nur die ~19 sichtbaren). +- **Design-Tokens** (extrahiert aus dem Theme): Fonts **Fira Sans Condensed** (Titel) / **Fira Sans** (Body); Palette Blau `#006EC7`, Purpur `#461EBE`, Grün `#76C800`, Teal `#28DCAA`, Coral `#FF9868`, Pink `#F566BA`, Taupe `#887D75`. +- **Look:** Teal→Blau-Verlauf, weiße Shapes + Text, Coral-Akzente; Header = Pill-Marker + Titel; schlanke Fußzeile = Seitenzahl + „adesso". + +Implementiert im geteilten Modul `adesso_style.py` (von `folie2/3/4.py` importiert). Logo wird als Text „adesso" gesetzt (echtes Asset `image2.svg` im Template ist weiß-auf-weiß ohne Alpha → nicht direkt nutzbar). + +Siehe [[limbach-workshop-outline]]. diff --git a/memory/feedback-keine-rhetorischen-fragen.md b/memory/feedback-keine-rhetorischen-fragen.md new file mode 100644 index 0000000..b390fb0 --- /dev/null +++ b/memory/feedback-keine-rhetorischen-fragen.md @@ -0,0 +1,13 @@ +--- +name: feedback-keine-rhetorischen-fragen +description: "Keine rhetorischen Fragen in Antworten, sachlicher Aussagestil" +metadata: + node_type: memory + type: feedback + originSessionId: 55edb555-2c52-4cb9-82fd-6aebe0099547 +--- + +Keine rhetorischen Fragen in Antworten — Aussagen formulieren, nicht in Frageform verpacken. Auch keine pseudo-pädagogischen oder belehrenden Frageformulierungen ("Warum du?", "Was ist X?"). Wird als Verkauf-für-dumm und als Predigt-/Professoren-Ton empfunden. + +**Warum:** Stört massiv, wiederholt scharf eingefordert. +**How to apply:** Sachverhalt direkt als Aussage hinstellen. Keine Frage als Stilmittel, kein Aufzählen von Grundlagen, die er kennt. Siehe [[feedback-keine-intent-unterstellung]]. diff --git a/memory/git-permission-scope-offen.md b/memory/git-permission-scope-offen.md new file mode 100644 index 0000000..29b22fb --- /dev/null +++ b/memory/git-permission-scope-offen.md @@ -0,0 +1,24 @@ +--- +name: git-permission-scope-offen +description: "Plan — Git/cd/Datei-Operationen prompt-frei, aber strukturell auf die additionalDirectories des Projekts beschränkt; via update_scripts-Command generiert" +metadata: + node_type: memory + type: project + originSessionId: febf94f9-e40c-4832-b02b-908ec923f9ed +--- + +Geklärt (Stand 2026-06-20). Ziel: Im Projekt sollen Git, Verzeichniswechsel, Lesen und Schreiben **ohne Permission-Prompt** laufen — aber strukturell beschränkt auf die Verzeichnisse des jeweiligen Projekts (die `permissions.additionalDirectories` der Projekt-`settings.json`). Kein globales `git`, kein globales `cd`. Für limbach sind das `~/projects/limbach` und `~/claude-projects/limbach`; das Prinzip gilt projektweise für jedes Projekt. + +Grundunterschied im Permission-Modell: +- **Bash-Regeln matchen den Befehls-String, nicht das Arbeitsverzeichnis** — eine verzeichnis-beschränkte Bash-Regel ist nicht ausdrückbar. Lösung: Wrapper-Skripte, die das Zielverzeichnis fest verdrahten; nur der Wrapper-Aufruf wird erlaubt. +- **Datei-Tools (`Read`/`Edit`/`Write`) lassen sich auf Pfad-Globs beschränken** — hier geht die echte Verzeichnis-Beschränkung direkt. + +Plan — ein `update_scripts`-Command, der im aktuellen Projektordner die `additionalDirectories` aus der Settings liest und daraus generiert: + +1. **git-Wrapper** (analog [[git-sync]], aber für interaktives git): Skript führt `git -C …` aus, Dirs fest aus den additionalDirectories. Permission-Regel: nur `Bash(:*)`. Aufruf bekommt Zielverzeichnis als Argument. +2. **cd-Aliasse** `cd-project-root` / `cd-claude-root`: exakte Bash-Regeln je Pfad statt `cd:*`, z. B. `Bash(cd ~/projects/limbach)` und `Bash(cd ~/claude-projects/limbach)`. cwd persistiert zwischen Bash-Calls, reicht zum Springen. +3. **Read/Edit/Write-Globs** je Verzeichnis: `Read(~/projects/limbach/**)`, `Edit(~/projects/limbach/**)`, `Write(~/projects/limbach/**)` und analog für `~/claude-projects/limbach/**`. Damit läuft Coden in genau diesen Dirs prompt-frei, außerhalb wird weiter gefragt. + +Aufräumen: globales `Bash(cd:*)` in `~/claude-projects/pool/settings.json` (Symlink-Ziel von `~/.claude/settings.json`) wieder entfernen — vom User als „Mist" bewertet. Globale git-Regeln (`git add/commit/push/…:*`) ebenfalls raus, sobald die Wrapper stehen. + +Hintergrund: `git-sync` ist davon getrennt (synct alle Repos batch-weise, [[git-sync]]). Ursache früherer Prompts war u. a. das Bündeln von Git mit Nicht-Git-Befehlen (`cd … && ls`, `printf > datei`) in einer Zeile — Permission-Matching prüft jedes `&&`-Segment einzeln; die Wrapper umgehen das. diff --git a/memory/integrationsserver-aufwand.md b/memory/integrationsserver-aufwand.md new file mode 100644 index 0000000..b7c2ec4 --- /dev/null +++ b/memory/integrationsserver-aufwand.md @@ -0,0 +1,34 @@ +--- +name: integrationsserver-aufwand +description: "Grobe Aufwandsschätzung für den Event-Sourcing-Integrationsserver (Limbach, Stand 2026-06-18)" +metadata: + node_type: memory + type: project + originSessionId: 3a4207d2-1bbd-40f0-9637-4230d2a92919 +--- + +Grobe Order-of-Magnitude-Schätzung (KEIN Angebot) für das Aufsetzen eines **Event-Sourcing-Integrationsservers** (Kafka + Kafka Streams → PostgreSQL) mit den Systemen aus [[limbach-workshop-outline]] / Folie 7 (Order Entry über CLAB, Probeneingang [Atras SL + PVT], Geräte, Middleware, MiBi/Hybase, Stammdaten; Konsumenten SinaBI/Power BI, Archivierung/Vaultbox). + +**Gesamt grob: ~300–530 PT (≈ 15–27 Personenmonate; mit Team 4–6 ≈ 5–8 Monate Laufzeit).** + +Bausteine (PT): +- Plattform-Foundation (Kafka, Schema Registry, Infra, CI/CD, Monitoring): 25–45 +- Core (Mapping/Transformation, Routing Engine, Projektions-Framework): 25–50 +- Adapter CLAB (LDT, bidirektional, zentraler Order-Pfad): 25–40 +- Adapter Probeneingang (Atras SL + PVT): 15–30 +- Adapter Geräte (Sysmex/Analyzer, HL7/ASTM, bidirektional): 20–35 +- Adapter Middleware (Myla/Maestria, LabOps, Liason): 25–45 +- Adapter MiBi/Hybase: 15–25 +- Adapter Stammdaten (SinaCRM, OTS/Znooni) + MDM/Dedup: 20–35 +- Projektionen/Read-Models (Auftragsstatus, Audit Trail, Reporting): 15–30 +- Konsumenten (SinaBI/Power BI, Archivierung/Vaultbox): 12–25 +- Golden-Master-Testharness: 10–20 +- Security/Auth/Compliance (Audit-Trail, DSGVO, Rollen, RiliBÄK-Doku): 15–30 +- + Architektur/PM/Test-Mgmt/Doku/Rollout (~25–30 %) + +**MVP-Schnitt** (Plattform + CLAB + Geräte + 1 Projektion + Golden Master): ~100–160 PT (~3–4 Monate). + +Größte Kostentreiber/Risiken: Verfügbarkeit & Qualität der Schnittstellen je System (LDT/HL7/ASTM/native, API vorhanden?); Bidirektionalität (Order-Rückweg); Stammdaten-Dedup; Parallelbetrieb/Migration/Replay; Regulatorik (RiliBÄK, ISO 15189, IfSG, DSGVO); Abhängigkeit von Limbach-/Drittanbieter-Ressourcen (CLAB-LDT, Vaultbox/LDT2). + +**Why:** Im Workshop kam die Frage nach dem ungefähren Aufwand; die Zahlen sind die abgestimmte grobe Hausnummer. +**How to apply:** Als Ausgangspunkt für Aufwands-/Roadmap-Diskussionen nutzen; bei Bedarf in PT, Personenmonaten oder (mit Tagessatz) als €-Spanne darstellen. Vor jeder Nutzung an konkreten Schnittstellen-Infos je System schärfen. Nutzer wollte daraus ausdrücklich KEINE Folie. diff --git a/memory/limbach-workshop-outline.md b/memory/limbach-workshop-outline.md new file mode 100644 index 0000000..e3f2020 --- /dev/null +++ b/memory/limbach-workshop-outline.md @@ -0,0 +1,21 @@ +--- +name: limbach-workshop-outline +description: Limbach-Projekt — Wissensaufbau in Outline für Workshop 15./16.06.2026 +metadata: + node_type: memory + type: project + originSessionId: 9d8b39c1-0e24-4510-91b6-eba4f524af7a +--- + +Marcus bereitet einen Workshop zur **Limbach Gruppe** (15./16.06.2026) vor. Die Arbeit läuft nicht im Repo, sondern in **Outline** (Collection „Limbach", id `90cccbbb-a882-48c0-bf26-c26a0395d9dc`). + +Struktur (Stand 2026-06-07): +- **01 - Unternehmen**: 01 Limbach Gruppe (Holding/Inhaber), 02 H&S, 03 VAULT (inkl. Kapitel „CE-Zertifizierung / Fragen"). +- **02 - Regulatorik und Markt** (Ordner-Doc id `c43dbcd4-1b99-44e7-8b48-a5083aac557a`): 01 Was es gibt, 02 Trennungsprinzip, 03 Nachweispflichten, 04 Prüfung/Zertifizierung, 05 Drittanbieter, 06 Abgrenzung IVD/CE, 07 USP/Produktchancen, 08 Marktvorgaben. +- „Einschätzung" liegt unsortiert auf oberster Ebene. + +Thematischer Kern: LIS/LIMS im Laborumfeld — H&S (Legacy) vs. VAULT (.NET/Azure, Holding-nah), Regulatorik (RiliBÄK, ISO 15189, IVDR), IVD-Abgrenzung von LIS, und die strategische CE-/Integrations-Frage an VAULT. + +Stilvorgaben des Nutzers (gelten hier stark): sachlich, kurz, **nur tun was ausdrücklich verlangt wird**, keine Vorschläge fürs weitere Vorgehen. Doc-Inhalte mit Disclaimer „keine Rechtsberatung". + +Offener Punkt: Outline-Collection sortiert manuell (`index`) — Nummern-Präfixe greifen nur, wenn die Collection in Outline auf „Alphabetical" gestellt wird (über MCP nicht setzbar).