From 9547965c9d4e8534cc06e65fef4734edf42b9d06 Mon Sep 17 00:00:00 2001 From: le king fu Date: Mon, 19 Oct 2026 19:56:48 -0400 Subject: [PATCH] docs: keep the escaped example escaped, align the script with the table (#63) The escape-sequence pitfall had lost its own example on the way: the backslash-u002d sequence landed decoded as a plain dash. It is written back with the backslash built by chr(92) and checked with od -c. The script's docstring no longer lists the environment and log-line triggers dropped during calibration, and AUTH no longer matches timingSafeEqual and createHash, which the Haut table does not name. Replay unchanged: 20 haut out of 31. Co-Authored-By: Claude Opus 5.5 --- REVIEW.md | 2 +- scripts/review-levels.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) 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|"