Development record
2026-09-25 — How each verb's sentence is sourced and rendered (itd-2609212113220149): the implementing lane's technical rulings in autonomous run A, subject to the product thinker's review on return (recorded, not asked); decision 1 of the intent (does, writes, refuses, in that order, identical in three places, under the writing-style guide) is not reopened. The surface manifest's sentence field is a table in `internal/core/surface/sentences.go`, keyed by full command path, because the binary ships without `.abcd/` and so cannot read the committed snapshot at run time; the front door sets every visible command's Short from it and no constructor declares one, so there is no second copy, and the snapshot records the sentence at schema version 3 with versions 2 and 1 still readable (the release guardrail reads its baseline from the last tag), and the surface diff never reads it, because a reworded sentence changes no invocation. The form is mechanical: the doing clause, a colon, a writing clause opening "Writes" (a capital after the colon, per the style guide), a semicolon, a refusing clause opening "refuses" or "never refuses", one sentence, at most 160 characters counted as characters. The three places are the command list (a parent's list, the root's groups, the agents block), the verb's own `--help`, which now opens with the sentence and then the long help for every verb and the root, and the plugin page's `description:`, the line a host lists the page by, double-quoted because every sentence carries a colon and a space; the generator writes it. A sub-verb has no page of its own, nor do `changelog`, `rules`, `spec` and `statusline`, so their places are the list and the help; a page with no verb (consult, ingest, prepare-this-repo) is not the manifest's to rewrite. Hidden commands and the framework's `help` and `completion` carry no sentence. Criterion 5 is met through the generated CLI reference, which renders every sentence as its own line under the `docs` lint root: the docs lint walks markdown only, so a Go table cannot be a root of its own, and a test holds each sentence to a line of that page and to the configured banned-token set. The sentences are British English although they are code strings, because they are prose rendered onto pages the docs lint reads. The count is 106 (every visible verb and sub-verb, and the root), not the fifty-three the intent names. Long help bodies are unchanged, as the intent scopes them out, including the few whose first paragraph restates the short line they replaced (implementer of lane sentences).
2026-09-25 — How each verb's sentence is sourced and rendered (itd-2609212113220149): the implementing lane's technical rulings in autonomous run A, subject to the product thinker's review on return (recorded, not asked); decision 1 of the intent (does, writes, refuses, in that order, identical in three places, under the writing-style guide) is not reopened. The surface manifest's sentence field is a table in internal/core/surface/sentences.go, keyed by full command path, because the binary ships without .abcd/ and so cannot read the committed snapshot at run time; the front door sets every visible command's Short from it and no constructor declares one, so there is no second copy, and the snapshot records the sentence at schema version 3 with versions 2 and 1 still readable (the release guardrail reads its baseline from the last tag), and the surface diff never reads it, because a reworded sentence changes no invocation. The form is mechanical: the doing clause, a colon, a writing clause opening "Writes" (a capital after the colon, per the style guide), a semicolon, a refusing clause opening "refuses" or "never refuses", one sentence, at most 160 characters counted as characters. The three places are the command list (a parent's list, the root's groups, the agents block), the verb's own --help, which now opens with the sentence and then the long help for every verb and the root, and the plugin page's description:, the line a host lists the page by, double-quoted because every sentence carries a colon and a space; the generator writes it. A sub-verb has no page of its own, nor do changelog, rules, spec and statusline, so their places are the list and the help; a page with no verb (consult, ingest, prepare-this-repo) is not the manifest's to rewrite. Hidden commands and the framework's help and completion carry no sentence. Criterion 5 is met through the generated CLI reference, which renders every sentence as its own line under the docs lint root: the docs lint walks markdown only, so a Go table cannot be a root of its own, and a test holds each sentence to a line of that page and to the configured banned-token set. The sentences are British English although they are code strings, because they are prose rendered onto pages the docs lint reads. The count is 106 (every visible verb and sub-verb, and the root), not the fifty-three the intent names. Long help bodies are unchanged, as the intent scopes them out, including the few whose first paragraph restates the short line they replaced (implementer of lane sentences).
Frontmatter
| id | dcn-2609250000000022 |
|---|---|
| type | decision |
| date | 2026-09-25 |
.abcd/work/decisions/dcn-2609250000000022-how-each-verb-s-sentence-is-sourced-and.md
open on GitHub ↗ · commit history ↗
mentions1
- itd-2609212113220149Every verb's help opens with one sentence an agent can act on