Recâbler la skill sops vers la garde guard-secrets.sh actuelle #4

Closed
opened 2026-10-11 10:06:12 +02:00 by mathieu · 0 comments
Owner

.claude/skills/sops/SKILL.md affirme que le hook guard-secrets.sh « part dans kb-mathieu à l'étape 5 de la migration ». Caduc : infrastructure est ressorti de kb-mathieu le 2026-09-20 et porte son propre guard-secrets.sh ; kb-mathieu et annah ont aussi le leur. Ce dépôt-ci, le plus sensible, est le seul de la série à n'avoir aucune garde outillée : ses interdits (sops -d > fichier, git add -f, lecture de la clé age) reposent sur la seule relecture.

Constaté le 2026-10-05.

Critères d'acceptation

  • La note de la skill dit où vit la garde aujourd'hui, sans renvoi au dépôt dissous (2026-10-05 ; vérifié : aucun .claude/settings*.json ni hook déclaré dans acces)
  • Décision : activer dans acces la garde générique d'atelier (Mathieu, 2026-10-05) plutôt qu'une copie de plus de guard-secrets.sh ou la relecture seule — une seule source à maintenir
  • Vérifier, depuis atelier, que sa garde couvre les quatre interdits de la skill ; sinon l'y étendre (pas de copie locale) — 2026-10-05 : guard-destructive.sh n'en couvrait aucun (et ne voyait que Bash). Étendue dans atelier, refus sec sur les quatre : sops -d vers un fichier (redirection, tee, cp/dd en aval du tube, -i, --output, y compris dans $(…), bash -c, eval) ; écriture d'un .env/.env.* ou d'un fichier sous secrets/ non *.sops.* (Bash et outils Write/Edit/MultiEdit/NotebookEdit) ; git add -f/--force (et ses abréviations) ; clé age copiée, déplacée, affichée, lue par Read ou Grep, ou désignée par un motif */? (seuls export SOPS_AGE_KEY_FILE=…, le préfixe d'environnement, ls/stat/test/chmod passent). Matcher : Bash|Read|Grep|Write|Edit|MultiEdit|NotebookEdit. Harnais 129/129, dont 43 refus de secrets et les usages légitimes (édition, exec-env, -d | cut -d= -f1, unset, export) ; mutation OK. Limite écrite dans l'en-tête : garde textuelle, une variable intermédiaire ou python -c lui échappent. Plugin 0.6.0, main d'atelier à 0ece3fb, poussé (NAS et GitHub) le 2026-10-05.
  • Activer le plugin dans acces/.claude/settings.json — extraKnownMarketplaces (marketplace locale atelier) + enabledPlugins atelier@atelier. Constaté actif le 2026-10-05 : le hook guard-destructive.sh répond. Fichier versionné en 9b3f7bb.
  • Chaque interdit de la skill testé une fois et refusé — 2026-10-05, tous refusés par « guard-destructive.sh (plugin atelier) », aucun contournement :
    1. sops -d inexistant.sops.env > /tmp/garde-test.txt (Bash) → refusé : « sortie de sops -d redirigée vers un fichier »
    2. echo x > .env.garde-test (Bash) → refusé : « écriture d'un fichier de secrets en clair »
    3. Write .env.garde-test → refusé : « écriture d'un fichier de secrets en clair par l'outil Write »
    4. git add -f inexistant.env (Bash) → refusé : « git add -f — contourne le .gitignore »
    5. cat ~/coffre-inexistant/sops-age-key.txt (Bash) → refusé : « clé privée age copiée, déplacée ou affichée »
    6. Read ~/coffre-inexistant/sops-age-key.txt → refusé : « clé privée age lue ou écrite par l'outil Read »
      Usages légitimes passés : sops --version (sops 3.13.3), git status. Aucun fichier créé (.env.garde-test et /tmp/garde-test.txt absents).
  • AGENTS.md et la note de la skill disent que la garde est active, et d'où elle vient (2026-10-05 ; committé en 9b3f7bb avec .claude/settings.json, poussé sur le NAS, copie de secours chiffrée régénérée au push)

Migré de Kaneo le 2026-10-11 : ACC-2 du projet « Accès », créée le 2026-10-05.

`.claude/skills/sops/SKILL.md` affirme que le hook `guard-secrets.sh` « part dans `kb-mathieu` à l'étape 5 de la migration ». Caduc : `infrastructure` est ressorti de `kb-mathieu` le 2026-09-20 et porte son propre `guard-secrets.sh` ; `kb-mathieu` et `annah` ont aussi le leur. Ce dépôt-ci, le plus sensible, est le seul de la série à n'avoir aucune garde outillée : ses interdits (`sops -d > fichier`, `git add -f`, lecture de la clé age) reposent sur la seule relecture. Constaté le 2026-10-05. ## Critères d'acceptation - [x] La note de la skill dit où vit la garde aujourd'hui, sans renvoi au dépôt dissous (2026-10-05 ; vérifié : aucun `.claude/settings*.json` ni hook déclaré dans `acces`) - [x] Décision : **activer dans `acces` la garde générique d'`atelier`** (Mathieu, 2026-10-05) plutôt qu'une copie de plus de `guard-secrets.sh` ou la relecture seule — une seule source à maintenir - [x] Vérifier, depuis `atelier`, que sa garde couvre les quatre interdits de la skill ; sinon l'y étendre (pas de copie locale) — 2026-10-05 : `guard-destructive.sh` n'en couvrait **aucun** (et ne voyait que Bash). Étendue dans atelier, refus sec sur les quatre : `sops -d` vers un fichier (redirection, `tee`, `cp`/`dd` en aval du tube, `-i`, `--output`, y compris dans `$(…)`, `bash -c`, `eval`) ; écriture d'un `.env`/`.env.*` ou d'un fichier sous `secrets/` non `*.sops.*` (Bash et outils Write/Edit/MultiEdit/NotebookEdit) ; `git add -f`/`--force` (et ses abréviations) ; clé age copiée, déplacée, affichée, lue par Read ou Grep, ou désignée par un motif `*`/`?` (seuls `export SOPS_AGE_KEY_FILE=…`, le préfixe d'environnement, `ls`/`stat`/`test`/`chmod` passent). Matcher : `Bash|Read|Grep|Write|Edit|MultiEdit|NotebookEdit`. Harnais 129/129, dont 43 refus de secrets et les usages légitimes (édition, `exec-env`, `-d | cut -d= -f1`, `unset`, `export`) ; mutation OK. Limite écrite dans l'en-tête : garde textuelle, une variable intermédiaire ou `python -c` lui échappent. Plugin 0.6.0, `main` d'atelier à `0ece3fb`, poussé (NAS et GitHub) le 2026-10-05. - [x] Activer le plugin dans `acces/.claude/settings.json` — `extraKnownMarketplaces` (marketplace locale `atelier`) + `enabledPlugins` `atelier@atelier`. Constaté actif le 2026-10-05 : le hook `guard-destructive.sh` répond. Fichier versionné en `9b3f7bb`. - [x] Chaque interdit de la skill testé une fois et refusé — 2026-10-05, tous refusés par « guard-destructive.sh (plugin atelier) », aucun contournement : 1. `sops -d inexistant.sops.env > /tmp/garde-test.txt` (Bash) → refusé : « sortie de sops -d redirigée vers un fichier » 2. `echo x > .env.garde-test` (Bash) → refusé : « écriture d'un fichier de secrets en clair » 3. Write `.env.garde-test` → refusé : « écriture d'un fichier de secrets en clair par l'outil Write » 4. `git add -f inexistant.env` (Bash) → refusé : « git add -f — contourne le .gitignore » 5. `cat ~/coffre-inexistant/sops-age-key.txt` (Bash) → refusé : « clé privée age copiée, déplacée ou affichée » 6. Read `~/coffre-inexistant/sops-age-key.txt` → refusé : « clé privée age lue ou écrite par l'outil Read » Usages légitimes passés : `sops --version` (sops 3.13.3), `git status`. Aucun fichier créé (`.env.garde-test` et `/tmp/garde-test.txt` absents). - [x] `AGENTS.md` et la note de la skill disent que la garde est active, et d'où elle vient (2026-10-05 ; committé en `9b3f7bb` avec `.claude/settings.json`, poussé sur le NAS, copie de secours chiffrée régénérée au push) --- *Migré de Kaneo le 2026-10-11 : ACC-2 du projet « Accès », créée le 2026-10-05.* <!-- kaneo-id: nzm83e09n5uweacl35v7pk5y -->
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
mathieu/essai-actions#4
No description provided.