Skip to content

Commit cebedcd

Browse files
authored
docs(contributing): follow spec lifecycle for goals (#108)
* docs(contributing): follow spec lifecycle for goals * docs(contributing): follow spec lifecycle for goals * docs(contributing): follow spec lifecycle for goals * docs(contributing): follow spec lifecycle for goals * fix: markdown formatting * docs(contributing): follow spec lifecycle for goals
1 parent 477adb2 commit cebedcd

1 file changed

Lines changed: 72 additions & 47 deletions

File tree

docs/CONTRIBUTING.md

Lines changed: 72 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ approachable and respectful.
1616
- [Goal](#goal)
1717
- [Problem](#problem)
1818
- [Solution](#solution)
19+
- [Specs](#specs)
1920
- [Communication Guidelines](#communication-guidelines)
2021
- [PR Requirements](#pr-requirements)
2122
- [Commit Signature Verification](#commit-signature-verification)
@@ -32,35 +33,23 @@ There are three core contribution pillars:
3233
1. **Problem** – an issue that is on our way to achieving the Goal
3334
1. **Solution** – the actual deliverable which resolves the problem
3435

35-
> [!NOTE]
36-
> In this guide you will get an overview of the contribution workflow: from
37-
> finding a Goal, identifying a Problem, and the process of delivering your
38-
> solutions.
39-
4036
### Goal
4137

42-
Understanding the Goal and its business context is crucial for successful
43-
contribution.
44-
4538
To find a Goal to work on, browse GitHub Issues in the relevant repository and
4639
filter for issues with the `Goal:` prefix. Prioritize issues based on their
4740
impact and urgency. If you are unsure which Goal to choose, please consult your
48-
lead. Pick one that matches your skills, then proceed with the steps below.
41+
lead.
4942

5043
As soon as you get involved, you must:
5144

5245
1. assign yourself to the Goal issue.
53-
1. analyze specifications (the Specs),
54-
1. assess progress and outstanding Problems and
46+
1. review the [Spec](#specs) linked from the Goal issue and assess outstanding
47+
Problems,
5548
1. provide an estimated time of achieving (ETA) the Goal.
5649

57-
Each Goal description must include Specs (a Google Document with commenting
58-
permissions) and an ETA.
59-
6050
> [!NOTE]
61-
> A Goal is represented as a GitHub issue in the relevant repository and has the
62-
> following naming pattern: `Goal: [statement]`.
63-
> Goals are created and managed by Partner level contributors.
51+
> Goals follow the naming pattern: `Goal: [statement]` and must link to a Spec
52+
> with an ETA.
6453
6554
### Problem
6655

@@ -70,8 +59,9 @@ Goal not achieved, and what specifically is the problem?"
7059

7160
> [!NOTE]
7261
> Report each Problem as a [GitHub Issue](https://docs.github.com/en/issues)
73-
> using the naming pattern: `Problem: [statement]`. Keep the name short (under
74-
> 65 characters) and crystal clear.
62+
> using the naming pattern: `Problem: [statement]`. Keep it short (under 65
63+
> characters). Add it as a **sub-issue** of the Goal and include the Goal issue
64+
> link in the description.
7565
7666
The statement must be a **job story** — describe what a specific user
7767
**cannot do** or what is broken for them. Ask:
@@ -83,12 +73,6 @@ _"What can [user] not do because of this problem?"_
8373
| `users can't submit a form without refreshing` | `form submission issue` | Vague, no actor or action |
8474
| `admins can't export reports as CSV` | `CSV export missing` | No subject, not a job story |
8575

86-
Ensure each Problem issue is properly interlinked with its parent Goal issue:
87-
88-
- Add the Problem as a **sub-issue** of the Goal using GitHub's sub-issue
89-
feature.
90-
- Add the Goal issue link to the Problem description.
91-
9276
Every Problem issue body must include both a `# Problem` and a `# Solution`
9377
section, describing the recommended approach or workaround before work begins.
9478

@@ -97,15 +81,13 @@ section, describing the recommended approach or workaround before work begins.
9781

9882
Describe what the user cannot do and why it matters.
9983

100-
# Solution
84+
## Solution
10185

10286
Describe the recommended approach or workaround.
10387
```
10488

10589
### Solution
10690

107-
The third pillar of successful contribution is the Solution.
108-
10991
Different problems may require different sets of skills.
11092
Whether it's code, design, or marketing material, we expect a lean and clean
11193
solution from the contributor.
@@ -117,13 +99,63 @@ solution from the contributor.
11799
118100
For reimbursable work-related costs, see [Expenses](./EXPENSES.md).
119101

102+
### Specs
103+
104+
A Spec describes the intended behavior for a Goal — not what currently exists,
105+
but what the Goal aims to deliver. The canonical Spec is a markdown file in
106+
`docs/specs/`. When external stakeholders need to collaborate, a Google Document
107+
may supplement it, but the markdown file is what the development team builds
108+
against.
109+
110+
A Goal must not be opened without a linked Spec.
111+
112+
#### Lifecycle
113+
114+
A Spec file shrinks as the Goal is implemented. Each PR that delivers behavior
115+
described in the Spec must move the corresponding sections from
116+
`docs/specs/<feature>.md` into the appropriate file in `docs/`. When the Spec
117+
file has no remaining sections, delete it — the Goal is fully documented.
118+
119+
```text
120+
docs/specs/<feature>.md ← only unimplemented sections
121+
docs/<feature>.md ← only what is currently shipped
122+
```
123+
124+
Never add unimplemented behavior to `docs/`. Never leave implemented behavior in
125+
`docs/specs/`.
126+
127+
#### Format
128+
129+
```md
130+
_Goal: <link to Goal issue>_
131+
132+
## Overview
133+
134+
What this Goal enables for users.
135+
136+
## [Section]
137+
138+
Describe what users can do, not how the system works internally.
139+
```
140+
141+
Sections are defined by the author. Keep them user-focused and scoped to
142+
observable behavior. Include a `## Design` section using the markup described in
143+
[Design PRs](#design-prs) when the Goal has a design component.
144+
145+
#### Discussing a Spec
146+
147+
If the Spec PR is not yet merged, propose changes via review comments on that
148+
PR. If the Spec is already merged, open a new PR against the spec file. Do not
149+
use Goal issue comments for scope discussions — they belong in the Spec.
150+
120151
## Communication Guidelines
121152

122153
### Discussion channels
123154

124155
Direct discussions to the appropriate channel at all times:
125156

126-
- **Spec document** — clarifications about Goal scope or business context
157+
- **Spec file** — clarifications about Goal scope or business context; propose
158+
changes via PR or review comments on an open Spec PR
127159
- **Problem issues** — tracking obstacles that prevent achieving the Goal
128160
- **Goal issues** — linking Specs, tracking Problems, and monitoring progress
129161
only
@@ -136,7 +168,8 @@ Direct discussions to the appropriate channel at all times:
136168
If you identify a potential new problem but are unsure whether it is planned:
137169

138170
1. Check if there is an existing Problem issue related to your concern.
139-
1. If not, ask for clarification in the Spec document.
171+
1. If not, open a PR against the Spec file, or leave a review comment if the
172+
Spec PR is not yet merged.
140173
1. If necessary, create a new Problem issue and discuss it there.
141174

142175
If someone's action is required to unblock progress, assign them to the Goal
@@ -185,6 +218,8 @@ Before marking your PR as ready for review, confirm:
185218
- [ ] PR title follows `type(scope): action` naming convention
186219
- [ ] Preview link is included (if applicable)
187220
- [ ] README is updated to reflect any functional changes
221+
- [ ] Spec sections moved to `docs/` for any behavior this PR delivers (if
222+
applicable)
188223

189224
### Commit Signature Verification
190225

@@ -265,24 +300,16 @@ _"What am I building?"_
265300
> | `docs(typefully): log in with shared account` | `docs(typefully): document shared account` |
266301
> | `docs(api): authenticate with OAuth` | `docs(api): add OAuth section to README` |
267302
268-
#### Before Submitting, Ask
269-
270-
1. Does it use `type(scope [Optional]): action` format?
271-
1. Could a non-technical user understand the benefit?
272-
1. Is it in the present tense?
273-
1. Does it focus on user capability (not code)?
274-
1. Is it under 65 characters?
275-
276303
#### Design PRs
277304

278305
Design PRs use `docs(ui)` as the type and scope. e.g.:
279306
`docs(ui): design table component`
280307

281-
Initiate a PR with a note in the DESIGN.md file detailing the addressed design
282-
aspects. Structure the design file with the following markup:
308+
Add a `## Design` section to the relevant Spec file. Structure it with the
309+
following markup:
283310

284311
```text
285-
## Feature
312+
## Design
286313
- [/page](https://figma.com/your-design-file-url)
287314
- ./page/{params}
288315
- (group)
@@ -300,17 +327,14 @@ aspects. Structure the design file with the following markup:
300327
Example:
301328

302329
```text
303-
## Credit Vaults
330+
## Design
304331
- [/lending](https://figma.com/your-design-file-url)
305332
- ./vaults/{poolAddr}
306333
- (Auction)
307334
- [[Withdraw Popup]](https://figma.com/your-design-file-url)
308335
- [[Bid Popup]](https://figma.com/your-design-file-url)
309336
```
310337

311-
If there isn't an existing DESIGN.md file, create one and link it from
312-
README.md.
313-
314338
### PR Lifecycle
315339

316340
Follow these steps in order from start to submission:
@@ -322,7 +346,6 @@ Follow these steps in order from start to submission:
322346
PR](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue#linking-a-pull-request-to-an-issue-using-a-keyword)**
323347
to the corresponding Problem issue using a closing keyword.
324348
1. **Assign yourself** so it is clear who is working on it.
325-
1. **Resolve all CI checks** — PRs with failing checks will be rejected.
326349
1. **Report your time** spent across all stages: planning (40%), implementation,
327350
and QA (20–30%). Open the PR early so time tracking starts from the
328351
beginning, including investigation.
@@ -331,9 +354,11 @@ Follow these steps in order from start to submission:
331354
design, or any deployable artifact), add a link to the deployed preview or
332355
prototype in the PR description.
333356
1. **Mark as ready for review** only once all steps above are complete.
357+
1. **Resolve all CI checks** — CI runs after marking ready; do not request
358+
approval until all checks pass.
334359

335360
> [!WARNING]
336-
> Do not merge without an approved review.
361+
> Do not merge without an approved review and passing CI checks.
337362
338363
### Review Process
339364

0 commit comments

Comments
 (0)