Skip to content

#1050 Add a redundancy rule to the lede-voice doctrine - #1058

Merged
williamthorsen merged 4 commits into
mainfrom
1050
Jul 19, 2026
Merged

#1050 Add a redundancy rule to the lede-voice doctrine#1058
williamthorsen merged 4 commits into
mainfrom
1050

Conversation

@williamthorsen

@williamthorsen williamthorsen commented Jul 19, 2026

Copy link
Copy Markdown
Owner

What

The changelog-voice doctrine gains a third drafting rule that aims to reduce verbosity by eliminating statements containing trivial or redundant information. The drafting checklist and the automated draft audit now screen for it too, and the audit gains the cross-sentence comparison it previously could not make.

Why

The doctrine's outcome test and identifier ban both pass sentences that add nothing new: an obvious corollary of the change, a "nothing else broke" reassurance no one asked for, or a restatement of an earlier sentence. That padding recurred across changelog and PR ledes, and in the reassurance case planted doubt the reader never had, with no rule positioned to catch it.

Details

🎉 Features

  • Rule 3 (redundancy ban) is added as a peer of the outcome test and identifier ban, covering the self-evident corollary, the harm-avoided guarantee, and the cross-sentence paraphrase, and extending the deletion test across sentences.
  • The drafting checklist gains the rule and a matching cross-sentence audit step.
  • The changelog-writer subagent's audit now compares sentences to one another and to the change's own implication, and its output format carries a Rule 3 failure line.

♻️ Refactoring

  • Rule references throughout the doctrine and its two consumers are decoupled from a hard-coded count, so a future rule no longer forces a lockstep sweep of "two rules" / "all three" phrasing.
  • Redundant illustrations are trimmed from the doctrine: a duplicate corollary example, an over-explained guarantee bullet, and two example blocks that no longer earned their space.

Closes #1050

Adds a redundancy ban to the lede-voice doctrine, directing writers to cut sentences that restate what the reader already has: a change's self-evident corollary, a guarantee against a harm no one suspected, or a paraphrase of a prior sentence.
Trims the lede-voice doctrine's own redundancy: the overrides-file example no longer appears three times, two examples of the same output-format lesson collapse to one, and the length note sheds its restatement of the rules. Three references left counting two rules now count three.
References to the lede-voice rule set no longer hard-code the rule count, so adding or removing a rule no longer requires updating every "two rules" or "all three" phrasing in lockstep across the doctrine and its consumers.
Cuts a redundant worked example and a restated clause from the lede-voice redundancy rule: the self-evident-corollary form no longer carries a standalone example on top of its inline one, and the harm-avoided-guarantee note drops a clause that repeated the sentence before it.
@williamthorsen williamthorsen added feature Added or improved external functionality scope:agents labels Jul 19, 2026
@github-actions

Copy link
Copy Markdown

Dependency audit

Production dependency audit passed.

@williamthorsen williamthorsen self-assigned this Jul 19, 2026
@williamthorsen
williamthorsen marked this pull request as ready for review July 19, 2026 22:14
@williamthorsen
williamthorsen merged commit e7c0dfe into main Jul 19, 2026
3 checks passed
@williamthorsen
williamthorsen deleted the 1050 branch July 19, 2026 23:07
williamthorsen added a commit that referenced this pull request Aug 4, 2026
…e-v0.2.2 codeassembly-v0.4.0 factory-v0.2.2 codeassembly-mcp-v0.2.2

codeassembly-v0.4.0
- #1153 feat: Make codeassembly and kb CLI tools publishable (#1164)
- #1091 fix: Anchor a project-deployed link where its target deploys (#1159)
- #1156 refactor: Rename packages to publishable names (#1157)
- #1152 tooling: Run every test in the default gate, classified by what it reaches (#1155)
- #1110 tooling: Migrate Vitest to nmr's centralized model (#1154)
- refactor: Refine typescript-preferences
- #1150 fix: State doc-description form and make comment mood opt-in (#1151)
- deps: Upgrade first-party linting deps to latest version
- #1137 feat: Establish personal rulebooks for code layout and TypeScript preferences (#1144)
- #1126 feat: Check a package's own guidance content before it ships (#1138)
- refactor: Fix lint
- tooling: Remove redundant lint rules
- #1133 fix: Reject an anchor link that names no heading (#1135)
- #1122 feat: Capture lede decisions as an accumulating corpus (#1132)
- #1125 feat: Honor invocation tokens in rulebook bodies (#1129)
- #1107 feat: Render rulebook links and path tokens per harness (#1124)
- #1115 feat: Sync guidance at build and install so an upgrade cannot leave it stale (#1123)
- #1114 feat: Adopt a dependency's guidance by naming the package (#1121)
- #1088 feat: Deliver project ambient rulebooks per harness (#1113)
- #1087 refactor: Rename the authoring rulebook and mark its enforced rules (#1092)
- #1095 tooling: Move compilation out of the install lifecycle into a bootstrap step (#1102)
- #1094 refactor: Remove the ambient ripgrep dependency from the test suite (#1097)
- deps: Upgrade all deps to latest version
- tooling: Upgrade all deps to latest version & modernize configs
- refactor: Fix lint
- #1077 feat: Show the proposed edit above post-review menu options (#1078)
- #1068 feat: Deliver ambient rulebooks mechanically, retiring GLOBAL.md (#1075)
- #1069 feat: Add a no-second-person rule to the lede-voice doctrine (#1070)
- #1050 feat: Add a redundancy rule to the lede-voice doctrine (#1058)
- #1035 internal: Add lifecycle workspace with the canonical envelope, vocabulary & lane fold (#1049)
- #1006 internal: Extend lifecycle-event instrumentation to five high-traffic skills (#1034)
- #1028 feat: Rule out absence-of-removed-code tests (#1032)
- #114 feat: Let reviewers emit gated insights into review artifacts (#1031)
- #1027 internal: Retire input.received and redundant skill.progress emits (#1030)
- #1026 fix: Name the side effects an approval ask authorizes (#1029)
- #1022 fix: Normalize action and question label identifiers across asks blocks (#1025)

factory-v0.2.2
- #1156 refactor: Rename packages to publishable names (#1157)
- deps: Upgrade all deps to latest version
- #1152 tooling: Run every test in the default gate, classified by what it reaches (#1155)
- #1110 tooling: Migrate Vitest to nmr's centralized model (#1154)
- tooling: Remove redundant lint rules
- deps: Upgrade deps to latest version
- deps: Upgrade all deps to latest version
- deps: Upgrade all deps to latest version
- tooling: Upgrade all deps to latest version & modernize configs
- refactor: Fix lint
- deps: Upgrade all deps to latest version

kb-v0.3.0
- #1153 feat: Make codeassembly and kb CLI tools publishable (#1164)
- #1156 refactor: Rename packages to publishable names (#1157)
- #1152 tooling: Run every test in the default gate, classified by what it reaches (#1155)
- #1110 tooling: Migrate Vitest to nmr's centralized model (#1154)
- tooling: Remove redundant lint rules
- #1095 tooling: Move compilation out of the install lifecycle into a bootstrap step (#1102)
- tooling: Upgrade all deps to latest version & modernize configs
- refactor: Fix lint

codeassembly-lifecycle-v0.2.0
- #1153 feat: Make codeassembly and kb CLI tools publishable (#1164)
- #1156 refactor: Rename packages to publishable names (#1157)
- #1152 tooling: Run every test in the default gate, classified by what it reaches (#1155)
- #1110 tooling: Migrate Vitest to nmr's centralized model (#1154)
- tooling: Remove redundant lint rules
- #1095 tooling: Move compilation out of the install lifecycle into a bootstrap step (#1102)
- tooling: Upgrade all deps to latest version & modernize configs
- #1038 feat: Add the read-only git adapter for worktree and base-branch ground truth (#1059)
- #1051 feat: Bound fold memory and rescan cost with a retention window (#1057)
- #1035 internal: Add lifecycle workspace with the canonical envelope, vocabulary & lane fold (#1049)

codeassembly-mcp-v0.2.2
- deps: Upgrade all deps to latest version
- #1156 refactor: Rename packages to publishable names (#1157)
- #1152 tooling: Run every test in the default gate, classified by what it reaches (#1155)
- #1110 tooling: Migrate Vitest to nmr's centralized model (#1154)
- #1095 tooling: Move compilation out of the install lifecycle into a bootstrap step (#1102)
- tooling: Upgrade all deps to latest version & modernize configs
- refactor: Fix lint

codeassembly-run-core-v0.2.2
- #1156 refactor: Rename packages to publishable names (#1157)
- #1152 tooling: Run every test in the default gate, classified by what it reaches (#1155)
- #1110 tooling: Migrate Vitest to nmr's centralized model (#1154)
- #1095 tooling: Move compilation out of the install lifecycle into a bootstrap step (#1102)
- tooling: Upgrade all deps to latest version & modernize configs
- refactor: Fix lint
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature Added or improved external functionality scope:agents

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add a redundancy rule to the lede-voice doctrine

1 participant