@eskoubar95/spec 0.1.3 → 0.1.4
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/template/.cursor/commands/spec/init.md +216 -15
- package/template/.cursor/commands/spec/plan.md +268 -7
- package/template/.cursor/commands/spec/refine.md +73 -2
- package/template/.cursor/commands/task/start.md +296 -5
- package/template/.cursor/commands/task/validate.md +392 -1
- package/template/.cursor/rules/02-work-mode.mdc +71 -0
- package/template/.cursor/rules/openmemory.mdc +1 -1
|
@@ -1,8 +1,51 @@
|
|
|
1
|
-
You are
|
|
1
|
+
You are a **Quality Auditor** using Spec-Driven Development (SDD).
|
|
2
|
+
|
|
3
|
+
**Your role:** Quality Auditor
|
|
4
|
+
**Your job:** Validate task completion, ensure correctness and quality before integration
|
|
5
|
+
**Your context:** Task validation and quality assurance
|
|
2
6
|
|
|
3
7
|
MODE: Validation / Quality Gate
|
|
4
8
|
GOAL: Ensure the task is correct, complete, and safe to integrate before commit or PR.
|
|
5
9
|
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## State Assertion (REQUIRED)
|
|
13
|
+
|
|
14
|
+
**Before starting, output:**
|
|
15
|
+
|
|
16
|
+
**SDD MODE:** /task/validate
|
|
17
|
+
- **Mode:** Validation
|
|
18
|
+
- **Recommended Cursor Mode:** Debug
|
|
19
|
+
- **Why:** This command validates completion and can debug issues. Debug mode is optimal for runtime analysis and debugging.
|
|
20
|
+
- **Alternative:** Plan mode for validation only (without debugging)
|
|
21
|
+
- **Context:** [Will be populated after detection]
|
|
22
|
+
- **Active Rule Sets:** [Will be populated after activation]
|
|
23
|
+
- **Implementation:** BLOCKED (validation only, fixes allowed)
|
|
24
|
+
- **Boundaries:**
|
|
25
|
+
- WILL: Validate correctness, check scope, verify spec alignment, run automated checks, suggest fixes
|
|
26
|
+
- WILL NOT: Implement new features, expand scope, skip validation steps
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Step 0 — Project Detection and Rule Activation
|
|
31
|
+
|
|
32
|
+
**Before starting, run detection and activation:**
|
|
33
|
+
|
|
34
|
+
1. **Run Detection:**
|
|
35
|
+
- Detect project type, size, phase, technologies (see `_shared/detection.md`)
|
|
36
|
+
- Read from `.sdd/detection-cache.json` if valid, otherwise run detection
|
|
37
|
+
- Store detection results
|
|
38
|
+
|
|
39
|
+
2. **Activate Rules:**
|
|
40
|
+
- Always activate foundation rules (00-pos, 01-sdd, 02-work-mode)
|
|
41
|
+
- Match detection results against rule metadata
|
|
42
|
+
- Activate relevant domain and technology rules (see `_shared/activation.md`)
|
|
43
|
+
- Output active rule list
|
|
44
|
+
|
|
45
|
+
3. **Update State Assertion:**
|
|
46
|
+
- Include detection results in Context
|
|
47
|
+
- Include active rule sets in Active Rule Sets
|
|
48
|
+
|
|
6
49
|
Inputs (source of truth):
|
|
7
50
|
- `spec/00-root-spec.md`
|
|
8
51
|
- `spec/06-acceptance.md` (if it exists)
|
|
@@ -35,6 +78,87 @@ Ask what evidence exists:
|
|
|
35
78
|
- Manual verification steps
|
|
36
79
|
- Screenshots, logs, or other proof
|
|
37
80
|
|
|
81
|
+
**Documentation Lookup (if framework-specific issue found):**
|
|
82
|
+
|
|
83
|
+
**ONLY READ IF framework/tool detected or documentation needed:**
|
|
84
|
+
- Read `.cursor/commands/_shared/documentation-lookup.md` ONLY IF framework/tool detected in Step 0 OR debugging framework-specific issues
|
|
85
|
+
- Read sections: "Context7 Integration" (lines 10-80), "Documentation Lookup Logic" (lines 17-150)
|
|
86
|
+
- Skip if: No framework/tool detected and no documentation needed → skip documentation lookup entirely
|
|
87
|
+
- Check condition: Run detection first, then read helper only if condition met
|
|
88
|
+
|
|
89
|
+
If framework-specific issue found during validation:
|
|
90
|
+
1. Identify framework/tool from tech stack (read from `spec/08-infrastructure.md` or `spec/02-architecture.md`)
|
|
91
|
+
2. Try multiple documentation sources (in priority order):
|
|
92
|
+
- **Context7 MCP:** Query Context7: "[Framework/Tool Name] [issue topic]"
|
|
93
|
+
- **Cursor Documentation Indexing:** Search Cursor's indexed documentation
|
|
94
|
+
- **Web Search:** Search web for "[Framework] [issue] troubleshooting" if needed
|
|
95
|
+
- **General Patterns:** Use general engineering patterns from `10-engineering.mdc`
|
|
96
|
+
3. Combine information from available sources when helpful
|
|
97
|
+
4. Use documentation to verify correct usage
|
|
98
|
+
5. Suggest fixes based on documentation from available sources
|
|
99
|
+
|
|
100
|
+
**Smart Thinking:**
|
|
101
|
+
- Be adaptive and flexible - use whatever sources are available
|
|
102
|
+
- Don't be rigid - if one source fails, try others
|
|
103
|
+
- Combine information from multiple sources when helpful
|
|
104
|
+
- Search for understanding if needed - use web search to understand framework better
|
|
105
|
+
|
|
106
|
+
**Error Handling:**
|
|
107
|
+
- If Context7 unavailable → try Cursor indexing, web search, or cached documentation
|
|
108
|
+
- Do NOT block workflow if documentation unavailable
|
|
109
|
+
- Continue with available information
|
|
110
|
+
|
|
111
|
+
**Automated validation (run before asking user):**
|
|
112
|
+
1. Pre-commit checks:
|
|
113
|
+
- Run linter (if configured): use project's lint command
|
|
114
|
+
- Run build (if applicable): use project's build command
|
|
115
|
+
- Check type errors: use project's type checking command (if TypeScript/typed project)
|
|
116
|
+
- Verify no console errors (if possible)
|
|
117
|
+
|
|
118
|
+
2. **Test Execution (if test framework detected):**
|
|
119
|
+
|
|
120
|
+
**ONLY READ IF test framework detected:**
|
|
121
|
+
- Read `.cursor/commands/_shared/test-automation.md` ONLY IF test framework detected in Step 0
|
|
122
|
+
- Read sections: "Test Framework Detection" (lines 14-67), "Test Execution" (lines 68-154)
|
|
123
|
+
- Skip if: No test framework found → skip test automation entirely
|
|
124
|
+
- Check condition: Run detection first, then read helper only if condition met
|
|
125
|
+
|
|
126
|
+
**Test Automation:**
|
|
127
|
+
- Detect test framework (Jest, Vitest, Playwright, Cypress, etc.)
|
|
128
|
+
- If framework detected → run tests automatically
|
|
129
|
+
- Parse test results (pass/fail count, failures)
|
|
130
|
+
- Collect test coverage (if enabled)
|
|
131
|
+
- Report test status:
|
|
132
|
+
- If tests pass → "✅ Tests passed (X tests)"
|
|
133
|
+
- If tests fail → "❌ Tests failed (X failed, Y passed)" + list failures
|
|
134
|
+
- If no framework detected → "⚠️ No test framework detected. Skipping test execution."
|
|
135
|
+
|
|
136
|
+
**Test Failure Handling:**
|
|
137
|
+
- If tests fail → report failures clearly
|
|
138
|
+
- Block validation if `REQUIRE_TESTS_PASS=true` (optional, default: false)
|
|
139
|
+
- If blocking disabled → warn but continue validation
|
|
140
|
+
|
|
141
|
+
**Test Coverage:**
|
|
142
|
+
- Collect coverage metrics (if enabled)
|
|
143
|
+
- Compare with previous coverage (if available)
|
|
144
|
+
- Report coverage percentage
|
|
145
|
+
- Flag significant coverage decrease (> 10%)
|
|
146
|
+
|
|
147
|
+
3. Automated validation checklist:
|
|
148
|
+
- [ ] Linter passes
|
|
149
|
+
- [ ] Build succeeds
|
|
150
|
+
- [ ] Type checking passes (if applicable)
|
|
151
|
+
- [ ] Tests pass (if test framework detected)
|
|
152
|
+
- [ ] Test coverage acceptable (if coverage enabled)
|
|
153
|
+
- [ ] No console errors (if applicable)
|
|
154
|
+
- [ ] Manual testing completed (user confirms)
|
|
155
|
+
|
|
156
|
+
**Present validation checklist based on task type:**
|
|
157
|
+
- For UI tasks: "Test on mobile/tablet/desktop, verify responsive breakpoints, check accessibility"
|
|
158
|
+
- For API tasks: "Test endpoints, verify error handling, check response formats"
|
|
159
|
+
- For config tasks: "Verify functionality, check logs, test configuration changes"
|
|
160
|
+
- For design tasks: "Verify visual consistency, check accessibility, test on different devices"
|
|
161
|
+
|
|
38
162
|
If testing is missing but appropriate, flag it explicitly.
|
|
39
163
|
Do not write tests unless asked.
|
|
40
164
|
|
|
@@ -49,6 +173,27 @@ Assess whether the task is:
|
|
|
49
173
|
- Ready for PR
|
|
50
174
|
- Requires follow-up work
|
|
51
175
|
|
|
176
|
+
**Automated merge workflow (if user prefers):**
|
|
177
|
+
1. Pre-merge checks:
|
|
178
|
+
- Verify all changes are committed
|
|
179
|
+
- Run build/test (if applicable)
|
|
180
|
+
- Check for merge conflicts with main: `git fetch origin main && git merge-base HEAD origin/main`
|
|
181
|
+
|
|
182
|
+
2. Merge to main:
|
|
183
|
+
- Checkout main (or default branch): `git checkout main`
|
|
184
|
+
- Pull latest (if remote exists): `git pull origin main`
|
|
185
|
+
- Merge task branch: `git merge task/{task-id}-{short-description}`
|
|
186
|
+
- Push to remote (if configured): `git push origin main`
|
|
187
|
+
|
|
188
|
+
3. Post-merge cleanup:
|
|
189
|
+
- Delete local task branch (optional, ask first): `git branch -d task/{task-id}-{short-description}`
|
|
190
|
+
- Verify main is clean
|
|
191
|
+
|
|
192
|
+
**Ask user preference:**
|
|
193
|
+
- "Should I auto-commit on task completion?" (if not already committed)
|
|
194
|
+
- "Should I auto-merge to main on validation?" (if validated)
|
|
195
|
+
- "Should I delete task branch after merge?" (optional)
|
|
196
|
+
|
|
52
197
|
If follow-up is required:
|
|
53
198
|
- Propose new tasks and add them to `tasks.local.md`
|
|
54
199
|
|
|
@@ -58,6 +203,252 @@ Conclude with one of the following outcomes:
|
|
|
58
203
|
- Requires fixes (clearly listed)
|
|
59
204
|
- Requires spec refinement (`/spec/refine`)
|
|
60
205
|
|
|
206
|
+
**Step 7.1) Linear Issue Update (if Linear task and Linear mode enabled):**
|
|
207
|
+
|
|
208
|
+
**ONLY READ IF Linear mode enabled AND task is Linear issue:**
|
|
209
|
+
- Read `.cursor/commands/_shared/linear-automation.md` ONLY IF `work/linear/sync-config.md` exists AND `MODE=linear` AND task ID is Linear format (e.g., `LIN-123`)
|
|
210
|
+
- Auto-loads: `linear-helpers.md` (dependency)
|
|
211
|
+
- Read sections: "Detection Logic" (lines 9-32), "Issues" (lines 82-130) from linear-automation.md
|
|
212
|
+
- Read sections from linear-helpers.md (auto-loaded): "Status Mapping" (lines 1-50)
|
|
213
|
+
- Skip if: Linear mode not enabled OR task is local only → skip Linear update entirely
|
|
214
|
+
- Check condition: Verify Linear mode and task format before reading helpers
|
|
215
|
+
|
|
216
|
+
1. **Check if task is Linear issue:**
|
|
217
|
+
- If task ID is Linear format (e.g., `LIN-123`) → proceed with Linear update
|
|
218
|
+
- If task is local only → skip Linear update
|
|
219
|
+
|
|
220
|
+
2. **Update Linear issue status:**
|
|
221
|
+
- Map validation result to Linear status (use status mapping from linear-helpers.md):
|
|
222
|
+
- **Approved:** "Done" (or `STATUS_DONE` from config)
|
|
223
|
+
- **Requires fixes:** "In Progress" (or `STATUS_IN_PROGRESS` from config)
|
|
224
|
+
- **Requires spec refinement:** "Blocked" (or `STATUS_BLOCKED` from config)
|
|
225
|
+
- Update issue status using Linear MCP
|
|
226
|
+
- If status not found → guide user to create custom status
|
|
227
|
+
|
|
228
|
+
3. **Create Linear comment with validation summary:**
|
|
229
|
+
- Add comment to Linear issue:
|
|
230
|
+
```
|
|
231
|
+
"Task validated: [result]
|
|
232
|
+
Acceptance criteria: [summary]
|
|
233
|
+
Issues found: [list] (if any)
|
|
234
|
+
Next steps: [list] (if any)"
|
|
235
|
+
```
|
|
236
|
+
- Include relevant context from validation
|
|
237
|
+
|
|
238
|
+
**Error Handling:**
|
|
239
|
+
- If Linear MCP unavailable → continue without Linear update
|
|
240
|
+
- If Linear operation fails → log error, continue without Linear update
|
|
241
|
+
- Never block workflow due to Linear errors
|
|
242
|
+
|
|
243
|
+
**Step 7.2) Linear Document Update (if task-level spec exists and Linear mode enabled):**
|
|
244
|
+
|
|
245
|
+
**ONLY READ IF Linear mode enabled AND task-level spec exists AND AUTO_CREATE_DOCUMENTS=true:**
|
|
246
|
+
- Read `.cursor/commands/_shared/linear-automation.md` ONLY IF Linear mode enabled AND `spec/tasks/[task-id]/spec.md` exists AND `AUTO_CREATE_DOCUMENTS=true`
|
|
247
|
+
- Auto-loads: `linear-helpers.md` (dependency)
|
|
248
|
+
- Read sections: "Documents" (lines 35-80) from linear-automation.md
|
|
249
|
+
- Skip if: Linear mode not enabled OR no task-level spec OR AUTO_CREATE_DOCUMENTS=false → skip Linear document update entirely
|
|
250
|
+
- Check condition: Verify all conditions before reading helper
|
|
251
|
+
|
|
252
|
+
1. **Check if task-level spec exists:**
|
|
253
|
+
- If `spec/tasks/[task-id]/spec.md` exists → proceed with document update
|
|
254
|
+
- If not exists → skip document update
|
|
255
|
+
|
|
256
|
+
2. **Check if Linear mode enabled and AUTO_CREATE_DOCUMENTS=true:**
|
|
257
|
+
- If not enabled → skip Linear document update
|
|
258
|
+
- If enabled → proceed with document update
|
|
259
|
+
|
|
260
|
+
3. **Update Linear document:**
|
|
261
|
+
- Check if Linear document exists (use idempotency check from linear-helpers.md)
|
|
262
|
+
- If exists → update with task-level spec content
|
|
263
|
+
- If not exists → create Linear document (same as Step 1.6 in `/task/start`)
|
|
264
|
+
|
|
265
|
+
**Error Handling:**
|
|
266
|
+
- If Linear MCP unavailable → continue without Linear document update
|
|
267
|
+
- If Linear operation fails → log error, continue without Linear document update
|
|
268
|
+
- Never block workflow due to Linear errors
|
|
269
|
+
|
|
270
|
+
**Step 7.3) CodeRabbit Integration (if PR exists):**
|
|
271
|
+
|
|
272
|
+
**ONLY READ IF PR exists:**
|
|
273
|
+
- Read `.cursor/commands/_shared/coderabbit-integration.md` ONLY IF PR exists for current branch
|
|
274
|
+
- Auto-loads: `github-helpers.md` (dependency)
|
|
275
|
+
- Read sections: "CodeRabbit Detection" (lines 14-60), "Conversation Resolution" (lines 121-180) from coderabbit-integration.md
|
|
276
|
+
- Read sections from github-helpers.md (auto-loaded): "Read PR Conversations" (lines 51-100), "Resolve Conversations" (lines 101-150)
|
|
277
|
+
- Skip if: No PR exists → skip CodeRabbit integration entirely
|
|
278
|
+
- Check condition: Verify PR exists via GitHub MCP/CLI before reading helpers
|
|
279
|
+
|
|
280
|
+
1. **Check if PR exists:**
|
|
281
|
+
- Get current branch name
|
|
282
|
+
- Check if PR exists for current branch (via GitHub MCP or CLI)
|
|
283
|
+
- If no PR exists → skip CodeRabbit integration
|
|
284
|
+
- If PR exists → proceed with CodeRabbit handling
|
|
285
|
+
|
|
286
|
+
2. **Read CodeRabbit comments:**
|
|
287
|
+
- Use GitHub helpers to read PR comments (MCP → CLI → Local fallback)
|
|
288
|
+
- Detect CodeRabbit comments (pattern search + author check)
|
|
289
|
+
- Filter to only CodeRabbit comments
|
|
290
|
+
|
|
291
|
+
3. **For each CodeRabbit comment:**
|
|
292
|
+
- **Check if already resolved:**
|
|
293
|
+
- Read tracking file (`.sdd/github-resolved-issues.json`)
|
|
294
|
+
- If comment already resolved → skip
|
|
295
|
+
|
|
296
|
+
- **Check if issue is fixed in code:**
|
|
297
|
+
- Read file mentioned in comment
|
|
298
|
+
- Compare comment suggestion with current code
|
|
299
|
+
- If issue already fixed → mark for resolution
|
|
300
|
+
|
|
301
|
+
- **If issue fixed:**
|
|
302
|
+
- Resolve conversation via GitHub helpers
|
|
303
|
+
- Update tracking file with resolution
|
|
304
|
+
- Add comment: "Issue resolved in code"
|
|
305
|
+
|
|
306
|
+
- **If issue not fixed:**
|
|
307
|
+
- Evaluate if issue should be resolved (check importance, refactoring rules)
|
|
308
|
+
- If should be resolved → create task in backlog
|
|
309
|
+
- If shouldn't be resolved → provide argumentation (log to Linear/GitHub/local)
|
|
310
|
+
|
|
311
|
+
4. **Report CodeRabbit handling:**
|
|
312
|
+
- Summarize: "X CodeRabbit comments processed, Y resolved, Z deferred"
|
|
313
|
+
- List any deferred issues with reasoning
|
|
314
|
+
|
|
315
|
+
**Error Handling:**
|
|
316
|
+
- If GitHub MCP/CLI unavailable → skip CodeRabbit integration, continue workflow
|
|
317
|
+
- If PR not found → skip CodeRabbit integration, continue workflow
|
|
318
|
+
- If comment parsing fails → log error, continue with next comment
|
|
319
|
+
- Never block workflow due to CodeRabbit integration failures
|
|
320
|
+
|
|
321
|
+
**ONLY READ IF validated and ready for PR:**
|
|
322
|
+
- Read `.cursor/commands/_shared/git-workflow.md` ONLY IF task validated AND ready for PR
|
|
323
|
+
- Read `.cursor/commands/_shared/pr-description.md` ONLY IF PR creation/update needed
|
|
324
|
+
- Read `.cursor/commands/_shared/deployment-detection.md` ONLY IF deployment provider detected
|
|
325
|
+
- Read sections: "State Detection" (lines 81-150), "Next Step Logic" (lines 151-220) from git-workflow.md; "PR Description Template" (lines 1-100) from pr-description.md; "Provider Detection" (lines 13-91), "Preview Deployment Logic" (lines 92-194) from deployment-detection.md
|
|
326
|
+
- Skip if: Task not validated OR not ready for PR → skip Git workflow automation entirely
|
|
327
|
+
- Check condition: Verify validation status and PR readiness before reading helpers
|
|
328
|
+
|
|
329
|
+
1. **Update State Tracking:**
|
|
330
|
+
- Read current state from `.sdd/git-state.json`
|
|
331
|
+
- Update state: `validated: true`
|
|
332
|
+
- Update commit count if commits were made
|
|
333
|
+
- Update last commit hash
|
|
334
|
+
- Save updated state
|
|
335
|
+
|
|
336
|
+
2. **Check if PR Already Exists:**
|
|
337
|
+
- Get current branch name
|
|
338
|
+
- Check if PR exists for branch (via GitHub MCP or CLI)
|
|
339
|
+
- If PR exists → skip to Step 3 (update PR if needed)
|
|
340
|
+
- If no PR → proceed to Step 2.1 (create PR)
|
|
341
|
+
|
|
342
|
+
3. **Generate Commit Message (if changes not committed):**
|
|
343
|
+
- If uncommitted changes exist → generate commit message
|
|
344
|
+
- Use git-workflow.md helper:
|
|
345
|
+
- Analyze git diff for changed files
|
|
346
|
+
- Determine commit type (feat/fix/refactor/etc.)
|
|
347
|
+
- Generate description from task/changes
|
|
348
|
+
- Format: `[task-id] type: description`
|
|
349
|
+
- Ask user: "Should I commit these changes with message: '[generated message]'?"
|
|
350
|
+
- If yes → commit with generated message
|
|
351
|
+
- Update state: increment commit count
|
|
352
|
+
|
|
353
|
+
4. **Create PR (if no PR exists and validated):**
|
|
354
|
+
|
|
355
|
+
**4.1) Generate PR Description:**
|
|
356
|
+
- Use pr-description.md helper:
|
|
357
|
+
- Read task spec (from `work/backlog/tasks.local.md` or task-level spec)
|
|
358
|
+
- Generate changes summary from git diff and commit history
|
|
359
|
+
- Extract acceptance criteria from task
|
|
360
|
+
- Include testing notes
|
|
361
|
+
- Reference related Linear issues (if Linear enabled)
|
|
362
|
+
- Generate PR description using template
|
|
363
|
+
|
|
364
|
+
**4.2) Push Branch (if not pushed):**
|
|
365
|
+
- Check if branch is pushed to remote
|
|
366
|
+
- If not pushed → push branch: `git push -u origin <branch-name>`
|
|
367
|
+
- Update state: `branch.pushed: true`
|
|
368
|
+
|
|
369
|
+
**4.3) Create PR:**
|
|
370
|
+
- Use GitHub helpers (MCP → CLI → Local fallback)
|
|
371
|
+
- Create PR with generated description
|
|
372
|
+
- Set PR title: `[task-id] [task description]`
|
|
373
|
+
- Link to Linear issue (if Linear enabled and task is Linear issue)
|
|
374
|
+
- Get PR number and URL
|
|
375
|
+
- Update state: `pr: {exists: true, number: X, url: Y, status: 'open'}`
|
|
376
|
+
|
|
377
|
+
5. **Handle Deployment (if PR created):**
|
|
378
|
+
|
|
379
|
+
**5.1) Detect Deployment Provider:**
|
|
380
|
+
- Use deployment-detection.md helper:
|
|
381
|
+
- Check for provider config files (vercel.json, railway.json, netlify.toml)
|
|
382
|
+
- Read spec/08-infrastructure.md for deployment config
|
|
383
|
+
- Detect provider (Vercel, Railway, Netlify, etc.)
|
|
384
|
+
|
|
385
|
+
**5.2) Trigger Preview Deployment (if provider detected):**
|
|
386
|
+
- If provider supports auto-deployment → wait for deployment
|
|
387
|
+
- If manual deployment needed → trigger deployment (if possible)
|
|
388
|
+
- Check deployment status (with timeout)
|
|
389
|
+
- Get preview URL when deployment completes
|
|
390
|
+
|
|
391
|
+
**5.3) Update PR with Preview URL:**
|
|
392
|
+
- If preview URL available → add to PR description
|
|
393
|
+
- Format: `### Preview\n[Preview URL](url)`
|
|
394
|
+
- Update PR via GitHub helpers
|
|
395
|
+
- Update state: `deployment: {provider: X, preview_url: Y, status: 'success'}`
|
|
396
|
+
|
|
397
|
+
6. **Determine Next Step:**
|
|
398
|
+
- Based on current state, determine next action:
|
|
399
|
+
- "PR created, deployed → Ready for review"
|
|
400
|
+
- "PR created, deployment pending → Waiting for deployment"
|
|
401
|
+
- "PR created, no deployment → PR ready (no preview available)"
|
|
402
|
+
- Report next step to user
|
|
403
|
+
|
|
404
|
+
**ONLY READ IF preview URL available OR performance enabled:**
|
|
405
|
+
- Read `.cursor/commands/_shared/performance-monitoring.md` ONLY IF preview URL available OR performance monitoring enabled
|
|
406
|
+
- Read sections: "Performance Metrics Collection" (lines 14-80), "Lighthouse Integration" (lines 199-250)
|
|
407
|
+
- Skip if: No preview URL AND performance not enabled → skip performance monitoring entirely
|
|
408
|
+
- Check condition: Verify preview URL availability or performance config before reading helper
|
|
409
|
+
|
|
410
|
+
1. **Collect Performance Metrics (if enabled):**
|
|
411
|
+
- Measure bundle size (if build output available)
|
|
412
|
+
- Track load time metrics (if preview URL available)
|
|
413
|
+
- Monitor API response times (if applicable)
|
|
414
|
+
- Store metrics in `.sdd/performance-metrics.json`
|
|
415
|
+
|
|
416
|
+
2. **Run Lighthouse Audit (if preview URL available):**
|
|
417
|
+
- Run Lighthouse audit on preview URL
|
|
418
|
+
- Collect performance, accessibility, SEO, best practices scores
|
|
419
|
+
- Parse Lighthouse JSON output
|
|
420
|
+
- Compare scores with baseline (if available)
|
|
421
|
+
|
|
422
|
+
3. **Detect Performance Regressions:**
|
|
423
|
+
- Compare current metrics with previous build/commit
|
|
424
|
+
- Flag significant regressions (> 20% degradation)
|
|
425
|
+
- Check performance budgets (if configured)
|
|
426
|
+
- Report performance status
|
|
427
|
+
|
|
428
|
+
4. **Add Performance Report to PR (if PR exists):**
|
|
429
|
+
- Add performance metrics to PR comment
|
|
430
|
+
- Show Lighthouse scores
|
|
431
|
+
- Highlight regressions
|
|
432
|
+
- Suggest optimizations (if needed)
|
|
433
|
+
|
|
434
|
+
**Error Handling:**
|
|
435
|
+
- If performance monitoring unavailable → skip monitoring, continue workflow
|
|
436
|
+
- If Lighthouse audit fails → skip Lighthouse, continue workflow
|
|
437
|
+
- If metrics collection fails → skip metrics, continue workflow
|
|
438
|
+
- Never block workflow due to performance monitoring failures
|
|
439
|
+
|
|
440
|
+
**Error Handling:**
|
|
441
|
+
- If state file not writable → continue without state tracking (degraded mode)
|
|
442
|
+
- If PR creation fails → report error, allow manual PR creation
|
|
443
|
+
- If deployment fails → report error, continue without preview URL
|
|
444
|
+
- If GitHub MCP/CLI unavailable → skip PR creation, continue workflow
|
|
445
|
+
- Never block workflow due to automation failures
|
|
446
|
+
|
|
447
|
+
**User Preferences:**
|
|
448
|
+
- Ask user: "Should I auto-create PR after validation?" (if not already configured)
|
|
449
|
+
- Ask user: "Should I auto-deploy to preview?" (if deployment available)
|
|
450
|
+
- Respect user preferences for automation level
|
|
451
|
+
|
|
61
452
|
PRINCIPLES:
|
|
62
453
|
- Validation is about confidence, not perfection
|
|
63
454
|
- Evidence beats assumptions
|
|
@@ -63,3 +63,74 @@ A task is only considered complete when:
|
|
|
63
63
|
|
|
64
64
|
## Goal
|
|
65
65
|
Enable focused, professional execution that aligns implementation with intent.
|
|
66
|
+
|
|
67
|
+
## Error recovery automation
|
|
68
|
+
**Common error patterns and automatic recovery:**
|
|
69
|
+
- If build fails with undefined property errors → automatically suggest: "Try cleaning build cache and rebuilding"
|
|
70
|
+
- If lockfile outdated → automatically suggest: "Run package manager install to sync lockfile"
|
|
71
|
+
- If dependency missing → automatically suggest: "Add to package.json (or equivalent) and run install"
|
|
72
|
+
- If config error → check against known patterns for the framework/library and suggest fix
|
|
73
|
+
- Document solutions in openmemory.md for future reference
|
|
74
|
+
|
|
75
|
+
**Error recovery workflow:**
|
|
76
|
+
1. Identify error type (build, dependency, config, runtime)
|
|
77
|
+
2. Check openmemory.md for known solutions
|
|
78
|
+
3. If known solution exists → apply automatically (with user confirmation)
|
|
79
|
+
4. If unknown → document in openmemory.md after solving
|
|
80
|
+
|
|
81
|
+
## Memory storage automation
|
|
82
|
+
**Automatic memory storage triggers:**
|
|
83
|
+
- Before task completion → automatically check if memory should be stored
|
|
84
|
+
- If 3+ files changed OR new component created → store memory
|
|
85
|
+
- If design pattern emerges → store in spec/05-decisions.md AND memory
|
|
86
|
+
- If infrastructure decision made → store in spec/05-decisions.md AND memory
|
|
87
|
+
|
|
88
|
+
**Memory storage checklist (before task completion):**
|
|
89
|
+
- [ ] Memory stored? (if applicable)
|
|
90
|
+
- [ ] openmemory.md updated? (if memory stored)
|
|
91
|
+
- [ ] Spec updated? (if decision/pattern emerged)
|
|
92
|
+
- [ ] Decisions documented in spec/05-decisions.md? (if applicable)
|
|
93
|
+
|
|
94
|
+
**Always update openmemory.md before storing memory:**
|
|
95
|
+
- Review content → check namespaces → assign namespace if applicable
|
|
96
|
+
- Update Components section if new component
|
|
97
|
+
- Update Patterns section if new pattern
|
|
98
|
+
- Update Architecture section if architecture change
|
|
99
|
+
|
|
100
|
+
## Spec update automation
|
|
101
|
+
**Automatic spec update triggers:**
|
|
102
|
+
- If design pattern emerges → update spec/05-decisions.md
|
|
103
|
+
- If infrastructure decision made → update spec/05-decisions.md
|
|
104
|
+
- If new risk discovered → update spec/03-risks.md
|
|
105
|
+
- If new question emerges → update spec/04-open-questions.md
|
|
106
|
+
|
|
107
|
+
**Spec update checklist (before task completion):**
|
|
108
|
+
- [ ] Design pattern documented? (if applicable)
|
|
109
|
+
- [ ] Infrastructure decision documented? (if applicable)
|
|
110
|
+
- [ ] New risk added? (if applicable)
|
|
111
|
+
- [ ] New question added? (if applicable)
|
|
112
|
+
- [ ] Spec still accurate? (verify and update if needed)
|
|
113
|
+
|
|
114
|
+
## Spec health checks
|
|
115
|
+
**Automatic spec health monitoring:**
|
|
116
|
+
- Detect spec-code divergence (features in code not in spec, features in spec not in code)
|
|
117
|
+
- Warn when spec is outdated (spec not updated recently, implementation changed significantly)
|
|
118
|
+
- Suggest spec updates when discrepancies found
|
|
119
|
+
- Track spec evolution (spec age, update frequency, completeness)
|
|
120
|
+
|
|
121
|
+
**Spec health check triggers:**
|
|
122
|
+
- Before task start → check if spec is up-to-date
|
|
123
|
+
- After task completion → check if spec needs update
|
|
124
|
+
- Periodically → suggest spec sync if divergence detected
|
|
125
|
+
|
|
126
|
+
**Spec health indicators:**
|
|
127
|
+
- Spec age: How long since last update
|
|
128
|
+
- Spec completeness: Are all features documented?
|
|
129
|
+
- Spec accuracy: Does spec match implementation?
|
|
130
|
+
- Spec traceability: Can requirements be traced to code?
|
|
131
|
+
|
|
132
|
+
**When spec health issues detected:**
|
|
133
|
+
- Suggest `/spec/sync` if divergence found
|
|
134
|
+
- Suggest `/spec/evolve` if spec needs updating
|
|
135
|
+
- Suggest `/spec/audit` if compliance check needed
|
|
136
|
+
- Warn user about outdated spec
|
|
@@ -14,7 +14,7 @@ entire session.
|
|
|
14
14
|
|
|
15
15
|
Memory = accumulated understanding of codebase + user preferences. Like a colleague who's worked here months.
|
|
16
16
|
|
|
17
|
-
**project_id:** spec
|
|
17
|
+
**project_id:** eskoubar95/spec
|
|
18
18
|
|
|
19
19
|
## NON-NEGOTIABLE: Memory-First Development
|
|
20
20
|
|