Skip to content

Commit a981cd2

Browse files
ccross2claude
andauthored
docs(governance): frame PRs as "push requests" — problem-first evaluation (#62)
Refines the OSS contribution docs around the mindset that a pull request is a request to push a change, evaluated by "what problem does this solve?" before the diff. - PR template: leads with "What problem does this solve?" (was "what does this PR do?"); adds a DCO sign-off checklist item. - CONTRIBUTING.md: new "How we evaluate a PR" section — the 5-rung ladder (problem -> scope -> solution -> verifiable -> governance); line-by-line review comes after the top three. - ADR 010: adds decision 9 (Problem-First PR Triage) codifying the ladder as the governance evaluation procedure, so review is consistent and delegable. Docs-only; no code or product change. Claude-Session: https://claude.ai/code/session_012wU47GVzskAummZqgH6FgF Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 3f94c8a commit a981cd2

3 files changed

Lines changed: 55 additions & 8 deletions

File tree

.github/pull_request_template.md

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## What problem does this solve?
2+
3+
<!-- The motivation, not the diff — what's broken, missing, or needed, and for whom.
4+
Link the issue if there is one ("Closes #123"). No clear problem yet? Open an
5+
issue first (see CONTRIBUTING.md). -->
6+
17
## Type
28

39
<!-- Check one: -->
@@ -7,23 +13,23 @@
713
- [ ] Documentation
814
- [ ] Other: <!-- describe -->
915

10-
## Description
16+
## What this changes
1117

12-
<!-- What does this PR do? Link related issues with "Closes #123" or "Fixes #456". -->
18+
<!-- How this PR solves the problem above — the approach, not a line-by-line list. -->
1319

1420
## Testing
1521

16-
<!-- How did you verify this works?
17-
- For quirks: paste `visage discover` output showing the device
18-
- For bug fixes: describe the repro and how this fixes it
19-
- For packaging: which distro/version did you test on? -->
22+
<!-- How you verified it works:
23+
- Quirks: paste `visage discover` output showing the device
24+
- Bug fixes: the repro, and how this fixes it
25+
- Packaging: which distro/version you tested on -->
2026

2127
## Checklist
2228

2329
- [ ] `cargo fmt --all -- --check` passes
2430
- [ ] `cargo clippy --workspace -- -D warnings` passes
2531
- [ ] `cargo test --workspace` passes
26-
- [ ] No new warnings introduced
32+
- [ ] Commits are signed off (`git commit -s`) per the DCO
2733
- [ ] I have read [CONTRIBUTING.md](../CONTRIBUTING.md)
2834

2935
## Breaking changes

CONTRIBUTING.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,20 @@ ideas are bad. If you want gestures or voice on Linux, watch the [Esver OS](http
174174

175175
---
176176

177+
## How we evaluate a PR
178+
179+
A pull request is a request to push a change — we read it from the problem down, not the diff up. In order:
180+
181+
1. **What problem does it solve?** No stated problem, or a solution hunting for one, gets "what's the problem here?" before any code review.
182+
2. **Is the problem in scope?** See [what we will NOT merge](#what-we-will-not-merge). Out of scope → we decline with the boundary, not the code.
183+
3. **Is it the right solution?** A real, in-scope problem can still have the wrong fix — we look for the simplest approach that fits the architecture.
184+
4. **Is it verifiable?** Evidence it works (tests, `visage discover` output, a repro) and green CI.
185+
5. **Governance** — DCO sign-off, extra review for the auth path, attribution.
186+
187+
Line-by-line review comes after 1–3. So the fastest path to merge is a clear problem statement — and a well-scoped PR gets a fast yes or a fast, kind no, never silence.
188+
189+
---
190+
177191
## PR guidelines
178192

179193
All PRs are filed against `main`. Use the [PR template](.github/pull_request_template.md)

docs/decisions/010-open-source-contribution-governance.md

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
**Date:** 2026-02-24
44
**Status:** Accepted
55
**Deciders:** Sovren Software core team
6+
**Amended:** 2026-07-07 — added §9 (Problem-First PR Triage)
67

78
---
89

@@ -113,7 +114,7 @@ Three issue templates and one PR template standardize contribution quality:
113114
| Bug report | Structured: environment, repro steps, expected/actual, logs |
114115
| Hardware report | Mirrors Adopt-a-Laptop format — device info, test results, discovery output |
115116
| Feature request | Includes scope-check reminder linking the out-of-scope table |
116-
| PR template | Type checkbox, description, testing evidence, quality gate checklist |
117+
| PR template | Leads with "What problem does this solve?"; then type, change, testing evidence, DCO + quality-gate checklist |
117118

118119
**Rationale:** The highest-value contributions (hardware quirks) come from users who may
119120
not be experienced OSS contributors. Templates reduce the back-and-forth from "please add
@@ -140,6 +141,32 @@ and CI-tested before merge.
140141
looking at this?" pings. Hardware quirks are fast-tracked because each one unlocks support
141142
for an entire laptop model.
142143

144+
### 9. PR Evaluation: Problem-First Triage
145+
146+
*(Amendment, 2026-07-07.)* A pull request is treated as a **request to push a change**
147+
evaluated from the problem down, not the diff up. Every PR (external, dependabot, or
148+
maintainer) is read through this ladder **before** line-by-line code review:
149+
150+
1. **What problem does it solve?** No stated problem — or a solution hunting for one — is
151+
asked "what's the problem here?" before its code is reviewed.
152+
2. **Is that problem in scope?** Measured against the out-of-scope boundaries in
153+
`CONTRIBUTING.md`. Out-of-scope PRs are declined with the boundary, not the code.
154+
3. **Is it the right solution?** A real, in-scope problem can still have the wrong fix —
155+
the bar is the simplest approach that fits the architecture and does not widen the
156+
auth/attack surface.
157+
4. **Is it verifiable?** Evidence (tests, a repro, `visage discover` output) plus green CI.
158+
5. **Governance** — DCO, security-path review, merge strategy, attribution (§§3–5 above).
159+
160+
**Rationale:** The other decisions here govern *how* a PR is handled (branch protection,
161+
DCO, CI, timelines); they do not say *how it is judged*. Codifying the problem-first ladder
162+
makes evaluation consistent and delegable — a maintainer, or an automated agent handling
163+
routine PRs, applies the same lens, rejects/redirects early on the upper rungs (cheaper for
164+
us, kinder and faster for the contributor), and escalates only genuine judgment calls:
165+
scope-edge decisions, anything on the security/auth path, governance waivers, and
166+
breaking/release-version calls. Surfaced to contributors in `CONTRIBUTING.md`
167+
("How we evaluate a PR") and in the PR template, which now leads with
168+
"What problem does this solve?".
169+
143170
---
144171

145172
## Consequences

0 commit comments

Comments
 (0)