Skip to content

Give the lede pipeline authority to cut cruft, not just doctrine to forbid it #704

Description

@williamthorsen

Problem

The ## What section of change summaries — and the PR descriptions derived from them — repeatedly ships over-detailed, mechanism-laden ledes despite a mature lede-voice doctrine that forbids exactly this. The recurrence persists across many rounds of doctrine tightening, which signals the lever is not wording.

Pipeline today: /create-prsummarize-change (delegates the ## What) → changelog-writer (reads lede-voice, composes, returns text used verbatim). The failure mode:

  • The orchestrator can launder mechanism into the outcome: field it hands the subagent. The subagent renders that substance faithfully because its own mandate tells it to — "your job is voice, not substance" — so supplied cruft survives intact.
  • The subagent self-audits its own draft; author-grades-own-work is a weak gate, but it is weakest precisely because the mandate above tells it to preserve the laundered substance rather than cut it.
  • The verbatim rule forbids the orchestrator from pruning the returned text, removing the one backstop positioned to cut cruft it can see.

Context

The diagnosis that prior fixes "tightened doctrine without curing it" points at the wrong layer. Every tightening pass edited lede-voice.md — the rules doc. The actual structural cause is the changelog-writer mandate that instructs the agent to treat everything in outcome as substance to preserve. That mandate has never been the target of a fix. So strengthening it is a first attempt at the real cause, not another round of the same.

The failure is semantic on both axes: distinguishing mechanism prose from outcome (Rule 1) and a banned identifier from an allowed one (Rule 2) both require knowing the referent, not the token — so no cheap deterministic gate is viable. Enforcement is either a doctrine-reading agent grading itself or one grading another; there is no middle.

The concrete regression is this repo's PR #703: an earlier over-detailed draft that only a human glancing at the PR caught and cut. The committed lede is clean; nothing automated stopped the bad draft.

Proposed solution

Reassign authority across the pipeline boundary rather than add doctrine prose, splitting cutting mechanism (routing detail to the right channel — already what the doctrine demands) from authoring outcome facts (what the change delivers):

  • Rework the changelog-writer mandate so cutting mechanism, internal naming, and output-format detail is the writer's obligation — explicitly including detail that arrives inside outcome — while inventing or altering the outcome itself remains the caller's responsibility.
  • Tighten the outcome: field contract so it must carry the mechanism-free reader-facing delta, not a draft, closing the laundering channel at the source.
  • Reconcile the verbatim constraint so the orchestrator may prune cruft it identifies directly, while still reserving voice and register changes for redispatch. This makes the orchestrator a non-self backstop reader — the lean substitute for an every-PR independent gate.

Deferred (tripwire). An independent audit dispatch on every finished lede — the original heavyweight fix — is intentionally not built now. The mandate cause has never been addressed, so it earns a clean attempt first. If a mechanism lede later slips the strengthened self-audit plus orchestrator backstop, wiring in the existing changelog-writer audit mode is the documented next step.

Acceptance criteria

Must have

  • The changelog-writer mandate explicitly requires (not merely permits) cutting mechanism/cruft from the lede, including detail supplied through the upstream outcome: input, and distinguishes that obligation from inventing or altering outcome facts.
  • The verbatim constraint in summarize-change permits the orchestrator to prune cruft it identifies directly, while still routing voice/register changes through redispatch.
  • The change is validated against a concrete regression: a #661 Self-anchor agents helpers at the git repo root #703-style draft with mechanism laundered through outcome is confirmed to return cut clean from the strengthened pipeline.

Should have

  • The outcome: field contract states the field must itself be mechanism-free — the reader-facing delta, not a draft — so detail cannot be laundered through it.

Nice to have

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions