Claude Code First, specification version 0.1.0. The plain-language guide
Version 0.1.0. Level 1. Best evidence grade R3/S3.
PS-1 Name what stands in for a removed prompt
A project that removes permission prompts, by a committed allow rule or by a local bypass, MUST name in its committed files the guard or gate that stands in for them.
| Field | Value |
|---|---|
| Keyword | MUST |
| Level | 1 |
| Checked | by judgement |
| Findings | F402, F301 |
| Harness facts | H4, H6, H7 |
| Threat | construct: a local bypass is uncommitted, so outside every pin |
| Status | active |
Rationale: this is decision D3 in ../evidence/divergences.md. Prompts were removed in four projects and a refusing hook stood in for them (F402, R3/S2). A hook is fail-open by design and answers only for what reaches it, so an absent, unmatched or unbuilt guard looks exactly like one that approved, and the backstop two projects name for its gaps is a gate that runs at the commit or in CI (F301, R3/S3). A reader who cannot see which controls replace the prompts cannot tell a covered action from an uncovered one. The rule covers a local bypass too: settings such as settings.local.json sit above the shared project settings (H7) and were never committed in the corpus, so the posture a session actually ran under is invisible unless the project writes down what compensates for it. The breadth of the allow list itself is a documented deviation and is not settled here (see Open questions).