From d52205533cdf952b91a0679e9fa78459a166447c Mon Sep 17 00:00:00 2001 From: marcus hinz Date: Sat, 20 Jun 2026 16:44:41 +0200 Subject: [PATCH] claude sync: 2026-06-20 16:44 --- limbach/memory/MEMORY.md | 2 +- limbach/memory/git-permission-scope-offen.md | 23 ++++++++++++-------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/limbach/memory/MEMORY.md b/limbach/memory/MEMORY.md index b0ccf91..14d4ecb 100644 --- a/limbach/memory/MEMORY.md +++ b/limbach/memory/MEMORY.md @@ -1,4 +1,4 @@ - [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) — ungelöst: Git ohne Prompt nur in den zwei limbach-Dirs; Anforderung noch nicht verstanden, cd:* global ist „Mist" +- [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 diff --git a/limbach/memory/git-permission-scope-offen.md b/limbach/memory/git-permission-scope-offen.md index a40a0a6..29896c5 100644 --- a/limbach/memory/git-permission-scope-offen.md +++ b/limbach/memory/git-permission-scope-offen.md @@ -1,19 +1,24 @@ --- name: git-permission-scope-offen -description: "Offene Aufgabe — Git-Operationen ohne Prompt, Scope auf die zwei limbach-Verzeichnisse; Anforderung noch nicht verstanden" -metadata: +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 --- -Offen und ungelöst (Stand 2026-06-20). Ziel: Git-Operationen sollen ohne Permission-Prompt durchlaufen. Akzeptierter Scope laut User: **nur die zwei Projektverzeichnisse frei, sonst nichts** — `~/projects/limbach` und `~/claude-projects/limbach`. +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. -Wichtig: Meine bisherigen Deutungen waren falsch („Du verstehst gar nicht"). Die genaue Anforderung ist noch **nicht** geklärt — nicht erneut raten, sondern erst nachfragen, was „die beiden Verzeichnisse frei, sonst nichts" konkret heißt (welche Befehle, welche Settings-Datei). +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. -Stand der Settings: -- In `~/claude-projects/global/settings.json` (= Symlink-Ziel von `~/.claude/settings.json`) wurde in dieser Session `Bash(cd:*)` global ergänzt. User findet die pauschale cd-Regel „Mist" → vermutlich wieder entfernen. -- Bestehende globale Git-Regeln dort: `git add/commit/push/pull/status/diff/-C/mv/check-ignore:*` (pauschal, projektübergreifend) — Konflikt mit „sonst nichts" noch ungeklärt. -- Die Skill `fewer-permission-prompts` wurde getestet, hat **nichts** geschrieben. +Plan — ein `update_scripts`-Command, der im aktuellen Projektordner die `additionalDirectories` aus der Settings liest und daraus generiert: -Ursache der Prompts war nicht Git selbst, sondern das Bündeln von Git mit Nicht-Git-Befehlen (`cd … && ls`/`printf > datei`) in einer Befehlszeile; Permission-Matching prüft jedes `&&`-Segment einzeln. Siehe [[adesso-styling]] nicht relevant — eigenständiges Thema. +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/global/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.