Skip to content

Ledes grow with the size of the change instead of holding a fixed budget #1296

Description

@williamthorsen

Problem

An agent drafting a lede keeps every detail it can defend, so the lede's length tracks the size of the diff rather than a fixed budget. Nothing in the guidance says what to cut when the diff outgrows one to three sentences, so a large change yields a lede that recites each mechanism it touched and buries what the change amounts to.

_partials/voice-checklist.md's Highlights item, "Led by the fact that matters most. A catalog of every delta is not a lede.", does not catch this. Its first clause is checkable and passes on any lede whose first fact is correctly chosen; its second names a shape without supplying a test. A drafter applies it as "is the first fact the right one?", finds that it is, and ships.

lede-voice.md states the budget ("Most ledes are one to three sentences") but never says the budget is fixed regardless of the size of the change, and never says what gives way when it binds. Its Mechanism is substance stance reads instead as a standing licence, "the operation performed [...] is exactly what they want to know", which is where each surviving detail draws its warrant.

Context

Seven lede decisions recorded since the doctrine's last revision (#1286) show what the author actually cuts. Five of the six revisions kept every topic and cut inside them; one lost a single subordinate clause from a sentence otherwise shipped verbatim (filesystem #123). One two-paragraph lede dense with mechanism shipped unrevised (#1291). A topic-count budget therefore fails in both directions: it cannot see the within-topic cuts, and it flags a lede the author accepted.

Where a list did have to go, the author replaced it with what the change amounts to rather than a category of its members: readyup #298's six dispersed modules became "Regroups readyup's source one level below src/", and filesystem #122's API surface became "creates what is missing, refuses by default to replace what is not".

The countervailing constraint is on record: a lede can be cut past comprehension, and a too-abstract lede is worse than a longer concrete one (lede-voice.md, "Cut detail, not meaning"; event 01KZ3D2FDX7Y2DZBSBWMF37MH4). The originating episode is event 01KZSPDZ7ZCZRB3G19R1D5F0QR.

The checklist is a partial with three consumers, summarize-change, merge-pr, and commit, so one edit reaches all three.

Proposed solution

State the budget as fixed, and give the drafter a cut rule with a test they cannot apply to their own draft one item at a time.

The rule fails without its premise. A drafter who reads cutting as losing will justify every keep, and every true fact in a diff clears "is this important enough to keep?". Nothing is lost: each cut detail survives in ## Details, in the changelog body, and in the diff, all one click from the reader. Once that is stated, the question stops being what can be justified and becomes what three sentences are spent on.

The budget does not scale with the change: one to three sentences whether the diff is small or large. A small change can spend them on outcome, impact, and mechanism alike. A large one cannot, and what gives way is stated rather than left to the drafter. Replace the list with what the change amounts to, its upshot rather than a category of its parts, then spend what remains on the fact that summary does not imply. Anything the summary already implies belongs in ## Details.

Not a topic budget, and not a per-item keep-test. Both are the test that already fails.

This qualifies lede-voice.md's Mechanism is substance rather than reversing it: mechanism is what the reader wants on a change small enough to afford it, and the first detail the budget cuts on one that is not.

Acceptance criteria

Must have

  • The guidance states that a cut detail is not a lost detail, and names where it survives, so the drafter allocates the budget rather than justifying each keep.
  • The guidance states that the lede's budget is fixed regardless of the size of the change.
  • The guidance names what gives way when the budget binds, in a form the drafter applies without judging the merits of their own draft.
  • The surviving-detail test is what the summary does not imply, so a detail is cut for being predictable rather than for being small.
  • A list that does not fit is replaced by what the change amounts to, not by a category of its members.
  • Mechanism is substance no longer licenses mechanism detail on a change that cannot afford it.
  • The reader can still restate what the change did, preserving lede-voice.md's "Cut detail, not meaning" constraint.
  • The checklist change lands in _partials/voice-checklist.md, so summarize-change, merge-pr, and commit all receive it.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions