You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Observed: guardrails hooks are authored ad hoc; false-positives are found by babysit workers during real passes and filed one at a time; fixing one hook teaches the next nothing.
Expected: (a) a per-hook golden-fixture harness (true-positive MUST-fire + false-positive MUST-stay-quiet cases; every filed instance above becomes a fixture), run in CI on any plugins/guardrails/hooks/** change; (b) a documented hook-precision convention — diff-scope PostToolUse:Edit checks to the changed hunk (whole-file only for new files), match structural producers not token co-occurrence, ignore tokens inside quoted args, bound stdin reads, and prefer either/or marker logic where "already-canonical → stay quiet" is the intent. New hooks and the fixes for the members conform to it.
Category
improvement (prevention). Kills a recurring false-positive class + the babysit-worker-time it burns finding them live, instead of N hand-fixes plus indefinite recurrence.
Relations
Members #389#390#446#543#545#546 (#544 dup of #543); #534 (same fixtures-as-prevention pattern for the babysit classifier); #530 (skill regression net — behavior-level sibling); #540 (shared dogfood-filing — the #543/#544 concurrent-duplicate is its motivating example); #531/#532 (sibling prevention umbrellas). Decompose candidate.
Lane: triage · Category: improvement (prevention umbrella) · Source: triage cycle 2026-07-19 — routing #543/#544/#545/#546 surfaced a class with no prevention layer.
Pattern — guardrails hooks recurrently ship false-positive over-fires, each caught in production and hand-filed
Open guardrails-hook false-positive / imprecision issues, one root class, zero prevention:
cli-flag-verifyscans the WHOLE file, warns on pre-existing lines outside the edited hunk (not diff-scoped).git commit -F -with inline heredoc Co-Authored-By trailer (requires BOTH markers, contradicting documented "either marker -> stay quiet" intent) #545 —flag-commit-pr-skill-bypassuses||where intent is&&→ fires on the canonicalgit commit -F -heredoc it's documented to stay quiet on.block-hook-bypassmatchesecho+>anywhere in a command string → blocks legitimate subprocess-stdout capture and any command whose quoted args merely mention the tokens.cli-flag-verifyreads fd0 unbounded (stdin stall).hardcoded-path-checkrepo-path branch flags ALL paths under home; percent-env interpolations flagged.hardcoded-path-checkWindows-aware remediation / inline opt-out gaps.Note: #544 and #543 were filed ~3s apart by two babysit workers — the same over-fire found twice, independently, in production.
Root cause
Two systemic gaps behind every instance:
git commit -F -with inline heredoc Co-Authored-By trailer (requires BOTH markers, contradicting documented "either marker -> stay quiet" intent) #545), unbounded stdin (guardrails: cli-flag-verify.sh still reads fd0 unbounded (last Win32-stall stdin site) #446), path-branch over-broad matching (guardrails: hardcoded-path-check false positives — repo-path branch flags all paths under home; percent-env interpolations flagged #389). Each is a fresh hand-fix with no reusable discipline.Observed vs expected
plugins/guardrails/hooks/**change; (b) a documented hook-precision convention — diff-scope PostToolUse:Edit checks to the changed hunk (whole-file only for new files), match structural producers not token co-occurrence, ignore tokens inside quoted args, bound stdin reads, and prefer either/or marker logic where "already-canonical → stay quiet" is the intent. New hooks and the fixes for the members conform to it.Category
improvement (prevention). Kills a recurring false-positive class + the babysit-worker-time it burns finding them live, instead of N hand-fixes plus indefinite recurrence.
Relations
Members #389 #390 #446 #543 #545 #546 (#544 dup of #543); #534 (same fixtures-as-prevention pattern for the babysit classifier); #530 (skill regression net — behavior-level sibling); #540 (shared dogfood-filing — the #543/#544 concurrent-duplicate is its motivating example); #531/#532 (sibling prevention umbrellas). Decompose candidate.