From 3787cfd0d5e005cc09afeb68e7f97fc2053a7b31 Mon Sep 17 00:00:00 2001 From: Lauri Gates Date: Sat, 11 Jul 2026 13:50:27 +0300 Subject: [PATCH 1/2] =?UTF-8?q?docs(claude):=20deny=20rules=20=E2=80=94=20?= =?UTF-8?q?space=20form,=20not=20:*,=20for=20flag-scoped=20patterns?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Colon-form Bash(git push --force:*) prefix-matches --force-with-lease, hard-blocking the safe recovery form git-hazards trap #7 depends on. Caught in loractl PR #39 review (an agent-authored deny had silently widened); the space form stops the match at the exact flag. Co-Authored-By: Claude Fable 5 --- exact_dot_claude/rules/claude-code-auto-mode.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/exact_dot_claude/rules/claude-code-auto-mode.md b/exact_dot_claude/rules/claude-code-auto-mode.md index 1b473bc4..7e4b4f25 100644 --- a/exact_dot_claude/rules/claude-code-auto-mode.md +++ b/exact_dot_claude/rules/claude-code-auto-mode.md @@ -51,6 +51,16 @@ any mode except `bypassPermissions`. Keep dangerous ops in `deny` (`git push --force *`, `git add -A`, `kubectl config use-context *`, `Write(**/CHANGELOG.md)`). +**Use the space-delimited form for flag-scoped deny rules, not `:*`.** +Colon-form patterns prefix-match the raw command string, so +`Bash(git push --force:*)` also hard-blocks `git push --force-with-lease …` +— locking out the safe recovery form that the stacked-PR protocol +(`git-hazards.md` trap #7) depends on. The space form +`Bash(git push --force *)` stops the match at the exact flag (the trailing +space can't match `-with-lease`), leaving lease-guarded pushes to the +classifier's soft-deny instead of a hard block. (Caught in loractl PR #39 +review, 2026-07 — an agent-authored colon-form deny had silently widened.) + ## Custom hooks vs. auto mode — don't double-gate A custom PreToolUse/UserPromptSubmit hook that re-implements a safety check From 5c26cf8cf63c7d92130cd9d6e98bcfdf094f3925 Mon Sep 17 00:00:00 2001 From: Lauri Gates Date: Sat, 11 Jul 2026 13:50:46 +0300 Subject: [PATCH 2/2] feat(mise): add cargo-deny via aqua backend Installed with mise use -g during the loractl post-M8 sweep (deny.toml gate, loractl PR #39); captured from target drift so chezmoi apply doesn't uninstall it. Co-Authored-By: Claude Fable 5 --- private_dot_config/mise/config.toml.tmpl | 1 + 1 file changed, 1 insertion(+) diff --git a/private_dot_config/mise/config.toml.tmpl b/private_dot_config/mise/config.toml.tmpl index 6ab0e159..45212f80 100644 --- a/private_dot_config/mise/config.toml.tmpl +++ b/private_dot_config/mise/config.toml.tmpl @@ -131,6 +131,7 @@ d2 = "latest" chezmoi = "latest" usage = "latest" uv = "latest" +"aqua:EmbarkStudios/cargo-deny" = "latest" # Rust license/bans/sources gate (cargo deny) # ============================================================================ # Environment Variables