Skip to content

Commit bd04776

Browse files
WOLIKIMCHENGroot
andauthored
Clarify custom checklist ownership and lifecycle (#4028)
* docs: clarify custom checklist lifecycle * docs: clarify implement checklist marker ownership --------- Co-authored-by: root <kinsonnee@gmail.com>
1 parent c5258e6 commit bd04776

5 files changed

Lines changed: 45 additions & 19 deletions

File tree

docs/quickstart.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ Generates the design artifacts from the spec. This is where implementation detai
8383

8484
### Step 5: `/speckit.checklist` — validate the spec
8585

86-
Generates a quality checklist — "unit tests for your requirements" — to confirm the spec is complete, clear, and consistent before you break the work down.
86+
Generates a custom quality checklist — "unit tests for your requirements" — to confirm the spec is complete, clear, and consistent before you break the work down. These custom checklists are reviewer-owned requirements-quality review artifacts: mark an item `[x]` only when the reviewer determines that requirement-quality criterion is satisfied. Checked custom items do not mean implementation work is complete.
8787

8888
```text
8989
/speckit.checklist
@@ -107,7 +107,7 @@ Reports conflicts, gaps, and ambiguities across `spec.md`, `plan.md`, and `tasks
107107

108108
### Step 8: `/speckit.implement` — build it
109109

110-
Executes the tasks in `tasks.md` in dependency order. Run it once to build everything, or scope it to one phase at a time for large features.
110+
Executes the tasks in `tasks.md` in dependency order. Before implementation, it reads checklist checkbox state as a gate and asks before proceeding if any checklist items are unchecked; it does not change any checklist files or markers. The built-in `checklists/requirements.md` checklist is maintained by `/speckit.specify` and `/speckit.clarify`, while custom checklists remain reviewer-owned. Run it once to build everything, or scope it to one phase at a time for large features.
111111

112112
```text
113113
/speckit.implement

docs/reference/agentic-sdd.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ Creates or updates the project **constitution** — the guiding principles that
2323

2424
Creates or updates the feature **specification** from a natural-language description. Focus on the **what** and **why** — the user-facing behavior and goals — not the tech stack, which belongs in `/speckit.plan`.
2525

26+
This workflow may also maintain `checklists/requirements.md`, the built-in spec-quality checklist that `/speckit.specify` creates and `/speckit.clarify` re-evaluates. That lifecycle is separate from custom checklists generated by `/speckit.checklist`.
27+
2628
```text
2729
/speckit.specify Build an application that helps me organize photos into albums grouped by date, re-orderable by drag-and-drop on the main page, with a tile preview inside each album.
2830
```
@@ -37,6 +39,8 @@ Asks up to five targeted questions about underspecified areas of the current spe
3739

3840
Clarifying before planning keeps you from designing on top of ambiguity. If `/speckit.analyze` later surfaces requirement gaps, come back and run `/speckit.clarify` (or `/speckit.specify`) again.
3941

42+
When `checklists/requirements.md` exists, `/speckit.clarify` may update its evaluated state as part of tightening the spec. This exception applies only to the built-in requirements checklist, not to custom review checklists.
43+
4044
## `/speckit.plan`
4145

4246
Runs the planning process to generate design artifacts from the spec. This is where implementation detail belongs — provide your tech stack, architecture, and technical constraints as arguments.
@@ -49,6 +53,8 @@ Runs the planning process to generate design artifacts from the spec. This is wh
4953

5054
Generates a quality checklist for the feature — think of it as **"unit tests for your requirements."** Rather than testing code, it checks whether the spec itself is complete, clear, unambiguous, and consistent (for example: "Are the drag-and-drop rules defined for every column?", "Is behavior specified for a deleted assigned user?").
5155

56+
Custom checklists generated by this command are reviewer-owned requirements-quality review artifacts. An agent may help evaluate them when explicitly asked, but implementation must not silently self-approve them. In a custom checklist, `[x]` means the reviewer determined the requirements-quality criterion is satisfied; it does not mean implementation work is complete.
57+
5258
Run it with no arguments for a broad pass, or pass a focus area to target one aspect:
5359

5460
```text
@@ -59,7 +65,7 @@ Run it with no arguments for a broad pass, or pass a focus area to target one as
5965
/speckit.checklist Focus on the Kanban board interactions and comment permissions.
6066
```
6167

62-
Review the generated checklist. If it surfaces gaps, loop back to `/speckit.clarify` or `/speckit.specify` to tighten the spec before breaking the work down.
68+
Review the generated checklist. If it surfaces gaps, loop back to `/speckit.clarify` or `/speckit.specify` to tighten the spec before breaking the work down, then mark each custom checklist item `[x]` only after the requirements-quality criterion has been reviewed and satisfied.
6369

6470
## `/speckit.tasks`
6571

@@ -83,6 +89,8 @@ Run it before implementing, while the artifacts can still be adjusted cheaply. I
8389

8490
Executes the tasks in `tasks.md`, running each phase in dependency order and respecting parallel markers.
8591

92+
Before executing tasks, it reads checklist checkbox state as a gate. Checklist markers are read-only for this command: `/speckit.implement` counts checked and unchecked items and asks before proceeding when any are unchecked, but it must not change checklist markers. For custom checklists, checked items mean reviewer approval of requirements quality, not completed implementation work.
93+
8694
For a small feature, run it once to build everything:
8795

8896
```text

templates/checklist-template.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
**Created**: [DATE]
55
**Feature**: [Link to spec.md or relevant documentation]
66

7-
**Note**: This checklist is generated by the `__SPECKIT_COMMAND_CHECKLIST__` command based on feature context and requirements.
7+
**Note**: This custom checklist is generated by the `__SPECKIT_COMMAND_CHECKLIST__` command based on feature context and requirements.
8+
**Review Ownership**: This checklist is a reviewer-owned requirements-quality review artifact. Mark an item `[x]` only when the reviewer determines the requirements-quality criterion is satisfied.
9+
**Marker Semantics**: `[x]` means the criterion has been reviewed and satisfied for requirements quality. It does not mean implementation work is complete.
810

911
<!--
1012
============================================================================
@@ -34,7 +36,10 @@
3436

3537
## Notes
3638

37-
- Check items off as completed: `[x]`
39+
- Mark items `[x]` only after review confirms the requirement-quality criterion is satisfied
40+
- Leave items unchecked when they still require clarification, correction, or reviewer evaluation
41+
- `__SPECKIT_COMMAND_IMPLEMENT__` reads checklist checkbox state as a gate and must not modify markers
42+
- `checklists/requirements.md` has a separate built-in lifecycle maintained by `__SPECKIT_COMMAND_SPECIFY__` and `__SPECKIT_COMMAND_CLARIFY__`
3843
- Add comments or findings inline
3944
- Link to relevant resources or documentation
4045
- Items are numbered sequentially for easy reference

templates/commands/checklist.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,15 @@ scripts:
2727

2828
**Metaphor**: If your spec is code written in English, the checklist is its unit test suite. You're testing whether the requirements are well-written, complete, unambiguous, and ready for implementation - NOT whether the implementation works.
2929

30+
**Ownership and checkbox lifecycle**:
31+
32+
- Custom checklists generated by this command are reviewer-owned requirements-quality review artifacts.
33+
- `[x]` means the reviewer determined the requirements-quality criterion is satisfied.
34+
- `[x]` does NOT mean implementation work is complete.
35+
- This command generates or appends checklist items; it MUST NOT mark generated items `[x]`.
36+
- An agent may assist with evaluating items only when explicitly asked by the reviewer.
37+
- `checklists/requirements.md` is a separate built-in spec-quality checklist maintained by `__SPECKIT_COMMAND_SPECIFY__` and `__SPECKIT_COMMAND_CLARIFY__`; do not treat that exception as applying to custom checklists generated here.
38+
3039
## User Input
3140

3241
```text
@@ -136,6 +145,7 @@ You **MUST** consider the user input before proceeding (if not empty).
136145
- If file does NOT exist: Create new file and number items starting from CHK001
137146
- If file exists: Append new items to existing file, continuing from the last CHK ID (e.g., if last item is CHK015, start new items at CHK016)
138147
- Never delete or replace existing checklist content - always preserve and append
148+
- Leave every newly generated item unchecked (`[ ]`); checkbox state belongs to the reviewer
139149
140150
**CORE PRINCIPLE - Test the Requirements, Not the Implementation**:
141151
Every checklist item MUST evaluate the REQUIREMENTS THEMSELVES for:
@@ -245,7 +255,7 @@ You **MUST** consider the user input before proceeding (if not empty).
245255
- ✅ "Are [edge cases/scenarios] addressed in requirements?"
246256
- ✅ "Does the spec define [missing aspect]?"
247257
248-
7. **Structure Reference**: Generate the checklist following the canonical template in `templates/checklist-template.md` for title, meta section, category headings, and ID formatting. If template is unavailable, use: H1 title, purpose/created meta lines, `##` category sections containing `- [ ] CHK### <requirement item>` lines with globally incrementing IDs starting at CHK001.
258+
7. **Structure Reference**: Generate the checklist following the canonical template in `templates/checklist-template.md` for title, meta section, category headings, ownership note, notes section, and ID formatting. If template is unavailable, use: H1 title, purpose/created meta lines, an ownership note explaining that `[x]` means reviewer approval of requirements quality, `##` category sections containing `- [ ] CHK### <requirement item>` lines with globally incrementing IDs starting at CHK001, and notes that `__SPECKIT_COMMAND_IMPLEMENT__` reads checklist state but does not modify markers.
249259
250260
8. **Report**: Output full path to checklist file, item count, and summarize whether the run created a new file or appended to an existing one. Summarize:
251261
- Focus areas selected

templates/commands/implement.md

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -54,33 +54,36 @@ You **MUST** consider the user input before proceeding (if not empty).
5454
1. Run `{SCRIPT}` from repo root and parse FEATURE_DIR and AVAILABLE_DOCS list. All paths must be absolute. For single quotes in args like "I'm Groot", use escape syntax: e.g 'I'\''m Groot' (or double-quote if possible: "I'm Groot").
5555
5656
2. **Check checklists status** (if FEATURE_DIR/checklists/ exists):
57+
- Treat checklist markers as a read-only gate: scan checkbox state, report status, and ask before proceeding when needed; do NOT modify checklist files or markers
58+
- `checklists/requirements.md` is the built-in spec-quality checklist maintained by `__SPECKIT_COMMAND_SPECIFY__` and `__SPECKIT_COMMAND_CLARIFY__`; custom checklists generated by `__SPECKIT_COMMAND_CHECKLIST__` are reviewer-owned requirements-quality review artifacts
59+
- For custom checklists, `[x]` means the reviewer determined the requirements-quality criterion is satisfied; it does NOT mean implementation work is complete
5760
- Scan all checklist files in the checklists/ directory
5861
- For each checklist, count:
5962
- Total items: All lines matching `- [ ]` or `- [X]` or `- [x]`
60-
- Completed items: Lines matching `- [X]` or `- [x]`
61-
- Incomplete items: Lines matching `- [ ]`
63+
- Checked items: Lines matching `- [X]` or `- [x]`
64+
- Unchecked items: Lines matching `- [ ]`
6265
- Create a status table:
6366
6467
```text
65-
| Checklist | Total | Completed | Incomplete | Status |
66-
|-----------|-------|-----------|------------|--------|
67-
| ux.md | 12 | 12 | 0 | ✓ PASS |
68-
| test.md | 8 | 5 | 3 | ✗ FAIL |
69-
| security.md | 6 | 6 | 0 | ✓ PASS |
68+
| Checklist | Total | Checked | Unchecked | Status |
69+
|-----------|-------|---------|-----------|--------|
70+
| ux.md | 12 | 12 | 0 | ✓ PASS |
71+
| test.md | 8 | 5 | 3 | ✗ FAIL |
72+
| security.md | 6 | 6 | 0 | ✓ PASS |
7073
```
7174
7275
- Calculate overall status:
73-
- **PASS**: All checklists have 0 incomplete items
74-
- **FAIL**: One or more checklists have incomplete items
76+
- **PASS**: All checklists have 0 unchecked items
77+
- **FAIL**: One or more checklists have unchecked items
7578
76-
- **If any checklist is incomplete**:
77-
- Display the table with incomplete item counts
78-
- **STOP** and ask: "Some checklists are incomplete. Do you want to proceed with implementation anyway? (yes/no)"
79+
- **If any checklist has unchecked items**:
80+
- Display the table with unchecked item counts
81+
- **STOP** and ask: "Some checklists have unchecked items. Do you want to proceed with implementation anyway? (yes/no)"
7982
- Wait for user response before continuing
8083
- If user says "no" or "wait" or "stop", halt execution
8184
- If user says "yes" or "proceed" or "continue", proceed to step 3
8285
83-
- **If all checklists are complete**:
86+
- **If all checklists are checked**:
8487
- Display the table showing all checklists passed
8588
- Automatically proceed to step 3
8689

0 commit comments

Comments
 (0)