sdlc-framework 1.0.2 → 2.1.0
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/README.md +41 -16
- package/bin/install.js +6 -5
- package/package.json +2 -2
- package/src/commands/close.md +21 -7
- package/src/commands/debug.md +2 -2
- package/src/commands/discuss.md +81 -0
- package/src/commands/fast.md +50 -5
- package/src/commands/help.md +15 -10
- package/src/commands/impl.md +2 -2
- package/src/commands/init.md +21 -5
- package/src/commands/review.md +2 -2
- package/src/commands/spec.md +2 -2
- package/src/commands/status.md +57 -91
- package/src/commands/transition.md +99 -0
- package/src/commands/verify.md +2 -2
- package/src/references/prompt-detection.md +1 -1
- package/src/templates/PRD.md +89 -0
- package/src/workflows/close-phase.md +1 -1
- package/src/workflows/discuss-phase.md +195 -0
- package/src/workflows/fast-forward.md +58 -7
- package/src/workflows/init-project.md +1 -1
- package/src/workflows/status-session.md +206 -0
- package/src/workflows/transition-phase.md +3 -3
- package/src/commands/hotfix.md +0 -99
- package/src/commands/milestone.md +0 -136
- package/src/commands/pause.md +0 -115
- package/src/commands/resume.md +0 -103
- package/src/workflows/hotfix-flow.md +0 -190
- package/src/workflows/milestone-management.md +0 -169
- package/src/workflows/pause-work.md +0 -153
- package/src/workflows/resume-project.md +0 -159
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
<purpose>The universal entry point workflow. Accept a plain language description, classify the work, estimate complexity, and either execute inline (simple work) or route to the appropriate specialized command
|
|
1
|
+
<purpose>The universal entry point workflow. Accept a plain language description, classify the work, estimate complexity, and either execute inline (simple work), handle critical issues as inline hotfixes, or route to the appropriate specialized command. This is the "just tell me what to do" workflow.</purpose>
|
|
2
2
|
<when_to_use>Use anytime. This is the default way to start work. The user describes what they need, and this workflow figures out the rest. No prior knowledge of SDLC commands required.</when_to_use>
|
|
3
3
|
<required_reading>.sdlc/STATE.md, .sdlc/PROJECT.md, .sdlc/LAWS.md</required_reading>
|
|
4
4
|
<loop_context>
|
|
5
|
-
expected_phase: FAST (compressed loop or routing)
|
|
5
|
+
expected_phase: FAST (compressed loop, inline hotfix, or routing)
|
|
6
6
|
prior_phase: any (fast can be used between loops or as the first action)
|
|
7
|
-
next_phase: depends on routing — SPEC, DEBUG,
|
|
7
|
+
next_phase: depends on routing — SPEC, DEBUG, RESEARCH, DISCUSS, or self-contained
|
|
8
8
|
</loop_context>
|
|
9
9
|
<references>
|
|
10
10
|
@~/.claude/sdlc-framework/references/prompt-detection.md
|
|
@@ -49,10 +49,9 @@
|
|
|
49
49
|
|
|
50
50
|
1. CRITICAL — urgent production issues
|
|
51
51
|
Indicators: "urgent", "production", "down", "outage", "critical", "P0", "hotfix", "emergency", "ASAP"
|
|
52
|
-
Route:
|
|
53
|
-
Display: "Critical issue detected.
|
|
54
|
-
|
|
55
|
-
STOP this workflow.
|
|
52
|
+
Route: inline hotfix (skip to inline_hotfix step)
|
|
53
|
+
Display: "Critical issue detected. Running inline hotfix — minimal spec, full verification."
|
|
54
|
+
Do NOT stop — proceed to inline_hotfix step.
|
|
56
55
|
|
|
57
56
|
2. BUG — something broken that needs debugging
|
|
58
57
|
Indicators: "fix bug", "broken", "crash", "error when", "fails to", "wrong output", "regression", "not working", "throws", "exception"
|
|
@@ -337,4 +336,56 @@
|
|
|
337
336
|
WHY: Fast is a side-quest. It records what happened (audit trail) but does not disrupt the main loop state.
|
|
338
337
|
</step>
|
|
339
338
|
|
|
339
|
+
<step name="inline_hotfix" priority="tenth">
|
|
340
|
+
ONLY IF classification = CRITICAL. Emergency fix with minimal ceremony, maximum verification.
|
|
341
|
+
|
|
342
|
+
A. TRIAGE:
|
|
343
|
+
Ask 3 questions:
|
|
344
|
+
- "What is broken? (specific symptom)"
|
|
345
|
+
- "What is the impact? (who is affected)"
|
|
346
|
+
- "When did it start? (recent deploy, config change)"
|
|
347
|
+
|
|
348
|
+
Classify severity:
|
|
349
|
+
- P0: system down, critical path unavailable
|
|
350
|
+
- P1: data corruption, security breach, data loss
|
|
351
|
+
- P2: major feature broken but system is up
|
|
352
|
+
|
|
353
|
+
If not P0/P1: Display "This may not be critical. Consider /sdlc:debug instead." Let user override.
|
|
354
|
+
|
|
355
|
+
Save current STATE.md position — hotfix restores it when done.
|
|
356
|
+
|
|
357
|
+
B. 3-LINE INLINE SPEC:
|
|
358
|
+
- Line 1: WHAT is broken (from triage)
|
|
359
|
+
- Line 2: WHERE is the likely location (quick Grep search)
|
|
360
|
+
- Line 3: WHAT the fix should achieve (expected behavior)
|
|
361
|
+
Display but do NOT wait for approval — speed matters.
|
|
362
|
+
Boundary: fix ONLY the critical issue. No refactoring. No cleanup.
|
|
363
|
+
|
|
364
|
+
C. FIX DIRECTLY:
|
|
365
|
+
- Single-threaded, no sub-agents
|
|
366
|
+
- Read relevant files, apply MINIMAL fix
|
|
367
|
+
- Engineering laws still apply (no empty catch, no hardcoded secrets)
|
|
368
|
+
- Add regression test for the specific failure
|
|
369
|
+
- Mark debt with TODO(hotfix-{date})
|
|
370
|
+
|
|
371
|
+
D. FULL VERIFICATION:
|
|
372
|
+
- Run FULL test suite (all tests, not just affected)
|
|
373
|
+
- For UI: Playwright verification
|
|
374
|
+
- If any fail: fix before proceeding
|
|
375
|
+
|
|
376
|
+
E. FULL REVIEW:
|
|
377
|
+
- Check all modified files against engineering laws
|
|
378
|
+
- Security blockers still block even in emergencies
|
|
379
|
+
- Warnings acceptable for hotfixes
|
|
380
|
+
|
|
381
|
+
F. RECORD:
|
|
382
|
+
- Hotfix number = {phase}.{count+1} (e.g., 02.1, 02.2)
|
|
383
|
+
- Create .sdlc/phases/{phase}/HOTFIX-{number}-SUMMARY.md
|
|
384
|
+
- Update STATE.md: restore prior state, add history entry
|
|
385
|
+
- Update ROADMAP.md: note hotfix under current phase
|
|
386
|
+
- Display completion summary with verification results
|
|
387
|
+
|
|
388
|
+
WHY: Hotfixes trade planning ceremony for speed, but never trade verification or review. The inline approach avoids command-switching overhead during emergencies while maintaining quality gates.
|
|
389
|
+
</step>
|
|
390
|
+
|
|
340
391
|
</process>
|
|
@@ -152,7 +152,7 @@
|
|
|
152
152
|
| ... | ... | ... | ... |
|
|
153
153
|
|
|
154
154
|
## Future Milestones
|
|
155
|
-
{Leave blank — added via /sdlc:milestone}
|
|
155
|
+
{Leave blank — added via /sdlc:init milestone <name>}
|
|
156
156
|
```
|
|
157
157
|
|
|
158
158
|
WHY: The roadmap gives structure to the work. Without it, specs are disconnected tasks with no arc. The phase structure ensures work builds on itself in a logical order.
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
<purpose>Show loop position, save session context (pause), or restore session context (resume). Consolidates status, pause, and resume into a single workflow. The state machine always knows the next action — this workflow surfaces it.</purpose>
|
|
2
|
+
<when_to_use>Run anytime. No-arg for status. "pause" before a break. "resume" when returning. Can run at any loop position.</when_to_use>
|
|
3
|
+
<required_reading>.sdlc/STATE.md, .sdlc/ROADMAP.md</required_reading>
|
|
4
|
+
<loop_context>
|
|
5
|
+
expected_phase: any (status/pause/resume work at any loop position)
|
|
6
|
+
prior_phase: current position is preserved
|
|
7
|
+
next_phase: determined by STATE.md
|
|
8
|
+
</loop_context>
|
|
9
|
+
<process>
|
|
10
|
+
|
|
11
|
+
<step name="determine_mode" priority="first">
|
|
12
|
+
Parse $ARGUMENTS to determine the mode.
|
|
13
|
+
|
|
14
|
+
IF $ARGUMENTS is empty or not "pause"/"resume": MODE = STATUS
|
|
15
|
+
IF $ARGUMENTS starts with "pause": MODE = PAUSE. Extract optional reason.
|
|
16
|
+
IF $ARGUMENTS starts with "resume": MODE = RESUME. Extract optional handoff path.
|
|
17
|
+
|
|
18
|
+
Read .sdlc/STATE.md.
|
|
19
|
+
|
|
20
|
+
IF .sdlc/ does not exist:
|
|
21
|
+
Display: "Framework not initialized. Run /sdlc:init first."
|
|
22
|
+
STOP.
|
|
23
|
+
|
|
24
|
+
Extract: loop_position, current_milestone, current_phase, current_plan, next_required_action, blockers, deferred_issues.
|
|
25
|
+
|
|
26
|
+
WHY: One entry point with three modes eliminates the need for three separate commands. The state file is the single source of truth regardless of mode.
|
|
27
|
+
</step>
|
|
28
|
+
|
|
29
|
+
<step name="show_status" priority="second">
|
|
30
|
+
ONLY IF MODE = STATUS.
|
|
31
|
+
|
|
32
|
+
Read .sdlc/ROADMAP.md for milestone progress data.
|
|
33
|
+
|
|
34
|
+
Display the core loop with current position highlighted:
|
|
35
|
+
```
|
|
36
|
+
SDLC Loop Position:
|
|
37
|
+
|
|
38
|
+
SPEC ──→ IMPLEMENT ──→ VERIFY ──→ REVIEW ──→ CLOSE
|
|
39
|
+
│ │
|
|
40
|
+
└──────────────── next cycle ←─────────────────┘
|
|
41
|
+
|
|
42
|
+
Current: [IMPLEMENT] ◄── YOU ARE HERE
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Use `[PHASE]` brackets around the current position.
|
|
46
|
+
If in DEBUG, show as a side branch off IMPLEMENT.
|
|
47
|
+
|
|
48
|
+
Display project context:
|
|
49
|
+
```
|
|
50
|
+
Milestone: {name} ({completed_phases}/{total_phases} phases)
|
|
51
|
+
Phase: {name}
|
|
52
|
+
Plan: {name or "none — run /sdlc:spec"}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Calculate and display progress bar from ROADMAP.md:
|
|
56
|
+
```
|
|
57
|
+
Progress: [████████░░░░░░░░░░░░] 40% (4/10 plans completed)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Show blockers and deferred issues (or "No blockers. No deferred issues.").
|
|
61
|
+
|
|
62
|
+
Force ONE next action from loop_position with explanation:
|
|
63
|
+
```
|
|
64
|
+
NEXT ACTION REQUIRED: /sdlc:impl
|
|
65
|
+
|
|
66
|
+
What it does: Implements the current plan by writing code with subagent workers.
|
|
67
|
+
Why it is next: The spec phase is complete. The plan has been approved.
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
WHY: Status is the "where am I" command. Junior developers need the visual. Senior developers need the forced next action. Both get what they need.
|
|
71
|
+
</step>
|
|
72
|
+
|
|
73
|
+
<step name="pause_gather_context" priority="third">
|
|
74
|
+
ONLY IF MODE = PAUSE.
|
|
75
|
+
|
|
76
|
+
Gather session context:
|
|
77
|
+
|
|
78
|
+
A. GIT STATE:
|
|
79
|
+
Run: git status --short (if git repo)
|
|
80
|
+
Run: git log --oneline -5
|
|
81
|
+
|
|
82
|
+
B. WORK COMPLETED THIS SESSION:
|
|
83
|
+
Read STATE.md history entries. Summarize recent work.
|
|
84
|
+
|
|
85
|
+
C. IN-PROGRESS WORK:
|
|
86
|
+
Read any active spec, review, or summary files referenced in STATE.md.
|
|
87
|
+
Determine: which tasks done, which pending, which ACs verified.
|
|
88
|
+
|
|
89
|
+
D. DECISIONS AND BLOCKERS:
|
|
90
|
+
Scan recent .sdlc/ files for recorded decisions.
|
|
91
|
+
Note any blockers from STATE.md.
|
|
92
|
+
|
|
93
|
+
E. USER CONTEXT:
|
|
94
|
+
Ask: "Anything to remember for next session not already in files? (or press enter to skip)"
|
|
95
|
+
Record response if provided.
|
|
96
|
+
|
|
97
|
+
WHY: Session context is ephemeral — conversation history may not survive. The handoff captures it before it is lost.
|
|
98
|
+
</step>
|
|
99
|
+
|
|
100
|
+
<step name="pause_save" priority="fourth">
|
|
101
|
+
ONLY IF MODE = PAUSE.
|
|
102
|
+
|
|
103
|
+
Create .sdlc/HANDOFF.md (overwrite if exists):
|
|
104
|
+
```markdown
|
|
105
|
+
# Session Handoff
|
|
106
|
+
|
|
107
|
+
## Session Info
|
|
108
|
+
- **Paused at**: {ISO timestamp}
|
|
109
|
+
- **Reason**: {from arguments or "manual pause"}
|
|
110
|
+
- **Loop position**: {from STATE.md}
|
|
111
|
+
- **Next required action**: {from STATE.md}
|
|
112
|
+
|
|
113
|
+
## What Was Done This Session
|
|
114
|
+
{Bulleted list of work completed}
|
|
115
|
+
|
|
116
|
+
## Current State
|
|
117
|
+
- **Phase**: {phase name and number}
|
|
118
|
+
- **Plan**: {plan number and title, or "no active plan"}
|
|
119
|
+
- **Loop step**: {position} — {status}
|
|
120
|
+
|
|
121
|
+
## In-Progress Work
|
|
122
|
+
{What is partially done — specific tasks, files, ACs}
|
|
123
|
+
|
|
124
|
+
## Decisions Made
|
|
125
|
+
{List of decisions with rationale}
|
|
126
|
+
|
|
127
|
+
## Blockers / Open Questions
|
|
128
|
+
{List or "None"}
|
|
129
|
+
|
|
130
|
+
## User Context
|
|
131
|
+
{Verbatim notes from the user, if any}
|
|
132
|
+
|
|
133
|
+
## Git State
|
|
134
|
+
- **Branch**: {current branch}
|
|
135
|
+
- **Commit**: {latest commit hash and message}
|
|
136
|
+
- **Uncommitted changes**: {yes/no — details}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
IF UNCOMMITTED CHANGES EXIST:
|
|
140
|
+
Ask: "You have uncommitted changes. Create a WIP commit? (yes/no)"
|
|
141
|
+
If yes: stage relevant files (not .env), commit "wip({phase}): {brief description}"
|
|
142
|
+
If no: note in handoff that uncommitted changes exist.
|
|
143
|
+
|
|
144
|
+
Update STATE.md: add paused_at timestamp, history entry. Do NOT change loop_position.
|
|
145
|
+
|
|
146
|
+
Display:
|
|
147
|
+
```
|
|
148
|
+
Session saved.
|
|
149
|
+
|
|
150
|
+
Handoff: .sdlc/HANDOFF.md
|
|
151
|
+
State: {loop_position}
|
|
152
|
+
Next action (on resume): {next_required_action}
|
|
153
|
+
|
|
154
|
+
When you return, run /sdlc:status resume
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
WHY: HANDOFF.md bridges sessions. The explicit resume instruction ensures the next session starts correctly.
|
|
158
|
+
</step>
|
|
159
|
+
|
|
160
|
+
<step name="resume_restore" priority="fifth">
|
|
161
|
+
ONLY IF MODE = RESUME.
|
|
162
|
+
|
|
163
|
+
A. LOCATE HANDOFF:
|
|
164
|
+
If path in $ARGUMENTS: use that file.
|
|
165
|
+
Else if .sdlc/HANDOFF.md exists: use it.
|
|
166
|
+
Else: display "No handoff found. Resuming from STATE.md." Skip to next-action determination.
|
|
167
|
+
|
|
168
|
+
B. READ AND DISPLAY CONTEXT:
|
|
169
|
+
Read handoff. Calculate time since pause.
|
|
170
|
+
```
|
|
171
|
+
=== SESSION RESUMED ===
|
|
172
|
+
|
|
173
|
+
Last session: {time} ago
|
|
174
|
+
Loop position: {position}
|
|
175
|
+
|
|
176
|
+
Work in progress:
|
|
177
|
+
- {from handoff}
|
|
178
|
+
|
|
179
|
+
Decisions:
|
|
180
|
+
- {from handoff}
|
|
181
|
+
|
|
182
|
+
Blockers:
|
|
183
|
+
- {from handoff, or "None"}
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
If blockers: ask "These blockers were noted. Are they resolved?"
|
|
187
|
+
|
|
188
|
+
C. VERIFY GIT STATE:
|
|
189
|
+
Run: git status
|
|
190
|
+
Compare branch and uncommitted changes to handoff.
|
|
191
|
+
If branch changed: warn.
|
|
192
|
+
If new commits since pause: display them.
|
|
193
|
+
|
|
194
|
+
D. ARCHIVE HANDOFF:
|
|
195
|
+
Rename .sdlc/HANDOFF.md to .sdlc/HANDOFF-{timestamp}.md.archived
|
|
196
|
+
Remove paused_at from STATE.md.
|
|
197
|
+
Add history entry: "{timestamp} | resume | Resumed from {loop_position}."
|
|
198
|
+
|
|
199
|
+
E. FORCE NEXT ACTION:
|
|
200
|
+
Determine from STATE.md next_required_action.
|
|
201
|
+
Display: "NEXT ACTION REQUIRED: {action}"
|
|
202
|
+
|
|
203
|
+
WHY: Exactly ONE next action. The state machine has already decided. The user just executes it.
|
|
204
|
+
</step>
|
|
205
|
+
|
|
206
|
+
</process>
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
IF NO NEXT PHASE (this was the last phase in the milestone):
|
|
114
114
|
Update .sdlc/STATE.md:
|
|
115
115
|
- loop_position: TRANSITION ✓
|
|
116
|
-
- next_required_action: /sdlc:milestone
|
|
116
|
+
- next_required_action: /sdlc:close (milestone completion handled inline)
|
|
117
117
|
- Add history entry: "{timestamp} | transition | Phase {current} complete. Last phase in milestone. Trigger milestone completion."
|
|
118
118
|
|
|
119
119
|
Update .sdlc/ROADMAP.md:
|
|
@@ -193,8 +193,8 @@
|
|
|
193
193
|
Completed: Phase {number} — {name} (LAST PHASE)
|
|
194
194
|
Milestone {milestone-number} — {milestone-name}: ALL PHASES COMPLETE
|
|
195
195
|
|
|
196
|
-
NEXT ACTION REQUIRED: /sdlc:
|
|
197
|
-
Run /sdlc:
|
|
196
|
+
NEXT ACTION REQUIRED: /sdlc:close
|
|
197
|
+
Run /sdlc:close to finalize the milestone.
|
|
198
198
|
```
|
|
199
199
|
|
|
200
200
|
WHY: The display makes the transition visible. Moving to a new phase is a significant moment — the user should know where they are in the broader plan.
|
package/src/commands/hotfix.md
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sdlc:hotfix
|
|
3
|
-
description: "Emergency fix with minimal ceremony, maximum verification"
|
|
4
|
-
argument-hint: "<critical-issue>"
|
|
5
|
-
allowed-tools: [Read, Write, Bash, Glob, Grep, Edit, mcp__plugin_playwright_playwright__browser_navigate, mcp__plugin_playwright_playwright__browser_snapshot, mcp__plugin_playwright_playwright__browser_click, mcp__plugin_playwright_playwright__browser_fill_form, mcp__plugin_playwright_playwright__browser_take_screenshot, mcp__plugin_playwright_playwright__browser_evaluate, mcp__plugin_playwright_playwright__browser_console_messages, mcp__plugin_playwright_playwright__browser_close, AskUserQuestion]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
<objective>
|
|
9
|
-
Emergency fix for critical issues. Minimal ceremony getting to the fix. Maximum verification after the fix. No corners cut on quality — only on planning overhead.
|
|
10
|
-
|
|
11
|
-
**When to use:** Production is broken. A critical path is failing. Security vulnerability discovered. Something that cannot wait for a full SPEC cycle.
|
|
12
|
-
|
|
13
|
-
**What it does:**
|
|
14
|
-
1. Skip full spec — create a lightweight inline spec (3 lines).
|
|
15
|
-
2. Fix the issue directly.
|
|
16
|
-
3. Run FULL verification (tests + Playwright).
|
|
17
|
-
4. Run FULL review (engineering laws compliance).
|
|
18
|
-
5. Record as a hotfix with decimal phase numbering (2.1, 2.2, etc.).
|
|
19
|
-
|
|
20
|
-
**What happens next:** /sdlc:verify to run the full verification suite.
|
|
21
|
-
</objective>
|
|
22
|
-
|
|
23
|
-
<execution_context>
|
|
24
|
-
@~/.claude/sdlc-framework/workflows/hotfix.md
|
|
25
|
-
@.sdlc/STATE.md
|
|
26
|
-
@.sdlc/LAWS.md
|
|
27
|
-
</execution_context>
|
|
28
|
-
|
|
29
|
-
<context>
|
|
30
|
-
$ARGUMENTS
|
|
31
|
-
|
|
32
|
-
Read .sdlc/STATE.md to get current milestone and phase.
|
|
33
|
-
Read .sdlc/LAWS.md — hotfixes are NOT exempt from engineering laws.
|
|
34
|
-
</context>
|
|
35
|
-
|
|
36
|
-
<process>
|
|
37
|
-
Follow workflow: @~/.claude/sdlc-framework/workflows/hotfix.md
|
|
38
|
-
|
|
39
|
-
Step-by-step:
|
|
40
|
-
|
|
41
|
-
1. **Pre-flight check**
|
|
42
|
-
- Verify .sdlc/ exists. If not, tell the user to run /sdlc:init first.
|
|
43
|
-
- Read .sdlc/STATE.md to get current phase number (e.g., phase 2).
|
|
44
|
-
- Assign hotfix number: current phase + decimal increment (2.1, 2.2, etc.).
|
|
45
|
-
- Update STATE.md: set loop_position to HOTFIX, record hotfix number.
|
|
46
|
-
|
|
47
|
-
2. **Lightweight inline spec (3 lines)**
|
|
48
|
-
- Line 1: WHAT is broken. (From $ARGUMENTS.)
|
|
49
|
-
- Line 2: WHERE is the likely location. (Quick search with Grep.)
|
|
50
|
-
- Line 3: WHAT the fix should achieve. (Expected behavior.)
|
|
51
|
-
- Record this inline spec in STATE.md under the hotfix entry.
|
|
52
|
-
|
|
53
|
-
3. **Fix the issue**
|
|
54
|
-
- Search for the affected code using Grep and Read.
|
|
55
|
-
- Apply the fix. Follow engineering laws:
|
|
56
|
-
- DRY: use existing patterns.
|
|
57
|
-
- Handle edge cases.
|
|
58
|
-
- Named types for complex objects.
|
|
59
|
-
- No lint suppression. No non-null assertions.
|
|
60
|
-
- Max 40 lines per function.
|
|
61
|
-
- Keep the change surface as small as possible. Fix the issue, nothing more.
|
|
62
|
-
|
|
63
|
-
4. **Full verification**
|
|
64
|
-
- Run the entire test suite. Not just affected tests — ALL tests.
|
|
65
|
-
- For UI-related hotfixes:
|
|
66
|
-
- Use Playwright to navigate to affected pages.
|
|
67
|
-
- Verify the fix visually with screenshots.
|
|
68
|
-
- Check console for errors.
|
|
69
|
-
- Test the happy path AND edge cases.
|
|
70
|
-
- If tests fail: fix the test failures before proceeding. Do not skip.
|
|
71
|
-
|
|
72
|
-
5. **Full review against engineering laws**
|
|
73
|
-
- Read .sdlc/LAWS.md.
|
|
74
|
-
- Check every changed line against every applicable law.
|
|
75
|
-
- Verify: no dead code introduced, no unused imports, no inline complex types.
|
|
76
|
-
- If any law is violated: fix it. Hotfixes are not exempt.
|
|
77
|
-
|
|
78
|
-
6. **Record in STATE.md**
|
|
79
|
-
- Update .sdlc/STATE.md:
|
|
80
|
-
- Record hotfix number (decimal: 2.1, 2.2, etc.).
|
|
81
|
-
- Record: issue description, files changed, tests run, verification status.
|
|
82
|
-
- Set loop_position back to current phase position.
|
|
83
|
-
- Create .sdlc/hotfixes/HOTFIX-{number}-{timestamp}.md with full details.
|
|
84
|
-
|
|
85
|
-
7. **Force next action**
|
|
86
|
-
- Output: "NEXT ACTION REQUIRED: /sdlc:verify — run full verification suite to confirm no regressions."
|
|
87
|
-
</process>
|
|
88
|
-
|
|
89
|
-
<success_criteria>
|
|
90
|
-
- [ ] Inline spec created (3 lines: what, where, expected behavior)
|
|
91
|
-
- [ ] Fix applied following engineering laws — no exceptions for hotfixes
|
|
92
|
-
- [ ] Full test suite runs and passes
|
|
93
|
-
- [ ] Playwright verification completed for UI-related hotfixes
|
|
94
|
-
- [ ] Engineering laws review passed on all changed code
|
|
95
|
-
- [ ] Hotfix recorded in STATE.md with decimal phase numbering
|
|
96
|
-
- [ ] Hotfix detail file created in .sdlc/hotfixes/
|
|
97
|
-
- [ ] Change surface is minimal — only the fix, nothing extra
|
|
98
|
-
- [ ] Output ends with NEXT ACTION REQUIRED: /sdlc:verify
|
|
99
|
-
</success_criteria>
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sdlc:milestone
|
|
3
|
-
description: "Create or complete project milestones"
|
|
4
|
-
argument-hint: "[create <name> | complete]"
|
|
5
|
-
allowed-tools: [Read, Write, Bash, Glob, Grep, AskUserQuestion]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
<objective>
|
|
9
|
-
Manage project milestones. Create new milestones with scope definition. Complete milestones with verification, archival, and tagging.
|
|
10
|
-
|
|
11
|
-
**When to use:**
|
|
12
|
-
- Starting a new body of work: `/sdlc:milestone create <name>`
|
|
13
|
-
- Finishing a milestone: `/sdlc:milestone complete`
|
|
14
|
-
- Checking milestone status: `/sdlc:milestone` (no argument)
|
|
15
|
-
|
|
16
|
-
**What it does:**
|
|
17
|
-
- **No argument:** Show current milestone status, phases, and progress.
|
|
18
|
-
- **create:** Ask clarification questions about scope, then create milestone with phases.
|
|
19
|
-
- **complete:** Verify all phases done, archive, update ROADMAP.md, create git tag.
|
|
20
|
-
|
|
21
|
-
**What happens next:**
|
|
22
|
-
- After create: /sdlc:spec to define the first unit of work.
|
|
23
|
-
- After complete: Completion summary displayed.
|
|
24
|
-
</objective>
|
|
25
|
-
|
|
26
|
-
<execution_context>
|
|
27
|
-
@~/.claude/sdlc-framework/workflows/milestone.md
|
|
28
|
-
@.sdlc/STATE.md
|
|
29
|
-
@.sdlc/ROADMAP.md
|
|
30
|
-
</execution_context>
|
|
31
|
-
|
|
32
|
-
<context>
|
|
33
|
-
$ARGUMENTS — one of: empty, "create <name>", or "complete".
|
|
34
|
-
|
|
35
|
-
Read .sdlc/STATE.md for current milestone.
|
|
36
|
-
Read .sdlc/ROADMAP.md for milestone definitions and progress.
|
|
37
|
-
</context>
|
|
38
|
-
|
|
39
|
-
<process>
|
|
40
|
-
Follow workflow: @~/.claude/sdlc-framework/workflows/milestone.md
|
|
41
|
-
|
|
42
|
-
Step-by-step:
|
|
43
|
-
|
|
44
|
-
### If no argument: SHOW STATUS
|
|
45
|
-
|
|
46
|
-
1. Read .sdlc/ROADMAP.md.
|
|
47
|
-
2. Read .sdlc/STATE.md for current milestone.
|
|
48
|
-
3. Display:
|
|
49
|
-
```
|
|
50
|
-
Current Milestone: {name}
|
|
51
|
-
Status: {in-progress | blocked}
|
|
52
|
-
|
|
53
|
-
Phases:
|
|
54
|
-
[x] Phase 1: {name} — completed
|
|
55
|
-
[x] Phase 2: {name} — completed
|
|
56
|
-
[ ] Phase 3: {name} — in progress (3/5 plans done)
|
|
57
|
-
[ ] Phase 4: {name} — not started
|
|
58
|
-
|
|
59
|
-
Progress: [████████████░░░░░░░░] 60%
|
|
60
|
-
```
|
|
61
|
-
4. Show the next required action based on current loop position.
|
|
62
|
-
|
|
63
|
-
### If "create <name>": CREATE MILESTONE
|
|
64
|
-
|
|
65
|
-
1. Parse the milestone name from $ARGUMENTS.
|
|
66
|
-
2. Ask clarification questions via AskUserQuestion:
|
|
67
|
-
- "What is the objective of this milestone? (1-2 sentences)"
|
|
68
|
-
- "What are the key deliverables? (list 3-5)"
|
|
69
|
-
- "What does 'done' look like? (acceptance criteria)"
|
|
70
|
-
- "Estimated number of phases? (suggest based on deliverables)"
|
|
71
|
-
3. Create the milestone in .sdlc/ROADMAP.md:
|
|
72
|
-
```
|
|
73
|
-
## Milestone: {name}
|
|
74
|
-
Objective: {from answer}
|
|
75
|
-
Status: in-progress
|
|
76
|
-
|
|
77
|
-
### Phases
|
|
78
|
-
- Phase 1: {derived from deliverables}
|
|
79
|
-
- Phase 2: {derived from deliverables}
|
|
80
|
-
...
|
|
81
|
-
|
|
82
|
-
### Acceptance Criteria
|
|
83
|
-
- {from answer}
|
|
84
|
-
```
|
|
85
|
-
4. Update .sdlc/STATE.md:
|
|
86
|
-
- Set current_milestone to the new milestone name.
|
|
87
|
-
- Set current_phase to Phase 1.
|
|
88
|
-
- Set loop_position to SPEC.
|
|
89
|
-
5. Output: "NEXT ACTION REQUIRED: /sdlc:spec — define the first unit of work for Phase 1."
|
|
90
|
-
|
|
91
|
-
### If "complete": COMPLETE MILESTONE
|
|
92
|
-
|
|
93
|
-
1. Read .sdlc/STATE.md and .sdlc/ROADMAP.md.
|
|
94
|
-
2. Verify ALL phases in the current milestone are marked complete.
|
|
95
|
-
- If any phase is incomplete, output: "Cannot complete milestone. Phase {N}: {name} is not done. Complete it first." Then stop.
|
|
96
|
-
3. Archive the milestone:
|
|
97
|
-
- Create .sdlc/archive/MILESTONE-{name}-{timestamp}.md with full milestone data.
|
|
98
|
-
- Mark the milestone as `completed` in ROADMAP.md with completion timestamp.
|
|
99
|
-
4. Update ROADMAP.md:
|
|
100
|
-
- Set milestone status to `completed`.
|
|
101
|
-
- If there is a next milestone, note it.
|
|
102
|
-
5. Create a git tag:
|
|
103
|
-
- Run `git tag -a milestone/{name} -m "Milestone completed: {name}"`.
|
|
104
|
-
- If git is not initialized or tag fails, warn but continue.
|
|
105
|
-
6. Update STATE.md:
|
|
106
|
-
- Clear current_milestone if no next milestone.
|
|
107
|
-
- Or set current_milestone to the next milestone and loop_position to SPEC.
|
|
108
|
-
7. Output completion summary:
|
|
109
|
-
```
|
|
110
|
-
Milestone Complete: {name}
|
|
111
|
-
|
|
112
|
-
Phases completed: {N}
|
|
113
|
-
Plans executed: {N}
|
|
114
|
-
Hotfixes applied: {N}
|
|
115
|
-
Git tag: milestone/{name}
|
|
116
|
-
|
|
117
|
-
{If next milestone exists}
|
|
118
|
-
Next milestone: {name}
|
|
119
|
-
Run /sdlc:spec to begin.
|
|
120
|
-
|
|
121
|
-
{If no next milestone}
|
|
122
|
-
All milestones complete. Define new milestones with /sdlc:milestone create <name>.
|
|
123
|
-
```
|
|
124
|
-
</process>
|
|
125
|
-
|
|
126
|
-
<success_criteria>
|
|
127
|
-
- [ ] No argument: milestone status displayed with phase progress
|
|
128
|
-
- [ ] Create: clarification questions asked, milestone added to ROADMAP.md, STATE.md updated
|
|
129
|
-
- [ ] Create: output ends with NEXT ACTION REQUIRED: /sdlc:spec
|
|
130
|
-
- [ ] Complete: all phases verified as done before completing
|
|
131
|
-
- [ ] Complete: milestone archived to .sdlc/archive/
|
|
132
|
-
- [ ] Complete: ROADMAP.md updated with completion status
|
|
133
|
-
- [ ] Complete: git tag created
|
|
134
|
-
- [ ] Complete: STATE.md updated for next milestone (or cleared)
|
|
135
|
-
- [ ] No guessing — all scope gathered via clarification questions
|
|
136
|
-
</success_criteria>
|
package/src/commands/pause.md
DELETED
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sdlc:pause
|
|
3
|
-
description: "Save context for session break"
|
|
4
|
-
argument-hint: "[reason]"
|
|
5
|
-
allowed-tools: [Read, Write, Bash, Glob, Grep, AskUserQuestion]
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
<objective>
|
|
9
|
-
Save complete session context so you can walk away and pick up exactly where you left off. Creates a HANDOFF.md that captures everything the next session needs.
|
|
10
|
-
|
|
11
|
-
**When to use:** You need to take a break, switch tasks, or end your session. Run this before closing your terminal.
|
|
12
|
-
|
|
13
|
-
**What it does:**
|
|
14
|
-
1. Detect current loop position from STATE.md.
|
|
15
|
-
2. Gather all context: work done, decisions made, blockers, in-progress tasks.
|
|
16
|
-
3. Create HANDOFF.md with everything needed to resume.
|
|
17
|
-
4. Optionally create a WIP git commit.
|
|
18
|
-
5. Tell you exactly how to resume.
|
|
19
|
-
|
|
20
|
-
**What happens next:** When you return, run /sdlc:resume.
|
|
21
|
-
</objective>
|
|
22
|
-
|
|
23
|
-
<execution_context>
|
|
24
|
-
@~/.claude/sdlc-framework/workflows/pause-resume.md
|
|
25
|
-
@.sdlc/STATE.md
|
|
26
|
-
</execution_context>
|
|
27
|
-
|
|
28
|
-
<context>
|
|
29
|
-
$ARGUMENTS — optional reason for pausing (e.g., "end of day", "switching to urgent task").
|
|
30
|
-
|
|
31
|
-
Read .sdlc/STATE.md to detect current loop position and active work.
|
|
32
|
-
</context>
|
|
33
|
-
|
|
34
|
-
<process>
|
|
35
|
-
Follow workflow: @~/.claude/sdlc-framework/workflows/pause-resume.md
|
|
36
|
-
|
|
37
|
-
Step-by-step:
|
|
38
|
-
|
|
39
|
-
1. **Read current state**
|
|
40
|
-
- Read .sdlc/STATE.md to get:
|
|
41
|
-
- Current loop_position (SPEC, IMPLEMENT, VERIFY, REVIEW, CLOSE, DEBUG, HOTFIX).
|
|
42
|
-
- Current milestone and phase.
|
|
43
|
-
- Current plan (if any).
|
|
44
|
-
- Any recorded blockers.
|
|
45
|
-
|
|
46
|
-
2. **Gather session context**
|
|
47
|
-
- Check git status for uncommitted changes (`git status --short`).
|
|
48
|
-
- Check git log for recent commits in this session (`git log --oneline -5`).
|
|
49
|
-
- Read any in-progress spec, plan, or task files referenced in STATE.md.
|
|
50
|
-
- Scan .sdlc/ for recently modified files (`find .sdlc -mmin -120 -type f`).
|
|
51
|
-
|
|
52
|
-
3. **Create HANDOFF.md**
|
|
53
|
-
- Save to .sdlc/handoffs/HANDOFF-{timestamp}.md with:
|
|
54
|
-
|
|
55
|
-
```
|
|
56
|
-
# Session Handoff — {timestamp}
|
|
57
|
-
|
|
58
|
-
## Loop Position
|
|
59
|
-
{current loop_position} in {milestone} / {phase}
|
|
60
|
-
|
|
61
|
-
## Work Completed This Session
|
|
62
|
-
- {list of completed tasks, commits, files changed}
|
|
63
|
-
|
|
64
|
-
## Work In Progress
|
|
65
|
-
- {what was being worked on when paused}
|
|
66
|
-
- {current state of that work}
|
|
67
|
-
|
|
68
|
-
## Decisions Made
|
|
69
|
-
- {any architectural or design decisions}
|
|
70
|
-
|
|
71
|
-
## Blockers
|
|
72
|
-
- {anything preventing progress}
|
|
73
|
-
|
|
74
|
-
## Uncommitted Changes
|
|
75
|
-
- {list of modified/untracked files from git status}
|
|
76
|
-
|
|
77
|
-
## Resume Instructions
|
|
78
|
-
Run /sdlc:resume to continue.
|
|
79
|
-
The framework will pick up at: {loop_position}
|
|
80
|
-
Next action will be: {determined next action}
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
4. **Update STATE.md**
|
|
84
|
-
- Add session continuity section:
|
|
85
|
-
- `paused_at: {timestamp}`
|
|
86
|
-
- `pause_reason: {from $ARGUMENTS or "manual pause"}`
|
|
87
|
-
- `handoff_file: .sdlc/handoffs/HANDOFF-{timestamp}.md`
|
|
88
|
-
- Do NOT change loop_position — it stays where it was.
|
|
89
|
-
|
|
90
|
-
5. **Offer WIP commit**
|
|
91
|
-
- Check if there are uncommitted changes.
|
|
92
|
-
- If yes, ask the user via AskUserQuestion:
|
|
93
|
-
"You have uncommitted changes. Create a WIP commit? (yes/no)"
|
|
94
|
-
- If yes: stage all changes and commit with message "WIP: {current task} [sdlc:pause]".
|
|
95
|
-
- If no: note in HANDOFF.md that uncommitted changes exist.
|
|
96
|
-
|
|
97
|
-
6. **Output resume instructions**
|
|
98
|
-
- Print:
|
|
99
|
-
```
|
|
100
|
-
Session paused. Context saved to .sdlc/handoffs/HANDOFF-{timestamp}.md
|
|
101
|
-
|
|
102
|
-
When you return, run: /sdlc:resume
|
|
103
|
-
```
|
|
104
|
-
- Do not suggest any other actions. The only valid next step is /sdlc:resume.
|
|
105
|
-
</process>
|
|
106
|
-
|
|
107
|
-
<success_criteria>
|
|
108
|
-
- [ ] Current loop position detected from STATE.md
|
|
109
|
-
- [ ] All session context gathered (commits, changes, decisions, blockers)
|
|
110
|
-
- [ ] HANDOFF.md created in .sdlc/handoffs/ with complete context
|
|
111
|
-
- [ ] STATE.md updated with session continuity section
|
|
112
|
-
- [ ] WIP commit offered if uncommitted changes exist
|
|
113
|
-
- [ ] Output clearly states: "When you return, run /sdlc:resume"
|
|
114
|
-
- [ ] No ambiguity — exactly one path forward
|
|
115
|
-
</success_criteria>
|