Claude Code First, specification version 0.1.0. The plain-language guide

Version 0.1.0. Grade R3/S3.

F301 A guard hook refuses only the calls that reach it, and its recorded gaps failed silently

FieldValue
Statusactive
TopicGates, verification, and hooks against instructions
GradeR3/S3
Casesroadkeep, Shio, winwright, freewilly
Contrarynone
Harness factsH4, H5, H6, H10

Claim

Hooks in the corpus are built to fail open, so that their own errors never block a turn, and every recorded gap in a hook (a tool it was not matched on, a session where it was not loaded, a clone where it was not built, a hook that misread its own write) let work through unguarded, with nothing stating that the guard was not guarding, until someone noticed after the fact; the backstop two projects name for what a hook misses is a gate that runs elsewhere, at the commit or in CI.

Mechanism

A PreToolUse hook answers only for the tool calls it is matched on, in sessions where it is installed and able to run (H4, H6). A hook that exits non-zero on its own bug would block every call (H5), so the hooks here allow on any failure. The price of that design is that a hook which is absent, unmatched or broken looks exactly like a hook that approved.

Observations

Independence

Four independent origins of a gap: roadkeep (the shell gap and the self-re-arming bump hook), Shio (the web session), winwright (its own .NET guard on a fresh clone) and freewilly (drift past the hooks while CI did not lint). The web-session gap was found once, in Shio: the same web session committed Shio's launcher at 10:50 on 2026-08-08 [shio@c215718bb] and, two minutes later, a roadkeep README section that "Points at Viglet Shio's reference copy." [roadkeep@7944b1a7] roadkeep's own committed launcher came four days after [roadkeep@7243dc05], so the launcher originated in Shio, not in roadkeep. The launchers in freewilly and polyweave and the fail-open rule in polyweave's no-clobber hook are copies and count once. The fail-open design has two independent statements, roadkeep's guard and winwright's README; whether winwright's wording was carried from roadkeep cannot be told from the pins.

Counter-evidence

None found at the pins. No source records a hook in the corpus failing closed and blocking work, so the claim that failing open is the better trade rests on the projects' stated reasoning (S1), not on an observed closed failure. The ledgers record no count of how often a guard denied or asked, so the pins cannot say how much the hooks prevented while they did run.

Grade

R3: gaps recorded independently in four projects. S3: roadkeep's bump hook failure is counted (eight commits, versions 0.1.388 against 0.1.392). That hook is a git hook, not a Claude Code hook; for the PreToolUse guards alone the strongest observations are dated incidents (RK128, the Shio web session, WW221), which is S2. Not S4: no check at the pins fails when a guard is absent from a session. freewilly's DD115 test fails if the guard is not wired in the committed settings, but it cannot see a session where the plugin did not load, and no source records it failing.