Repository navigation
docs(privacy): say which captured calls keep nothing, and what Write and MultiEdit copy (#737, slice 5) - #976
Conversation
…and MultiEdit copy (#737, slice 5) PRIVACY.md said a Bash command line is copied "even when the command prints nothing useful", but process_event drops a write-class or Bash call whose normalized response is under _MIN_OUTPUT_LENGTH (50) before anything is built, command line included. It also did not say that _normalize_output keeps only the before/after strings of an Edit, while a Write or MultiEdit response (no oldString/newString) is stored as its whole JSON, nor that a tool in none of the three lists is dropped as low_value_tool. Four tests drive the real process_event for each sentence. Refs #737 Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_018kyZYtuteev5XnAE8yMDVY
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Claude finished @cdeust's task in 2m 26s —— View job Review of PR #976 (review 1 of 3)
1 Blocker:
The new text therefore understates what is stored. The new test sends the plain string 3 Notes, no action before merge:
Verdict: block |
Review 1 of 3: PR #976Blocker
Notes, no action before merge
Everything else checks out against the code in every View job run |
… Write and MultiEdit copy (#737, slice 5)
|
Claude finished @cdeust's task in 2m 30s —— View job Review of PR #976 (review 2 of 3)
1 Blocker:
2 Notes, no action before merge:
Verdict: block |
Review 2 of 3: PR #976The review 1 Blocker is fixed in fa41cf5. The 50-character check is now described as counting the formatted output, and the one-character Edit and the 29/30-character Bash cases are tested. I checked them against Blocker
Notes, no action before merge
I read the code and traced the tests by hand. Running pytest and ruff needed an approval this runner doesn't grant, so CI will report them. Five specialist reviews ran: docs, tests, quality, security and performance. The quality and performance reviews found nothing that would fail CI. View job run |
… Write and MultiEdit copy (#737, slice 5)
|
Claude finished @cdeust's task in 2m 18s —— View job Review of PR #976 (review 3 of 3)
Blockers: none. The new Bash wording in 3 Notes, no action before merge:
Accepted: the whole PR (b9058b0, fa41cf5, 8ae887c). Verdict: approve |
Review 3 of 3: PR #976The review 2 Blocker is fixed in 8ae887c.
The new wording doesn't understate what is stored in any case. I traced the new tests by hand: every assertion holds and none passes vacuously, and the two cases from review 2 are now covered. This review covers 8ae887c only. Blockers: none. Notes, no action before merge
Accepted: the whole PR (b9058b0, fa41cf5, 8ae887c). No file or commit carries an open Blocker. Five specialist reviews ran: docs, tests, quality, security and performance. The quality review found nothing that would fail ruff or the craftsmanship gate, and the performance review found nothing. I couldn't run pytest or ruff here, because the commands needed an approval this runner doesn't grant, so CI will report them. View job run |
Summary
Tranche 5 de #737 (proposition 4, documentation), reprise des trois précisions notées après la revue 1 de #968. Chacune est lue dans
mcp_server/hooks/post_tool_capture.pysurmain(45da362) :_should_capturerenvoieoutput_too_shortpour Edit, Write, MultiEdit, NotebookEdit et Bash quand la réponse normalisée fait moins de 50 caractères (_MIN_OUTPUT_LENGTH) : rien n'est construit, la ligne de commande non plus. PRIVACY.md disait qu'un motif tapé dans une commande est copié « même quand la commande n'affiche rien d'utile », ce qui est faux sous ce seuil ; la phrase porte maintenant sur une commande capturée._normalize_outputne garde d'une réponse portantoldString/newString(Edit) que le chemin et les chaînes avant/après ; toute autre réponse dict (Write, MultiEdit) passe parjson.dumpsentière, contenu écrit et ancien fichier compris quand l'hôte les envoie.low_value_toolet n'est jamais capturé.Refs #737 (pas
Closes: balayage des artefacts orphelins, exclusion par projet, purge par répertoire et nettoyeur optionnel restent ouverts et demandent une décision, voir l'issue).Type of change
Test plan
tests_py/hooks/test_capture_privacy_disclosure.py: 4 tests ajoutés (8 cas avec la paramétrisation), chacun lit sa phrase dans PRIVACY.md et passe un vrai événement àprocess_event: réponse courte non capturée, Edit sansoriginalFile, Write/MultiEdit en JSON entier, Task/TodoWrite/outil MCP jamais capturés.pytest tests_py/hooks/test_capture_privacy_disclosure.py tests_py/hooks/test_post_tool_capture.py: 28 passed.ruff checketruff format --checksur le fichier de test : OK.python scripts/check_doc_claims.py: OK.Audit notes
python scripts/check_craftsmanship.pyéchoue localement sur[decision-integrity] invalid project wiki mirror, à l'identique surmain45da362 sans ce diff : ce n'est pas lié à cette PR, et la CI dira si c'est propre à cet environnement.uv sync --lockedimpossible ici : téléchargement de torch refusé par le proxy) ; tests lancés dans un venv avec pydantic, pydantic-settings, numpy et pytest installés à la main.originalFile) ; le texte décrit ce que fait le hook avec toute réponse sansoldString/newString.Reviewer checklist
### Changed).Generated by Claude Code