blast-radius skill: require evidence-CLI sender rows before a no-consumer verdict #700

Closed
opened 2026-09-24 19:28:07 +00:00 by jared · 2 comments
Owner

VERDICT: CREATE — Origin chain is complete, terminates in DESIGN (SKILL.md rules/step 2 permit hand-grep substitution), and this ticket is the named root, not a symptom of another problem.

Problem

During the #633 blast-radius run on 2026-09-24 the agent declared Hook::Pipe#cwd dead code. It grepped only for Pipe.new and Hook::Pipe. The live callers use the Pipe.call factory in plugins/os-sdlc/lib/os_sdlc/hook/subagent_start.rb:7, subagent_stop.rb:7, post_tool_use.rb:69. lsp-probe refs on cwd returned only in-file sites and the agent read that as "no caller". If the orchestrator had trusted the report, the removal of the Dir.pwd fallback would have looked like a no-op while it fires on every SubagentStart, SubagentStop, and PostToolUse event.

Observed

The SKILL.md rules block (plugins/os-sdlc/skills/blast-radius/SKILL.md lines 9-16) and step 2 done-when (line 42) allow a hand-picked grep pattern to stand in for the evidence CLI.

Reproduce

n/a: process defect observed in one agent run; transcript cited.

Approach

Two line edits to plugins/os-sdlc/skills/blast-radius/SKILL.md.

Required work:

  1. Rules block: add "Never grep a Ruby symbol with a hand-picked call pattern (.new, X.method) as a substitute for the evidence CLI in step 2; a hand-picked pattern only matches the calling convention you guessed." — check: rule text present in SKILL.md rules block.
  2. Step 2 done-when: add "A 'no consumer found' conclusion requires sender rows from the evidence CLI, or an explicit UNKNOWN from it, not an absent hand-grep hit." — check: text present in step 2 done-when.
  3. Read the blast-radius implementation-status leaf under docs/implementation-status/ and run bin/refresh-plugins.
  4. Add one History row to the blast-radius implementation-status leaf.

Rejected: filing an ADR for this change — reason: this is a skill wording fix, not an architecture decision.

Acceptance criteria

  • Given SKILL.md's rules block, when read, then it contains the new rule against hand-picked grep substitution for the evidence CLI.
  • Given SKILL.md's step 2 done-when, when read, then it requires evidence-CLI sender rows or an explicit UNKNOWN before a no-consumer verdict.
  • Given the SKILL.md edit, when bin/refresh-plugins runs, then it completes without error.
  • Given the change is complete, when the blast-radius implementation-status leaf is checked, then it has one new History row recording this fix.

Owner sketch

n/a: documentation-only change to SKILL.md prose; no new Ruby objects.

Origin

  • Trigger: #633 blast-radius run, agent self-reported the error.
  • Improvised this session: none.
  • Chain: false no-consumer verdict ← hand-picked grep pattern used instead of evidence CLI ← SKILL.md rules and step 2 done-when permit it (DESIGN, plugins/os-sdlc/skills/blast-radius/SKILL.md lines 9-16, 42).
  • Root candidate: this ticket.
  • Where: plugins/os-sdlc/skills/blast-radius/SKILL.md.
  • Session: 84007e36-de02-41e0-b4f6-5932f7688fb0
  • Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/84007e36-de02-41e0-b4f6-5932f7688fb0.jsonl
  • Parent: #633 (user-filed).
VERDICT: CREATE — Origin chain is complete, terminates in DESIGN (SKILL.md rules/step 2 permit hand-grep substitution), and this ticket is the named root, not a symptom of another problem. ## Problem During the #633 blast-radius run on 2026-09-24 the agent declared `Hook::Pipe#cwd` dead code. It grepped only for `Pipe.new` and `Hook::Pipe`. The live callers use the `Pipe.call` factory in `plugins/os-sdlc/lib/os_sdlc/hook/subagent_start.rb:7`, `subagent_stop.rb:7`, `post_tool_use.rb:69`. `lsp-probe refs` on `cwd` returned only in-file sites and the agent read that as "no caller". If the orchestrator had trusted the report, the removal of the `Dir.pwd` fallback would have looked like a no-op while it fires on every SubagentStart, SubagentStop, and PostToolUse event. ## Observed The SKILL.md rules block (plugins/os-sdlc/skills/blast-radius/SKILL.md lines 9-16) and step 2 done-when (line 42) allow a hand-picked grep pattern to stand in for the evidence CLI. ## Reproduce n/a: process defect observed in one agent run; transcript cited. ## Approach Two line edits to `plugins/os-sdlc/skills/blast-radius/SKILL.md`. Required work: 1. Rules block: add "Never grep a Ruby symbol with a hand-picked call pattern (`.new`, `X.method`) as a substitute for the evidence CLI in step 2; a hand-picked pattern only matches the calling convention you guessed." — check: rule text present in SKILL.md rules block. 2. Step 2 done-when: add "A 'no consumer found' conclusion requires sender rows from the evidence CLI, or an explicit UNKNOWN from it, not an absent hand-grep hit." — check: text present in step 2 done-when. 3. Read the blast-radius implementation-status leaf under docs/implementation-status/ and run `bin/refresh-plugins`. 4. Add one History row to the blast-radius implementation-status leaf. Rejected: filing an ADR for this change — reason: this is a skill wording fix, not an architecture decision. ## Acceptance criteria - [ ] Given SKILL.md's rules block, when read, then it contains the new rule against hand-picked grep substitution for the evidence CLI. - [ ] Given SKILL.md's step 2 done-when, when read, then it requires evidence-CLI sender rows or an explicit UNKNOWN before a no-consumer verdict. - [ ] Given the SKILL.md edit, when `bin/refresh-plugins` runs, then it completes without error. - [ ] Given the change is complete, when the blast-radius implementation-status leaf is checked, then it has one new History row recording this fix. ## Owner sketch n/a: documentation-only change to SKILL.md prose; no new Ruby objects. ## Origin - Trigger: #633 blast-radius run, agent self-reported the error. - Improvised this session: none. - Chain: false no-consumer verdict ← hand-picked grep pattern used instead of evidence CLI ← SKILL.md rules and step 2 done-when permit it (`DESIGN`, plugins/os-sdlc/skills/blast-radius/SKILL.md lines 9-16, 42). - Root candidate: this ticket. - Where: plugins/os-sdlc/skills/blast-radius/SKILL.md. - Session: 84007e36-de02-41e0-b4f6-5932f7688fb0 - Transcript: /home/jared/.claude/projects/-home-jared-dev-cc-os/84007e36-de02-41e0-b4f6-5932f7688fb0.jsonl - Parent: #633 (user-filed).
Author
Owner

Work started 2026-09-24 in worktree branch worktree-ticket-700.

Work started 2026-09-24 in worktree branch worktree-ticket-700.
Author
Owner

Resolution

Done: Added a rule to plugins/os-sdlc/skills/blast-radius/SKILL.md: never grep a Ruby symbol with a hand-picked call pattern as a substitute for the evidence CLI. Step 2 done-when now requires evidence-CLI sender rows or an explicit UNKNOWN before a no-consumer conclusion. One History row in the os-sdlc leaf. No ADR: this clarifies an existing rule.

Evidence: Merged to main 2026-09-24, commit 2ec1ae9f (branch worktree-ticket-700). Diff reviewed: 2 lines in SKILL.md plus 1 History row. bin/refresh-plugins run; live copy under ~/.claude/plugins/os-sdlc contains the new rule.

Follow-ups: none

## Resolution **Done:** Added a rule to plugins/os-sdlc/skills/blast-radius/SKILL.md: never grep a Ruby symbol with a hand-picked call pattern as a substitute for the evidence CLI. Step 2 done-when now requires evidence-CLI sender rows or an explicit UNKNOWN before a no-consumer conclusion. One History row in the os-sdlc leaf. No ADR: this clarifies an existing rule. **Evidence:** Merged to main 2026-09-24, commit 2ec1ae9f (branch worktree-ticket-700). Diff reviewed: 2 lines in SKILL.md plus 1 History row. bin/refresh-plugins run; live copy under ~/.claude/plugins/os-sdlc contains the new rule. **Follow-ups:** none
jared closed this issue 2026-09-24 19:31:22 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jared/cc-os#700
No description provided.