pull_request_template.md
GitHub PR template — the gated Launch readiness checklist, written whole by redline init when the repo has none, merged into an existing one otherwise.
What this is
The GitHub pull request template: a Change type pick-list (ungated) and a Launch readiness checklist (gated).
How to onboard it
- Installed as:
.github/pull_request_template.md - Installed by: redline init — written whole only when the repository has no template the host would serve.
How to use it
Tick every box honestly, or delete a line that genuinely doesn't apply and say why in the Summary. If the gate is stuck on a process item you can't satisfy, apply the redline-exempt label and explain in a comment — that downgrades checklist and ADR to warnings, never dependency review or the secret scan.
- redline init searches .github/, the repository root, then docs/ (GitHub's own precedence order) for an existing pull_request_template.md before writing one. Where it finds none, it writes the packaged template whole, gated sections already inside REDLINE:BEGIN/END markers.
- Where a template already exists, it is kept byte for byte and only the gated sections (## Launch readiness, ## Architecture decision) are appended inside REDLINE:BEGIN/END markers — a section the template already provides on its own is left untouched rather than duplicated. On a re-run, only that marked span is regenerated.
- The redline-gate.yml checklist job parses the PR body specifically for a ## Launch readiness heading, then fails if any box under it is unticked.
- Deleting the heading — not just leaving boxes unticked — fails the gate outright and loudly, by design: a missing section can't be mistaken for a completed one.
- The Architecture decision and Automated review sections are informational; only Launch readiness is enforced by the gate.
Expected output
.github/pull_request_template.md, and through it the gate's checklist job: it parses the PR body for a ## Launch readiness heading and fails if any box under it is unticked. Deleting the heading fails the gate loudly rather than passing — a missing section cannot be mistaken for a completed one.
How to edit it
The real source: This template file. Only the span inside the REDLINE:BEGIN/END markers is regenerated on a re-run, so a repository's own additions outside it survive.
- Check whether the CLI reads this file at allSeveral of these are reference shapes: the CLI generates the equivalent in code and never opens the checked-in copy. Editing one of those changes nothing about what redline init writes. The onboarding section above says which kind this is.
- Edit the real sourceFor a generated artifact that is cli/commands/init.ts; for a file installed verbatim it is the template itself.
- npm test && node scripts/validate.mjsThe install path is unit-tested against a fake host client, and validate.mjs pins the shapes the merge gate's required check name depends on.
The full file
# Summary
<!-- What and why, 2-3 sentences. Link the ticket. -->
Ticket:
## Change type
<!-- Tick the one that applies. This section is NOT gated — pick one and move on. -->
- [ ] Feature
- [ ] Bugfix
- [ ] Refactor (approved beforehand)
- [ ] Chore/config
<!-- REDLINE:BEGIN — generated by Redline. Do not edit inside this block. -->
## Launch readiness
<!--
GATED SECTION. `redline-gate` fails while any box here is unticked.
If an item genuinely does not apply, delete the line and say why in the Summary.
Do not delete the heading — the gate fails if the section is missing.
-->
- [ ] No secrets, keys, or customer data in code, logs, or fixtures
- [ ] Input validated at boundaries touched by this change
- [ ] Typecheck and lint pass with no new errors
- [ ] Tested on: <!-- iOS / Android / web / staging -->
- [ ] Error states handled (network failure, empty, loading)
- [ ] Rollback is safe (no destructive migration, no breaking contract change)
- [ ] No unrelated changes in the diff
## Architecture decision
<!-- If this PR makes a non-obvious technical choice, add an ADR and link it. Otherwise delete this section. -->
ADR: `docs/adr/NNNN-*.md`
## Redline exemption
<!--
Only fill this in if a process check above is failing and you are asking to merge anyway.
Delete the whole section otherwise. A label alone no longer exempts anything: the gate
reads THIS block, and an exemption with no reason and no end date is an opt-out, not an
exemption.
- reason: what is being accepted and why, in a sentence a reader in three months
can act on. "Needed for release" is not one.
- until: YYYY-MM-DD, at most 90 days out. Longer than that is a standards change,
not an exemption — raise it in the Redline source repo.
- scope: which checks it covers (checklist, adr). Omit to cover both.
This can never exempt dependency review or the secret scan. Those do not soft-fail.
-->
- reason:
- until:
- scope:
<!-- REDLINE:END -->
## Automated review
- [ ] Review comments addressed, or dismissed in-thread with a reason
<!--
Gate stuck on a process check you cannot satisfy? Apply the `redline-exempt` label AND
fill in the `## Redline exemption` section above. The label says a check was waived; the
block says who accepted what, why, and until when — and the gate reads the block.
It does NOT bypass dependency review or the secret scan — those never soft-fail.
-->