Claude Code First, specification version 0.1.0. The plain-language guide
Version 0.1.0. Level 2. Best evidence grade R3/S3.
PS-2 A forbidden action is refused, not only forbidden
An action a project forbids its agent to take SHOULD be refused by a committed deny or ask rule or by a guard, and not stated only in prose.
| Field | Value |
|---|---|
| Keyword | SHOULD |
| Level | 2 |
| Checked | by judgement |
| Findings | F300, F301, F402 |
| Harness facts | H6, H7 |
| Threat | construct: a forbidden action taken and not recorded leaves no trace |
| Status | active |
Rationale: a rule stated only in prose, with nothing that reads it, was found broken by the repository that wrote it, in two projects and by count (F300, R3/S3). The corpus forbids some actions only that way: polyweave's commit rule says "staged by path, never pushed" [polyweave@6d1c136:CLAUDE.md#L62-L63], and no committed control limits shell commands other than those naming a governed file (F402). The mechanisms that do refuse are the harness's deny and ask rules (H7) and a PreToolUse hook's deny (H6), each covering only what it matches (F301). F300 would admit a MUST. The keyword is held at SHOULD because every broken rule F300 records is a rule about text (a roadmap format, a pipe in a documented command, a punctuation mark), and no source records a forbidden action being taken, so the finding's mechanism is carried here to a kind of rule it was not observed on. Where a project forbids nothing in prose, this rule asks nothing of it; what a project should forbid is an open question.