diff --git a/REVIEW.md b/REVIEW.md index d7334de..f13e4f0 100644 --- a/REVIEW.md +++ b/REVIEW.md @@ -156,7 +156,7 @@ python3 scripts/review-levels.py --check - **Une PR qui exige une action de Max sur le VPS** (montage, variable Coolify, propriétaire d'un dossier, `agents-map.json`) doit être mergée après l'action, pas avant : sinon la route répond 500 ou `no_data` dès le déploiement. La revue vérifie que la PR dit l'ordre. — `CLAUDE.md` « Config », « Gotchas » - **Un montage manquant répond 200 `no_data`.** Après un redéploiement, contrôler le contenu des routes de lecture, pas leur code, et les trois vues des montages (`docker inspect`, `/proc/mounts`, contenu). — `CLAUDE.md` « Config » - **La garantie écrite dépasse la couverture.** `CLAUDE.md` et les en-têtes de tests affirment beaucoup (« figé par », « exige ») ; chaque affirmation nouvelle se vérifie par une mutation qui fait rougir le test cité. — PR #39, #45 -- **Séquences d'échappement décodées en route.** Un `-` tapé dans un outil arrive décodé dans le fichier : vérifier dans le fichier (`grep`, `od -c`), jamais dans l'outil d'édition. — PR #42, mémoire « Escapes decoded in tool calls » +- **Séquences d'échappement décodées en route.** Un `\u002d` tapé dans un outil arrive décodé en `-` dans le fichier : vérifier dans le fichier (`grep`, `od -c`), jamais dans l'outil d'édition. — PR #42, mémoire « Escapes decoded in tool calls » - **Stack intégrée en avance rapide.** Forgejo marque ces PR « fermées » et non « mergées », `/pulls/{n}/files` répond 500 une fois la branche de base supprimée, et une PR dont la tête est déjà dans `main` a un `.diff` vide. — calibration de #63 - **`/home/defenseur/defenseurs/status.json` est un leurre** : le Sergent écrit sous `/data/defenseurs/`. — `CLAUDE.md` « Config », « Gotchas » - **La sévérité est asymétrique** : `?severity=LOW` cache INFO, que seul `?severity=INFO` rend. Ce n'est pas un défaut. — `CLAUDE.md` « Gotchas » diff --git a/scripts/review-levels.py b/scripts/review-levels.py index e0be162..b2f2cc4 100755 --- a/scripts/review-levels.py +++ b/scripts/review-levels.py @@ -18,8 +18,8 @@ whose base branch is gone, which is every link of a stack merged by fast-forward. Three PRs (EMPTY_DIFF) have an empty .diff and are read from the local clone: run the script from the repository. The content conditions of the Haut table are approximated from the diff: index.js routing and auth, side effects of the shipped modules -(disk writes, environment, body caps, shell commands, outbound calls, -require.main, log lines), guard tests (an existing line changed or removed), +(disk writes, the temp-file sweep, body caps, shell commands, outbound calls, +require.main), guard tests (an existing line changed or removed), package.json (anything but a version), package-lock.json (a package added or removed, an origin changed), .gitignore (a line removed). """ @@ -63,7 +63,7 @@ LOW = ["**/*.md", "docs/**", "LICENSE", "reports/**"] NEVER_LOW = ["CLAUDE.md", "REVIEW.md", "agent/README.md", ".claude/**"] AUTH = re.compile(r"\b(ROUTES|TOKEN_KINDS|resolveRoute|checkAuth|tokenMatches|logRejection|" - r"safeLogValue|handler|timingSafeEqual|createHash|\w*_TOKEN)\b") + r"safeLogValue|handler|\w*_TOKEN)\b") EFFECTS = re.compile( r"\b(writeFile\w*|writeSync|createWriteStream|appendFile\w*|rename\w*|mkdir\w*|unlink\w*|" r"rmSync|rmdir\w*|chmod\w*|chown\w*|copyFile\w*|symlink\w*|truncate\w*|writeJsonAtomic|"