@anhth2/spec-driven-dev-plugin 0.7.0 โ 0.9.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/ARCHITECTURE.md +6 -2
- package/bin/index.js +105 -0
- package/commands/debug.md +189 -1
- package/commands/debug.tmpl +16 -0
- package/commands/define-product.md +94 -1
- package/commands/fix-bug.md +190 -1
- package/commands/fix-bug.tmpl +17 -0
- package/commands/generate-bdd.md +314 -14
- package/commands/generate-bdd.tmpl +220 -13
- package/commands/generate-code.md +191 -3
- package/commands/generate-code.tmpl +97 -2
- package/commands/generate-design-spec.md +811 -0
- package/commands/generate-design-spec.tmpl +399 -0
- package/commands/generate-prd.md +133 -1
- package/commands/generate-prd.tmpl +39 -0
- package/commands/generate-spec-manifest.md +576 -0
- package/commands/generate-spec-manifest.tmpl +164 -0
- package/commands/generate-tech-docs.md +116 -2
- package/commands/generate-tech-docs.tmpl +22 -1
- package/commands/generate-tests.md +94 -1
- package/commands/learn.md +554 -0
- package/commands/learn.tmpl +63 -0
- package/commands/propose-scenario.md +521 -0
- package/commands/propose-scenario.tmpl +109 -0
- package/commands/refine-prd.md +94 -1
- package/commands/report-bug.md +543 -0
- package/commands/report-bug.tmpl +131 -0
- package/commands/review-code.md +190 -1
- package/commands/review-code.tmpl +17 -0
- package/commands/review-context.md +134 -1
- package/commands/review-context.tmpl +40 -0
- package/commands/review-tech-docs.md +176 -5
- package/commands/review-tech-docs.tmpl +82 -4
- package/commands/run-tests.md +119 -1
- package/commands/run-tests.tmpl +25 -0
- package/commands/setup-ai-first.md +142 -4
- package/commands/setup-ai-first.tmpl +135 -3
- package/commands/smoke-test.md +94 -1
- package/commands/sync.md +405 -0
- package/commands/sync.tmpl +345 -0
- package/commands/update-framework.md +211 -0
- package/commands/update-framework.tmpl +151 -0
- package/commands/validate-traces.md +152 -3
- package/commands/validate-traces.tmpl +58 -2
- package/core/FRAMEWORK_VERSION +1 -1
- package/core/commands/debug.md +189 -1
- package/core/commands/define-product.md +94 -1
- package/core/commands/fix-bug.md +190 -1
- package/core/commands/generate-bdd.md +314 -14
- package/core/commands/generate-code.md +191 -3
- package/core/commands/generate-design-spec.md +811 -0
- package/core/commands/generate-prd.md +133 -1
- package/core/commands/generate-spec-manifest.md +576 -0
- package/core/commands/generate-tech-docs.md +116 -2
- package/core/commands/generate-tests.md +94 -1
- package/core/commands/learn.md +554 -0
- package/core/commands/propose-scenario.md +521 -0
- package/core/commands/refine-prd.md +94 -1
- package/core/commands/report-bug.md +543 -0
- package/core/commands/review-code.md +190 -1
- package/core/commands/review-context.md +134 -1
- package/core/commands/review-tech-docs.md +176 -5
- package/core/commands/run-tests.md +119 -1
- package/core/commands/setup-ai-first.md +142 -4
- package/core/commands/smoke-test.md +94 -1
- package/core/commands/sync.md +405 -0
- package/core/commands/update-framework.md +211 -0
- package/core/commands/validate-traces.md +152 -3
- package/core/skills/code/SKILL.md +101 -2
- package/core/skills/debug/SKILL.md +108 -3
- package/core/skills/design-spec/SKILL.md +507 -0
- package/core/skills/discovery/SKILL.md +94 -1
- package/core/skills/prd/SKILL.md +14 -2
- package/core/skills/setup-ai-first/SKILL.md +7 -1
- package/core/skills/spec/SKILL.md +14 -2
- package/core/skills/test/SKILL.md +195 -3
- package/core/steps/capture-lesson.md +79 -0
- package/core/steps/context-loader.md +87 -0
- package/core/steps/report-footer.md +7 -1
- package/core/templates/design-spec.template.md +209 -0
- package/core/templates/project-context.yaml +40 -0
- package/package.json +1 -1
- package/skills/code/SKILL.md +101 -2
- package/skills/debug/SKILL.md +108 -3
- package/skills/design-spec/SKILL.md +507 -0
- package/skills/design-spec/SKILL.tmpl +95 -0
- package/skills/discovery/SKILL.md +94 -1
- package/skills/prd/SKILL.md +14 -2
- package/skills/setup-ai-first/SKILL.md +7 -1
- package/skills/spec/SKILL.md +14 -2
- package/skills/test/SKILL.md +195 -3
- package/steps/capture-lesson.md +79 -0
- package/steps/context-loader.md +87 -0
- package/steps/report-footer.md +7 -1
- package/templates/design-spec.template.md +209 -0
- package/templates/project-context.yaml +40 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# {TICKET-ID} {Feature Name} โ Design Spec [{Platform}]
|
|
2
|
+
|
|
3
|
+
<!--
|
|
4
|
+
Template nร y ฤฦฐแปฃc sแปญ dแปฅng bแปi /generate-design-spec.
|
|
5
|
+
Platform = web | app | app-ios | app-android
|
|
6
|
+
|
|
7
|
+
PLATFORM SECTIONS:
|
|
8
|
+
- Section 3A + 4A: chแป dร nh cho web (react/nextjs/vue/angular). Xรณa C khi dรนng cho web.
|
|
9
|
+
- Section 3C + 4B: chแป dร nh cho app (flutter/react-native/ios/android). Xรณa A+B khi dรนng cho app.
|
|
10
|
+
|
|
11
|
+
COMPONENT MAPPING (bแบฏt buแปc):
|
|
12
|
+
- Mแปi component trong Component Inventory PHแบขI ฤฦฐแปฃc map vแปi figma-components/{module}.md
|
|
13
|
+
- โ
Matched โ dรนng Code Component vร Import Path tแปซ catalog
|
|
14
|
+
- โ ๏ธ TODO โ ฤรกnh dแบฅu [TODO โ chฦฐa implement]
|
|
15
|
+
- โ Chฦฐa cรณ โ ฤรกnh dแบฅu [NEW โ cแบงn confirm vแปi designer]
|
|
16
|
+
|
|
17
|
+
SCREEN STATES (bแบฏt buแปc mแปi mร n):
|
|
18
|
+
- Tแปi thiแปu: default, loading, error
|
|
19
|
+
- Thรชm "empty" nแบฟu mร n cรณ thแป hiแปn thแป trแบกng thรกi khรดng cรณ dแปฏ liแปu
|
|
20
|
+
- Thรชm "success" nแบฟu action tแบกo ra trแบกng thรกi xรกc nhแบญn riรชng biแปt
|
|
21
|
+
-->
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Metadata
|
|
26
|
+
|
|
27
|
+
| Field | Value |
|
|
28
|
+
|--------------------|---------------------------------------------------------------|
|
|
29
|
+
| **Spec ID** | {TICKET-ID}-DS-{platform} |
|
|
30
|
+
| **Version** | 1.0 |
|
|
31
|
+
| **Status** | draft / approved |
|
|
32
|
+
| **Platform** | {web \| app \| app-ios \| app-android} |
|
|
33
|
+
| **Module** | {active_module} |
|
|
34
|
+
| **Service** | {active_service} |
|
|
35
|
+
| **Domain** | {domain} |
|
|
36
|
+
| **Business PRD** | [{TICKET-ID}](./{TICKET-ID}-slug.md) |
|
|
37
|
+
| **Figma** | {figma_url or TBD} |
|
|
38
|
+
| **Author** | {PO name or "AI-assisted"} |
|
|
39
|
+
| **Created** | {YYYY-MM-DD} |
|
|
40
|
+
| **Updated** | {YYYY-MM-DD} |
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
# 1. Screen Inventory
|
|
45
|
+
|
|
46
|
+
| # | Screen Name | Entry Point | Figma Frame | Notes |
|
|
47
|
+
|---|-------------|-------------|-------------|-------|
|
|
48
|
+
| 1 | {Screen 1} | {how user arrives} | [Frame]({figma_url}) | |
|
|
49
|
+
| 2 | {Screen 2} | {entry point} | [Frame]({figma_url}) | |
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
# 2. Screen Specs
|
|
54
|
+
|
|
55
|
+
## Screen 1: {Screen Name}
|
|
56
|
+
|
|
57
|
+
**Figma**: [{Frame name}]({figma_frame_url})
|
|
58
|
+
|
|
59
|
+
### Layout
|
|
60
|
+
|
|
61
|
+
{Grid / max-width / padding / spacing โ reference design tokens where applicable}
|
|
62
|
+
|
|
63
|
+
### Component Inventory
|
|
64
|
+
|
|
65
|
+
| Component (Figma) | Code Component | Import Path | States | Notes |
|
|
66
|
+
|------------------------|----------------|------------------------|---------------------------------|---------|
|
|
67
|
+
| {Figma/Button/Primary} | Button | @/components/ui/Button | default, loading, disabled | |
|
|
68
|
+
| {Figma/Input/Text} | TextInput | @/components/ui/Input | default, focus, error, disabled | |
|
|
69
|
+
|
|
70
|
+
### Screen States
|
|
71
|
+
|
|
72
|
+
| State | Trigger | UI Behavior |
|
|
73
|
+
|-----------|----------------------------------|----------------------------------------------------------|
|
|
74
|
+
| default | Screen loaded, data available | {Describe full rendered appearance} |
|
|
75
|
+
| loading | API call in flight | {Skeleton / spinner position and style} |
|
|
76
|
+
| error | API failure / validation error | {Toast / inline error / error screen + recovery CTA} |
|
|
77
|
+
| empty | No data returned | {Illustration + CTA โ e.g., "No items yet. Add one โ"} |
|
|
78
|
+
| success | Action completed (if applicable) | {Confirmation toast / navigation / visual change} |
|
|
79
|
+
|
|
80
|
+
### Actions & Navigation
|
|
81
|
+
|
|
82
|
+
| Action | Trigger | Result |
|
|
83
|
+
|-----------------|---------------------------|---------------------------------------------------|
|
|
84
|
+
| {Action name} | Tap/click {element} | Navigate to {Screen N} / Open {Modal name} |
|
|
85
|
+
| {Back/Cancel} | Back gesture / button | Return to {previous screen} without saving |
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
<!-- Repeat ## Screen N for each additional screen -->
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
# 3. Interaction Patterns
|
|
94
|
+
|
|
95
|
+
<!-- === WEB ONLY โ delete this section for app === -->
|
|
96
|
+
|
|
97
|
+
## A. Responsive Behavior *(web)*
|
|
98
|
+
|
|
99
|
+
| Breakpoint | Width | Layout Changes |
|
|
100
|
+
|------------|------------|---------------------------------------------|
|
|
101
|
+
| Mobile | < 768px | {Single column, bottom nav, full-width CTA} |
|
|
102
|
+
| Tablet | 768โ1279px | {2-col grid, sidebar collapsed} |
|
|
103
|
+
| Desktop | โฅ 1280px | {Full layout, max-width 1440px} |
|
|
104
|
+
|
|
105
|
+
## B. Hover / Focus / Keyboard *(web)*
|
|
106
|
+
|
|
107
|
+
| Element | Hover | Focus | Keyboard |
|
|
108
|
+
|----------------|-------------------------------|---------------------------------|---------------|
|
|
109
|
+
| Primary button | Background โ {color.hover} | Outline 2px {color.focus} | Enter / Space |
|
|
110
|
+
| Text input | Border โ {color.border.hover} | Border โ {color.primary} | Tab to focus |
|
|
111
|
+
|
|
112
|
+
<!-- === APP ONLY โ delete sections A+B for app === -->
|
|
113
|
+
|
|
114
|
+
## C. Gestures & Navigation *(app)*
|
|
115
|
+
|
|
116
|
+
| Gesture | Screen / Element | Behavior |
|
|
117
|
+
|----------------------|---------------------|---------------------------------------------|
|
|
118
|
+
| Back gesture | All screens | {Return / show "Discard changes?" dialog} |
|
|
119
|
+
| Pull-to-refresh | {Screen names} | Refresh data, spinner at top |
|
|
120
|
+
| Swipe left on row | {List item} | Reveal {Delete / Archive} action |
|
|
121
|
+
|
|
122
|
+
### Navigation Stack *(app)*
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
{e.g., BottomTab(Home) โ ListPage โ DetailPage โ EditPage}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Platform Conventions *(app)*
|
|
129
|
+
|
|
130
|
+
| Aspect | iOS | Android |
|
|
131
|
+
|------------------|-------------------------------------------|-------------------------------------|
|
|
132
|
+
| Navigation bar | Back button top-left, title centered | Up arrow, title left-aligned |
|
|
133
|
+
| Bottom sheet | UISheetPresentation, grabber visible | BottomSheet, drag handle |
|
|
134
|
+
| Dialog | Actions right-aligned | Actions left-aligned |
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
# 4. Platform Considerations
|
|
139
|
+
|
|
140
|
+
<!-- === WEB ONLY === -->
|
|
141
|
+
|
|
142
|
+
## A. Accessibility *(web)*
|
|
143
|
+
|
|
144
|
+
- [ ] All interactive elements reachable by Tab key โ no keyboard traps
|
|
145
|
+
- [ ] Focus trap inside modals
|
|
146
|
+
- [ ] Icon-only buttons have `aria-label`
|
|
147
|
+
- [ ] Dynamic content announces via `aria-live`
|
|
148
|
+
- [ ] WCAG AA contrast: text โฅ 4.5:1, large text โฅ 3:1
|
|
149
|
+
- [ ] Form inputs have visible labels (not placeholder-only)
|
|
150
|
+
|
|
151
|
+
<!-- === APP ONLY === -->
|
|
152
|
+
|
|
153
|
+
## B. Device & OS *(app)*
|
|
154
|
+
|
|
155
|
+
- [ ] Safe area insets applied (top + bottom) on all screens
|
|
156
|
+
- [ ] Minimum touch target: 44ร44pt (iOS) / 48ร48dp (Android)
|
|
157
|
+
- [ ] Tested on 375pt (iPhone SE) and 360dp (small Android)
|
|
158
|
+
- [ ] Deep link: `{scheme}://{host}/{path}` โ {screen name}
|
|
159
|
+
- [ ] Permissions: {Camera / Location / Notification} โ rationale copy TBD
|
|
160
|
+
- [ ] Offline: {screen name} shows cached data + banner; {action} disabled with tooltip
|
|
161
|
+
- [ ] Dark mode tested โ no hardcoded colors
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
# 5. AC-UI โ Design Acceptance Criteria
|
|
166
|
+
|
|
167
|
+
> Reviewed and signed off by **PO + Designer** before BDD generation.
|
|
168
|
+
> Complements business-level AC in [Business PRD](./{TICKET-ID}-slug.md).
|
|
169
|
+
|
|
170
|
+
| ID | Acceptance Criterion | Verified by |
|
|
171
|
+
|--------|--------------------------------------------------------------------------|-----------------|
|
|
172
|
+
| AC-UI1 | All screens match approved Figma frames within design-system tolerances | Designer |
|
|
173
|
+
| AC-UI2 | Loading state appears within 200ms of any API call initiation | QA |
|
|
174
|
+
| AC-UI3 | All error messages are visible, descriptive, and include a recovery CTA | PO |
|
|
175
|
+
| AC-UI4 | Empty states include illustration and call-to-action | PO + Designer |
|
|
176
|
+
| AC-UI5 | {Platform-specific criterion} | QA |
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
# Appendix
|
|
181
|
+
|
|
182
|
+
## Figma Summary
|
|
183
|
+
|
|
184
|
+
| Screen | Figma Frame | Status |
|
|
185
|
+
|------------|----------------------|--------------------------------|
|
|
186
|
+
| {Screen 1} | [Link]({url}) | โ
Ready / โณ WIP / โ Missing |
|
|
187
|
+
|
|
188
|
+
## Design Tokens Referenced
|
|
189
|
+
|
|
190
|
+
| Token | Value | Used in |
|
|
191
|
+
|-------------------|----------|----------------------------|
|
|
192
|
+
| `color.primary` | {#hex} | Buttons, links |
|
|
193
|
+
| `spacing.md` | {16px} | Standard vertical gap |
|
|
194
|
+
|
|
195
|
+
## References
|
|
196
|
+
|
|
197
|
+
- [{TICKET-ID}](./{TICKET-ID}-slug.md) โ Business PRD
|
|
198
|
+
|
|
199
|
+
## AI Assumptions
|
|
200
|
+
|
|
201
|
+
- {Assumption โ [AI DRAFT]}
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## Changelog
|
|
206
|
+
|
|
207
|
+
| Version | Date | Changes |
|
|
208
|
+
|---------|--------------|-----------------|
|
|
209
|
+
| 1.0 | {YYYY-MM-DD} | Initial version |
|
|
@@ -45,12 +45,26 @@ paths:
|
|
|
45
45
|
business_dictionary: "specs/domain-knowledge/business-dictionary.md"
|
|
46
46
|
core_entities: "specs/domain-knowledge/core-entities.md"
|
|
47
47
|
|
|
48
|
+
# Project Lessons (guardrails accumulated via /learn โ loaded by context-loader Step 6.7)
|
|
49
|
+
# Single-service default below. In umbrella/service mode, set this in each service's
|
|
50
|
+
# .agent/project-context.yaml to ".agent/project-lessons.md" (resolved per service_root).
|
|
51
|
+
lessons_file: "specs/domain-knowledge/lessons-learned.md"
|
|
52
|
+
|
|
48
53
|
# Tech Docs
|
|
49
54
|
tech_docs_dir: "tech-docs"
|
|
50
55
|
|
|
56
|
+
# Design Specs (FE/App platforms only โ web, app)
|
|
57
|
+
design_spec_dir: "specs/design-spec"
|
|
58
|
+
|
|
51
59
|
# Trace
|
|
52
60
|
trace_dir: ".trace"
|
|
53
61
|
|
|
62
|
+
# Tester feedback (written by /report-bug and /propose-scenario).
|
|
63
|
+
# These live in the SHARED spec repo so PO/Dev see them on their next /sync.
|
|
64
|
+
# In umbrella mode, context-loader auto-resolves them under {spec_source}/feedback/.
|
|
65
|
+
bug_reports_dir: "feedback/bug-reports"
|
|
66
|
+
bdd_proposals_dir: "feedback/bdd-proposals"
|
|
67
|
+
|
|
54
68
|
tech_stack:
|
|
55
69
|
language: "{{LANGUAGE}}" # e.g., Java 17 / TypeScript / C# / Go
|
|
56
70
|
framework: "{{FRAMEWORK}}" # e.g., Spring Boot 3.2 / Angular 17 / .NET 8
|
|
@@ -69,6 +83,32 @@ domains:
|
|
|
69
83
|
- "{{DOMAIN_1}}"
|
|
70
84
|
# - "{{DOMAIN_2}}"
|
|
71
85
|
|
|
86
|
+
# ----- Multi-Service / Umbrella Setup -----
|
|
87
|
+
# Fill this section ONLY if this is an UMBRELLA repo that contains multiple
|
|
88
|
+
# service submodules. Leave commented out for single-service projects.
|
|
89
|
+
#
|
|
90
|
+
# setup:
|
|
91
|
+
# mode: umbrella # "umbrella" | "single" (default: single)
|
|
92
|
+
# spec_source: "{{SPEC_SUBMODULE_PATH}}" # path to PO spec submodule, e.g. "free-trial-specs"
|
|
93
|
+
#
|
|
94
|
+
# When spec_source is set, context-loader auto-derives:
|
|
95
|
+
# prd_dir โ {spec_source}/specs/prd
|
|
96
|
+
# design_spec_dir โ {spec_source}/specs/design-spec
|
|
97
|
+
# domain_knowledge_dir โ {spec_source}/specs/domain-knowledge
|
|
98
|
+
# (You can still override these manually in paths: section below.)
|
|
99
|
+
#
|
|
100
|
+
# services: # domain โ service submodule routing
|
|
101
|
+
# {{DOMAIN_1}}: # must match @trace.domain in PRD files
|
|
102
|
+
# path: "{{SERVICE_SUBMODULE_DIR}}" # relative path to service submodule
|
|
103
|
+
# module: "{{STACK_MODULE}}" # e.g., java-spring, nextjs, flutter
|
|
104
|
+
# specs_dir: "{{SERVICE_SUBMODULE_DIR}}/specs/bdd"
|
|
105
|
+
# tech_docs_dir: "{{SERVICE_SUBMODULE_DIR}}/specs/tech-docs"
|
|
106
|
+
# {{DOMAIN_2}}:
|
|
107
|
+
# path: "{{SERVICE_2_DIR}}"
|
|
108
|
+
# module: "{{STACK_MODULE}}"
|
|
109
|
+
# specs_dir: "{{SERVICE_2_DIR}}/specs/bdd"
|
|
110
|
+
# tech_docs_dir: "{{SERVICE_2_DIR}}/specs/tech-docs"
|
|
111
|
+
|
|
72
112
|
# ----- Architecture -----
|
|
73
113
|
architecture:
|
|
74
114
|
style: "{{ARCH_STYLE}}" # e.g., Layered / Clean / Hexagonal
|
package/package.json
CHANGED
package/skills/code/SKILL.md
CHANGED
|
@@ -158,6 +158,7 @@ Read `.agent/project-context.yaml`. Extract and store:
|
|
|
158
158
|
- `paths.core_entities` โ path to core-entities.md
|
|
159
159
|
- `paths.tech_docs_dir` โ technical documentation root
|
|
160
160
|
- `paths.trace_dir` โ trace state directory
|
|
161
|
+
- `paths.design_spec_dir` โ Design Spec documents root (FE/App only)
|
|
161
162
|
|
|
162
163
|
If `paths` section is absent, use these defaults:
|
|
163
164
|
- `specs_dir` = `specs/bdd`
|
|
@@ -169,11 +170,75 @@ If `paths` section is absent, use these defaults:
|
|
|
169
170
|
- `core_entities` = `specs/domain-knowledge/core-entities.md`
|
|
170
171
|
- `tech_docs_dir` = `specs/tech-docs`
|
|
171
172
|
- `trace_dir` = `.trace`
|
|
173
|
+
- `design_spec_dir` = `specs/design-spec`
|
|
172
174
|
|
|
173
175
|
If `tech_stack.module` is set, also load `.agent/modules/{module}/stack-profile.yaml` if it exists.
|
|
174
176
|
|
|
175
177
|
---
|
|
176
178
|
|
|
179
|
+
## Step 1.5 โ [SERVICE ROUTING] Resolve service paths (umbrella mode)
|
|
180
|
+
|
|
181
|
+
*Skip this step entirely if `setup.mode` is not `"umbrella"` and `services` section is absent from project-context.yaml.*
|
|
182
|
+
|
|
183
|
+
If `services` section is present:
|
|
184
|
+
|
|
185
|
+
**1. Detect active domain** (in priority order):
|
|
186
|
+
- Read `@trace.domain` from target file frontmatter (if Gate loaded a target file)
|
|
187
|
+
- Extract from target file path: segment immediately after `prd_dir` base path
|
|
188
|
+
*(e.g., `specs/prd/user/FEAT-01.md` โ domain = `user`)*
|
|
189
|
+
- If `$ARGUMENTS` contains a path, extract the segment after `prd_dir`
|
|
190
|
+
|
|
191
|
+
**2. Route to service** โ if active domain matches a key in `services`:
|
|
192
|
+
- Override `paths.specs_dir` โ `services.{domain}.specs_dir`
|
|
193
|
+
- Override `paths.tech_docs_dir` โ `services.{domain}.tech_docs_dir`
|
|
194
|
+
- Store `active_service` = `services.{domain}.path`
|
|
195
|
+
- Store `active_service_module` = `services.{domain}.module`
|
|
196
|
+
- If service has its own `module` โ use it as `active_module` (overrides `tech_stack.module`)
|
|
197
|
+
|
|
198
|
+
**3. Fallback** โ if domain not detected or no matching service key:
|
|
199
|
+
- Keep default paths from Step 1
|
|
200
|
+
- Set `active_service = unresolved`
|
|
201
|
+
|
|
202
|
+
**4. Spec source auto-override** โ if `setup.spec_source` is set AND the corresponding path was not already explicitly set in `paths:`:
|
|
203
|
+
- Override `paths.prd_dir` โ `{spec_source}/specs/prd`
|
|
204
|
+
- Override `paths.design_spec_dir` โ `{spec_source}/specs/design-spec`
|
|
205
|
+
- Override `paths.domain_knowledge_dir` โ `{spec_source}/specs/domain-knowledge`
|
|
206
|
+
- Override `paths.business_dictionary` โ `{spec_source}/specs/domain-knowledge/business-dictionary.md`
|
|
207
|
+
- Override `paths.core_entities` โ `{spec_source}/specs/domain-knowledge/core-entities.md`
|
|
208
|
+
- Override `paths.bug_reports_dir` โ `{spec_source}/feedback/bug-reports`
|
|
209
|
+
- Override `paths.bdd_proposals_dir` โ `{spec_source}/feedback/bdd-proposals`
|
|
210
|
+
|
|
211
|
+
> **Why under `spec_source`:** tester feedback (`/report-bug`, `/propose-scenario`) must land in the **shared spec repo** so PO/Dev see it when they `/sync`. In single-service mode (no `spec_source`), these default to `feedback/bug-reports` and `feedback/bdd-proposals` at repo root โ still shared, same repo.
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## Step 1.6 โ [SERVICE CONVENTIONS] Load service-specific conventions (umbrella mode)
|
|
216
|
+
|
|
217
|
+
*Skip this step entirely if `active_service` is `"unresolved"` or context is single-service mode.*
|
|
218
|
+
|
|
219
|
+
When `active_service` has been resolved to a real path in Step 1.5 (e.g., `user-service/`):
|
|
220
|
+
|
|
221
|
+
**1. Locate service config** โ try in priority order:
|
|
222
|
+
- `{active_service}/.agent/project-context.yaml`
|
|
223
|
+
- `{active_service}/project-context.yaml`
|
|
224
|
+
|
|
225
|
+
**2. If found, override with service-specific values:**
|
|
226
|
+
|
|
227
|
+
| Variable | Source |
|
|
228
|
+
|----------|--------|
|
|
229
|
+
| `conventions.test_command` | service's `conventions.test_command` |
|
|
230
|
+
| `conventions.build_command` | service's `conventions.build_command` |
|
|
231
|
+
| `paths.trace_dir` | `{active_service}/{service paths.trace_dir}` โ default: `{active_service}/.trace` |
|
|
232
|
+
| `paths.specs_dir` | `{active_service}/{service paths.specs_dir}` (if set in service config, else keep Step 1.5 override) |
|
|
233
|
+
|
|
234
|
+
**3. Store** `service_root = {active_service}` as the working directory anchor for all downstream commands:
|
|
235
|
+
- Shell commands (`/run-tests`, `/generate-tests`) run **from within** `service_root`
|
|
236
|
+
- File write operations (test files, trace TSVs) use paths **relative to** `service_root`
|
|
237
|
+
|
|
238
|
+
**4. If service config not found** โ keep umbrella defaults, still set `service_root = {active_service}` (path anchor is always needed even without a config override).
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
177
242
|
## Step 2 โ [PROJECT-CONFIG] Load module stack profile (conditional)
|
|
178
243
|
|
|
179
244
|
If `tech_stack.module` is set, read `.agent/modules/{module}/stack-profile.yaml`.
|
|
@@ -264,6 +329,25 @@ These two variables (`active_module`, `platform_type`) are the canonical source
|
|
|
264
329
|
|
|
265
330
|
---
|
|
266
331
|
|
|
332
|
+
## Step 6.7 โ [GUARDRAILS] Load Project Lessons (conditional)
|
|
333
|
+
|
|
334
|
+
*Accumulated mistakes the AI must not repeat in this project. These are added over time via `/learn`
|
|
335
|
+
or accepted during `/review-code`, `/fix-bug`, `/debug`.*
|
|
336
|
+
|
|
337
|
+
Resolve the lessons file path:
|
|
338
|
+
- Use `paths.lessons_file` if set (may be service-overridden in umbrella mode, Step 1.6)
|
|
339
|
+
- Else default `specs/domain-knowledge/lessons-learned.md`
|
|
340
|
+
- In umbrella/service mode (when `service_root` is set), if `paths.lessons_file` is unset, default to `{service_root}/.agent/project-lessons.md`
|
|
341
|
+
|
|
342
|
+
If the file exists, read it and store ALL lessons as **ACTIVE GUARDRAILS** for the session:
|
|
343
|
+
- Treat each lesson's **Rule** as a hard constraint โ same priority as CLAUDE.md coding standards (Step 3).
|
|
344
|
+
- Before generating or modifying any artifact (PRD, BDD, tech-doc, code, test), check the output against every lesson whose `category` matches the current command AND whose `scope` matches the target (domain / file).
|
|
345
|
+
- If a generated output would violate a lesson โ correct it **before** presenting, and note which lesson (`L-NNN`) was applied.
|
|
346
|
+
|
|
347
|
+
If the file does not exist โ skip silently (no lessons captured yet).
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
267
351
|
## Step 7 โ [RECAP] Working Memory Recap (anti-lost-in-middle)
|
|
268
352
|
|
|
269
353
|
After loading all context, synthesize and output a compact summary block.
|
|
@@ -279,6 +363,9 @@ Layers : {layer order from CLAUDE.md ยง2, e.g., Controller โ Facade โ Ser
|
|
|
279
363
|
Ticket : {ticket_prefix}-
|
|
280
364
|
Dict : {loaded โ N canonical terms, M banned terms | missing}
|
|
281
365
|
Entities : {loaded โ EntityA, EntityB, EntityC | missing}
|
|
366
|
+
Lessons : {loaded โ N guardrails | none yet}
|
|
367
|
+
Service : {active_service} ({active_service_module}) | single-service
|
|
368
|
+
Svc Root : {service_root} โ conventions + trace_dir loaded from service config | โ
|
|
282
369
|
Status : {FULL | PARTIAL โ missing: CLAUDE.md / business-dict / core-entities | MINIMAL}
|
|
283
370
|
```
|
|
284
371
|
|
|
@@ -412,7 +499,8 @@ Suggest the logical next command based on workflow phase:
|
|
|
412
499
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
413
500
|
| /generate-prd | `/refine-prd {prd-file}` then `/review-context {prd-file}` |
|
|
414
501
|
| /refine-prd | Open Review Board โ update PRD โ `/review-context {prd-file}` |
|
|
415
|
-
| /review-context (PRD) | `/generate-
|
|
502
|
+
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (then BDD after sign-off); BE: `/generate-bdd {prd-file}` directly; fix PRD if NEEDS_FIX |
|
|
503
|
+
| /generate-design-spec | Designer review โ Figma links confirmed โ PO + Designer sign-off โ `/generate-bdd {prd-file}` |
|
|
416
504
|
| /generate-bdd | `/review-context {feature-file}` to verify coverage |
|
|
417
505
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
|
|
418
506
|
| /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
|
|
@@ -426,6 +514,11 @@ Suggest the logical next command based on workflow phase:
|
|
|
426
514
|
| /validate-traces | DRIFT/UNTRACKED โ `/generate-code {UC-ID}`; GAP โ `/generate-tests {UC-ID}`; all OK โ create PR |
|
|
427
515
|
| /fix-bug | Create PR and link to ticket |
|
|
428
516
|
| /debug | `/fix-bug {ticket-id}` if fix needed |
|
|
517
|
+
| /report-bug | Send to dev (`/fix-bug {BUG-ID}`); if coverage gap โ `/propose-scenario {UC-ID}` |
|
|
518
|
+
| /propose-scenario | Notify PO/Dev to review the proposal in `feedback/bdd-proposals/` |
|
|
519
|
+
| /learn | Continue working โ lesson applies on next command |
|
|
520
|
+
| /sync | `/validate-traces` for full coverage; act on any `๐ฅ tester feedback` surfaced |
|
|
521
|
+
| /update-framework | Review `git diff .agent/`, commit; `/sync` for project content |
|
|
429
522
|
|
|
430
523
|
Format the footer as:
|
|
431
524
|
```
|
|
@@ -524,7 +617,8 @@ Suggest the logical next command based on workflow phase:
|
|
|
524
617
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
525
618
|
| /generate-prd | `/refine-prd {prd-file}` then `/review-context {prd-file}` |
|
|
526
619
|
| /refine-prd | Open Review Board โ update PRD โ `/review-context {prd-file}` |
|
|
527
|
-
| /review-context (PRD) | `/generate-
|
|
620
|
+
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (then BDD after sign-off); BE: `/generate-bdd {prd-file}` directly; fix PRD if NEEDS_FIX |
|
|
621
|
+
| /generate-design-spec | Designer review โ Figma links confirmed โ PO + Designer sign-off โ `/generate-bdd {prd-file}` |
|
|
528
622
|
| /generate-bdd | `/review-context {feature-file}` to verify coverage |
|
|
529
623
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
|
|
530
624
|
| /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
|
|
@@ -538,6 +632,11 @@ Suggest the logical next command based on workflow phase:
|
|
|
538
632
|
| /validate-traces | DRIFT/UNTRACKED โ `/generate-code {UC-ID}`; GAP โ `/generate-tests {UC-ID}`; all OK โ create PR |
|
|
539
633
|
| /fix-bug | Create PR and link to ticket |
|
|
540
634
|
| /debug | `/fix-bug {ticket-id}` if fix needed |
|
|
635
|
+
| /report-bug | Send to dev (`/fix-bug {BUG-ID}`); if coverage gap โ `/propose-scenario {UC-ID}` |
|
|
636
|
+
| /propose-scenario | Notify PO/Dev to review the proposal in `feedback/bdd-proposals/` |
|
|
637
|
+
| /learn | Continue working โ lesson applies on next command |
|
|
638
|
+
| /sync | `/validate-traces` for full coverage; act on any `๐ฅ tester feedback` surfaced |
|
|
639
|
+
| /update-framework | Review `git diff .agent/`, commit; `/sync` for project content |
|
|
541
640
|
|
|
542
641
|
Format the footer as:
|
|
543
642
|
```
|
package/skills/debug/SKILL.md
CHANGED
|
@@ -73,6 +73,7 @@ Read `.agent/project-context.yaml`. Extract and store:
|
|
|
73
73
|
- `paths.core_entities` โ path to core-entities.md
|
|
74
74
|
- `paths.tech_docs_dir` โ technical documentation root
|
|
75
75
|
- `paths.trace_dir` โ trace state directory
|
|
76
|
+
- `paths.design_spec_dir` โ Design Spec documents root (FE/App only)
|
|
76
77
|
|
|
77
78
|
If `paths` section is absent, use these defaults:
|
|
78
79
|
- `specs_dir` = `specs/bdd`
|
|
@@ -84,11 +85,75 @@ If `paths` section is absent, use these defaults:
|
|
|
84
85
|
- `core_entities` = `specs/domain-knowledge/core-entities.md`
|
|
85
86
|
- `tech_docs_dir` = `specs/tech-docs`
|
|
86
87
|
- `trace_dir` = `.trace`
|
|
88
|
+
- `design_spec_dir` = `specs/design-spec`
|
|
87
89
|
|
|
88
90
|
If `tech_stack.module` is set, also load `.agent/modules/{module}/stack-profile.yaml` if it exists.
|
|
89
91
|
|
|
90
92
|
---
|
|
91
93
|
|
|
94
|
+
## Step 1.5 โ [SERVICE ROUTING] Resolve service paths (umbrella mode)
|
|
95
|
+
|
|
96
|
+
*Skip this step entirely if `setup.mode` is not `"umbrella"` and `services` section is absent from project-context.yaml.*
|
|
97
|
+
|
|
98
|
+
If `services` section is present:
|
|
99
|
+
|
|
100
|
+
**1. Detect active domain** (in priority order):
|
|
101
|
+
- Read `@trace.domain` from target file frontmatter (if Gate loaded a target file)
|
|
102
|
+
- Extract from target file path: segment immediately after `prd_dir` base path
|
|
103
|
+
*(e.g., `specs/prd/user/FEAT-01.md` โ domain = `user`)*
|
|
104
|
+
- If `$ARGUMENTS` contains a path, extract the segment after `prd_dir`
|
|
105
|
+
|
|
106
|
+
**2. Route to service** โ if active domain matches a key in `services`:
|
|
107
|
+
- Override `paths.specs_dir` โ `services.{domain}.specs_dir`
|
|
108
|
+
- Override `paths.tech_docs_dir` โ `services.{domain}.tech_docs_dir`
|
|
109
|
+
- Store `active_service` = `services.{domain}.path`
|
|
110
|
+
- Store `active_service_module` = `services.{domain}.module`
|
|
111
|
+
- If service has its own `module` โ use it as `active_module` (overrides `tech_stack.module`)
|
|
112
|
+
|
|
113
|
+
**3. Fallback** โ if domain not detected or no matching service key:
|
|
114
|
+
- Keep default paths from Step 1
|
|
115
|
+
- Set `active_service = unresolved`
|
|
116
|
+
|
|
117
|
+
**4. Spec source auto-override** โ if `setup.spec_source` is set AND the corresponding path was not already explicitly set in `paths:`:
|
|
118
|
+
- Override `paths.prd_dir` โ `{spec_source}/specs/prd`
|
|
119
|
+
- Override `paths.design_spec_dir` โ `{spec_source}/specs/design-spec`
|
|
120
|
+
- Override `paths.domain_knowledge_dir` โ `{spec_source}/specs/domain-knowledge`
|
|
121
|
+
- Override `paths.business_dictionary` โ `{spec_source}/specs/domain-knowledge/business-dictionary.md`
|
|
122
|
+
- Override `paths.core_entities` โ `{spec_source}/specs/domain-knowledge/core-entities.md`
|
|
123
|
+
- Override `paths.bug_reports_dir` โ `{spec_source}/feedback/bug-reports`
|
|
124
|
+
- Override `paths.bdd_proposals_dir` โ `{spec_source}/feedback/bdd-proposals`
|
|
125
|
+
|
|
126
|
+
> **Why under `spec_source`:** tester feedback (`/report-bug`, `/propose-scenario`) must land in the **shared spec repo** so PO/Dev see it when they `/sync`. In single-service mode (no `spec_source`), these default to `feedback/bug-reports` and `feedback/bdd-proposals` at repo root โ still shared, same repo.
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Step 1.6 โ [SERVICE CONVENTIONS] Load service-specific conventions (umbrella mode)
|
|
131
|
+
|
|
132
|
+
*Skip this step entirely if `active_service` is `"unresolved"` or context is single-service mode.*
|
|
133
|
+
|
|
134
|
+
When `active_service` has been resolved to a real path in Step 1.5 (e.g., `user-service/`):
|
|
135
|
+
|
|
136
|
+
**1. Locate service config** โ try in priority order:
|
|
137
|
+
- `{active_service}/.agent/project-context.yaml`
|
|
138
|
+
- `{active_service}/project-context.yaml`
|
|
139
|
+
|
|
140
|
+
**2. If found, override with service-specific values:**
|
|
141
|
+
|
|
142
|
+
| Variable | Source |
|
|
143
|
+
|----------|--------|
|
|
144
|
+
| `conventions.test_command` | service's `conventions.test_command` |
|
|
145
|
+
| `conventions.build_command` | service's `conventions.build_command` |
|
|
146
|
+
| `paths.trace_dir` | `{active_service}/{service paths.trace_dir}` โ default: `{active_service}/.trace` |
|
|
147
|
+
| `paths.specs_dir` | `{active_service}/{service paths.specs_dir}` (if set in service config, else keep Step 1.5 override) |
|
|
148
|
+
|
|
149
|
+
**3. Store** `service_root = {active_service}` as the working directory anchor for all downstream commands:
|
|
150
|
+
- Shell commands (`/run-tests`, `/generate-tests`) run **from within** `service_root`
|
|
151
|
+
- File write operations (test files, trace TSVs) use paths **relative to** `service_root`
|
|
152
|
+
|
|
153
|
+
**4. If service config not found** โ keep umbrella defaults, still set `service_root = {active_service}` (path anchor is always needed even without a config override).
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
92
157
|
## Step 2 โ [PROJECT-CONFIG] Load module stack profile (conditional)
|
|
93
158
|
|
|
94
159
|
If `tech_stack.module` is set, read `.agent/modules/{module}/stack-profile.yaml`.
|
|
@@ -179,6 +244,25 @@ These two variables (`active_module`, `platform_type`) are the canonical source
|
|
|
179
244
|
|
|
180
245
|
---
|
|
181
246
|
|
|
247
|
+
## Step 6.7 โ [GUARDRAILS] Load Project Lessons (conditional)
|
|
248
|
+
|
|
249
|
+
*Accumulated mistakes the AI must not repeat in this project. These are added over time via `/learn`
|
|
250
|
+
or accepted during `/review-code`, `/fix-bug`, `/debug`.*
|
|
251
|
+
|
|
252
|
+
Resolve the lessons file path:
|
|
253
|
+
- Use `paths.lessons_file` if set (may be service-overridden in umbrella mode, Step 1.6)
|
|
254
|
+
- Else default `specs/domain-knowledge/lessons-learned.md`
|
|
255
|
+
- In umbrella/service mode (when `service_root` is set), if `paths.lessons_file` is unset, default to `{service_root}/.agent/project-lessons.md`
|
|
256
|
+
|
|
257
|
+
If the file exists, read it and store ALL lessons as **ACTIVE GUARDRAILS** for the session:
|
|
258
|
+
- Treat each lesson's **Rule** as a hard constraint โ same priority as CLAUDE.md coding standards (Step 3).
|
|
259
|
+
- Before generating or modifying any artifact (PRD, BDD, tech-doc, code, test), check the output against every lesson whose `category` matches the current command AND whose `scope` matches the target (domain / file).
|
|
260
|
+
- If a generated output would violate a lesson โ correct it **before** presenting, and note which lesson (`L-NNN`) was applied.
|
|
261
|
+
|
|
262
|
+
If the file does not exist โ skip silently (no lessons captured yet).
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
182
266
|
## Step 7 โ [RECAP] Working Memory Recap (anti-lost-in-middle)
|
|
183
267
|
|
|
184
268
|
After loading all context, synthesize and output a compact summary block.
|
|
@@ -194,6 +278,9 @@ Layers : {layer order from CLAUDE.md ยง2, e.g., Controller โ Facade โ Ser
|
|
|
194
278
|
Ticket : {ticket_prefix}-
|
|
195
279
|
Dict : {loaded โ N canonical terms, M banned terms | missing}
|
|
196
280
|
Entities : {loaded โ EntityA, EntityB, EntityC | missing}
|
|
281
|
+
Lessons : {loaded โ N guardrails | none yet}
|
|
282
|
+
Service : {active_service} ({active_service_module}) | single-service
|
|
283
|
+
Svc Root : {service_root} โ conventions + trace_dir loaded from service config | โ
|
|
197
284
|
Status : {FULL | PARTIAL โ missing: CLAUDE.md / business-dict / core-entities | MINIMAL}
|
|
198
285
|
```
|
|
199
286
|
|
|
@@ -350,7 +437,8 @@ Suggest the logical next command based on workflow phase:
|
|
|
350
437
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
351
438
|
| /generate-prd | `/refine-prd {prd-file}` then `/review-context {prd-file}` |
|
|
352
439
|
| /refine-prd | Open Review Board โ update PRD โ `/review-context {prd-file}` |
|
|
353
|
-
| /review-context (PRD) | `/generate-
|
|
440
|
+
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (then BDD after sign-off); BE: `/generate-bdd {prd-file}` directly; fix PRD if NEEDS_FIX |
|
|
441
|
+
| /generate-design-spec | Designer review โ Figma links confirmed โ PO + Designer sign-off โ `/generate-bdd {prd-file}` |
|
|
354
442
|
| /generate-bdd | `/review-context {feature-file}` to verify coverage |
|
|
355
443
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
|
|
356
444
|
| /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
|
|
@@ -364,6 +452,11 @@ Suggest the logical next command based on workflow phase:
|
|
|
364
452
|
| /validate-traces | DRIFT/UNTRACKED โ `/generate-code {UC-ID}`; GAP โ `/generate-tests {UC-ID}`; all OK โ create PR |
|
|
365
453
|
| /fix-bug | Create PR and link to ticket |
|
|
366
454
|
| /debug | `/fix-bug {ticket-id}` if fix needed |
|
|
455
|
+
| /report-bug | Send to dev (`/fix-bug {BUG-ID}`); if coverage gap โ `/propose-scenario {UC-ID}` |
|
|
456
|
+
| /propose-scenario | Notify PO/Dev to review the proposal in `feedback/bdd-proposals/` |
|
|
457
|
+
| /learn | Continue working โ lesson applies on next command |
|
|
458
|
+
| /sync | `/validate-traces` for full coverage; act on any `๐ฅ tester feedback` surfaced |
|
|
459
|
+
| /update-framework | Review `git diff .agent/`, commit; `/sync` for project content |
|
|
367
460
|
|
|
368
461
|
Format the footer as:
|
|
369
462
|
```
|
|
@@ -488,7 +581,8 @@ Suggest the logical next command based on workflow phase:
|
|
|
488
581
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
489
582
|
| /generate-prd | `/refine-prd {prd-file}` then `/review-context {prd-file}` |
|
|
490
583
|
| /refine-prd | Open Review Board โ update PRD โ `/review-context {prd-file}` |
|
|
491
|
-
| /review-context (PRD) | `/generate-
|
|
584
|
+
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (then BDD after sign-off); BE: `/generate-bdd {prd-file}` directly; fix PRD if NEEDS_FIX |
|
|
585
|
+
| /generate-design-spec | Designer review โ Figma links confirmed โ PO + Designer sign-off โ `/generate-bdd {prd-file}` |
|
|
492
586
|
| /generate-bdd | `/review-context {feature-file}` to verify coverage |
|
|
493
587
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
|
|
494
588
|
| /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
|
|
@@ -502,6 +596,11 @@ Suggest the logical next command based on workflow phase:
|
|
|
502
596
|
| /validate-traces | DRIFT/UNTRACKED โ `/generate-code {UC-ID}`; GAP โ `/generate-tests {UC-ID}`; all OK โ create PR |
|
|
503
597
|
| /fix-bug | Create PR and link to ticket |
|
|
504
598
|
| /debug | `/fix-bug {ticket-id}` if fix needed |
|
|
599
|
+
| /report-bug | Send to dev (`/fix-bug {BUG-ID}`); if coverage gap โ `/propose-scenario {UC-ID}` |
|
|
600
|
+
| /propose-scenario | Notify PO/Dev to review the proposal in `feedback/bdd-proposals/` |
|
|
601
|
+
| /learn | Continue working โ lesson applies on next command |
|
|
602
|
+
| /sync | `/validate-traces` for full coverage; act on any `๐ฅ tester feedback` surfaced |
|
|
603
|
+
| /update-framework | Review `git diff .agent/`, commit; `/sync` for project content |
|
|
505
604
|
|
|
506
605
|
Format the footer as:
|
|
507
606
|
```
|
|
@@ -583,7 +682,8 @@ Suggest the logical next command based on workflow phase:
|
|
|
583
682
|
| /define-product | `/generate-prd {product-definition-file}` |
|
|
584
683
|
| /generate-prd | `/refine-prd {prd-file}` then `/review-context {prd-file}` |
|
|
585
684
|
| /refine-prd | Open Review Board โ update PRD โ `/review-context {prd-file}` |
|
|
586
|
-
| /review-context (PRD) | `/generate-
|
|
685
|
+
| /review-context (PRD) | FE/App: `/generate-design-spec {prd-file}` (then BDD after sign-off); BE: `/generate-bdd {prd-file}` directly; fix PRD if NEEDS_FIX |
|
|
686
|
+
| /generate-design-spec | Designer review โ Figma links confirmed โ PO + Designer sign-off โ `/generate-bdd {prd-file}` |
|
|
587
687
|
| /generate-bdd | `/review-context {feature-file}` to verify coverage |
|
|
588
688
|
| /review-context (BDD) | `/generate-tech-docs {UC-ID}` if APPROVED; regenerate if NEEDS_FIX |
|
|
589
689
|
| /generate-tech-docs | `/review-tech-docs {tech-design-file}` |
|
|
@@ -597,6 +697,11 @@ Suggest the logical next command based on workflow phase:
|
|
|
597
697
|
| /validate-traces | DRIFT/UNTRACKED โ `/generate-code {UC-ID}`; GAP โ `/generate-tests {UC-ID}`; all OK โ create PR |
|
|
598
698
|
| /fix-bug | Create PR and link to ticket |
|
|
599
699
|
| /debug | `/fix-bug {ticket-id}` if fix needed |
|
|
700
|
+
| /report-bug | Send to dev (`/fix-bug {BUG-ID}`); if coverage gap โ `/propose-scenario {UC-ID}` |
|
|
701
|
+
| /propose-scenario | Notify PO/Dev to review the proposal in `feedback/bdd-proposals/` |
|
|
702
|
+
| /learn | Continue working โ lesson applies on next command |
|
|
703
|
+
| /sync | `/validate-traces` for full coverage; act on any `๐ฅ tester feedback` surfaced |
|
|
704
|
+
| /update-framework | Review `git diff .agent/`, commit; `/sync` for project content |
|
|
600
705
|
|
|
601
706
|
Format the footer as:
|
|
602
707
|
```
|