@@ -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:
32331 . ** Problem** – an issue that is on our way to achieving the Goal
33341 . ** 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-
4538To find a Goal to work on, browse GitHub Issues in the relevant repository and
4639filter for issues with the ` Goal: ` prefix. Prioritize issues based on their
4740impact 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
5043As soon as you get involved, you must:
5144
52451 . 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,
55481 . 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
7666The 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-
9276Every Problem issue body must include both a ` # Problem ` and a ` # Solution `
9377section, 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
9882Describe what the user cannot do and why it matters.
9983
100- # Solution
84+ ## Solution
10185
10286Describe the recommended approach or workaround.
10387```
10488
10589### Solution
10690
107- The third pillar of successful contribution is the Solution.
108-
10991Different problems may require different sets of skills.
11092Whether it's code, design, or marketing material, we expect a lean and clean
11193solution from the contributor.
@@ -117,13 +99,63 @@ solution from the contributor.
11799
118100For 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
124155Direct 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:
136168If you identify a potential new problem but are unsure whether it is planned:
137169
1381701 . 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.
1401731 . If necessary, create a new Problem issue and discuss it there.
141174
142175If 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
278305Design 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:
300327Example:
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
316340Follow 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.
3243481 . ** Assign yourself** so it is clear who is working on it.
325- 1 . ** Resolve all CI checks** — PRs with failing checks will be rejected.
3263491 . ** 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.
3333561 . ** 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