@leeovery/claude-technical-workflows 2.0.50 → 2.0.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/commands/link-dependencies.md +10 -10
- package/commands/workflow/start-implementation.md +119 -65
- package/commands/workflow/start-planning.md +2 -0
- package/package.json +1 -1
- package/scripts/discovery-for-implementation-and-review.sh +346 -0
- package/scripts/discovery-for-planning.sh +19 -0
- package/scripts/migrations/005-plan-external-deps-frontmatter.sh +231 -0
- package/skills/technical-discussion/SKILL.md +15 -0
- package/skills/technical-implementation/SKILL.md +91 -6
- package/skills/technical-planning/SKILL.md +30 -1
- package/skills/technical-planning/references/dependencies.md +23 -19
- package/skills/technical-planning/references/steps/resolve-dependencies.md +11 -11
- package/skills/technical-research/SKILL.md +15 -0
- package/skills/technical-review/SKILL.md +15 -0
- package/skills/technical-specification/SKILL.md +15 -0
- package/skills/technical-specification/references/specification-guide.md +0 -6
|
@@ -23,7 +23,6 @@ Either way: Execute via strict TDD - tests first, implementation second.
|
|
|
23
23
|
- **Plan format** (required) - How to parse tasks (from plan frontmatter)
|
|
24
24
|
- **Specification content** (optional) - For context when task rationale is unclear
|
|
25
25
|
- **Environment setup** (optional) - First-time setup instructions
|
|
26
|
-
- **Scope** (optional) - Specific phase/task to work on
|
|
27
26
|
|
|
28
27
|
**Before proceeding**, verify all required inputs are available and unambiguous. If anything is missing or unclear, **STOP** — do not proceed until resolved.
|
|
29
28
|
|
|
@@ -38,6 +37,21 @@ Either way: Execute via strict TDD - tests first, implementation second.
|
|
|
38
37
|
|
|
39
38
|
If no specification is available, the plan becomes the sole authority for design decisions.
|
|
40
39
|
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Resuming After Context Refresh
|
|
43
|
+
|
|
44
|
+
Context refresh (compaction) summarizes the conversation, losing procedural detail. When you detect a context refresh has occurred — the conversation feels abruptly shorter, you lack memory of recent steps, or a summary precedes this message — follow this recovery protocol:
|
|
45
|
+
|
|
46
|
+
1. **Re-read this skill file completely.** Do not rely on your summary of it. The full process, steps, and rules must be reloaded.
|
|
47
|
+
2. **Read all tracking and state files** for the current topic — plan index files, review tracking files, implementation tracking files, or any working documents this skill creates. These are your source of truth for progress.
|
|
48
|
+
3. **Check git state.** Run `git status` and `git log --oneline -10` to see recent commits. Commit messages follow a conventional pattern that reveals what was completed.
|
|
49
|
+
4. **Announce your position** to the user before continuing: what step you believe you're at, what's been completed, and what comes next. Wait for confirmation.
|
|
50
|
+
|
|
51
|
+
Do not guess at progress or continue from memory. The files on disk and git history are authoritative — your recollection is not.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
41
55
|
## Hard Rules
|
|
42
56
|
|
|
43
57
|
**MANDATORY. No exceptions. Violating these rules invalidates the work.**
|
|
@@ -77,19 +91,90 @@ Complete ALL setup steps before proceeding to implementation work.
|
|
|
77
91
|
|
|
78
92
|
3. **Read the TDD workflow** - Load **[tdd-workflow.md](references/tdd-workflow.md)** before writing any code. This is mandatory.
|
|
79
93
|
|
|
80
|
-
4. **
|
|
81
|
-
-
|
|
82
|
-
-
|
|
83
|
-
-
|
|
94
|
+
4. **Initialize or resume implementation tracking**
|
|
95
|
+
- Check if `docs/workflow/implementation/{topic}.md` exists
|
|
96
|
+
- **If not**: Create it with the initial tracking frontmatter (see [Implementation Tracking](#implementation-tracking) below), set `status: in-progress`, `started: {today}`. Commit: `impl({topic}): start implementation`
|
|
97
|
+
- **If exists**: Read it to determine current position (see [Resuming After Context Refresh](#resuming-after-context-refresh) below)
|
|
84
98
|
|
|
85
|
-
5. **For each phase
|
|
99
|
+
5. **For each phase** (working through phases and tasks in plan order):
|
|
86
100
|
- Announce phase start and review acceptance criteria
|
|
87
101
|
- For each task: follow the TDD cycle loaded in step 3
|
|
102
|
+
- After each task completes: update progress in **both** the output format (as loaded in step 2) **and** the implementation tracking file (see below)
|
|
88
103
|
- Verify all phase acceptance criteria met
|
|
89
104
|
- **Ask user before proceeding to next phase**
|
|
90
105
|
|
|
91
106
|
6. **Reference specification** when rationale unclear
|
|
92
107
|
|
|
108
|
+
## Implementation Tracking
|
|
109
|
+
|
|
110
|
+
Each topic has a tracking file at `docs/workflow/implementation/{topic}.md` that records progress programmatically (frontmatter) and as a human-readable summary (body).
|
|
111
|
+
|
|
112
|
+
### Initial Tracking File
|
|
113
|
+
|
|
114
|
+
When starting implementation for a topic, create:
|
|
115
|
+
|
|
116
|
+
```yaml
|
|
117
|
+
---
|
|
118
|
+
topic: {topic}
|
|
119
|
+
plan: ../planning/{topic}.md
|
|
120
|
+
format: {format from plan}
|
|
121
|
+
status: in-progress
|
|
122
|
+
current_phase: 1
|
|
123
|
+
current_task: ~
|
|
124
|
+
completed_phases: []
|
|
125
|
+
completed_tasks: []
|
|
126
|
+
started: YYYY-MM-DD
|
|
127
|
+
updated: YYYY-MM-DD
|
|
128
|
+
completed: ~
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
# Implementation: {Topic Name}
|
|
132
|
+
|
|
133
|
+
Implementation started.
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Updating Progress
|
|
137
|
+
|
|
138
|
+
When a task or phase completes, update **two** things:
|
|
139
|
+
|
|
140
|
+
1. **Output format progress** — Follow the output adapter's Implementation section (loaded in workflow step 2) to mark tasks/phases complete in the plan index file and any format-specific files. This is the plan's own progress tracking.
|
|
141
|
+
|
|
142
|
+
2. **Implementation tracking file** — Update `docs/workflow/implementation/{topic}.md` as described below. This enables cross-topic dependency resolution and resume detection.
|
|
143
|
+
|
|
144
|
+
**After each task completes (tracking file):**
|
|
145
|
+
- Append the task ID to `completed_tasks`
|
|
146
|
+
- Update `current_task` to the next task (or `~` if phase done)
|
|
147
|
+
- Update `updated` date
|
|
148
|
+
- Update the body progress section
|
|
149
|
+
|
|
150
|
+
**After each phase completes (tracking file):**
|
|
151
|
+
- Append the phase number to `completed_phases`
|
|
152
|
+
- Update `current_phase` to the next phase (or leave as last)
|
|
153
|
+
- Update the body progress section
|
|
154
|
+
|
|
155
|
+
**On implementation completion (tracking file):**
|
|
156
|
+
- Set `status: completed`
|
|
157
|
+
- Set `completed: {today}`
|
|
158
|
+
- Commit: `impl({topic}): complete implementation`
|
|
159
|
+
|
|
160
|
+
Task IDs in `completed_tasks` use whatever ID format the output format assigns -- the same IDs used in dependency references.
|
|
161
|
+
|
|
162
|
+
### Body Progress Section
|
|
163
|
+
|
|
164
|
+
The body provides a human-readable summary for context refresh:
|
|
165
|
+
|
|
166
|
+
```markdown
|
|
167
|
+
# Implementation: {Topic Name}
|
|
168
|
+
|
|
169
|
+
## Phase 1: Foundation
|
|
170
|
+
All tasks completed.
|
|
171
|
+
|
|
172
|
+
## Phase 2: Core Logic (current)
|
|
173
|
+
- Task 2.1: Service layer - done
|
|
174
|
+
- Task 2.2: Validation - done
|
|
175
|
+
- Task 2.3: Controllers (next)
|
|
176
|
+
```
|
|
177
|
+
|
|
93
178
|
## Progress Announcements
|
|
94
179
|
|
|
95
180
|
Keep user informed of progress:
|
|
@@ -22,6 +22,7 @@ Either way: Transform specifications into actionable phases, tasks, and acceptan
|
|
|
22
22
|
- **Specification content** (required) - The validated decisions and requirements to plan from
|
|
23
23
|
- **Topic name** (optional) - Will derive from specification if not provided
|
|
24
24
|
- **Output format preference** (optional) - Will ask if not specified
|
|
25
|
+
- **Recommended output format** (optional) - A format suggestion for consistency with existing plans
|
|
25
26
|
- **Cross-cutting references** (optional) - Cross-cutting specifications that inform technical decisions in this plan
|
|
26
27
|
|
|
27
28
|
**Before proceeding**, verify the required input is available and unambiguous. If anything is missing or unclear, **STOP** — do not proceed until resolved.
|
|
@@ -34,6 +35,19 @@ Either way: Transform specifications into actionable phases, tasks, and acceptan
|
|
|
34
35
|
|
|
35
36
|
---
|
|
36
37
|
|
|
38
|
+
## Resuming After Context Refresh
|
|
39
|
+
|
|
40
|
+
Context refresh (compaction) summarizes the conversation, losing procedural detail. When you detect a context refresh has occurred — the conversation feels abruptly shorter, you lack memory of recent steps, or a summary precedes this message — follow this recovery protocol:
|
|
41
|
+
|
|
42
|
+
1. **Re-read this skill file completely.** Do not rely on your summary of it. The full process, steps, and rules must be reloaded.
|
|
43
|
+
2. **Read all tracking and state files** for the current topic — plan index files, review tracking files, implementation tracking files, or any working documents this skill creates. These are your source of truth for progress.
|
|
44
|
+
3. **Check git state.** Run `git status` and `git log --oneline -10` to see recent commits. Commit messages follow a conventional pattern that reveals what was completed.
|
|
45
|
+
4. **Announce your position** to the user before continuing: what step you believe you're at, what's been completed, and what comes next. Wait for confirmation.
|
|
46
|
+
|
|
47
|
+
Do not guess at progress or continue from memory. The files on disk and git history are authoritative — your recollection is not.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
37
51
|
## The Process
|
|
38
52
|
|
|
39
53
|
This process constructs a plan from a specification. A plan consists of:
|
|
@@ -97,7 +111,21 @@ Read **[output-formats.md](references/output-formats.md)**, find the entry match
|
|
|
97
111
|
|
|
98
112
|
#### If no Plan Index File exists
|
|
99
113
|
|
|
100
|
-
First, choose the Output Format.
|
|
114
|
+
First, choose the Output Format.
|
|
115
|
+
|
|
116
|
+
**If a recommended output format was provided** (non-empty, not "none"):
|
|
117
|
+
|
|
118
|
+
Present the recommendation:
|
|
119
|
+
|
|
120
|
+
> "Existing plans use **{format}**. Use the same format for consistency?
|
|
121
|
+
> - **yes** — use {format}
|
|
122
|
+
> - **no** — see all available formats"
|
|
123
|
+
|
|
124
|
+
**STOP.** Wait for user choice. If declined, fall through to the full list below.
|
|
125
|
+
|
|
126
|
+
**If no recommendation, or user declined:**
|
|
127
|
+
|
|
128
|
+
Present the formats from **[output-formats.md](references/output-formats.md)** to the user — including description, pros, cons, and "best for". Number each format and ask the user to pick.
|
|
101
129
|
|
|
102
130
|
**STOP.** Wait for the user to choose.
|
|
103
131
|
|
|
@@ -118,6 +146,7 @@ cross_cutting_specs: # Omit if none
|
|
|
118
146
|
spec_commit: {output of git rev-parse HEAD}
|
|
119
147
|
created: YYYY-MM-DD # Use today's actual date
|
|
120
148
|
updated: YYYY-MM-DD # Use today's actual date
|
|
149
|
+
external_dependencies: []
|
|
121
150
|
planning:
|
|
122
151
|
phase: 1
|
|
123
152
|
task: ~
|
|
@@ -18,22 +18,26 @@ External dependencies are things a feature needs from other topics or systems th
|
|
|
18
18
|
|
|
19
19
|
## Format
|
|
20
20
|
|
|
21
|
-
In Plan Index Files, external dependencies
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
-
|
|
21
|
+
In Plan Index Files, external dependencies are stored in the **frontmatter** as a YAML array:
|
|
22
|
+
|
|
23
|
+
```yaml
|
|
24
|
+
external_dependencies:
|
|
25
|
+
- topic: billing-system
|
|
26
|
+
description: Invoice generation for order completion
|
|
27
|
+
state: unresolved
|
|
28
|
+
- topic: user-authentication
|
|
29
|
+
description: User context for permissions
|
|
30
|
+
state: resolved
|
|
31
|
+
task_id: auth-1-3
|
|
32
|
+
- topic: payment-gateway
|
|
33
|
+
description: Payment processing
|
|
34
|
+
state: satisfied_externally
|
|
29
35
|
```
|
|
30
36
|
|
|
31
|
-
If there are no external dependencies,
|
|
32
|
-
|
|
33
|
-
```markdown
|
|
34
|
-
## External Dependencies
|
|
37
|
+
If there are no external dependencies, use an empty array:
|
|
35
38
|
|
|
36
|
-
|
|
39
|
+
```yaml
|
|
40
|
+
external_dependencies: []
|
|
37
41
|
```
|
|
38
42
|
|
|
39
43
|
This makes it explicit for downstream stages that dependencies were considered and none exist.
|
|
@@ -42,16 +46,16 @@ This makes it explicit for downstream stages that dependencies were considered a
|
|
|
42
46
|
|
|
43
47
|
| State | Format | Meaning |
|
|
44
48
|
|-------|--------|---------|
|
|
45
|
-
|
|
|
46
|
-
|
|
|
47
|
-
|
|
|
49
|
+
| `unresolved` | `state: unresolved` | Dependency exists but not yet linked to a task |
|
|
50
|
+
| `resolved` | `state: resolved` + `task_id: {id}` | Linked to specific task in another plan |
|
|
51
|
+
| `satisfied_externally` | `state: satisfied_externally` | Implemented outside workflow |
|
|
48
52
|
|
|
49
53
|
## Lifecycle
|
|
50
54
|
|
|
51
55
|
```
|
|
52
56
|
SPECIFICATION PLANNING
|
|
53
57
|
───────────────────────────────────────────────────────────────────
|
|
54
|
-
Dependencies section →
|
|
58
|
+
Dependencies section → Added to plan frontmatter as unresolved
|
|
55
59
|
(natural language) ↓
|
|
56
60
|
Resolved when linked to specific task ID
|
|
57
61
|
(via planning or /link-dependencies)
|
|
@@ -59,11 +63,11 @@ Dependencies section → Copied to Plan Index File as unresolved
|
|
|
59
63
|
|
|
60
64
|
## Resolution
|
|
61
65
|
|
|
62
|
-
Dependencies move from unresolved → resolved when:
|
|
66
|
+
Dependencies move from `unresolved` → `resolved` when:
|
|
63
67
|
- The dependency topic is planned and you identify the specific task
|
|
64
68
|
- The `/link-dependencies` command finds and wires the match
|
|
65
69
|
|
|
66
|
-
Dependencies become
|
|
70
|
+
Dependencies become `satisfied_externally` when:
|
|
67
71
|
- The user confirms it was implemented outside the workflow
|
|
68
72
|
- It already exists in the codebase
|
|
69
73
|
- It's a third-party system that's already available
|
|
@@ -10,29 +10,29 @@ Orient the user:
|
|
|
10
10
|
|
|
11
11
|
After all phases are detailed and written, handle external dependencies — things this plan needs from other topics or systems.
|
|
12
12
|
|
|
13
|
+
Dependencies are stored in the plan's **frontmatter** as `external_dependencies`. See [dependencies.md](../dependencies.md) for the format and states.
|
|
14
|
+
|
|
13
15
|
#### If the specification has a Dependencies section
|
|
14
16
|
|
|
15
17
|
The specification's Dependencies section lists what this feature needs from outside its own scope. These must be documented in the plan so implementation knows what is blocked and what is available.
|
|
16
18
|
|
|
17
|
-
1. **Document each dependency** in the plan's
|
|
19
|
+
1. **Document each dependency** in the plan's `external_dependencies` frontmatter field using the format described in [dependencies.md](../dependencies.md). Initially, record each as `state: unresolved`.
|
|
18
20
|
|
|
19
21
|
2. **Resolve where possible** — For each dependency, check whether a plan already exists for that topic:
|
|
20
|
-
- If a plan exists, identify the specific task(s) that satisfy the dependency. Query the output format to find relevant tasks. If ambiguous, ask the user which tasks apply. Update the dependency entry from unresolved → resolved with the
|
|
21
|
-
- If no plan exists, leave the dependency as unresolved
|
|
22
|
+
- If a plan exists, identify the specific task(s) that satisfy the dependency. Query the output format to find relevant tasks. If ambiguous, ask the user which tasks apply. Update the dependency entry from `state: unresolved` → `state: resolved` with the `task_id`.
|
|
23
|
+
- If no plan exists, leave the dependency as `state: unresolved`. It will be linked later via `/link-dependencies` or when that topic is planned.
|
|
22
24
|
|
|
23
|
-
3. **Reverse check** — Check whether any existing plans have unresolved dependencies that reference *this* topic. Now that this plan exists with specific tasks:
|
|
24
|
-
- Scan other plan files for
|
|
25
|
+
3. **Reverse check** — Check whether any existing plans have unresolved dependencies in their `external_dependencies` frontmatter that reference *this* topic. Now that this plan exists with specific tasks:
|
|
26
|
+
- Scan other plan files' `external_dependencies` for entries that mention this topic
|
|
25
27
|
- For each match, identify which task(s) in the current plan satisfy that dependency
|
|
26
|
-
- Update the other plan's
|
|
28
|
+
- Update the other plan's `external_dependencies` entry with the task reference (`state: resolved`, `task_id`)
|
|
27
29
|
|
|
28
30
|
#### If the specification has no Dependencies section
|
|
29
31
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
```markdown
|
|
33
|
-
## External Dependencies
|
|
32
|
+
Set the frontmatter field to an empty array:
|
|
34
33
|
|
|
35
|
-
|
|
34
|
+
```yaml
|
|
35
|
+
external_dependencies: []
|
|
36
36
|
```
|
|
37
37
|
|
|
38
38
|
This makes it clear that dependencies were considered and none exist — not that they were overlooked.
|
|
@@ -28,6 +28,21 @@ Either way: Explore feasibility (technical, business, market), validate assumpti
|
|
|
28
28
|
- **Topic is vague or could go many directions?**
|
|
29
29
|
> "You mentioned {topic}. That could cover a lot of ground — is there a specific angle you'd like to start with, or should I explore broadly?"
|
|
30
30
|
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Resuming After Context Refresh
|
|
34
|
+
|
|
35
|
+
Context refresh (compaction) summarizes the conversation, losing procedural detail. When you detect a context refresh has occurred — the conversation feels abruptly shorter, you lack memory of recent steps, or a summary precedes this message — follow this recovery protocol:
|
|
36
|
+
|
|
37
|
+
1. **Re-read this skill file completely.** Do not rely on your summary of it. The full process, steps, and rules must be reloaded.
|
|
38
|
+
2. **Read all tracking and state files** for the current topic — plan index files, review tracking files, implementation tracking files, or any working documents this skill creates. These are your source of truth for progress.
|
|
39
|
+
3. **Check git state.** Run `git status` and `git log --oneline -10` to see recent commits. Commit messages follow a conventional pattern that reveals what was completed.
|
|
40
|
+
4. **Announce your position** to the user before continuing: what step you believe you're at, what's been completed, and what comes next. Wait for confirmation.
|
|
41
|
+
|
|
42
|
+
Do not guess at progress or continue from memory. The files on disk and git history are authoritative — your recollection is not.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
31
46
|
## Your Expertise
|
|
32
47
|
|
|
33
48
|
You bring knowledge across the full landscape:
|
|
@@ -41,6 +41,21 @@ Either way: Verify every plan task was implemented, tested adequately, and meets
|
|
|
41
41
|
|
|
42
42
|
The specification is optional — the review can proceed with just the plan.
|
|
43
43
|
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Resuming After Context Refresh
|
|
47
|
+
|
|
48
|
+
Context refresh (compaction) summarizes the conversation, losing procedural detail. When you detect a context refresh has occurred — the conversation feels abruptly shorter, you lack memory of recent steps, or a summary precedes this message — follow this recovery protocol:
|
|
49
|
+
|
|
50
|
+
1. **Re-read this skill file completely.** Do not rely on your summary of it. The full process, steps, and rules must be reloaded.
|
|
51
|
+
2. **Read all tracking and state files** for the current topic — plan index files, review tracking files, implementation tracking files, or any working documents this skill creates. These are your source of truth for progress.
|
|
52
|
+
3. **Check git state.** Run `git status` and `git log --oneline -10` to see recent commits. Commit messages follow a conventional pattern that reveals what was completed.
|
|
53
|
+
4. **Announce your position** to the user before continuing: what step you believe you're at, what's been completed, and what comes next. Wait for confirmation.
|
|
54
|
+
|
|
55
|
+
Do not guess at progress or continue from memory. The files on disk and git history are authoritative — your recollection is not.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
44
59
|
## Review Approach
|
|
45
60
|
|
|
46
61
|
Start from the **plan** - it contains the granular tasks and acceptance criteria.
|
|
@@ -39,6 +39,21 @@ Either way: Transform unvalidated reference material into a specification that's
|
|
|
39
39
|
|
|
40
40
|
**Multiple sources:** When multiple sources are provided, extract exhaustively from ALL of them. Content may be scattered across sources - a decision in one may have constraints or details in another. The specification consolidates everything into a single standalone document.
|
|
41
41
|
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Resuming After Context Refresh
|
|
45
|
+
|
|
46
|
+
Context refresh (compaction) summarizes the conversation, losing procedural detail. When you detect a context refresh has occurred — the conversation feels abruptly shorter, you lack memory of recent steps, or a summary precedes this message — follow this recovery protocol:
|
|
47
|
+
|
|
48
|
+
1. **Re-read this skill file completely.** Do not rely on your summary of it. The full process, steps, and rules must be reloaded.
|
|
49
|
+
2. **Read all tracking and state files** for the current topic — plan index files, review tracking files, implementation tracking files, or any working documents this skill creates. These are your source of truth for progress.
|
|
50
|
+
3. **Check git state.** Run `git status` and `git log --oneline -10` to see recent commits. Commit messages follow a conventional pattern that reveals what was completed.
|
|
51
|
+
4. **Announce your position** to the user before continuing: what step you believe you're at, what's been completed, and what comes next. Wait for confirmation.
|
|
52
|
+
|
|
53
|
+
Do not guess at progress or continue from memory. The files on disk and git history are authoritative — your recollection is not.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
42
57
|
## The Process
|
|
43
58
|
|
|
44
59
|
**Load**: [specification-guide.md](references/specification-guide.md)
|
|
@@ -295,12 +295,6 @@ Ask: **"Is there a standalone thing to build, or does this inform how we build o
|
|
|
295
295
|
|
|
296
296
|
**Trust nothing without validation**: Synthesize and present, but never assume source material is correct.
|
|
297
297
|
|
|
298
|
-
## After Context Refresh
|
|
299
|
-
|
|
300
|
-
Read the specification. It contains validated, approved content. Trust it - you built it together with the user.
|
|
301
|
-
|
|
302
|
-
If working notes exist, they show where you left off.
|
|
303
|
-
|
|
304
298
|
## Dependencies Section
|
|
305
299
|
|
|
306
300
|
At the end of every specification, add a **Dependencies** section that identifies **prerequisites** - systems that must exist before this feature can be built.
|