Repository navigation
Conversation
…tick is tested and the spelt reading asks about a session Muse read #643 and #652 after they merged (the merged-early rule). On #643: the line that ends a nested backtick at a comment's backtick had no test that killed it; the spelling `echo "$(echo "`echo #"`" ...)"` now holds it, with a mutant. Its two other findings, braces reset and restored across a nested substitution, cannot be reached from _held: a ${...} in a held substitution is refused at its start or skipped whole, so _inside never begins inside a nested one with braces open. On #652: the protected hook's spelt reading never reached sessions(), so a Claude Code session after a nested substitution was not asked about; it is now, with a test and a mutant. Its two evasion-only findings are #665. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ons read the rewritten text spelt (Muse, the review) sessions() read a text WHICH rewrote flat, whatever reading it was given, so with $(which claude) anywhere in the command the spelt reading's session after a nested substitution went unasked. It reads it spelt for the spelt reading, with a test and a mutant. This closes #665's item (c). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Important Review skippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the
|
Codex Review Summary: ❌ FailedThis 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. |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
|



The follow-on under the merged-early rule: Muse could not read #643 or #652 before they merged (quota). These are its reads, done after the merge, and what they found.
The protected edits to
tools/hooks/are pre-approved by the Maintainer 2026-11-08, ruled by the Factory Builder. Hooks are mistake guards (decision 0038's triage rule), and this PR is held to that standard.What changes
shell._insidethat ends a nested backtick at a comment's backtick had no test that killed itecho "$(echo "echo #"" "${?+'…'}")"holds it, with a mutant_held. A${...}in a held substitution is refused at its start or skipped whole, so_insidenever begins inside a nested substitution with braces open. Left as they aresessions(), so a Claude Code session after a nested substitution went unasked$(which claude)anywhere in the command,sessions()read the rewritten text flat, whatever reading it was givenmainbefore #652: #665's items (a) and (b)Decision 0032 gains one row, naming three mutants.
Checks
tests/test_hooks.py::test_a_substitutions_own_quotes_are_read_as_the_shell_reads_themand::test_a_double_quoted_substitution_in_a_double_quoted_one_hides_no_command_after_itgain the cases.make verifypasses,check_decisionsis clean, and the mutants oftools/hooks/shell.py,identity.pyandprotected.pyare all killed (38 at 237592d, 18 again at bd4834d).Reviews
$(which claude)gap, marked blocking; not a regression$(which claude)gap, the same onmaincommand_unreadable, asmaindoes at the top level, and one prompt can list that code twice. Left as they areAll read 237592d. bd4834d is the fix.
🤖 Generated with Claude Code