From 2780d6dcac35d0d38595091bb41a0c1fa9fdfc1e Mon Sep 17 00:00:00 2001 From: Edbert Chan Date: Fri, 25 Sep 2026 10:40:55 +0800 Subject: [PATCH] cat-mode: try a step in the main session before handing it back A block a subagent reports belongs to its context. In session 189436d4 the parent handed the user publish scripts for 66 minutes on a helper's report that publish-act-guard blocked it; that guard never covers the main session, and the parent had not tried. Fold the rule into the existing hand-back bullet so cat-mode stays at its 330-line cap. Co-Authored-By: Claude Opus 5.5 (1M context) Change-Id: Ie906b1f07d41cf216977751fb98b0684ad977a9b --- corpus/skills/cat-mode/SKILL.md | 8 ++++---- tests/test_cat_mode.py | 7 +++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/corpus/skills/cat-mode/SKILL.md b/corpus/skills/cat-mode/SKILL.md index 11b57ffba..813fa5c31 100644 --- a/corpus/skills/cat-mode/SKILL.md +++ b/corpus/skills/cat-mode/SKILL.md @@ -50,10 +50,10 @@ Once direction is set, act — don't ask permission for each sub-step. One fully - **An open PR is not evidence it is still needed.** Run `scripts/ci/check_branch_not_superseded.py` and report it before a land. - **A hand-back ("open the app and do it") is an unverified claim.** - "Cannot" needs the same evidence as any claim; keep manual steps for what - only a human can do (OAuth consent, a store upload). Before handing back, - name every surface tried and grep the artifact already located (`--help`, - bundle/asar, DB, logs). + "Cannot" needs evidence; keep manual steps for what only a human can do + (OAuth consent). First try the step once in the main session: a block a + helper reports is the helper's, not yours (no known prior art). Then + name every surface tried and grep the artifact already located (logs, DB). - **A blocked hand-back relays the gate's exit word for word.** When a hook, guard, or check blocks and the user must act, paste its exit message and the exact command, path, or marker it names, unshortened; a summary can drop the one step that gets them out. - Destructive or hard-to-reverse actions (force-push, bypassing a merge queue guard, schema changes) get one stop-and-ask. In the user's own repo, diff --git a/tests/test_cat_mode.py b/tests/test_cat_mode.py index e13770598..2bcc35b33 100644 --- a/tests/test_cat_mode.py +++ b/tests/test_cat_mode.py @@ -355,6 +355,13 @@ def test_hand_back_is_an_unverified_claim(self): self.assertIn("name every surface tried", text) self.assertIn("grep the artifact already located", text) + def test_helper_reported_block_is_tried_in_the_main_session(self): + """A subagent's guard block does not bind the parent: session 189436d4 + handed the user publish scripts for 66 minutes on a helper's report.""" + text = normalized_skill_text() + self.assertIn("First try the step once in the main session", text) + self.assertIn("a block a helper reports is the helper's, not yours", text) + def test_typed_slash_command_is_checked_on_disk(self): text = normalized_skill_text() self.assertIn("A typed `/name` is a named constraint", text)