Fix code-probe call-site patterns to match paren-less Ruby sends #482
Labels
No labels
P0
P1
P2
P3
bug
create
delete
enhancement
filed-by/agent
filed-by/user
frozen
lint-rule
needs-info
needs-triage
next
plugin/cc-architect
plugin/os
plugin/os-adr
plugin/os-aidd-lint
plugin/os-backlog
plugin/os-context
plugin/os-doc-hygiene
plugin/os-sdlc
plugin/os-vault
project/cc-os
ready-for-agent
ready-for-human
recurring
review
update
waiting
wayfinder:grilling
wayfinder:map
wayfinder:map
wayfinder:research
wayfinder:task
wayfinder:task
wontfix
worklist/deviations
worklist/lint-rule
worklist/new-implement-build
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
jared/cc-os#482
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Context
The code-probe skill's step 3 (trace call sites) prescribes exactly two ast-grep forms:
$RECV.NAME($$$A)andNAME($$$A). Both require a parenthesized argument-list node, so they miss idiomatic paren-less Ruby sends. Verified live 2026-08-22: the only production sender ofWriteGuard#deny?isreturn unless guard.deny?at plugins/os-sdlc/hooks/pre_tool_use.rb:24; both prescribed patterns return zero hits on it, while the bare$RECV.deny?form finds it. Consequence: a code-probe run following its own method silently drops real senders from the evidence brief — worst for query methods (foo?), which are conventionally called without parentheses.Skeptic verdict: CREATE — verified, reproducible tool defect in code-probe's own prescribed patterns (real false-negative on a live call site), with a clear root cause and no existing mechanism covering it.
Tasks
$RECV.NAMEform first; keepNAME($$$A)/$RECV.NAME($$$A)as arity-constraining refinements only.grep -nbefore trusting the absence.Acceptance criteria
deny?finds pre_tool_use.rb:24.Origin
$RECV.deny?+ grep cross-check; cheat-sheet in the teach workspace corrected, skill file untouched.Resolution
Done: code-probe step-3 call-site prescription rewritten: bare $RECV.NAME is the primary query, arity-pinned ($$$A) forms demoted to refinements, trigger-scoped grep cross-check added (0-hit known use, or dynamic :NAME/send hunts); cheatsheet.md and pattern-catalog.md updated consistently; plugin cache refreshed
Evidence: Working-tree diff on plugins/os-sdlc/skills/code-probe/{SKILL.md,references/cheatsheet.md,references/pattern-catalog.md} + History row in docs/implementation-status/os-sdlc.md (uncommitted, pending user commit). Acceptance criterion verified live: ast-grep run --lang ruby -p '$RECV.deny?' plugins/os-sdlc finds plugins/os-sdlc/hooks/pre_tool_use.rb:24, which both old prescribed forms missed (ast-grep 0.45.1). bin/refresh-plugins: all plugins synchronized.
Follow-ups: Two surfaced by the implementer, neither captured: (1) zero-arg caveat for the def-anchor example in code-write/references/rewrite.md — different use case (rewrite anchors, not call-site tracing), surfaced to user in-session for a judgment call; (2) audit of other os-sdlc reference docs for arity-assumption blind spots — dropped as speculative, no second observed failure.