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.

PlanIssuesigniertgezeigtEntwurffehlt
085df52-badge-without-filesystem.md085df5211—
09e87ba-an-issue-is-findable-by-its-id.md09e87ba11/docs/design/issue-id-search
0e0ba05-the-order-is-one-picture.md0e0ba0522/docs/design/order-picture
1159d74-the-gate-speaks-on-the-card.md1159d7411/docs/design/gate-live
180c32c-plan-approved-label.md180c32c33—
203732a-the-chain-reads-as-one-band.md203732a11/docs/design/chain-band
236b4d1-an-issue-shows-its-chain.md236b4d122/docs/design/issue-chain
28c2d21-the-band-stands-above-the-title.md28c2d2111/docs/design/band-above
2dc6a5e-verify-that-runs-anywhere.md2dc6a5e22/docs/design/verify-scope
37ed1fb-a-sprint-in-the-address.md37ed1fb33/docs/design/sprint-address
3e8a910-the-approval-station-hands-the-pen.md3e8a91011/docs/design/approve-helper
51edf0a-page-comes-up.md51edf0a11/docs/design/smoke
55ba307-an-effort-of-two-carries-a-spec.md55ba30722/docs/design/effort-spec
55d804a-the-review-column-leaves-the-board.md55d804a11/docs/design/review-column
5a95366-chain-gate.md5a9536655/docs/design/chain-gate
5d5298f-verdict-rides-on-the-card.md5d5298f33—
5e6f482-not-every-card-is-build-work.md5e6f48222/docs/design/issue-kinds
5fe7026-board-shows-a-page.md5fe702622—
69eae0d-a-draft-is-findable.md69eae0d33/docs/design/draft-registry
7105c5a-form-language-imported.md7105c5a22/docs/design/form-from-sdk
71e7b6d-preflight-tag-check.md71e7b6d22—
75f9042-every-module-explains-itself.md75f904222/docs/design/module-headers
852f19b-an-issue-says-what-it-waits-for.md852f19b22/docs/design/needs-edges
89b4e9c-buried-copy-leaves.md89b4e9c11—
8b1babd-release-line.md8b1babd22/docs/design/release-line
8d27b84-review-workbench.md8d27b8422/docs/design/review-bench
9073638-the-thread-stands-beside-the-issue.md907363811/docs/design/issue-thread
969b17d-the-issue-reads-as-a-document.md969b17d11/docs/design/issue-document
a76dbc0-star-map.mda76dbc033/docs/design/star-map
a8de23c-the-rail-carries-the-organ.mda8de23c11/docs/design/issue-rail
ac1293f-the-issue-page-reads-as-tabs.mdac1293f11/docs/design/issue-tabs
b3cd475-mention-says-what-kind.mdb3cd47522—
b5c66ad-plans-waiting-badge.mdb5c66ad22/docs/design/plan-queue
b88adde-a-plan-reads-as-a-document.mdb88adde22/docs/design/plan-document
c9b8fe7-the-badge-asks-all-five.mdc9b8fe722/docs/design/brief-check
cb83cdf-plan-settles.mdcb83cdf22/docs/design/plan-settles
cf2a3bc-done-belongs-to-its-sprint.mdcf2a3bc33/docs/design/done-sprint
d5ddbbc-wallet-spend-agent-account.mdd5ddbbc22—
da0d198-readiness-earned-or-unclaimed.mdda0d19833—
e5ccfe1-the-rail-keeps-the-cycles.mde5ccfe111/docs/design/rail-cycles
e7eab09-a-search-searches-the-whole-board.mde7eab0911/docs/design/search-scope
ea06505-one-name-one-column.mdea0650522/docs/design/done-column
f63315e-plans-in-repo.mdf63315e33—
f8d6779-an-effort-is-the-organ.mdf8d677922/docs/design/effort
f9bb78d-the-plans-tab-goes.mdf9bb78d11/docs/design/plans-tab
fc30f7f-account-block.mdfc30f7f33/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 settled steht 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.