@leeovery/claude-technical-workflows 2.1.38 → 2.1.39
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/package.json +1 -1
- package/skills/start-feature/SKILL.md +4 -1
- package/skills/technical-implementation/SKILL.md +0 -16
- package/skills/technical-specification/SKILL.md +82 -50
- package/skills/technical-specification/references/dependencies.md +77 -0
- package/skills/technical-specification/references/exhaustive-extraction.md +29 -0
- package/skills/technical-specification/references/process-review-findings.md +170 -0
- package/skills/technical-specification/references/review-gap-analysis.md +84 -0
- package/skills/technical-specification/references/review-input.md +57 -0
- package/skills/technical-specification/references/review-tracking-format.md +66 -0
- package/skills/technical-specification/references/spec-completion.md +114 -0
- package/skills/technical-specification/references/spec-construction.md +109 -0
- package/skills/technical-specification/references/spec-review.md +154 -0
- package/skills/technical-specification/references/specification-format.md +166 -0
- package/skills/technical-specification/references/specification-principles.md +101 -0
- package/skills/technical-specification/references/verify-source-material.md +20 -0
- package/skills/.gitkeep +0 -0
- package/skills/technical-specification/references/specification-guide.md +0 -954
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Review Tracking Format
|
|
2
|
+
|
|
3
|
+
*Reference for **[spec-review](spec-review.md)***
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Review tracking files capture analysis findings so work persists across context refresh.
|
|
8
|
+
|
|
9
|
+
## Location
|
|
10
|
+
|
|
11
|
+
Store tracking files in the specification topic directory (`docs/workflow/specification/{topic}/`), cycle-numbered:
|
|
12
|
+
- `review-input-tracking-c{N}.md` — Phase 1 findings for cycle N
|
|
13
|
+
- `review-gap-analysis-tracking-c{N}.md` — Phase 2 findings for cycle N
|
|
14
|
+
|
|
15
|
+
Tracking files are **never deleted**. After all findings are processed, mark `status: complete`. Previous cycles' files persist as analysis history.
|
|
16
|
+
|
|
17
|
+
## Format
|
|
18
|
+
|
|
19
|
+
```markdown
|
|
20
|
+
---
|
|
21
|
+
status: in-progress | complete
|
|
22
|
+
created: YYYY-MM-DD
|
|
23
|
+
cycle: {N}
|
|
24
|
+
phase: Input Review | Gap Analysis
|
|
25
|
+
topic: [Topic Name]
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
# Review Tracking: [Topic Name] - [Phase]
|
|
29
|
+
|
|
30
|
+
## Findings
|
|
31
|
+
|
|
32
|
+
### 1. [Brief Title]
|
|
33
|
+
|
|
34
|
+
**Source**: [Where this came from — file/section reference, or "Specification analysis" for Gap Analysis]
|
|
35
|
+
**Category**: Enhancement to existing topic | New topic | Gap/Ambiguity
|
|
36
|
+
**Affects**: [Which section(s) of the specification]
|
|
37
|
+
|
|
38
|
+
**Details**:
|
|
39
|
+
[Explanation of what was found and why it matters]
|
|
40
|
+
|
|
41
|
+
**Proposed Addition**:
|
|
42
|
+
[What you would add to the specification — leave blank until discussed]
|
|
43
|
+
|
|
44
|
+
**Resolution**: Pending | Approved | Adjusted | Skipped
|
|
45
|
+
**Notes**: [Any discussion notes or adjustments made]
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
### 2. [Next Finding]
|
|
50
|
+
...
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Workflow with Tracking Files
|
|
54
|
+
|
|
55
|
+
1. Complete your analysis and create the tracking file with all findings
|
|
56
|
+
2. Commit the tracking file — ensures it survives context refresh
|
|
57
|
+
3. Present the summary to the user (from the tracking file)
|
|
58
|
+
4. Work through items one at a time:
|
|
59
|
+
- Present the item
|
|
60
|
+
- Discuss and refine
|
|
61
|
+
- Get approval
|
|
62
|
+
- Log to specification
|
|
63
|
+
- Update the tracking file: mark resolution, add notes
|
|
64
|
+
5. After all items resolved, mark tracking file `status: complete`
|
|
65
|
+
|
|
66
|
+
**Why tracking files**: If context refreshes mid-review, you can read the tracking file and continue where you left off. The tracking file shows which items are resolved and which remain. This is especially important when reviews surface 10-20 items that need individual discussion.
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Specification Completion
|
|
2
|
+
|
|
3
|
+
*Reference for **[technical-specification](../SKILL.md)***
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Step 1: Determine Specification Type
|
|
8
|
+
|
|
9
|
+
Before asking for sign-off, assess whether this is a **feature** or **cross-cutting** specification. See **[specification-format.md](specification-format.md)** for type definitions.
|
|
10
|
+
|
|
11
|
+
**Feature specification** — Something to build:
|
|
12
|
+
- Has concrete deliverables (code, APIs, UI)
|
|
13
|
+
- Can be planned with phases, tasks, acceptance criteria
|
|
14
|
+
- Results in a standalone implementation
|
|
15
|
+
|
|
16
|
+
**Cross-cutting specification** — Patterns/policies that inform other work:
|
|
17
|
+
- Defines "how to do things" rather than "what to build"
|
|
18
|
+
- Will be referenced by multiple feature specifications
|
|
19
|
+
- Implementation happens within features that apply these patterns
|
|
20
|
+
|
|
21
|
+
Present your assessment to the user:
|
|
22
|
+
|
|
23
|
+
> *Output the next fenced block as markdown (not a code block):*
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
This specification appears to be a **[feature/cross-cutting]** specification.
|
|
27
|
+
|
|
28
|
+
[Brief rationale — e.g., "It defines a caching strategy that will inform how multiple features handle data retrieval, rather than being a standalone piece of functionality to build."]
|
|
29
|
+
|
|
30
|
+
- **Feature specs** proceed to planning and implementation
|
|
31
|
+
- **Cross-cutting specs** are referenced by feature plans but don't have their own implementation plan
|
|
32
|
+
|
|
33
|
+
Does this assessment seem correct?
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**STOP.** Wait for user confirmation before proceeding.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Step 2: Verify Tracking Files Complete
|
|
41
|
+
|
|
42
|
+
Before proceeding to sign-off, confirm that all review tracking files across all cycles have `status: complete`:
|
|
43
|
+
|
|
44
|
+
- `review-input-tracking-c{N}.md` — should be marked complete after each Phase 1
|
|
45
|
+
- `review-gap-analysis-tracking-c{N}.md` — should be marked complete after each Phase 2
|
|
46
|
+
|
|
47
|
+
If any tracking file still shows `status: in-progress`, mark it complete now.
|
|
48
|
+
|
|
49
|
+
> **CHECKPOINT**: Do not proceed to sign-off if any tracking files still show `status: in-progress`. They indicate incomplete review work.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Step 3: Sign-Off
|
|
54
|
+
|
|
55
|
+
> *Output the next fenced block as markdown (not a code block):*
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
· · · · · · · · · · · ·
|
|
59
|
+
- **`y`/`yes`** — Conclude specification and mark as concluded
|
|
60
|
+
- **Comment** — Add context before concluding
|
|
61
|
+
· · · · · · · · · · · ·
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**STOP.** Wait for user response.
|
|
65
|
+
|
|
66
|
+
#### If comment
|
|
67
|
+
|
|
68
|
+
Discuss the user's context, apply any changes, then re-present the sign-off prompt above.
|
|
69
|
+
|
|
70
|
+
#### If yes
|
|
71
|
+
|
|
72
|
+
→ Proceed to **Step 4**.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Step 4: Update Frontmatter and Conclude
|
|
77
|
+
|
|
78
|
+
Update the specification frontmatter:
|
|
79
|
+
|
|
80
|
+
```yaml
|
|
81
|
+
---
|
|
82
|
+
topic: {topic-name}
|
|
83
|
+
status: concluded
|
|
84
|
+
type: feature # or cross-cutting, as confirmed
|
|
85
|
+
date: YYYY-MM-DD # Use today's actual date
|
|
86
|
+
review_cycle: {N}
|
|
87
|
+
finding_gate_mode: gated
|
|
88
|
+
---
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Specification is complete when:
|
|
92
|
+
- All topics have validated content
|
|
93
|
+
- All sources are marked as `incorporated`
|
|
94
|
+
- At least one review cycle completed with no findings, OR user explicitly chose to proceed past the re-loop prompt
|
|
95
|
+
- All review tracking files marked `status: complete`
|
|
96
|
+
- Type has been determined and confirmed
|
|
97
|
+
- User confirms the specification is complete
|
|
98
|
+
- No blocking gaps remain
|
|
99
|
+
|
|
100
|
+
Commit: `spec({topic}): conclude specification`
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Step 5: Handle Source Specifications
|
|
105
|
+
|
|
106
|
+
If any of your sources were **existing specifications** (as opposed to discussions, research, or other reference material), these have now been consolidated into the new specification.
|
|
107
|
+
|
|
108
|
+
1. Mark each source specification as superseded by updating its frontmatter:
|
|
109
|
+
```yaml
|
|
110
|
+
status: superseded
|
|
111
|
+
superseded_by: {new-specification-name}
|
|
112
|
+
```
|
|
113
|
+
2. Inform the user which files were updated
|
|
114
|
+
3. Commit: `spec({topic}): mark source specifications as superseded`
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
# Spec Construction
|
|
2
|
+
|
|
3
|
+
*Reference for **[technical-specification](../SKILL.md)***
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Follow stages A through F sequentially for each topic in the specification. Each topic completes a full cycle before the next begins.
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
A. Exhaustive extraction from sources
|
|
11
|
+
B. Synthesize and present for approval
|
|
12
|
+
C. Discuss and refine (if needed)
|
|
13
|
+
D. Approval gate
|
|
14
|
+
E. Log and commit
|
|
15
|
+
F. Topic complete → loop back to A or exit
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## A. Exhaustive Extraction
|
|
21
|
+
|
|
22
|
+
Load **[exhaustive-extraction.md](exhaustive-extraction.md)** and follow its instructions for the current topic.
|
|
23
|
+
|
|
24
|
+
When working with multiple sources, search each one — information about a single topic may be scattered across documents.
|
|
25
|
+
|
|
26
|
+
### Context Resurfacing
|
|
27
|
+
|
|
28
|
+
When extraction reveals information that affects **already-logged topics**, resurface them immediately. Even mid-discussion — interrupt, flag what you found, and discuss whether it changes anything.
|
|
29
|
+
|
|
30
|
+
If it does: summarize what's changing in the chat, then re-present the full updated topic. The summary is for discussion only — the specification just gets the clean replacement. **Standard workflow applies: user approves before you update.**
|
|
31
|
+
|
|
32
|
+
> **CHECKPOINT**: Even when resurfacing content, you MUST NOT update the specification until the user explicitly approves the change. Present the updated version, wait for approval, then update.
|
|
33
|
+
|
|
34
|
+
Better to resurface and confirm "already covered" than let something slip past.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## B. Synthesize and Present
|
|
39
|
+
|
|
40
|
+
Present your understanding to the user **in the format it would appear in the specification**:
|
|
41
|
+
|
|
42
|
+
> *Output the next fenced block as markdown (not a code block):*
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
Here's what I understand about [topic] based on the reference material. This is exactly what I'll write into the specification:
|
|
46
|
+
|
|
47
|
+
[content as rendered markdown]
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Then, **separately from the content above** (clear visual break):
|
|
51
|
+
|
|
52
|
+
> *Output the next fenced block as markdown (not a code block):*
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
· · · · · · · · · · · ·
|
|
56
|
+
**To proceed:**
|
|
57
|
+
- **`y`/`yes`** — Approved. I'll add the above to the specification **verbatim** (exactly as shown, no modifications).
|
|
58
|
+
- **Or tell me what to change.**
|
|
59
|
+
· · · · · · · · · · · ·
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Content and choices must be visually distinct (not run together).
|
|
63
|
+
|
|
64
|
+
> **CHECKPOINT**: After presenting, you MUST STOP and wait for the user's response. Do NOT proceed to logging. Do NOT present the next topic. WAIT.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## C. Discuss and Refine
|
|
69
|
+
|
|
70
|
+
Work through the content together:
|
|
71
|
+
- Validate what's accurate
|
|
72
|
+
- Remove what's wrong, outdated, or hallucinated
|
|
73
|
+
- Add what's missing through brief discussion
|
|
74
|
+
- **Course correct** based on knowledge from subsequent project work
|
|
75
|
+
- Refine wording and structure
|
|
76
|
+
|
|
77
|
+
This is a **human-level conversation**, not form-filling. The user brings context from across the project that may not be in the reference material — decisions from other topics, implications from later work, or knowledge that can't all fit in context.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## D. Approval Gate
|
|
82
|
+
|
|
83
|
+
**DO NOT PROCEED TO LOGGING WITHOUT EXPLICIT USER APPROVAL.**
|
|
84
|
+
|
|
85
|
+
If you are uncertain whether the user approved, **ASK**: "Ready to log it, or do you want to change something?"
|
|
86
|
+
|
|
87
|
+
> **CHECKPOINT**: If you are about to write to the specification and the user's last message was not explicit approval, **STOP**. Present the choices again.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## E. Log and Commit
|
|
92
|
+
|
|
93
|
+
1. Write to the specification — **verbatim** as presented and approved. No silent modifications.
|
|
94
|
+
2. After completing exhaustive extraction from a source (all relevant content presented and logged), update that source's status to `incorporated` in the specification frontmatter. See **[specification-format.md](specification-format.md)** for source status details.
|
|
95
|
+
3. Commit at natural breaks — after significant exchanges, after each major topic, and before any context refresh.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## F. Topic Complete
|
|
100
|
+
|
|
101
|
+
This is the end of this iteration.
|
|
102
|
+
|
|
103
|
+
#### If additional topics remain
|
|
104
|
+
|
|
105
|
+
→ Proceed to **A. Exhaustive Extraction** and follow the instructions as written.
|
|
106
|
+
|
|
107
|
+
#### If all topics are covered
|
|
108
|
+
|
|
109
|
+
→ Return to **[technical-specification SKILL.md](../SKILL.md)** for **Step 5**.
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Specification Review
|
|
2
|
+
|
|
3
|
+
*Reference for **[technical-specification](../SKILL.md)***
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Two-phase review of the specification. Phase 1 (Input Review) compares against source material. Phase 2 (Gap Analysis) reviews the specification as a standalone document.
|
|
8
|
+
|
|
9
|
+
**Why this matters**: The specification is the golden document. Plans are built from it, and those plans inform implementation. If a detail isn't in the specification, it won't make it to the plan, and therefore won't be built. Worse, the implementation agent may hallucinate to fill gaps, potentially getting it wrong. The goal is a specification robust enough that an agent or human could pick it up, create plans, break it into tasks, and write the code.
|
|
10
|
+
|
|
11
|
+
Load **[review-tracking-format.md](review-tracking-format.md)** — internalize the tracking file format for both phases.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## A. Cycle Management
|
|
16
|
+
|
|
17
|
+
Check the `review_cycle` field in the specification frontmatter.
|
|
18
|
+
|
|
19
|
+
#### If `review_cycle` is 0 or not set
|
|
20
|
+
|
|
21
|
+
Set `review_cycle: 1` in the specification frontmatter.
|
|
22
|
+
|
|
23
|
+
#### If `review_cycle` is already set
|
|
24
|
+
|
|
25
|
+
Increment `review_cycle` by 1.
|
|
26
|
+
|
|
27
|
+
Record the current cycle number — used for tracking file naming (`c{N}`).
|
|
28
|
+
|
|
29
|
+
Commit the updated frontmatter.
|
|
30
|
+
|
|
31
|
+
→ If `review_cycle <= 3`, proceed to **B. Phase 1 — Input Review**.
|
|
32
|
+
|
|
33
|
+
#### If `review_cycle > 3`
|
|
34
|
+
|
|
35
|
+
**Do NOT skip review autonomously.** This gate is an escape hatch for the user — not a signal to stop. The expected default is to continue running review until no issues are found. Present the choice and let the user decide.
|
|
36
|
+
|
|
37
|
+
> *Output the next fenced block as a code block:*
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
Review cycle {N}
|
|
41
|
+
|
|
42
|
+
Review has run {N-1} times so far. You can continue (recommended if issues
|
|
43
|
+
were still found last cycle) or skip to completion.
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
> *Output the next fenced block as markdown (not a code block):*
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
· · · · · · · · · · · ·
|
|
50
|
+
- **`p`/`proceed`** — Continue review *(default)*
|
|
51
|
+
- **`s`/`skip`** — Skip review, proceed to completion
|
|
52
|
+
· · · · · · · · · · · ·
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**STOP.** Wait for user choice. You MUST NOT choose on the user's behalf.
|
|
56
|
+
|
|
57
|
+
#### If `proceed`
|
|
58
|
+
|
|
59
|
+
→ Continue to **B. Phase 1 — Input Review**.
|
|
60
|
+
|
|
61
|
+
#### If `skip`
|
|
62
|
+
|
|
63
|
+
→ Jump to **E. Completion**.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## B. Phase 1 — Input Review
|
|
68
|
+
|
|
69
|
+
1. Load **[review-input.md](review-input.md)** and follow its instructions (analysis + tracking file creation).
|
|
70
|
+
2. Load **[process-review-findings.md](process-review-findings.md)** and follow its instructions to process findings with the user.
|
|
71
|
+
|
|
72
|
+
→ Proceed to **C. Phase 2 — Gap Analysis**.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## C. Phase 2 — Gap Analysis
|
|
77
|
+
|
|
78
|
+
1. Load **[review-gap-analysis.md](review-gap-analysis.md)** and follow its instructions (analysis + tracking file creation).
|
|
79
|
+
2. Load **[process-review-findings.md](process-review-findings.md)** and follow its instructions to process findings with the user.
|
|
80
|
+
|
|
81
|
+
→ Proceed to **D. Re-Loop Prompt**.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## D. Re-Loop Prompt
|
|
86
|
+
|
|
87
|
+
#### If no findings were surfaced in either phase of this cycle
|
|
88
|
+
|
|
89
|
+
→ Skip the re-loop prompt and proceed directly to **E. Completion** (nothing to re-analyse).
|
|
90
|
+
|
|
91
|
+
#### If findings were surfaced
|
|
92
|
+
|
|
93
|
+
Check `finding_gate_mode` and `review_cycle` in the specification frontmatter.
|
|
94
|
+
|
|
95
|
+
#### If `finding_gate_mode: auto` and `review_cycle < 5`
|
|
96
|
+
|
|
97
|
+
> *Output the next fenced block as a code block:*
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
Review cycle {N} complete — findings applied. Running follow-up cycle.
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
→ Return to **A. Cycle Management**.
|
|
104
|
+
|
|
105
|
+
#### If `finding_gate_mode: auto` and `review_cycle >= 5`
|
|
106
|
+
|
|
107
|
+
> *Output the next fenced block as a code block:*
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
Review cycle {N}
|
|
111
|
+
|
|
112
|
+
Auto-review has not converged after 5 cycles — escalating for human review.
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
→ Present the gated re-loop prompt below.
|
|
116
|
+
|
|
117
|
+
#### If `finding_gate_mode: gated`
|
|
118
|
+
|
|
119
|
+
> *Output the next fenced block as markdown (not a code block):*
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
· · · · · · · · · · · ·
|
|
123
|
+
- **`r`/`reanalyse`** — Run another review cycle (Phase 1 + Phase 2)
|
|
124
|
+
- **`p`/`proceed`** — Proceed to completion
|
|
125
|
+
· · · · · · · · · · · ·
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**STOP.** Wait for user response.
|
|
129
|
+
|
|
130
|
+
#### If reanalyse
|
|
131
|
+
|
|
132
|
+
→ Return to **A. Cycle Management** to begin a fresh cycle.
|
|
133
|
+
|
|
134
|
+
#### If proceed
|
|
135
|
+
|
|
136
|
+
→ Continue to **E. Completion**.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## E. Completion
|
|
141
|
+
|
|
142
|
+
1. **Verify tracking files are marked complete** — All input review and gap analysis tracking files across all cycles must have `status: complete`.
|
|
143
|
+
|
|
144
|
+
> **CHECKPOINT**: Do not confirm completion if any tracking files still show `status: in-progress`. They indicate incomplete review work.
|
|
145
|
+
|
|
146
|
+
2. **Commit** all review tracking files: `spec({topic}): complete specification review (cycle {N})`
|
|
147
|
+
|
|
148
|
+
> *Output the next fenced block as a code block:*
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
Specification review complete — {N} cycle(s), all tracking files finalised.
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
→ Return to **[technical-specification SKILL.md](../SKILL.md)** for **Step 7**.
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# Specification Format
|
|
2
|
+
|
|
3
|
+
*Reference for **[technical-specification](../SKILL.md)***
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
This file defines the canonical structure for specification files (`docs/workflow/specification/{topic}/specification.md`).
|
|
8
|
+
|
|
9
|
+
The specification is a single file per topic. Structure is **flexible** — organize around phases and subject matter, not rigid sections. This is a working document.
|
|
10
|
+
|
|
11
|
+
> **CHECKPOINT**: You should NOT be creating or writing to this file unless you have explicit user approval for specific content. If you're about to create this file with content you haven't presented and had approved, **STOP**. That violates the workflow.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Frontmatter
|
|
16
|
+
|
|
17
|
+
```yaml
|
|
18
|
+
---
|
|
19
|
+
topic: {topic-name}
|
|
20
|
+
status: in-progress
|
|
21
|
+
type: feature
|
|
22
|
+
date: YYYY-MM-DD
|
|
23
|
+
review_cycle: 0
|
|
24
|
+
finding_gate_mode: gated
|
|
25
|
+
sources:
|
|
26
|
+
- name: {source-name}
|
|
27
|
+
status: pending
|
|
28
|
+
---
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
| Field | Set when |
|
|
32
|
+
|-------|----------|
|
|
33
|
+
| `topic` | Spec creation (Step 2) — kebab-case identifier matching the directory name |
|
|
34
|
+
| `status` | Spec creation → `in-progress`; conclusion → `concluded` |
|
|
35
|
+
| `type` | Spec creation → `feature` (default); completion → `feature` or `cross-cutting` |
|
|
36
|
+
| `date` | Spec creation — today's date; update on each commit |
|
|
37
|
+
| `review_cycle` | Starts at 0; incremented each review cycle. Missing field treated as 0. |
|
|
38
|
+
| `finding_gate_mode` | Spec creation → `gated`; user opts in → `auto` |
|
|
39
|
+
| `sources` | Spec creation — all sources as `pending`; updated as extraction completes |
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Body
|
|
44
|
+
|
|
45
|
+
```markdown
|
|
46
|
+
# Specification: [Topic Name]
|
|
47
|
+
|
|
48
|
+
## Specification
|
|
49
|
+
|
|
50
|
+
[Validated content accumulates here, organized by topic/phase]
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Working Notes
|
|
55
|
+
|
|
56
|
+
[Optional - capture in-progress discussion if needed]
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Sources and Incorporation Status
|
|
62
|
+
|
|
63
|
+
**All specifications must track their sources**, even when built from a single source. This enables proper tracking when additional material is later added.
|
|
64
|
+
|
|
65
|
+
Track each source with its incorporation status:
|
|
66
|
+
|
|
67
|
+
```yaml
|
|
68
|
+
sources:
|
|
69
|
+
- name: auth-flow
|
|
70
|
+
status: incorporated
|
|
71
|
+
- name: api-design
|
|
72
|
+
status: pending
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**Status values:**
|
|
76
|
+
- `pending` — Source has been selected but content extraction is not complete
|
|
77
|
+
- `incorporated` — Source content has been fully extracted and woven into the specification
|
|
78
|
+
|
|
79
|
+
**When to update source status:**
|
|
80
|
+
|
|
81
|
+
1. **When creating the specification**: All sources start as `pending`
|
|
82
|
+
2. **After completing exhaustive extraction from a source**: Mark that source as `incorporated`
|
|
83
|
+
3. **When adding a new source to an existing spec**: Add it with `status: pending`
|
|
84
|
+
|
|
85
|
+
**How to determine if a source is incorporated:**
|
|
86
|
+
|
|
87
|
+
A source is `incorporated` when you have:
|
|
88
|
+
- Performed exhaustive extraction (reviewed ALL content in the source for relevant material)
|
|
89
|
+
- Presented and logged all relevant content from that source
|
|
90
|
+
- No more content from that source needs to be extracted
|
|
91
|
+
|
|
92
|
+
**Important**: The specification's overall `status: concluded` should only be set when:
|
|
93
|
+
- All sources are marked as `incorporated`
|
|
94
|
+
- Both review phases are complete
|
|
95
|
+
- User has signed off
|
|
96
|
+
|
|
97
|
+
If a new source is added to a concluded specification (via grouping analysis), the specification effectively needs updating — even if the file still says `status: concluded`, the presence of `pending` sources indicates work remains.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## Specification Types
|
|
102
|
+
|
|
103
|
+
The `type` field distinguishes between specifications that result in standalone implementation work versus those that inform how other work is done.
|
|
104
|
+
|
|
105
|
+
### Feature Specifications (`type: feature`)
|
|
106
|
+
|
|
107
|
+
Feature specifications describe something to **build** — a concrete piece of functionality with its own implementation plan.
|
|
108
|
+
|
|
109
|
+
**Examples:**
|
|
110
|
+
- User authentication system
|
|
111
|
+
- Order processing pipeline
|
|
112
|
+
- Notification service
|
|
113
|
+
- Dashboard analytics
|
|
114
|
+
|
|
115
|
+
**Characteristics:**
|
|
116
|
+
- Results in a dedicated implementation plan
|
|
117
|
+
- Has concrete deliverables (code, APIs, UI)
|
|
118
|
+
- Can be planned with phases, tasks, and acceptance criteria
|
|
119
|
+
- Progress is measurable ("the feature is done")
|
|
120
|
+
|
|
121
|
+
**This is the default type.** If not specified, assume `feature`.
|
|
122
|
+
|
|
123
|
+
### Cross-Cutting Specifications (`type: cross-cutting`)
|
|
124
|
+
|
|
125
|
+
Cross-cutting specifications describe **patterns, policies, or architectural decisions** that inform how features are built. They don't result in standalone implementation — instead, they're referenced by feature specifications and plans.
|
|
126
|
+
|
|
127
|
+
**Examples:**
|
|
128
|
+
- Caching strategy
|
|
129
|
+
- Rate limiting policy
|
|
130
|
+
- Error handling conventions
|
|
131
|
+
- Logging and observability standards
|
|
132
|
+
- API versioning approach
|
|
133
|
+
- Security patterns
|
|
134
|
+
|
|
135
|
+
**Characteristics:**
|
|
136
|
+
- Does NOT result in a dedicated implementation plan
|
|
137
|
+
- Defines "how to do things" rather than "what to build"
|
|
138
|
+
- Referenced by multiple feature specifications
|
|
139
|
+
- Implementation happens within features that apply these patterns
|
|
140
|
+
- No standalone "done" state — the patterns are applied across features
|
|
141
|
+
|
|
142
|
+
### Why This Matters
|
|
143
|
+
|
|
144
|
+
Cross-cutting specifications go through the same validation phases. The decisions are just as important to validate and document. The difference is what happens after:
|
|
145
|
+
|
|
146
|
+
- **Feature specs** → Planning → Implementation → Review
|
|
147
|
+
- **Cross-cutting specs** → Referenced by feature plans → Applied during feature implementation
|
|
148
|
+
|
|
149
|
+
When planning a feature, the planning process surfaces relevant cross-cutting specifications as context. This ensures that a "user authentication" plan incorporates the validated caching strategy and error handling conventions.
|
|
150
|
+
|
|
151
|
+
### Determining the Type
|
|
152
|
+
|
|
153
|
+
Ask: **"Is there a standalone thing to build, or does this inform how we build other things?"**
|
|
154
|
+
|
|
155
|
+
| Question | Feature | Cross-Cutting |
|
|
156
|
+
|----------|---------|---------------|
|
|
157
|
+
| Can you demo it when done? | Yes — "here's the login page" | No — it's invisible infrastructure |
|
|
158
|
+
| Does it have its own UI/API/data? | Yes | No — lives within other features |
|
|
159
|
+
| Can you plan phases and tasks for it? | Yes | Tasks would be "apply X to feature Y" |
|
|
160
|
+
| Is it used by one feature or many? | Usually one | By definition, multiple |
|
|
161
|
+
|
|
162
|
+
**Edge cases:**
|
|
163
|
+
- A "caching service" that provides shared caching infrastructure → **Feature** (you're building something)
|
|
164
|
+
- "How we use caching across the app" → **Cross-cutting** (policy/pattern)
|
|
165
|
+
- Authentication system → **Feature**
|
|
166
|
+
- Authentication patterns and security requirements → **Cross-cutting**
|