Skip to content

P1: Define the Normative-Statement Format, Lint It, and Pilot It on "Verification Discipline" #1316

Closed

Description

@ptr727

Part of #1311. Priority: next. One pull request for the format and lint, one for the pilot.

Why

Every sentence in the governing prose is written as a checkable contract, including the sentences that are only rationale. A rule bullet in GOVERNANCE.md carries the rule, its history, the tool behavior it depends on, and its exceptions, in one paragraph, and eleven such bullets exceed 1,500 characters. The 15 "claim falsified" and 9 "two documents disagree" issues are overwhelmingly rationale sentences going stale, and they are reviewed to the same standard as the rule because nothing marks which is which. "Verification Discipline" is 18 KB, is the most-cited section in the open backlog, and has #1241, #1296, #1239 and others open against it.

Scope

  • Define the format in GOVERNANCE.md "Documentation Style Conventions" or its Skill, once: a rule is one bold normative statement, at most two sentences, using MUST, MUST NOT, or NEVER. Everything under it is rationale, set apart by a fixed marker (a nested bullet, or a line opening with a fixed word such as "Why:"), and rationale is non-normative. A stale rationale is a cleanup, filed to the unit's tracker, never a blocking finding. Only the normative statement is what a review holds a change to.
  • Add a prose_lint.py rule, opt-in first then gating once the pilot lands, that flags a normative bullet over a stated length and a rule bullet with no marked rationale boundary. Add the test that watches it fail.
  • Tell the reviewer: local-strict-review's brief and code-review's "Review the Change" say that a finding on rationale is reported under its own label and never blocks.
  • Pilot: rewrite "Verification Discipline" into the format. Keep every rule. Move each rule's evidence into its rationale. Where a rationale sentence is a claim about a script or workflow, either cite the check that proves it or delete it. Close the pre-existing findings against the section that the rewrite settles, and move the rest to the section's tracker.

Rules that bind this task

  • No rule is weakened or removed in the pilot. The normative statement of each rule says what the old bullet said.
  • One unit per pull request. The pilot touches "Verification Discipline" and nothing else in GOVERNANCE.md.
  • The format definition lives in one place. Skills point to it.

Acceptance

  • prose_lint.py reports zero on the rewritten section and reports the old text.
  • A whole-unit pass over the rewritten section, run with the stop condition from the P0 sub-issue, closes in one round with its findings labeled rationale.

Relates #1241, #1296, #1239, #1164, #1153.

Activity

  1. added
    documentationImprovements or additions to documentation
    enhancementNew feature or request
    on Sep 4, 2026
  2. added
    proseA defect in rule or procedure text
    and removed
    enhancementNew feature or request
    on Sep 5, 2026
  3. ptr727 commented on Sep 8, 2026

    @ptr727
    OwnerAuthor

    A worked measurement in favour of this issue, from PR #1435, which added two bullets to GOVERNANCE.md "Communicating with the User".

    Bullet sizes in that section after the change:

    Bullet Characters Words
    Reference every pull request as a clickable link 1038 183
    Ask for input as a numbered list 243 46
    Raise work blocked on the user as a direct interactive prompt 1175 209
    A question filed as an issue is parked rather than asked 960 172
    The session that writes a handoff presents the parked queue 2563 447

    The new parked-queue bullet is 2.2 times the longest bullet that was already there, and longer than the two next-longest combined. It carries 11 sentences.

    Every blocking finding in the last six review rounds on that PR was inside it, and none was a wrong rule. The normative statement was correct in the first draft and never changed. What kept failing was rationale: a claim that a label was in every carrier's set, a claim that a session had nowhere else to learn a name, a claim that a session ends by exhausting its context (contradicting AGENTS.md "Session Scope", cited in the same sentence), and twice over a claim about what happens to an omitted item that the rule's own enumerate-and-rank mechanism forecloses. The last of those was settled by deleting the explanation rather than rewording it a third time.

    The growth mechanism is visible in the diff history: each failure mode a reviewer found was answered with another clause, and no round ever removed one. A format that separates a short normative statement from separately-marked, non-contractual commentary would have absorbed all fifteen rounds without growing the contract, because fourteen of the roughly thirty findings were against sentences that are not rules.

    The maintainer's decision on that PR was to ship the bullet as it stands and let this issue reshape it, rather than hand-shaping it ahead of the format and paying the review rounds twice. So this bullet is a ready-made pilot candidate alongside the "Verification Discipline" one this issue already names, and it has a documented round-by-round record of which sentences failed and why.

  4. ptr727 commented on Oct 23, 2026

    @ptr727
    OwnerAuthor

    Closed under the maintainer's decision (ptr727, 2026-10-23) on #3391, item 6: the #1311 structural items that have had no activity since September are closed so the backlog states what is planned. #1321 stays open as the one structural item still under consideration. The re-assessment that supersedes #1311's plan is the comparison on #3391.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationproseA defect in rule or procedure text

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions