Keep playbook 03's rule as it was, in plain words, and say how the record is searched (review of #318)
mesh/merge-gate pass: the change touches no module of the mesh's graph
mesh/repo-check pass: its merge-check.sh passed
mesh/delivery delivered

This commit is contained in:
2026-10-11 21:07:32 +02:00
parent c77378fa19
commit c9d7d03ab8
2 changed files with 7 additions and 7 deletions
+2 -2
View File
@@ -1,6 +1,6 @@
---
status: canonical
updated: 2026-08-23
updated: 2026-10-11
derives: the constitution page
decisions:
- "ADR 0020"
@@ -199,7 +199,7 @@ declaration was never wrong. Nothing ever asked the system.
The first action on any error message, failing service or unexpected behaviour is to search the
record for the literal error text (`records.records_search`) — before a hypothesis, not after one fails.
The record is indexed on symptoms.
The search matches the words as written, so search with the error's own words.
This fires hardest on *familiar* ground, where a confident trail feels like progress. Two
entries were each rediscovered from scratch over several hours in a single session because the
+5 -5
View File
@@ -8,15 +8,15 @@ design permits.
## What belongs here, and what does not
| Belongs in `04-ISSUES` | Belongs in the operational lessons |
| Belongs in `04-ISSUES` | Belongs with the fix's own lesson, not here |
|---|---|
| The design permits a failure to be silent | How to fix one occurrence of it |
| A documented rule is enforced by nothing | A command that works around it |
| A stated invariant is false in practice | A node-specific quirk |
| The owning component is unknown and finding it needs the whole mesh in view | Symptom → fix, once the answer is known |
The operational lessons (symptom → fix) are found by their literal symptom text through the records
module (`records.records_search`). This folder is not a second copy of them. An issue here is a question HQ must **answer**, not an
A fix's lesson (symptom → fix) is written where a search by the symptom's literal words finds it
(`records.records_search`). This folder is not a second copy of it. An issue here is a question HQ must **answer**, not an
incident someone must **clear**.
## The issue tracker holds the number and the status
@@ -109,8 +109,8 @@ import read, which every imported issue names (`imported.commit` in `issue-track
- A number never moves. A folder carries the number the tracker gave; a folder whose number collides with
another (one numbered before the tracker, or by hand) is a fault, and `cycle.py` refuses two records
sharing a number.
- An issue whose answer is a general lesson also says that lesson in its resolution, in the symptom's
own words, so the next person searching that symptom finds it. Both, not either.
- An issue whose answer is a general lesson should also have that lesson written where a search by
the symptom's literal words finds it, so the next person searching it finds it. Both, not either.
- `wontfix` is legitimate and requires a sentence saying why; the tracker refuses it without one.
- **An agent says when it starts work on an issue**, by moving it to `diagnosing` or `fixing` with `by`. Two agents
never start the same work without knowing: the second is refused, naming the first.