Entwurf · Issue b88adde
Ein Plan liest sich als Dokument
Entwurf zu Issue b88adde, zu docs/plans/b88adde-a-plan-reads-as-a-document.md. Die Tabelle unten liest beim Rendern jeden Plan im Baum — zweimal, in beiden Formen. Die rechte Spalte nennt, wo die beiden auseinanderlaufen; solange dort etwas steht, ist die Regel dieses Kapitels verletzt.
Sechs der sieben Glieder der Kette haben eine Fläche. Ein Issue ist ein COB, ein Patch ist ein COB, Freigabe und Urteil liest just zurück. Der Plan — das eine Stück, das ein Mensch abwägen soll, bevor irgendetwas gebaut wird — hat keine: Wer ihn lesen will, öffnet den Patch, der ihn hinzugefügt hat, und sieht achtzig grüne +-Zeilen.
Das ist die Darstellung einer Änderung, und die Frage ist ein Vorschlag. Beides sieht nur zufällig gleich aus.
01Zwei Formen derselben Datei
parsePlanSpec flacht jeden Absatz zu einer Zeile ab, und das ist richtig so: Was es zurückgibt, ist das, worüber der Freigabe-Digest gebildet wird, und eine Signatur darf nicht brechen, weil jemand einen Satz neu umbrochen hat. Genau das macht diese Form zum Falschen zum Anzeigen — die sieben Absätze der ## Approach werden abgeflacht zu einer Wand.
Deshalb steht planSections daneben, auf demselben Splitter gebaut. Eine Regel dafür, wo ein Abschnitt beginnt, zwei Formen daraus: eine flache zum Signieren, eine rohe zum Lesen. Die Seite nimmt ihr Skelett aus der ersten und ihre Prosa aus der zweiten.
| Plan | Issue | signiert | gezeigt | Entwurf | fehlt |
|---|---|---|---|---|---|
| 085df52-badge-without-filesystem.md | 085df52 | 1 | 1 | — | |
| 09e87ba-an-issue-is-findable-by-its-id.md | 09e87ba | 1 | 1 | /docs/design/issue-id-search | |
| 0e0ba05-the-order-is-one-picture.md | 0e0ba05 | 2 | 2 | /docs/design/order-picture | |
| 1159d74-the-gate-speaks-on-the-card.md | 1159d74 | 1 | 1 | /docs/design/gate-live | |
| 180c32c-plan-approved-label.md | 180c32c | 3 | 3 | — | |
| 203732a-the-chain-reads-as-one-band.md | 203732a | 1 | 1 | /docs/design/chain-band | |
| 236b4d1-an-issue-shows-its-chain.md | 236b4d1 | 2 | 2 | /docs/design/issue-chain | |
| 28c2d21-the-band-stands-above-the-title.md | 28c2d21 | 1 | 1 | /docs/design/band-above | |
| 2dc6a5e-verify-that-runs-anywhere.md | 2dc6a5e | 2 | 2 | /docs/design/verify-scope | |
| 37ed1fb-a-sprint-in-the-address.md | 37ed1fb | 3 | 3 | /docs/design/sprint-address | |
| 3e8a910-the-approval-station-hands-the-pen.md | 3e8a910 | 1 | 1 | /docs/design/approve-helper | |
| 51edf0a-page-comes-up.md | 51edf0a | 1 | 1 | /docs/design/smoke | |
| 55ba307-an-effort-of-two-carries-a-spec.md | 55ba307 | 2 | 2 | /docs/design/effort-spec | |
| 55d804a-the-review-column-leaves-the-board.md | 55d804a | 1 | 1 | /docs/design/review-column | |
| 5a95366-chain-gate.md | 5a95366 | 5 | 5 | /docs/design/chain-gate | |
| 5d5298f-verdict-rides-on-the-card.md | 5d5298f | 3 | 3 | — | |
| 5e6f482-not-every-card-is-build-work.md | 5e6f482 | 2 | 2 | /docs/design/issue-kinds | |
| 5fe7026-board-shows-a-page.md | 5fe7026 | 2 | 2 | — | |
| 69eae0d-a-draft-is-findable.md | 69eae0d | 3 | 3 | /docs/design/draft-registry | |
| 7105c5a-form-language-imported.md | 7105c5a | 2 | 2 | /docs/design/form-from-sdk | |
| 71e7b6d-preflight-tag-check.md | 71e7b6d | 2 | 2 | — | |
| 75f9042-every-module-explains-itself.md | 75f9042 | 2 | 2 | /docs/design/module-headers | |
| 852f19b-an-issue-says-what-it-waits-for.md | 852f19b | 2 | 2 | /docs/design/needs-edges | |
| 89b4e9c-buried-copy-leaves.md | 89b4e9c | 1 | 1 | — | |
| 8b1babd-release-line.md | 8b1babd | 2 | 2 | /docs/design/release-line | |
| 8d27b84-review-workbench.md | 8d27b84 | 2 | 2 | /docs/design/review-bench | |
| 9073638-the-thread-stands-beside-the-issue.md | 9073638 | 1 | 1 | /docs/design/issue-thread | |
| 969b17d-the-issue-reads-as-a-document.md | 969b17d | 1 | 1 | /docs/design/issue-document | |
| a76dbc0-star-map.md | a76dbc0 | 3 | 3 | /docs/design/star-map | |
| a8de23c-the-rail-carries-the-organ.md | a8de23c | 1 | 1 | /docs/design/issue-rail | |
| ac1293f-the-issue-page-reads-as-tabs.md | ac1293f | 1 | 1 | /docs/design/issue-tabs | |
| b3cd475-mention-says-what-kind.md | b3cd475 | 2 | 2 | — | |
| b5c66ad-plans-waiting-badge.md | b5c66ad | 2 | 2 | /docs/design/plan-queue | |
| b88adde-a-plan-reads-as-a-document.md | b88adde | 2 | 2 | /docs/design/plan-document | |
| c9b8fe7-the-badge-asks-all-five.md | c9b8fe7 | 2 | 2 | /docs/design/brief-check | |
| cb83cdf-plan-settles.md | cb83cdf | 2 | 2 | /docs/design/plan-settles | |
| cf2a3bc-done-belongs-to-its-sprint.md | cf2a3bc | 3 | 3 | /docs/design/done-sprint | |
| d5ddbbc-wallet-spend-agent-account.md | d5ddbbc | 2 | 2 | — | |
| da0d198-readiness-earned-or-unclaimed.md | da0d198 | 3 | 3 | — | |
| e5ccfe1-the-rail-keeps-the-cycles.md | e5ccfe1 | 1 | 1 | /docs/design/rail-cycles | |
| e7eab09-a-search-searches-the-whole-board.md | e7eab09 | 1 | 1 | /docs/design/search-scope | |
| ea06505-one-name-one-column.md | ea06505 | 2 | 2 | /docs/design/done-column | |
| f63315e-plans-in-repo.md | f63315e | 3 | 3 | — | |
| f8d6779-an-effort-is-the-organ.md | f8d6779 | 2 | 2 | /docs/design/effort | |
| f9bb78d-the-plans-tab-goes.md | f9bb78d | 1 | 1 | /docs/design/plans-tab | |
| fc30f7f-account-block.md | fc30f7f | 3 | 3 | /docs/design/account-block |
Bei allen 46 Plänen zeigt die Seite, was die Signatur zählt.
Die Spalten signiert und gezeigt zählen dieselben Meilensteine auf zwei Wegen. Laufen sie auseinander, sieht der Leser etwas anderes als das, was unterschrieben wird — und das ist der eine Fehler, den diese Konstruktion überhaupt erst möglich macht.
02Die Fragen zuerst
Alles in einem Plan sagt, was der Runner tun wird. Die offenen Fragen sind das Einzige, was den Leser anspricht — und an ihrer Stelle in der Datei stehen sie hinter dem Ansatz und den Meilensteinen, also hinter der Entscheidung, um die es geht.
- Offene Fragen stehen oben, vor dem Ansatz. Ein Plan ohne solche hat dort schlicht nichts stehen.
## What the work settledsteht unten und wird erst nach der Arbeit geschrieben — seine Anwesenheit ist der Unterschied zwischen offen und erledigt.- Was die Seite nicht zeigt: ob der Plan freigegeben ist. Das Etikett hängt am Issue, die Signatur dahinter prüft das Merge-Gate.
03Ein Widerspruch, den diese Arbeit gefunden hat
AGENTS.md sagte, ein Plan darf einen Entwurf nennen und muss keinen haben. lib/chain.ts verweigert seit dem Chain-Gate jeden Plan ohne einen — die Zeile daneben sagt es sogar: „Optional in plan-spec.ts, required here“. Dieses Kapitel existiert, weil just chain den Plan dazu zurückgewiesen hat.
36 von 46 Plänen nennen einen Entwurf.
Die Pläne, die keinen Entwurf nennen, sind älter als das Gate. Der Satz in AGENTS.md ist beim Aufschreiben der Entwurfs-Regel entstanden und beschreibt nicht, was durchgesetzt wird. Er wird an die Durchsetzung angeglichen, nicht umgekehrt: Ob ein Gate diese Forderung behalten soll, ist eine eigene Entscheidung und gehört in ein eigenes Issue — eine Regel, die manchmal gilt, ist genau die Verwirrung, gegen die dieses ganze Kapitelwerk gebaut ist.
04Was diese Seite nicht sehen kann
Die Tabelle misst jeden Plan an sich selbst. Sie kann nicht sagen, ob das Issue, das er nennt, existiert: dafür braucht es einen Seed. Diese Frage stellt /code/-/plans, das einen hat, und es zeigt die Antwort, statt zu verweigern.
Ebenso wenig sagt sie, ob eine Freigabe verifiziert. Das ist die Frage des Merge-Gates, und ein grüner Haken, den diese Seite aus einer Datei rendert, die sie selbst gelesen hat, wäre eine Behauptung aus der schwächstmöglichen Quelle — genau das, was die Kette nicht auf Treu und Glauben nehmen soll.
Was diese Seite gar nicht sehen kann, steht in lib/plans.test.ts, dort wo die Dateien liegen: dass kein Plan die Adresse eines anderen beansprucht, und dass jeder über die Kurzform seiner Id erreichbar ist.