please-make-no-mistakes 0.0.0-stage → 0.1.0-bootstrap.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/.claude-plugin/plugin.json +23 -0
  2. package/.codex-plugin/plugin.json +36 -0
  3. package/ARCHITECTURE.md +236 -0
  4. package/CHANGELOG.md +118 -0
  5. package/CONTRIBUTING.md +115 -0
  6. package/LICENSE +21 -0
  7. package/README.md +96 -2
  8. package/ROADMAP.md +15 -0
  9. package/SECURITY.md +98 -0
  10. package/SETUP.md +517 -0
  11. package/assets/pls.png +0 -0
  12. package/docs/architecture-decisions.md +296 -0
  13. package/docs/distribution.md +108 -0
  14. package/docs/getting-started.md +120 -0
  15. package/evals/README.md +325 -0
  16. package/evals/activation-cases.json +212 -0
  17. package/evals/agent-evaluation-cases.json +270 -0
  18. package/evals/behavior-cases.md +701 -0
  19. package/evals/host-guard-action-oracle.json +423 -0
  20. package/evals/host-guard-cases.json +871 -0
  21. package/hooks/claude/hooks.json +27 -0
  22. package/hooks/claude/pmnm-claude.mjs +330 -0
  23. package/hooks/codex/hooks.json +33 -0
  24. package/hooks/pmnm-brake.mjs +1873 -0
  25. package/hooks/pmnm-guard.mjs +4729 -0
  26. package/hooks/pmnm-shell.mjs +595 -0
  27. package/package.json +84 -4
  28. package/scripts/agent_evaluation.py +367 -0
  29. package/scripts/distribution_smoke.py +701 -0
  30. package/scripts/documentation_contract.py +1370 -0
  31. package/scripts/documentation_gate.py +29 -0
  32. package/scripts/install_smoke.py +306 -0
  33. package/scripts/postpublication_smoke.py +457 -0
  34. package/scripts/release_verify.py +109 -0
  35. package/scripts/test_agent_evaluation.py +235 -0
  36. package/scripts/test_brake.mjs +1378 -0
  37. package/scripts/test_claude_adapter.mjs +940 -0
  38. package/scripts/test_claude_discovery.mjs +145 -0
  39. package/scripts/test_distribution_smoke.py +845 -0
  40. package/scripts/test_documentation_gate.py +1473 -0
  41. package/scripts/test_host_guard.mjs +6476 -0
  42. package/scripts/test_install_smoke.py +213 -0
  43. package/scripts/test_release_verify.py +58 -0
  44. package/scripts/test_validate_skill.py +580 -0
  45. package/scripts/validate_skill.py +1860 -0
  46. package/skills/please-make-no-mistakes/SKILL.md +101 -0
  47. package/skills/please-make-no-mistakes/agents/openai.yaml +4 -0
  48. package/skills/please-make-no-mistakes/references/collaboration.md +79 -0
  49. package/skills/please-make-no-mistakes/references/epistemic-integrity.md +177 -0
  50. package/skills/please-make-no-mistakes/references/evidence-artifacts.md +60 -0
  51. package/skills/please-make-no-mistakes/references/failure-patterns.md +87 -0
  52. package/skills/please-make-no-mistakes/references/flow.md +180 -0
  53. package/skills/please-make-no-mistakes/references/folder.md +206 -0
  54. package/skills/please-make-no-mistakes/references/host-enforcement.md +276 -0
  55. package/skills/please-make-no-mistakes/references/impact-analysis.md +137 -0
  56. package/skills/please-make-no-mistakes/references/regression-localization.md +252 -0
  57. package/skills/please-make-no-mistakes/references/review-and-security.md +189 -0
  58. package/skills/please-make-no-mistakes/references/verification.md +244 -0
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "please-make-no-mistakes",
3
+ "displayName": "Please, Make No Mistakes",
4
+ "version": "0.1.0-bootstrap.0",
5
+ "description": "Epistemic integrity for AI-assisted software engineering.",
6
+ "author": {
7
+ "name": "Jonathan Muñoz Lucas",
8
+ "email": "git@jonathanmunoz.dev",
9
+ "url": "https://github.com/elnonathan"
10
+ },
11
+ "homepage": "https://github.com/elnonathan/please-make-no-mistakes#readme",
12
+ "repository": "https://github.com/elnonathan/please-make-no-mistakes",
13
+ "license": "MIT",
14
+ "keywords": [
15
+ "agent-skills",
16
+ "software-engineering",
17
+ "code-review",
18
+ "debugging",
19
+ "verification",
20
+ "epistemic-integrity"
21
+ ],
22
+ "hooks": "./hooks/claude/hooks.json"
23
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "please-make-no-mistakes",
3
+ "version": "0.1.0-bootstrap.0",
4
+ "description": "Epistemic integrity for AI-assisted software engineering.",
5
+ "author": {
6
+ "name": "Jonathan Muñoz Lucas",
7
+ "email": "git@jonathanmunoz.dev",
8
+ "url": "https://github.com/elnonathan"
9
+ },
10
+ "homepage": "https://github.com/elnonathan/please-make-no-mistakes#readme",
11
+ "repository": "https://github.com/elnonathan/please-make-no-mistakes",
12
+ "license": "MIT",
13
+ "keywords": [
14
+ "agent-skills",
15
+ "software-engineering",
16
+ "code-review",
17
+ "debugging",
18
+ "verification",
19
+ "epistemic-integrity"
20
+ ],
21
+ "skills": "./skills/",
22
+ "hooks": "./hooks/codex/hooks.json",
23
+ "interface": {
24
+ "displayName": "Please, Make No Mistakes",
25
+ "shortDescription": "Evidence-first discipline for software work",
26
+ "longDescription": "Investigates before changing a project, makes the evidence and uncertainty visible, keeps task knowledge in a user-controlled PMNM folder, asks for agreement on one plan Digest, verifies the result, and audits the complete change before the human commits.",
27
+ "developerName": "Jonathan Muñoz Lucas",
28
+ "category": "Developer Tools",
29
+ "capabilities": ["Read", "Write"],
30
+ "defaultPrompt": [
31
+ "Investigate this regression and show me the plan Digest before changing anything.",
32
+ "Review this change, verify its contract, and audit the full diff before I commit.",
33
+ "Resume this task from its PMNM folder and tell me what remains uncertain."
34
+ ]
35
+ }
36
+ }
@@ -0,0 +1,236 @@
1
+ # Architecture
2
+
3
+ ## Goal
4
+
5
+ Please, Make No Mistakes packages one portable Agent Skill and an optional brake for Claude Code and Codex. Support for other coding agents is in progress. The skill guides investigation, agreement, implementation and verification. A separate folder preserves rules and task evidence. The brake can stop covered destructive or sensitive operations before they run, when its host sends them to the hook.
6
+
7
+ The architecture keeps four claims separate:
8
+
9
+ 1. The portable skill describes how an agent works.
10
+ 2. The PMNM folder preserves what the agent learned, decided and verified.
11
+ 3. The brake may stop covered destructive or sensitive operations.
12
+ 4. Tests establish only the behavior and boundary they directly exercise.
13
+
14
+ None proves semantic truth or guarantees an error-free result. `SKILL.md` states what the product asks of the agent and what it does not promise; every change is checked against it.
15
+
16
+ ## Repository layers
17
+
18
+ ```text
19
+ please-make-no-mistakes/
20
+ ├── .claude-plugin/plugin.json public Claude Code plugin manifest
21
+ ├── .claude-plugin/marketplace.json repository marketplace catalog for Claude Code
22
+ ├── .codex-plugin/plugin.json public Codex plugin manifest
23
+ ├── .agents/plugins/marketplace.json repository marketplace catalog for Codex
24
+ ├── hooks/
25
+ │ ├── claude/hooks.json Claude Code brake registration
26
+ │ ├── claude/pmnm-claude.mjs retired interlock adapter for Claude Code, unregistered
27
+ │ ├── codex/hooks.json Codex brake registration
28
+ │ ├── pmnm-brake.mjs destructive-operation brake for both hosts
29
+ │ ├── pmnm-guard.mjs retired interlock engine, unregistered
30
+ │ └── pmnm-shell.mjs retired interlock shell classifier, unregistered
31
+ ├── skills/please-make-no-mistakes/
32
+ │ ├── SKILL.md portable kernel and reference router
33
+ │ ├── agents/openai.yaml Codex presentation metadata
34
+ │ └── references/ conditionally loaded procedures
35
+ ├── evals/ activation, behavior and guard contracts
36
+ ├── scripts/ release and distribution validators
37
+ ├── assets/pls.png README mascot
38
+ ├── SETUP.md canonical setup procedure
39
+ └── public project documentation
40
+ ```
41
+
42
+ `AGENTS.md` and `.ai/` are local coordination. They are ignored by Git, excluded by the package allowlist and forbidden from public artifacts.
43
+
44
+ ## Portable skill
45
+
46
+ `SKILL.md` is intentionally small. It owns the four parts and says when, how and where to apply them:
47
+
48
+ - one PMNM folder per machine, where the agent writes freely
49
+ - the flow: investigate, show the plan Digest, work inside it, verify, audit, then hand over the Test Digest at the human acceptance boundary
50
+ - rules: one sentence each, written only after an always or a never and one question about their level
51
+ - guards: how to read a card and take its `NEXT:` action
52
+
53
+ Its reference table is one level deep. A reference is loaded only when its condition applies. References add detail; they cannot weaken the kernel.
54
+
55
+ The skill has no required MCP service, programming language, version control system, repository host, test runner or delivery system. It uses the strongest evidence channels the host offers and reports what their absence leaves unresolved. Semantic navigation and other graph providers may supply definitions, references, call edges or unresolved candidates, but their output remains evidence rather than scope authority or proof of runtime reachability. Public prose carries shapes with placeholders, never worked examples.
56
+
57
+ ## PMNM folder
58
+
59
+ The installed plugin is replaceable. User knowledge is not. PMNM stores task knowledge and learned rules outside repositories and outside installed packages.
60
+
61
+ ```text
62
+ <PMNM folder>/
63
+ ├── index.json
64
+ ├── general-rules.md
65
+ ├── commands.json the brake's sealed verdicts
66
+ ├── models.json the agent's judge proposal; grants nothing
67
+ └── projects/<project>/
68
+ ├── project-rules.md
69
+ ├── project-knowledge.md
70
+ └── tasks/<task>/
71
+ ├── index.md
72
+ ├── plan.md
73
+ ├── verification.md
74
+ ├── impact.md required for Standard or High implementation with file targets
75
+ ├── expectations.md required for High effort
76
+ ├── permissions.json
77
+ ├── environment.md optional operational preflight for persistent local resources
78
+ ├── review.md required for High-effort passed closure
79
+ ├── operation.md optional package for consequential work delegated to another actor
80
+ ├── provenance.md optional material attribution links
81
+ ├── artifacts.md optional evidence custody record
82
+ └── artifacts/ optional deliberately retained copies
83
+ ```
84
+
85
+ The host configuration contains only a pointer to this folder. Claude Code and Codex each use their own config location. Another host, which is not officially supported, must use its own supported configuration surface. All can point to the same folder.
86
+
87
+ Startup follows one route. The agent reads only the host's documented literal pointer, stops for the missing folder or project answer, and performs the setup itself. It starts each task with an effort and a work type. The durable work type is `implementation`, `advisory` or `verification`. The retired interlock had a second route through guard receipts; it returns only if the interlock is restored.
88
+
89
+ Task selection belongs to a session, not to the repository. A fresh session starts task-neutral. Several sessions may work on different task folders in the same project; each task keeps its own Digest, permissions and completion. No hook serializes two sessions that share a task, so each reloads the task files before writing to them.
90
+
91
+ `index.json` has one writer: the agent, using the `pmnm.projects/v1` schema, so another host does not lose repository-to-project continuity. An unindexed path already present under `projects/` is preserved and treated as occupied; a new repository receives another collision-safe path rather than silently adopting it. The agent seeds four base task files and adds canonical `impact.md` when Standard or High implementation has file targets; it fills them, adds whatever else the task needs and never renames them. Optional provenance and artifact records have canonical names when their responsibilities arise, but their absence does not make an unrelated task incomplete. Everything else inside the folder is the agent's to organize, except the brake's `commands.json`.
92
+
93
+ The folder asks the human exactly four things: where it goes, the project name, whether a candidate task folder is this task, and whether a new rule belongs to the project or applies generally. The task question appears only when an existing folder shares the id or a name that contains or normalizes to it.
94
+
95
+ Containment and secrets are agent obligations first. A path or symbolic link that escapes the folder is not an internal PMNM write. The brake adds one check: it judges every edit by the real path where it lands, so a symbolic link cannot carry an edit out of the folder or onto a secret or configuration file, and it still stops deletions, moves and secret or configuration edits inside the folder. It does not scan content for secrets. The agent never writes a secret there; it keeps a reference to where the secret lives instead. An empty folder is seeded before its pointer is written. Invalid pointer or index state is preserved under a unique recovery name and rebuilt only after the human chooses that recovery. The folder is a continuity aid, not a secret manager or access control system.
96
+
97
+ External evidence is reference-first. Copying or moving an artifact is a custody decision with an exact source, destination, purpose, privacy result, identity method, recovery and retention. Full-content digests can establish byte identity; visual or semantic similarity cannot. Provenance is relational as well: authorship, operation, observation, discovery, review, approval and causality keep independent evidence and status.
98
+
99
+ ## Plan authority
100
+
101
+ The plan Digest is the human checkpoint before material work. Before showing it, the agent writes `plan.md`. It names each file the implementation will write, each file that must stay as it is, and each material state transition or invariant. Advisory work instead pairs each `deliverable` with a `boundary` that records the strongest alternative, exclusion or uncertainty and its disposition. File lines name paths and reasons. State lines name stable ids and explicit before and after values.
102
+
103
+ Standard or High implementation with file targets also writes `impact.md`. It gives either a bounded local rationale or a transitive ledger whose roots were derived independently of the proposed plan. A persistent local-environment operation gets an `environment.md` preflight covering command indirection, current resources, ownership, health, conflicts, the reuse-or-start-only-missing decision and cleanup.
104
+
105
+ One preflight checks the work type, plan, verification contract, applicable impact contract, required environment preflight and permission forecast before agreement. The agent reports every defect it finds together. The Digest then shows the human the understanding, current state, change, impact, verification, ambiguities and trade-offs. Each check names the wrong result it could expose. The agent stops until the human answers.
106
+
107
+ Agreement binds the canonical set of file, state and deliverable objectives, in any order, with the actionable verification plan and permission forecast. Checking a box is progress, not a change of agreement. Safe absolute and relative spellings of the same repository path share one identity. A state already complete when its Digest is shown is historical: current evidence remains necessary, but the old operation is not replayed. A material reframe is recorded immediately; unrelated read-only investigation may continue, but dependent effects and final delivery wait for renewed agreement. No hook refuses a write to an absent or excluded file, a state-changing operation not bound to its objective, or stale deliverable closure. The agent must not make them, and the audit compares the actual changes with `plan.md`.
108
+
109
+ A repository mutation enters the Digest path. An ordinary write inside the PMNM folder needs no approval. An external-only effect uses its own exact authority without inventing a repository plan. After startup, resume, clear or compaction, the agent reloads the canonical files that exist before material work on an active task: general rules, project rules, project knowledge and active-task context. It reloads canonical rules and project knowledge again immediately before curating them, so a concurrent revision is not overwritten silently. No hook checks that reload, the order of the steps or the shape of the Test Digest.
110
+
111
+ Sensitive effects remain separate outside ordinary contained PMNM maintenance. Predictable exact operations and bounded reusable capabilities appear together in the plan Digest and can receive task or project scoped authority. A capability is described by effect, boundary, persistence, operation shape and constraints rather than supplied by an executable catalog. A state transition is task scoped and binds its exact operation to a planned objective. An unlisted state operation requires a revised Digest; other newly discovered sensitive effects need their own yes. The brake does not read the forecast: it still stops each covered destructive or sensitive operation until the human replies with its exact single-use token or, in Claude Code, answers the host's own prompt. Native host approval remains controlling.
112
+
113
+ ## Verification and closure
114
+
115
+ Before claiming any passed verification, the agent writes two current lines in `verification.md`: the request's own case and what was observed, and the thing that must stay the same and what was observed. A state plan repeats each agreed state contract; an advisory plan records each deliverable and boundary observation. After a material change or reframe the claims must postdate it. Those lines are claims the human can read. No hook checks them, and nothing checks that they are true. A successful state operation proves only that the operation reported success, so resulting-state evidence remains separate. Command verification also needs an observed successful check against the current state, and human verification needs a later human turn. A syntax, metadata or documentation check remains investigation evidence while planned objectives are open; it cannot become final verification. A check that changes the project invalidates the prior Digest and returns to investigation.
116
+
117
+ Closure always needs a current passed verification. It walks `plan.md`: every objective checked, every file target materially changed, every changing state objective supported by its exact successful operation and current evidence, every advisory deliverable tested against its boundary, every exclusion preserved and nothing material outside the plan. It separately re-derives impact roots from the actual changed surface or delivered claim, asks what material path or contract the plan omitted, completes dynamic-boundary and non-functional dispositions, and binds that omission audit to the current verification fingerprint when applicable. Plan conformance cannot validate its own completeness. A no-op or a file restored to baseline is not complete. Across revised Digests, a direct-comparison baseline retains earlier path identities and adds newly planned paths, so removing a path can neither hide nor manufacture a change. The final audit names file comparison and other evidence separately. A state- or deliverable-only task reports no project-file comparison instead of inventing one. It also names how many canonical rules or knowledge files the task wrote.
118
+
119
+ A reviewer who did not write the change is a source of evidence at High effort or on request. The review packet binds the contract, changed surface and impact roots to the current plan hash and verification fingerprint, then records a concrete counterexample, a distinct check, an omission challenge, non-functional dispositions, disagreement and residual limit. Passed closure rejects a stale packet, repeated evidence or unresolved disagreement. No hook validates the packet. It cannot prove reviewer independence or semantic correctness, and the agent does not inherit the reviewer's verdict. If no non-author is available, an adversarial self-review remains explicitly partial and cannot claim independence or completeness.
120
+
121
+ The Test Digest follows current verification, required review and the agent's final audit. It is the final human acceptance handoff, normally immediately before commit, submit or close. A passed or partial final audit can request that handoff; a blocked audit keeps the task open and does not arm acceptance. The later human response closes the task. Intermediate verification never triggers it.
122
+
123
+ ## Brake
124
+
125
+ `hooks/claude/hooks.json`, declared by `.claude-plugin/plugin.json`, and `hooks/codex/hooks.json`, declared by `.codex-plugin/plugin.json`, register one module, `hooks/pmnm-brake.mjs`, with `--host claude` or `--host codex`. Both register it on `PreToolUse` and `UserPromptSubmit`. In Claude Code it covers every tool; in Codex the tool matcher is `Bash|apply_patch|Edit|Write|mcp__.*`. The package carries no conventional `hooks/hooks.json`, because Claude Code would merge that file into the Claude plugin. The brake knows nothing about tasks, plans or Digests.
126
+
127
+ The brake imports only Node.js built-in modules and runs no program except the host's own command-line client as its judge. Package validation enforces that boundary and an inspectable size budget.
128
+
129
+ For each covered tool call it decides in two layers:
130
+
131
+ 1. Deterministic rules place known shapes as safe, sensitive or destructive, including commands inside wrappers, substitutions and heredocs. A compound command takes its most severe segment. Code that runs other code is classified by what it runs.
132
+ 2. What the rules cannot place goes first to a sealed stored verdict, then to the judge model the human confirmed. Only a safe verdict with high confidence runs without asking.
133
+
134
+ A stop prints a card: `Blocked:` or `Ask:` with what happened, one `NEXT:` line with one exact action, and, when the human can approve by reply, the `PMNM-<code>` token alone on a last line. `Blocked:` covers a destructive operation, an operation that reaches the brake's own state, an operation the brake could not evaluate, and the Claude Code load stop. `Ask:` covers any other stop. For a destructive or sensitive operation, the `NEXT:` line tells the agent to show the human the exact operation; it runs only if the human replies with its exact `PMNM-<code>` token, or runs it themselves. Some cards carry no token: the brake's own state, an evaluation error, the load stop, full or busy approvals, and an event without a session id. In Claude Code a deterministic sensitive operation uses the host's own permission prompt instead of a card. A failed or unavailable classification asks. An error the brake catches while evaluating blocks. A brake that runs past its time limit or cannot start is handled by the host, which may let the operation run.
135
+
136
+ On `UserPromptSubmit` the brake recognizes the human's exact prompts: an approval token grants one rerun of that operation in that session, and the judge confirmation and MCP allowlist prompts change sealed state. The agent cannot send a prompt. When the judge needs a confirmation or a re-evaluation, the brake adds one notice to the agent's context, once per change, and the agent relays it to the human.
137
+
138
+ On the first prompt of each session the brake adds one line asking the agent to load PMNM. In Claude Code, when the agent has not loaded the skill with the Skill tool, the brake stops the first tool call that can touch the project once per session, with a card that asks the agent to load it. The next call runs whether or not the agent did. The human's exact prompt `PMNM-SKIP` turns that stop off for the session. Codex has no load stop.
139
+
140
+ An operation that reaches the brake's own state is blocked on both hosts, before any grant is spent and with no token, so only the human can run it.
141
+
142
+ Under the host's plugin data directory, in `brake/`, the brake keeps a secret key, pending approvals and one-time grants, the confirmed judge, the MCP allowlist, hashes of the sessions that received the load line and of the sessions that loaded the skill, the notices already shown, and decision counts. Every entry carries a seal made with that key, except the notices and the decision counts, which grant nothing. In the PMNM folder it writes only `commands.json`. Nothing in the PMNM folder grants authority by itself.
143
+
144
+ It cannot:
145
+
146
+ - understand product intent or check the flow
147
+ - prove a model statement true
148
+ - prove that a safe verdict makes an operation harmless
149
+ - catch every obfuscated command
150
+ - intercept an event the host does not deliver
151
+ - replace the host sandbox, operating system permissions or native approval controls
152
+
153
+ Disabled, untrusted, unsupported, failed, or bypassed paths leave the portable skill in advisory mode. This is a disclosed reduction in enforcement, not permission to claim the brake ran.
154
+
155
+ ## Host port contract
156
+
157
+ Another host may run the brake through its own lifecycle API. Such a port is not officially supported. It must be designed, tested, installed and documented independently. Similar event names do not establish equivalent semantics.
158
+
159
+ A port must preserve:
160
+
161
+ - deterministic rules that take precedence over stored verdicts
162
+ - two card levels, `Blocked` and `Ask`, each with one `NEXT:` action, or the host's own permission prompt where it has one
163
+ - the human's exact operation-bound, session-bound and single-use approval token, which the agent cannot send
164
+ - sealed state outside the PMNM folder
165
+ - a failed classification that asks and an evaluation error that blocks
166
+ - one PMNM folder and a host-local pointer
167
+ - disclosure of uncovered paths
168
+
169
+ Both hosts register one brake module, `hooks/pmnm-brake.mjs`, selected by `--host`. The module owns each host's output shape and has host decision tests for both. Codex has no native ask, so it always uses the token. Portable behavior lives in the skill and the PMNM folder.
170
+
171
+ ## Retired interlock
172
+
173
+ Earlier releases shipped one portable Agent Skill packaged with an optional Codex procedural adapter and an optional Claude Code procedural adapter instead of the brake. Each adapter enforced a small set of observable ordering rules for the lifecycle events its host sent it. Their source stays in the package, unregistered: the engine `hooks/pmnm-guard.mjs`, its shell module `hooks/pmnm-shell.mjs` and the Claude Code adapter `hooks/claude/pmnm-claude.mjs`. None of it runs now. This section describes how the interlock works once restored; [Restoring the interlock](docs/architecture-decisions.md#restoring-the-interlock) lists the steps and the defects to fix first.
174
+
175
+ `hooks/pmnm-guard.mjs` owns bounded host-provided state and imports one local pure module, `hooks/pmnm-shell.mjs`, for shell structure, target evidence and narrow hard stops. The module contains no positive executable catalog. Operation admission keeps classification evidence, human authority and host execution or result as independent stages. Ordinary operations use a structured model declaration, then a separate human-agreed capability or exact authority when needed; satisfying one stage does not erase or manufacture another. Neither module has a registry dependency. For the interlock, distribution validation accepts exactly this two-file local graph beside the brake, rejects links and escaping or unlisted modules, and enforces explicit per-file and aggregate inspectability budgets. Its cards have two lines: `Blocked`, `Ask` or `Note` with what happened, and one exact `NEXT:` action. A NEXT line is an order: one verb, its limit, and who acts next.
176
+
177
+ The guard tracks ordering, freshness, target geometry and scope. It owns `index.json`, seeds the task files and writes every preflight issue and safe canonicalization to guard-owned `preflight.md`. Lifecycle discontinuities make the session's durable basis stale until the agent reloads the canonical files that exist. A covered successful read correlates through host operation identity when available and counts only when the result returns the current file bytes. On Codex Stop events the guard inspects only the latest assistant message for the current Test Digest. If Codex omits that Stop event, the next human prompt may recover only the latest assistant message from a fixed-size tail of the literal host-provided transcript path. That transcript schema is unstable: unreadable, linked, oversized, malformed, unsupported, stale or unrelated evidence fails closed, and neither the path nor the message is retained. Both routes check only shape and freshness. They cannot establish the message's truth, judge whether the investigation was sufficient, know whether the rules were understood or know whether the human understood the plan.
178
+
179
+ The interlock adapter may:
180
+
181
+ - establish a PMNM folder pointer and project mapping
182
+ - block the first project read without an open task
183
+ - require a task before a covered write and a fresh `plan.md` before a Digest
184
+ - aggregate plan, verification, impact and permission defects before asking for agreement
185
+ - block a project write until the Digest is agreed, a write outside the plan before it runs, and an unbound state-changing operation
186
+ - allow writes inside the PMNM folder while containing inspected paths and refusing detected secret-shaped content on covered write channels
187
+ - bind a reviewed permission forecast to exact operations or bounded task and project capabilities, while binding state changes only to task objectives
188
+ - distinguish project, contained PMNM and external-only targets before choosing an authority path
189
+ - split unknown compound commands and commands with several sensitive effects
190
+ - require an exact structured effect declaration when host metadata is absent, without trusting an executable name
191
+ - let one plain same-turn declaration or already agreed capability classify exactly the next otherwise-unknown operation; discard unused intent at the existing boundaries, but retain a legitimately applied exact classification across its separate authority decision until that same operation is admitted
192
+ - observe non-persistent verification without presuming a project write, and render its card from the observed workspace delta rather than task phase
193
+ - account for missing, failed and late results
194
+ - require fresh verification claims, a current impact omission audit, a complete audit and a current semantic review packet for High-effort passed closure
195
+ - reconcile unfinished task transitions once and isolate the successor's task-scoped state
196
+ - keep transient state per session, reusable authority per project and implementation authority per task, with revision checks when sessions share a task
197
+ - require durable rule reload after startup, resume, clear or compact before material work on an active task
198
+ - require fresh canonical rule and project-knowledge context before a curation write
199
+ - require a complete operational preflight before persistent local-environment authority enters a Digest
200
+ - print a bounded source fingerprint and name file comparison and state evidence separately
201
+
202
+ A host adapter for the interlock must preserve:
203
+
204
+ - the twelve public receipt meanings and the three card levels
205
+ - two-line cards with one `NEXT:` action
206
+ - one PMNM folder and a host-local pointer
207
+ - free contained task-folder writes without per-file approval
208
+ - `plan.md` agreement before file or state implementation and refusal of out-of-plan effects
209
+ - the human's exact operation-bound approval token for each unforecast sensitive effect
210
+ - current verification claims, a passed verification and a complete audit before closure
211
+ - disclosure of uncovered paths
212
+
213
+ The Codex and Claude Code adapters call one shared transition engine. Each adapter owns host event parsing, output shape and its own conformance tests.
214
+
215
+ ## Evidence and evaluation
216
+
217
+ Evaluation is layered:
218
+
219
+ 1. Activation cases test whether the skill is selected for the right requests.
220
+ 2. Blind decision cases test routing without exposing expected answers to the model.
221
+ 3. Behavior cases test observable collaboration, investigation, verification and continuity.
222
+ 4. Brake tests cover classification, approval tokens, sealed state and host decisions. The retired interlock keeps its guard cases, action oracle and adapter tests for rollback.
223
+ 5. Install smoke compares exact source and installed skill bytes.
224
+ 6. Live trials test discovery, trust, model behavior and real host delivery.
225
+
226
+ Passing a lower layer does not prove a higher one. A syntax validator does not prove behavior. A synthetic hook event does not prove the host delivered it. A passing test does not prove the entire product contract.
227
+
228
+ The release gate runs every deterministic package check and reports all failures. Live acceptance follows against the exact installed candidate. Any material change invalidates the checks whose subject changed.
229
+
230
+ ## Distribution boundary
231
+
232
+ The npm artifact contains the portable skill, the optional destructive-operation brake for Claude Code and Codex, the retired interlock source (unregistered), public documentation, reusable evaluations and deterministic validators. It declares no runtime registry dependency and no npm lifecycle script.
233
+
234
+ The package excludes repository automation, marketplace source metadata, private coordination, user PMNM folders, generated test output and credentials. npm transports exact bytes; it does not register a plugin, activate a skill, trust a hook or prove a conversation loaded that revision.
235
+
236
+ Repository source, packed artifact, marketplace entry, installed plugin, enabled plugin, trusted hook and loaded conversation are distinct states. `SETUP.md` owns their installation, update, rollback, removal and verification sequence.
package/CHANGELOG.md ADDED
@@ -0,0 +1,118 @@
1
+ # Changelog
2
+
3
+ All notable user-visible changes are recorded here.
4
+
5
+ ## 0.1.0 - 2026-11-09
6
+
7
+ First public release. PMNM brings a portable Agent Skill, a folder for task context and rules, and an optional brake to Claude Code and Codex. Together they help an agent keep evidence and decisions attached to the work.
8
+
9
+ Orders and rule layers
10
+
11
+ - The skill is written as orders: each block states its intent, the end state to leave and at most five numbered orders with stable ids, such as `IN-2`. PMNM sets the phases and stops; the agent chooses how to carry out each order.
12
+ - `SKILL.md` is a short core that survives compaction. It opens with a reading map naming the reference to read before each step, keeps every order that can fall due before a reference is read, and stays under 12,000 characters of body. Other orders moved to their references word for word with their ids. After compaction the agent rereads the core from the directory the host loaded it from, then only the reference its next step needs.
13
+ - Rules come in layers: PMNM orders, the human's general rules, project rules, task rules and the current instruction. A higher layer extends, narrows or replaces a lower rule by its id. Rules carry `G-`, `P-` or `T-` ids, are never renumbered, record their basis (the human's literal words or `agent-worded`) and move to a `Retired` section instead of disappearing.
14
+ - Human authority comes only from the human's own recorded words. Relayed agent text, summaries, repeated notes and one-round permissions do not become decisions or rules; `decisions.md` keeps who chose each decision and every autonomy grant with its scope and end.
15
+ - When no one else can review, the author runs a labelled author audit and reports `ready for commit` with `(author audit)`.
16
+ - New orders: names only from a listing or a read; proof that a new test can fail; results marked as own run, own reading or reported and tied to the exact tree; no weakened tests; databases discovered and accessed read-only first; nothing of the working method in publishable artifacts; a minimal decision tree that runs one scenario through every option.
17
+ - The Codex hook configuration lives in `hooks/codex/hooks.json` and is declared in `.codex-plugin/plugin.json`; the Claude Code one lives in `hooks/claude/hooks.json`. The package carries no conventional `hooks/hooks.json`, so each host loads only its own registration.
18
+
19
+ The folder
20
+
21
+ - One PMNM folder per machine, chosen by the human once; the host keeps only a pointer to it.
22
+ - One project folder per repository, named by the human once; reusable project knowledge stays separate from human-owned rules; one task folder per unit of work with `index.md`, `plan.md`, `verification.md` and `permissions.json`, plus `impact.md` for Standard and High work and `expectations.md` and `review.md` for High work.
23
+ - Task-folder writes need no per-file approval.
24
+ - Four questions only: where the folder goes, the project name, whether a candidate folder is this task, and the level of a new rule.
25
+ - Optional `provenance.md` keeps material attribution as separate evidence-bearing relationships, without treating proximity or participation as responsibility.
26
+ - Optional `artifacts.md` records reference-first custody, content identity, privacy limits, recovery and retention for external evidence; exact retained copies may live under `artifacts/`.
27
+ - Optional `operation.md` separates executor, observer, cost, stop conditions and evidence context when consequential work is delegated.
28
+
29
+ The flow
30
+
31
+ - Investigate, write `plan.md` and show the plan Digest, then stop until the human answers.
32
+ - Implement only inside the agreed plan.
33
+ - Plan material non-file state with explicit before and after values, bind its exact task operation, and keep resulting-state evidence separate from operation success.
34
+ - Plan material advisory work as a deliverable paired with its strongest relevant boundary; a reframe leaves independent reads available but requires renewed agreement before dependent effects or final delivery.
35
+ - Require an actionable verification plan before Standard or High implementation; verify with claims the human can read, complete the agent audit and any required review, then hand over a complete Test Digest at the final human acceptance boundary.
36
+ - Persistent local-environment operations require one current preflight covering command indirection, resources, ownership, health, conflicts, reuse or start-only-missing and cleanup.
37
+ - Trace a material value across producers, transformations, boundaries, consumers, variants and precedence only when that lifecycle can change the solution or its evidence.
38
+ - Standard and High implementation now records either a concise local impact rationale or a transitive ledger in `impact.md`; unresolved nodes, untouched placeholders, duplicate identities and contradictory boundary declarations block the plan Digest, while Light and state-only work avoid an empty graph ceremony.
39
+ - Final audit derives impact roots again from the actual changed surface, challenges omissions separately from plan conformance and records dynamic and non-functional dispositions against the current verification fingerprint.
40
+ - Agreeing to the implementation plan alone is not a yes to commit, push, tag or publish. An exact operation in the permission forecast may receive authority with that agreement; otherwise each needs its own yes at the time or a human-owned rule, and native host controls still apply. The brake does not read the forecast. It still stops each covered destructive or sensitive operation for the human's exact token or, in Claude Code, the host's own prompt.
41
+
42
+ Rules
43
+
44
+ - A decision stays with its task; a rule is one sentence born from an always or a never, with its origin, at the project or general level.
45
+ - A newer rule that contradicts an older one replaces it.
46
+ - A standalone approved rule write may end without an artificial implementation Digest; rule writes inside broader work do not waive its normal gates.
47
+ - Audit-time curation promotes only corroborated reusable knowledge, records task-local dispositions, reloads canonical files before writing and checks concurrency, overlap, contradiction, audience and overfitting.
48
+
49
+ Destructive-operation brake
50
+
51
+ - Both plugins register one dependency-free Node.js hook, on tool calls and on the human's prompts. It classifies each covered operation as safe, sensitive or destructive.
52
+ - Deterministic rules recognize deletions, overwrites, history rewrites, service stops and restarts, publication, datastore drops and deletions, plugin changes, reads of credential files and commands that print secrets, such as environment dumps, keychain reads and token printers, including when they are hidden in wrappers, substitutions, heredocs or local scripts.
53
+ - The brake reads a shell command through bash's whole quoting layer: backslashes, single, double, `$'…'` and `$"…"` quotes, and line continuations. It does not resolve expansions: a variable, a command substitution or brace expansion inside a path, an alias or a function.
54
+ - Anything that runs other code is classified by what it runs: local and sourced scripts by content, package scripts by their manifest entry, make targets by their recipes, `find -exec`, `trap` and `awk` by the command they carry, and a literal container exec by its visible inner operation. Test runners stay ordinary project work.
55
+ - MCP tools are placed by name. Every tool of semantic-js-mcp, by the same authors, is known and safe, except a tool named for destruction. It is matched by the exact server names the hosts give it; a name is all the hook sees, so a server registered under one of those names would get the same trust. Any other MCP server runs without the judge only after the human sends the exact prompt `PMNM-ALLOW-MCP <server>`, which the agent cannot send; the entry is sealed, `PMNM-REVOKE-MCP <server>` removes it, and a tool named for destruction still stops.
56
+ - Approval tokens are `PMNM-` and four random characters without look-alikes, such as `PMNM-7K2Q`, printed alone on the card's last line so they can be copied whole, accepted in any letter case and with surrounding spaces, bound to one operation and session, and spent by their use. An open token lasts 60 minutes; the human's reply turns it into a grant that the next run of the same operation spends within 10 minutes. A reply that matches no open token says it expired, was used or belongs to another session. Approvals are re-read under a lock before each write, so concurrent sessions do not erase each other's tokens, and an open token or grant is never evicted: past 8 open tokens in a session, or 128 across sessions, the operation stops with no token and says so, and past 128 unused grants the reply is not applied and says to send it again after one is used or expires. When another session holds the lock, the operation stops with no token and says to retry, and a reply says to send it again. An event without a session id cannot be approved in-band.
57
+ - An operation that reaches the brake's own state is blocked on both hosts with no token, before any grant is spent, so only the human can run it: by any spelling of its path, by a glob that can match it, or through a hardlink or symlink to one of its files.
58
+ - What the rules cannot place goes to the judge model the human confirmed with the prompt `PMNM-CONFIRM-JUDGE <host> <model>`, through the host's own command-line client with plugins and hooks off. Its answer carries a safety and a confidence.
59
+ - A `PMNM_JUDGE_MODEL` set in the human's own environment pins the judge for that environment. A command that sets it, or the judge's recursion guard `PMNM_JUDGE_ACTIVE`, is destructive.
60
+ - The brake never picks the judge model. As soon as no judge is confirmed the agent proposes, before continuing its task, the cheapest model the host can run, from each provider's current published documentation with its URLs and never from local caches; when PMNM cannot list a host's models, it asks the human which ones they can use. The human confirms the proposal or names another model with that prompt, and the brake keeps the confirmation sealed. For Codex the brake checks the model against Codex's catalog and asks for a re-evaluation when the offer changes. For Claude Code, which keeps no catalog, the confirmation alone names the judge. `models.json` holds the agent's proposal and grants nothing. Without a confirmed model, or when it stops answering, what the rules cannot place needs approval; no other model is tried in its place.
61
+ - Only a safe verdict with high confidence runs without asking. Every other operation stops until the human replies with the exact operation-bound `PMNM-<code>` token; in Claude Code a deterministic sensitive operation uses the host's own permission prompt.
62
+ - `commands.json` keeps model and human verdicts by a hash of the exact operation, with a seal made with a key kept in the host's plugin data; it never stores the command or any free text from the judge, which answers only with a safety and a confidence. An unsealed or copied entry grants nothing. A stored safe verdict runs without the model; a stored sensitive or destructive one asks directly. Deterministic rules always win over stored verdicts, and an edited script invalidates its verdict.
63
+ - A failed or unavailable classification asks; an error inside the brake blocks.
64
+ - On the first prompt of each session the brake adds one line asking the agent to load the PMNM skill before reading the project: with the Skill tool in Claude Code, from its `SKILL.md` in Codex. In Claude Code, when the agent has not loaded it with the Skill tool, the first tool call that can touch the project is stopped once, with no token, and the stop says how to load the skill. The human's prompt `PMNM-SKIP` turns the stop off for one session. Codex is not stopped. Sessions are remembered only as hashes.
65
+ - Edits inside the PMNM folder are ordinary editing, like edits inside the working directory. A folder that holds the home directory or overlaps the host configuration, the brake's data or its code frees nothing, and secret files, configuration files and deletions there still stop. Every edit is judged by the real path where it lands, a patch's move destination included, so a symlink cannot lead it out of the working directory or the folder or onto a secret or configuration file. Secret and configuration names match in any letter case, and paths are compared in the letter case stored on disk.
66
+
67
+ Retired procedural interlock
68
+
69
+ The interlock below is no longer registered by either plugin. Its source stays in the package for rollback, and [architecture decisions](docs/architecture-decisions.md) records why each part was retired, what may get worse and how to restore it.
70
+
71
+ - Twelve receipts; two-line cards in English or Spanish with one literal `NEXT:` action; three levels: Blocked, Ask, Note.
72
+ - The output of a `pmnm-guard` run in a shell was never a guard card.
73
+ - Predictable exact sensitive operations may be approved together with task or project scope; changed and unlisted operations still ask, and one-off authority remains exact and single-use.
74
+ - Ordinary commands now use one structured effect-declaration path rather than positive executable catalogs. Declarations name effect, boundary, persistence, certainty and capability, but never grant their own authority or override mechanical hard stops.
75
+ - A plain same-turn declaration or already agreed capability may classify exactly the next otherwise-unknown operation before a deliberate first denial. Unused intent is spent by that operation or expires at the existing boundaries; once applied, its exact classification remains independent from human authority until that same operation is admitted. Changed input cannot borrow either classification or authority, and native host review remains controlling.
76
+ - Non-persistent verification cards now report a project mutation only when the observed workspace delta shows one, rather than inferring it from task phase.
77
+ - Non-persistent verification follows the read path and becomes a project mutation only when its observed result changes the project.
78
+ - Human-approved task or project capabilities can cover bounded recurring operation families without tying PMNM to a runtime, language or provider; task capability expires with the task and an explicit project replacement revokes reusable authority.
79
+ - The verification plan and permission forecast remain bound after agreement; changing either requires `redo` before implementation or forecast use continues.
80
+ - A missing project mapping records the name only after the human supplies it; the guard cannot answer its own question.
81
+ - Project, contained PMNM and external-only targets take distinct authority paths; external-only work does not invent a repository plan.
82
+ - Compound commands with an unknown segment or several sensitive effects are split before authority is requested.
83
+ - Passed closure requires current `example:` and `unchanged:` claims plus current passed verification; no-op and restored writes do not satisfy a plan.
84
+ - High-effort passed closure requires a current semantic review packet bound to the plan and verification fingerprint, with a concrete counterexample, distinct independent check, impact challenge, disagreement and residual limit. Its seed names every required field, and only a literal `none` resolves disagreement; the guard rejects stale or unresolved packets without treating the reviewer as truth.
85
+ - Revised plans preserve the direct-comparison baseline for earlier paths while adding newly planned paths.
86
+ - Existing unindexed project folders are preserved instead of being silently adopted by a new repository mapping.
87
+ - Compound commands cannot hide an ordinary external write beside another sensitive effect.
88
+ - Guard state separates session-local flow, canonical project authority and canonical task authority. Concurrent sessions may work on different tasks; a fresh session inherits none, and same-task revision drift blocks stale material work.
89
+ - Restarting the same task cannot discard an in-flight host result; it remains pending until reconciled before task runtime is reloaded.
90
+ - Startup, resume, clear and compact lifecycle discontinuities require reloading general, project and active-task context before material work; changed applicable rules invalidate the prior basis.
91
+ - Lifecycle reload names only existing canonical files, includes project knowledge and applicable `impact.md`, and correlates successful returned bytes by host operation identity; a path mention is not evidence of a read, and a read is not proof of comprehension.
92
+ - Earlier receipt names are accepted for one compatibility release.
93
+ - Complete streamed content identity prevents a byte-identical rewrite of a large planned file from appearing as a material change.
94
+ - Related suffix tasks with the same bounded work id are reconciled instead of silently fragmenting one activity.
95
+ - After current verification, required review and final audit, Codex Stop requires one actionable Test Digest in the latest assistant message and a later human response before closure.
96
+ - Test Digest validation now requires its exact task title plus contiguous, ordered, non-empty fields in English or Spanish, and the rejection card exposes that grammar.
97
+ - If Codex omits the final Stop event, the next prompt can recover only the latest shaped Test Digest from a bounded, unlinked, host-provided transcript tail; unsupported evidence fails closed and is never retained.
98
+ - Pending host results now outrank new declarations, blocked audits remain open without arming acceptance, and task cards distinguish observed paths, internal work counters and current verification without inventing file or verification claims.
99
+ - Certain non-persistent verification remains on the read path across a mixed boundary; persistence, uncertainty and mechanical or sensitive effects still fail closed.
100
+ - A receipt that reaches the shell switches explicitly to portable advisory behavior instead of triggering PATH searches or retries.
101
+ - State-only and mixed plans close against their own objectives without invented file targets or version-control evidence; unlisted state operations require a revised Digest.
102
+ - Digest preflight now reports all plan, verification, permission and required operational-environment defects together in guard-owned `preflight.md`, including safe path canonicalizations.
103
+ - Safe absolute repository paths and their relative spellings share one contract identity; representation-only normalization does not withdraw unchanged agreement.
104
+ - A state objective already complete at Digest time keeps its historical operation while still requiring current evidence.
105
+ - Switching away from unfinished work asks once and isolates the successor from the prior task's agreement, counters and task permissions.
106
+ - Literal container exec commands are classified by their visible inner operation; opaque inner commands remain unknown.
107
+ - Investigation and administrative checks cannot activate final passed verification while planned file objectives remain open.
108
+ - Sensitive-operation cards print an operation-bound approval token. Only an exact later human reply arms the single-use `allow` receipt for those command bytes.
109
+ - Task start records `work=implementation`, `work=advisory` or `work=verification`. Advisory plans reject file and changing state objectives before agreement.
110
+ - Native project reads still route to `start` before execution. Opaque operations declare their boundary first, and only a declared project read then routes to `start`.
111
+ - The Codex adapter is split into a bounded state-machine entrypoint and an independently reviewable shell classifier, with an exact packaged module graph and aggregate size budget.
112
+ - The guard reference matches the engine: the exact approval token applies to `allow`, a project read before `start` is blocked on its first attempt, and each host reaches one shared engine through its own adapter. The Claude adapter also runs when its plugin directory is a symbolic link, including under `--preserve-symlinks-main`.
113
+
114
+ Package
115
+
116
+ - Exact-version npm artifact and repository marketplace, with no runtime dependency and no lifecycle script; package installation is not host activation.
117
+ - Claude Code marketplace `.claude-plugin/marketplace.json` pinning the same npm version as the Codex marketplace, with its SETUP route, update, rollback and removal steps and the pointer `<CLAUDE_CONFIG_DIR>/pmnm.path`. The marketplace is validated but not packaged.
118
+ - MIT license for original project materials and a separately disclosed AI-generated mascot.
@@ -0,0 +1,115 @@
1
+ # Contributing
2
+
3
+ Please, Make No Mistakes has one portable Agent Skill and an optional destructive-operation brake for Claude Code and Codex. Start with the behavior you want to improve in `skills/please-make-no-mistakes/SKILL.md`. A contribution should make a demonstrated failure less likely without turning one person's project or tools into a rule for everyone.
4
+
5
+ ## Requirements
6
+
7
+ - Node.js 22 or 24 for the brake and JavaScript tests
8
+ - Python 3.9 through 3.13 for dependency free release validators
9
+ - no runtime registry dependencies
10
+
11
+ ## Before Changing Behavior
12
+
13
+ Start from an observable failure, an accepted design decision or a bounded compatibility requirement. Record what currently happens and which check would distinguish the desired behavior. Add the smallest failing evaluation before changing the runtime when a deterministic surface exists.
14
+
15
+ When a model misses an instruction, improve the instruction first. Add a guard only when a real trial shows that the instruction alone does not hold and the host provides a reliable event to check.
16
+
17
+ ## Writing Rules For Models
18
+
19
+ - State the pattern, never a worked example. Public prose and cards use shapes with placeholders; an example teaches the instance, not the rule.
20
+ - A card's `NEXT:` line is an order. It uses one imperative verb, or a short sequence joined by "then", and names the limit and who acts next. It gives the agent one action, with no alternatives to weigh or extra explanation. Waiting belongs to the human, never to the agent. A brake card tells the agent to show the exact operation and approval token, or says that only the human can run it. The skill's own stopping order is literal: `stop here; no more actions until the human answers`.
21
+ - A claim the hook cannot observe is not written on a card. The hook states what it recorded, not what the model meant.
22
+ - A small model must be able to read the sentence and act on it. When it cannot, the sentence is wrong, not the reader.
23
+
24
+ ## Source Of Truth
25
+
26
+ - `skills/please-make-no-mistakes/SKILL.md` owns the portable kernel and reference routing.
27
+ - `skills/please-make-no-mistakes/references/` owns condition specific procedures.
28
+ - `hooks/pmnm-brake.mjs` owns classification, approval tokens, sealed state and cards for both hosts; `scripts/test_brake.mjs` owns its tests.
29
+ - `hooks/pmnm-guard.mjs`, `hooks/pmnm-shell.mjs` and `hooks/claude/pmnm-claude.mjs` are the retired interlock, unregistered and kept for rollback.
30
+ - `evals/host-guard-cases.json` owns the retired interlock's stable guard claims, kept for rollback.
31
+ - `evals/host-guard-action-oracle.json` owns the retired interlock's normalized Codex event sequences and expected actions, kept for rollback.
32
+ - `evals/activation-cases.json` and `evals/agent-evaluation-cases.json` own model selection and blind routing fixtures.
33
+ - `evals/behavior-cases.md` owns observable portable behavior cases.
34
+ - `scripts/documentation_contract.py` owns public documentation invariants.
35
+ - `SETUP.md` alone owns detailed installation, update, rollback, removal and verification commands.
36
+
37
+ Private coordination under `.ai/` can explain intent and preserve evidence. It never changes public behavior by itself.
38
+
39
+ ## Host Isolation
40
+
41
+ Do not extend the brake to a host by resemblance. Preserve the brake's behavioral outcomes, then implement each host's input and output against its documented native events and test them independently.
42
+
43
+ Changes to the brake must not silently redefine the portable skill. Changes to the portable skill must not claim enforcement that no host provides.
44
+
45
+ ## Focused Checks
46
+
47
+ Run the narrow check while iterating:
48
+
49
+ ```text
50
+ npm run test:brake
51
+ ```
52
+
53
+ For the retired interlock source:
54
+
55
+ ```text
56
+ npm run test:host-guard
57
+ npm run test:claude-adapter
58
+ ```
59
+
60
+ For the Claude Code hook registration:
61
+
62
+ ```text
63
+ npm run test:claude-discovery
64
+ ```
65
+
66
+ For documentation changes:
67
+
68
+ ```text
69
+ npm run test:documentation
70
+ ```
71
+
72
+ For blind decision fixtures:
73
+
74
+ ```text
75
+ npm run smoke:evaluation
76
+ ```
77
+
78
+ Before a release readiness claim:
79
+
80
+ ```text
81
+ npm run release:verify
82
+ ```
83
+
84
+ Each check must state what it can falsify. A validator pass is not behavioral evidence from a live model or host.
85
+
86
+ ## Documentation Ownership
87
+
88
+ - `README.md` explains the product and routes setup elsewhere.
89
+ - `SETUP.md` is the single detailed setup procedure.
90
+ - `ARCHITECTURE.md` describes component and trust boundaries.
91
+ - `docs/architecture-decisions.md` records durable public rationale.
92
+ - `docs/distribution.md` owns release identity and supply chain procedure.
93
+ - `docs/getting-started.md` explains expected use.
94
+ - `SECURITY.md` owns supported security claims and reporting.
95
+ - `CHANGELOG.md` records user visible release changes.
96
+ - `ROADMAP.md` records deferred public work without promising dates.
97
+
98
+ Do not duplicate setup commands outside `SETUP.md`. Do not publish local paths, private task folders, raw internal evaluations, credentials, customer data, internal identifiers or maintainer handoffs.
99
+
100
+ ## Evaluation Changes
101
+
102
+ A behavior change needs:
103
+
104
+ 1. a case that failed before the change
105
+ 2. the smallest implementation that closes it
106
+ 3. a negative or adversarial case where overreach would be harmful
107
+ 4. exact test results and remaining limits
108
+
109
+ Blind evaluation inputs must not contain their expected decision. Deterministic graders may keep expected outcomes in code, separate from the prompt sent to a model.
110
+
111
+ Model trials must record the exact skill and guard identity, host, model, effort, available tools, prompt, source fixture, human turns, writes, verification and cleanup. Sanitize private source and personal data before publishing any result.
112
+
113
+ ## Pull Requests
114
+
115
+ Describe the observed problem, contract change, evidence, affected public surfaces, tests run and residual risk. Keep unrelated cleanup separate. Do not claim installation, hook trust or live behavior from package validation alone.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 please-make-no-mistakes contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.