Development record
The intent verb takes quoted text as a create, and guards that path twice so a mistyped sub-verb is never swallowed as a title: a near-miss is refused with a did-you-mean, and a lone bare token is refused because a one-word positional is a sub-verb by shape. Neither guard catches a far miss. The typo check decides first whether the arguments are shaped like a subcommand call, and a token followed by a record id satisfies that shape, but it then refuses only when some registered sub-verb lies within an edit distance of two. A word that is nothing like plan or ready or link or audit therefore passes: the guard has already concluded the shape is a subcommand call, finds no suggestion to offer, and returns as though the input were prose, so the words are filed as the title of a new draft intent in the durable record tier. The failure is silent and it writes. A user who types a verb this tool does not have, next to the id they meant to act on, gets a minted record whose title is their own typo, and learns nothing about the mistake; the same shape reaches every surface that reads the intents directory afterwards. Fix direction: when the arguments are already judged subcommand-shaped, refuse whether or not a suggestion exists, and offer the registered sub-verbs when none is close enough to name. The capture verb's sibling guard is the model, and its comment describes exactly this shape. Detector: an unknown first token followed by a record id refuses with exit 2 and writes nothing, whether or not it is near a real sub-verb, while genuine prose of two or more words still files a draft.
The intent verb takes quoted text as a create, and guards that path twice so a mistyped sub-verb is never swallowed as a title: a near-miss is refused with a did-you-mean, and a lone bare token is refused because a one-word positional is a sub-verb by shape. Neither guard catches a far miss. The typo check decides first whether the arguments are shaped like a subcommand call, and a token followed by a record id satisfies that shape, but it then refuses only when some registered sub-verb lies within an edit distance of two. A word that is nothing like plan or ready or link or audit therefore passes: the guard has already concluded the shape is a subcommand call, finds no suggestion to offer, and returns as though the input were prose, so the words are filed as the title of a new draft intent in the durable record tier. The failure is silent and it writes. A user who types a verb this tool does not have, next to the id they meant to act on, gets a minted record whose title is their own typo, and learns nothing about the mistake; the same shape reaches every surface that reads the intents directory afterwards. Fix direction: when the arguments are already judged subcommand-shaped, refuse whether or not a suggestion exists, and offer the registered sub-verbs when none is close enough to name. The capture verb's sibling guard is the model, and its comment describes exactly this shape. Detector: an unknown first token followed by a record id refuses with exit 2 and writes nothing, whether or not it is near a real sub-verb, while genuine prose of two or more words still files a draft.
Grounds
- pursued: the shape decides the refusal, not the availability of a suggestion — what would show it wrong is either a durable record minted from a token-plus-record-id invocation, or a legitimate multi-word title refused
Frontmatter
| id | iss-2609091647589392 |
|---|---|
| type | issue |
| lifecycle | resolved |
| severity | major |
.abcd/work/issues/resolved/iss-2609091647589392-a-far-missed-sub-verb-is-filed-as-a.md
open on GitHub ↗ · commit history ↗