Brancher les skills de revue sur REVIEW.md et les niveaux de risque #457

Closed
opened 2026-10-17 12:18:06 +00:00 by maximus · 3 comments
Owner

Deuxième travail du pilote « évolution de /pr-review ». Contexte : docs/evolution-pr-review.md, PR maximus/agent-defenseurs#190, section 4.2 A.

Bloquée par #456 : les skills lisent les motifs de REVIEW.md.

Les skills vivent dans ~/.claude/skills/, hors git : cette issue suit le travail, aucune PR dans ce dépôt. Chaque skill modifié reçoit une entrée dans son CHANGELOG.md.

Travail

  • A1 pr-review : nouveau Step entre 0 et 1. Lire REVIEW.md à la base de la PR (GET /repos/maximus/<repo>/raw/REVIEW.md?ref=<base>, le fork ne fait pas de checkout) et la liste des fichiers (GET /pulls/<n>/files), calculer le niveau, l'annoncer en tête du verdict (Niveau : haut — <fichier déclencheur>). Sans REVIEW.md : niveau normal, comportement actuel.
  • A2 pr-review : profondeur par niveau. Bas : lecture du diff, sans mutation ni rejeu. Haut : mutation obligatoire, passe security-scan bloquante, « Max doit lire » dans le verdict.
  • A3 pr-review : retirer le savoir propre à simpl-resultat (commandes de check.yml, section « CI coverage gap » périmée depuis #232), déplacé dans REVIEW.md par #456.
  • A4 sprint : remplacer la checklist recopiée du Step 4b par un renvoi à celle de pr-review + REVIEW.md (rétablit la section Tests perdue).
  • A5 autopilot : niveau de chaque PR dans le DAILY-REPORT, PR de niveau haut listées en premier sous « Max doit lire ».
  • A6 fix-issue : Step 6.5 prend ses commandes de vérification dans REVIEW.md quand il existe.

Critères d'acceptation

  • Une /pr-review sur une PR ouverte de simpl-resultat affiche le niveau et le fichier déclencheur.
  • Une /pr-review sur un dépôt sans REVIEW.md se comporte comme avant.
  • sprint ne contient plus de copie de la checklist.
Deuxième travail du pilote « évolution de `/pr-review` ». Contexte : [`docs/evolution-pr-review.md`](https://git.lacompagniemaximus.com/maximus/agent-defenseurs/src/branch/docs-evolution-pr-review/docs/evolution-pr-review.md), PR maximus/agent-defenseurs#190, section 4.2 A. Bloquée par #456 : les skills lisent les motifs de `REVIEW.md`. Les skills vivent dans `~/.claude/skills/`, hors git : cette issue suit le travail, aucune PR dans ce dépôt. Chaque skill modifié reçoit une entrée dans son `CHANGELOG.md`. ## Travail - [ ] **A1 `pr-review`** : nouveau Step entre 0 et 1. Lire `REVIEW.md` à la base de la PR (`GET /repos/maximus/<repo>/raw/REVIEW.md?ref=<base>`, le fork ne fait pas de checkout) et la liste des fichiers (`GET /pulls/<n>/files`), calculer le niveau, l'annoncer en tête du verdict (`Niveau : haut — <fichier déclencheur>`). Sans `REVIEW.md` : niveau `normal`, comportement actuel. - [ ] **A2 `pr-review`** : profondeur par niveau. Bas : lecture du diff, sans mutation ni rejeu. Haut : mutation obligatoire, passe `security-scan` bloquante, « Max doit lire » dans le verdict. - [ ] **A3 `pr-review`** : retirer le savoir propre à simpl-resultat (commandes de `check.yml`, section « CI coverage gap » périmée depuis #232), déplacé dans `REVIEW.md` par #456. - [ ] **A4 `sprint`** : remplacer la checklist recopiée du Step 4b par un renvoi à celle de `pr-review` + `REVIEW.md` (rétablit la section Tests perdue). - [ ] **A5 `autopilot`** : niveau de chaque PR dans le `DAILY-REPORT`, PR de niveau haut listées en premier sous « Max doit lire ». - [ ] **A6 `fix-issue`** : Step 6.5 prend ses commandes de vérification dans `REVIEW.md` quand il existe. ## Critères d'acceptation - [ ] Une `/pr-review` sur une PR ouverte de simpl-resultat affiche le niveau et le fichier déclencheur. - [ ] Une `/pr-review` sur un dépôt sans `REVIEW.md` se comporte comme avant. - [ ] `sprint` ne contient plus de copie de la checklist.
maximus added the
status:blocked
type:infra
source:human
labels 2026-10-17 12:18:06 +00:00
Author
Owner

Contrat de lecture de REVIEW.md, mergé le 2026-10-18 (PR #460, 24da72b) : sa ligne 5 demande que /pr-review le lise sur main, y compris pour une PR empilée, et non à ?ref=<base> comme le dit le point A1 de cette issue. Sinon, un maillon de pile serait jugé par une version de REVIEW.md que son parent modifie et que personne n'a encore relue. A1 lit donc GET /repos/maximus/<repo>/raw/REVIEW.md?ref=main.

Deux autres points pour l'implémentation :

  • scripts/review-levels.py sert à la calibration seulement. Il n'approche qu'une partie des conditions du tableau Haut (#462) : le niveau d'une PR ouverte se lit dans REVIEW.md, jamais dans la sortie du script.
  • A6 trouve les commandes dans la section « Commandes de vérification » de REVIEW.md. Leur source fait foi : les workflows.
Contrat de lecture de `REVIEW.md`, mergé le 2026-10-18 (PR #460, `24da72b`) : sa ligne 5 demande que `/pr-review` le lise **sur `main`**, y compris pour une PR empilée, et non à `?ref=<base>` comme le dit le point A1 de cette issue. Sinon, un maillon de pile serait jugé par une version de `REVIEW.md` que son parent modifie et que personne n'a encore relue. A1 lit donc `GET /repos/maximus/<repo>/raw/REVIEW.md?ref=main`. Deux autres points pour l'implémentation : - `scripts/review-levels.py` sert à la calibration seulement. Il n'approche qu'une partie des conditions du tableau Haut (#462) : le niveau d'une PR ouverte se lit dans `REVIEW.md`, jamais dans la sortie du script. - A6 trouve les commandes dans la section « Commandes de vérification » de `REVIEW.md`. Leur source fait foi : les workflows.
maximus added
status:ready
and removed
status:blocked
labels 2026-10-18 13:24:00 +00:00
maximus added
status:in-progress
and removed
status:ready
labels 2026-10-18 13:30:41 +00:00
Author
Owner

Travail fait le 2026-10-18 dans ~/.claude/skills/, hors git. Sauvegarde des fichiers d'avant dans le dossier de travail de la session ; une entrée datée dans le CHANGELOG.md de chaque skill.

  • A1, pr-review :
    • le Context injecte REVIEW.md lu sur la branche par défaut (default_branch, donc master pour agent-defenseurs), ou ABSENT ;
    • nouveau Step 0bis : niveau calculé par la section « Niveaux » (renommage jugé sur les deux chemins, condition indécidable = remplie), annoncé en première ligne du verdict, Niveau : haut — <fichier> (<zone>) ;
    • sans REVIEW.md, Niveau : normal (pas de REVIEW.md), puis la revue d'avant ;
    • le niveau ne se prend jamais dans scripts/review-levels.py.
  • A2, pr-review, section « Profondeur par niveau » :
    • bas = lecture du diff ;
    • normal = revue actuelle ;
    • haut = mutation obligatoire (ou sonde pour un diff sans code), passe sécurité bloquante, APPROVE avec Max doit lire avant le merge.
    • La passe sécurité se fait dans le fork : un fork ne lance pas d'agent, et security-scan n'est défini qu'au niveau du monorepo (~/claude-code/.claude/agents/). Elle applique les sections de cet agent et les règles des zones de REVIEW.md que touche le diff ; tout constat bloque.
  • A3, pr-review : retrait des commandes de simpl-resultat, de la « CI coverage gap » (fausse ici depuis #232) et de la durée du job Rust. Une puce « Couverture CI d'une pile » générique les remplace : elle lit les déclencheurs du dépôt ou son REVIEW.md.
  • A4, sprint : le Step 4b renvoie à /pr-review (Step 0bis, checklist entière, Tests compris, profondeur par niveau) et à REVIEW.md ; plus aucune copie de la checklist (grep des anciennes lignes : 0).
  • A5, autopilot : DAILY-REPORT avec une section « Max doit lire (PR de niveau haut) » en tête, une ligne Niveau : … par PR, et prs_high_level dans le JSON final.
  • A6, fix-issue : le Step 6.5 prend les commandes de « Commandes de vérification » du REVIEW.md quand il existe (les workflows font foi), sinon la suite du projet.

Vérifications :

  • frontmatter des quatre skills relu par un parseur YAML : valide ;
  • ligne injectée du Context jouée telle quelle : REVIEW.md lu sur simpl-resultat (main), ABSENT sur agent-defenseurs (master) et sur roadtrip (main) ;
  • recoupement par le script de calibration, sans valeur de verdict : PR #459 de niveau haut, fixé par src-tauri/Cargo.toml, src-tauri/Cargo.lock, .forgejo/workflows/check-rust.yml et .claude/skills/release/SKILL.md.

Critères d'acceptation :

  • Une /pr-review sur une PR ouverte de simpl-resultat affiche le niveau et le fichier déclencheur : /pr-review 459 lancée maintenant, première PR mesurée du pilote #458 ;
  • sans REVIEW.md, la revue se déroule comme avant : la ligne injectée répond ABSENT, le niveau vaut normal, et seule la ligne Niveau : normal (pas de REVIEW.md) s'ajoute en tête du verdict ;
  • sprint ne contient plus de copie de la checklist.

#457 se ferme à la main quand le verdict de #459 montre la ligne de niveau. Restent hors de cette issue : un /merge-stack qui attendrait la lecture de Max pour une PR de niveau haut (à juger pendant le pilote), et les suites #461 et #462.

Travail fait le 2026-10-18 dans `~/.claude/skills/`, hors git. Sauvegarde des fichiers d'avant dans le dossier de travail de la session ; une entrée datée dans le `CHANGELOG.md` de chaque skill. - **A1, `pr-review`** : - le Context injecte `REVIEW.md` **lu sur la branche par défaut** (`default_branch`, donc `master` pour agent-defenseurs), ou `ABSENT` ; - nouveau Step 0bis : niveau calculé par la section « Niveaux » (renommage jugé sur les deux chemins, condition indécidable = remplie), annoncé en première ligne du verdict, `Niveau : haut — <fichier> (<zone>)` ; - sans `REVIEW.md`, `Niveau : normal (pas de REVIEW.md)`, puis la revue d'avant ; - le niveau ne se prend jamais dans `scripts/review-levels.py`. - **A2, `pr-review`**, section « Profondeur par niveau » : - bas = lecture du diff ; - normal = revue actuelle ; - haut = mutation obligatoire (ou sonde pour un diff sans code), passe sécurité bloquante, APPROVE avec `Max doit lire avant le merge.` - La passe sécurité se fait dans le fork : un fork ne lance pas d'agent, et `security-scan` n'est défini qu'au niveau du monorepo (`~/claude-code/.claude/agents/`). Elle applique les sections de cet agent et les règles des zones de `REVIEW.md` que touche le diff ; tout constat bloque. - **A3, `pr-review`** : retrait des commandes de simpl-resultat, de la « CI coverage gap » (fausse ici depuis #232) et de la durée du job Rust. Une puce « Couverture CI d'une pile » générique les remplace : elle lit les déclencheurs du dépôt ou son `REVIEW.md`. - **A4, `sprint`** : le Step 4b renvoie à `/pr-review` (Step 0bis, checklist entière, Tests compris, profondeur par niveau) et à `REVIEW.md` ; plus aucune copie de la checklist (`grep` des anciennes lignes : 0). - **A5, `autopilot`** : `DAILY-REPORT` avec une section « Max doit lire (PR de niveau haut) » en tête, une ligne `Niveau : …` par PR, et `prs_high_level` dans le JSON final. - **A6, `fix-issue`** : le Step 6.5 prend les commandes de « Commandes de vérification » du `REVIEW.md` quand il existe (les workflows font foi), sinon la suite du projet. Vérifications : - frontmatter des quatre skills relu par un parseur YAML : valide ; - ligne injectée du Context jouée telle quelle : `REVIEW.md` lu sur simpl-resultat (`main`), `ABSENT` sur agent-defenseurs (`master`) et sur roadtrip (`main`) ; - recoupement par le script de calibration, sans valeur de verdict : PR #459 de niveau haut, fixé par `src-tauri/Cargo.toml`, `src-tauri/Cargo.lock`, `.forgejo/workflows/check-rust.yml` et `.claude/skills/release/SKILL.md`. Critères d'acceptation : - [ ] Une `/pr-review` sur une PR ouverte de simpl-resultat affiche le niveau et le fichier déclencheur : `/pr-review 459` lancée maintenant, première PR mesurée du pilote #458 ; - [x] sans `REVIEW.md`, la revue se déroule comme avant : la ligne injectée répond `ABSENT`, le niveau vaut `normal`, et seule la ligne `Niveau : normal (pas de REVIEW.md)` s'ajoute en tête du verdict ; - [x] `sprint` ne contient plus de copie de la checklist. #457 se ferme à la main quand le verdict de #459 montre la ligne de niveau. Restent hors de cette issue : un `/merge-stack` qui attendrait la lecture de Max pour une PR de niveau haut (à juger pendant le pilote), et les suites #461 et #462.
Author
Owner

Critères remplis, issue fermée à la main.

  • Une /pr-review sur une PR ouverte de simpl-resultat affiche le niveau et le fichier déclencheur : la revue de la PR #459 (commentaire 24757, faite avec les skills modifiés) ouvre sur Niveau : haut — src-tauri/Cargo.toml et src-tauri/Cargo.lock (Dépendances), .forgejo/workflows/check-rust.yml (CI et gardes : étape de verdict modifiée), .claude/skills/release/SKILL.md (Release et mise à jour). Elle applique la profondeur du niveau haut : quatre mutations du canari, une section « Passe sécurité » et un verdict REQUEST_CHANGES sur un constat que la revue normale n'avait pas cherché.
  • Sans REVIEW.md, comportement d'avant : la ligne injectée répond ABSENT sur agent-defenseurs (master) et roadtrip (main) ; niveau normal, revue inchangée hormis la ligne de niveau en tête.
  • sprint sans copie de la checklist : aucune des anciennes lignes ne reste (grep).

Rouvrir si une /pr-review sur simpl-resultat rend un verdict sans ligne de niveau, ou si sprint recopie de nouveau une checklist. Le pilote #458 commence avec #459 comme première PR mesurée.

Critères remplis, issue fermée à la main. - **Une `/pr-review` sur une PR ouverte de simpl-resultat affiche le niveau et le fichier déclencheur** : la revue de la PR #459 (commentaire 24757, faite avec les skills modifiés) ouvre sur `Niveau : haut — src-tauri/Cargo.toml et src-tauri/Cargo.lock (Dépendances), .forgejo/workflows/check-rust.yml (CI et gardes : étape de verdict modifiée), .claude/skills/release/SKILL.md (Release et mise à jour)`. Elle applique la profondeur du niveau haut : quatre mutations du canari, une section « Passe sécurité » et un verdict REQUEST_CHANGES sur un constat que la revue normale n'avait pas cherché. - **Sans `REVIEW.md`, comportement d'avant** : la ligne injectée répond `ABSENT` sur agent-defenseurs (`master`) et roadtrip (`main`) ; niveau `normal`, revue inchangée hormis la ligne de niveau en tête. - **`sprint` sans copie de la checklist** : aucune des anciennes lignes ne reste (`grep`). Rouvrir si une `/pr-review` sur simpl-resultat rend un verdict sans ligne de niveau, ou si `sprint` recopie de nouveau une checklist. Le pilote #458 commence avec #459 comme première PR mesurée.
maximus removed the
status:in-progress
label 2026-10-18 13:50:52 +00:00
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: maximus/Simpl-Resultat#457
No description provided.