Skip to content

Host the PR-body-as-spec template org-wide; adopt the convention here #50

Description

@lesnik512

What

Two repos have now moved to a convention where the PR body is the spec for a change — there is
no committed change file, no lane to pick, and no planning/ tree:

Both carry an identical-in-shape .github/PULL_REQUEST_TEMPLATE.md, differing only in the package
path and the test command. This repo already hosts the org-default template at
.github/PULL_REQUEST_TEMPLATE.md, so it is the natural home — but the default is currently the
generic Summary / Changes / Checklist form, which does not carry the parts that make the convention
work.

Why the generic template is not enough

The convention's template is not a nicer checklist; four of its prompts are the convention:

  • The admission check. Before writing a fact anywhere: derivable from the package → don't write
    it; enforceable → a test; a user needs it → docs/; otherwise it does not get written. Without
    this prompt at review time, prose accretes and the planning/ tree grows back.
  • The invariant pin. If a wrong change could pass silently, pin it with a test whose name is the
    claim and whose docstring opens INVARIANT: and says what breaks it.
  • ADR routing. A rejected alternative with load-bearing reasoning goes to docs/adr/, not into
    the PR body where it is lost on merge.
  • Issue routing. Real work you are not doing now becomes an issue, not a deferred-work file.

The generic template's "Docs updated if behavior or public API changed" asks the old question —
did you update the page? — which is what let the capability pages in both repos ratchet toward
restating code.

Proposed

  1. Adopt the convention in this repo. planning/.convention-version is still 2.0.0, and this
    repo still carries planning/ and architecture/. Deciding for the org while running the older
    convention here is the awkward part; doing it first also proves the migration on a docs-shaped
    repo rather than a library.
  2. Replace the org-default .github/PULL_REQUEST_TEMPLATE.md with the convention form, written
    generically — the two repo-specific bits are the package directory and the test command, which
    can be phrased as "the package" and "the repo's full-suite recipe".
  3. Then the local copies come out. Once the default is in place, modern-di and
    faststream-outbox delete their own .github/PULL_REQUEST_TEMPLATE.md and inherit it. Both are
    deliberately keeping theirs until step 2 lands, since a repo-local template silently wins over
    the org default and there is no signal when the two drift.

Open question

Whether the generic form loses too much. The value of the checklist is partly that it names the
repo's actual gate (just test at 100% coverage in faststream-outbox, just test-ci in
modern-di). If the generic version reads as boilerplate, the alternative is to keep the template
local per repo and instead put the convention — the admission check and the four routes — in this
repo's CLAUDE.md as an org-wide rule, with each repo's template referencing it.

Activity

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 documentationenhancementNew feature or requestready-for-humanRequires human implementation

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions