Skip to content

Add a named lede-voice rule barring how-to-invoke usage in changelog entries #682

Description

@williamthorsen

Status (2026-07-23): On hold — do not implement yet. This ticket adds a named rule to prose that the #1055 reframe is expected to replace; the reframe's direction (kind-keyed lede archetypes vs the density framing) is being settled by the #1056 gold-set eval. Fold this ticket's substance (no how-to-invoke register; flag naming vs usage enumeration) into the reframe, or revive it standalone if the reframe stalls.

Problem

Changelog and release-notes ledes (the ## What section) keep coming out in an instruction-manual register — sentences that enumerate flags and tell the reader how to invoke a feature. A recent example shipped on #681: the ## What ended with "Use --kb to choose which knowledge base to scan and --stale-after to set how old verification may be before it counts as stale." That is reference-doc content in the wrong channel: it buries the actual delta and makes the lede less likely to be read.

Context

  • lede-voice.md (source: packages/agents/content/skills/_data/lede-voice.md) is the single source of truth for the changelog-writer subagent. That agent is instructed to read only that file — not CLAUDE.md, AGENTS.md, or saved house-style memories — and explicitly not to work from recall.
  • The doctrine already catches the instructional case, but only by inference: such a sentence fails Rule 1 (it is neither outcome nor migration) and the "Allowed is not the same as worth it" test. There is no sharply named proscription against how-to-invoke / per-flag usage enumeration.
  • In the #638 Add kb-curate skill for vault-wide KB hygiene #681 case the audit caught it after the fact, but the changelog-writer had self-approved the draft — soft, inferential coverage was easy to rationalize past.

Relevant considerations

  • The rule must live in lede-voice.md to take effect. The agent is single-sourced on that file by design; pointing it at CLAUDE.md is both ineffective (subagents do not auto-load it) and contrary to the agent's one-doctrine-file model.
  • A named rule with a concrete bad→good example is far harder to miss than inferential coverage, consistent with the principle that agents imitate the nearest concrete example more reliably than a directive read once.
  • The rule must distinguish permitted flag naming (e.g., --apply named as the load-bearing report-vs-fix distinction the reader acts on) from prohibited usage enumeration (teaching how to invoke). The existing "earns its place" guidance is the natural hook.
  • lede-voice.md in the consuming environment is a generated/synced file; edits go to the repo source and propagate via codeassembly-agents install.

Proposed solution

Add a named rule to lede-voice.md stating that the lede narrates the change, not how to invoke it: no how-to-invoke phrasing and no per-flag usage enumeration. A flag may be named when the reader must act on it as a behavioral distinction, but the entry must not enumerate flags and their usage — that is reference-doc content, routed to the docs or ## Details. Include a bad→good pair drawn from the #681 case:

  • Bad: "...pass --apply to also have it fix the two cases... Use --kb to choose which knowledge base to scan and --stale-after to set how old verification may be before it counts as stale."
  • Good: "...It reports findings without touching the vault by default; run with --apply and it additionally repairs the two issues it can fix safely..."

Acceptance criteria

Must have

  • lede-voice.md (repo source) gains a named rule proscribing how-to-invoke phrasing and per-flag usage enumeration, with a bad→good example.
  • The rule distinguishes permitted flag naming (reader acts on it as a behavioral distinction) from prohibited usage enumeration.

Should have

Nice to have

  • A cross-reference between Rule 1 / "earns its place" and the new named rule, so the inferential and named paths reinforce each other.

Metadata

Metadata

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions