Merge pull request #1318 from gsd-build/feat/ui-phase-detection-1312
feat: auto-detect UI-heavy phases and surface /gsd:ui-phase
This commit is contained in:
@@ -325,6 +325,35 @@ After roadmap creation, REQUIREMENTS.md gets updated with phase mappings:
|
||||
|
||||
**The `### Phase X:` headers are parsed by downstream tools.** If you only write the summary checklist, phase lookups will fail.
|
||||
|
||||
### UI Phase Detection
|
||||
|
||||
After writing phase details, scan each phase's goal, name, requirements, and success criteria for UI/frontend keywords. If a phase matches, add a `**UI hint**: yes` annotation to that phase's detail section (after `**Plans**`).
|
||||
|
||||
**Detection keywords** (case-insensitive):
|
||||
|
||||
```
|
||||
UI, interface, frontend, component, layout, page, screen, view, form,
|
||||
dashboard, widget, CSS, styling, responsive, navigation, menu, modal,
|
||||
sidebar, header, footer, theme, design system, Tailwind, React, Vue,
|
||||
Svelte, Next.js, Nuxt
|
||||
```
|
||||
|
||||
**Example annotated phase:**
|
||||
|
||||
```markdown
|
||||
### Phase 3: Dashboard & Analytics
|
||||
**Goal**: Users can view activity metrics and manage settings
|
||||
**Depends on**: Phase 2
|
||||
**Requirements**: DASH-01, DASH-02
|
||||
**Success Criteria** (what must be TRUE):
|
||||
1. User can view a dashboard with key metrics
|
||||
2. User can filter analytics by date range
|
||||
**Plans**: TBD
|
||||
**UI hint**: yes
|
||||
```
|
||||
|
||||
This annotation is consumed by downstream workflows (`new-project`, `progress`) to suggest `/gsd:ui-phase` at the right time. Phases without UI indicators omit the annotation entirely.
|
||||
|
||||
### 3. Progress Table
|
||||
|
||||
```markdown
|
||||
|
||||
@@ -1131,6 +1131,37 @@ Exit skill and invoke SlashCommand("/gsd:discuss-phase 1 --auto")
|
||||
|
||||
**If interactive mode:**
|
||||
|
||||
Check if Phase 1 has UI indicators (look for `**UI hint**: yes` in Phase 1 detail section of ROADMAP.md):
|
||||
|
||||
```bash
|
||||
PHASE1_SECTION=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase 1 2>/dev/null)
|
||||
PHASE1_HAS_UI=$(echo "$PHASE1_SECTION" | grep -qi "UI hint.*yes" && echo "true" || echo "false")
|
||||
```
|
||||
|
||||
**If Phase 1 has UI (`PHASE1_HAS_UI` is `true`):**
|
||||
|
||||
```
|
||||
───────────────────────────────────────────────────────────────
|
||||
|
||||
## ▶ Next Up
|
||||
|
||||
**Phase 1: [Phase Name]** — [Goal from ROADMAP.md]
|
||||
|
||||
/gsd:discuss-phase 1 — gather context and clarify approach
|
||||
|
||||
<sub>/clear first → fresh context window</sub>
|
||||
|
||||
---
|
||||
|
||||
**Also available:**
|
||||
- /gsd:ui-phase 1 — generate UI design contract (recommended for frontend phases)
|
||||
- /gsd:plan-phase 1 — skip discussion, plan directly
|
||||
|
||||
───────────────────────────────────────────────────────────────
|
||||
```
|
||||
|
||||
**If Phase 1 has no UI:**
|
||||
|
||||
```
|
||||
───────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
@@ -228,6 +228,13 @@ Read its `<objective>` section.
|
||||
|
||||
Check if `{phase_num}-CONTEXT.md` exists in phase directory.
|
||||
|
||||
Check if current phase has UI indicators:
|
||||
|
||||
```bash
|
||||
PHASE_SECTION=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "${CURRENT_PHASE}" 2>/dev/null)
|
||||
PHASE_HAS_UI=$(echo "$PHASE_SECTION" | grep -qi "UI hint.*yes" && echo "true" || echo "false")
|
||||
```
|
||||
|
||||
**If CONTEXT.md exists:**
|
||||
|
||||
```
|
||||
@@ -245,7 +252,30 @@ Check if `{phase_num}-CONTEXT.md` exists in phase directory.
|
||||
---
|
||||
```
|
||||
|
||||
**If CONTEXT.md does NOT exist:**
|
||||
**If CONTEXT.md does NOT exist AND phase has UI (`PHASE_HAS_UI` is `true`):**
|
||||
|
||||
```
|
||||
---
|
||||
|
||||
## ▶ Next Up
|
||||
|
||||
**Phase {N}: {Name}** — {Goal from ROADMAP.md}
|
||||
|
||||
`/gsd:discuss-phase {phase}` — gather context and clarify approach
|
||||
|
||||
<sub>`/clear` first → fresh context window</sub>
|
||||
|
||||
---
|
||||
|
||||
**Also available:**
|
||||
- `/gsd:ui-phase {phase}` — generate UI design contract (recommended for frontend phases)
|
||||
- `/gsd:plan-phase {phase}` — skip discussion, plan directly
|
||||
- `/gsd:list-phase-assumptions {phase}` — see Claude's assumptions
|
||||
|
||||
---
|
||||
```
|
||||
|
||||
**If CONTEXT.md does NOT exist AND phase has no UI:**
|
||||
|
||||
```
|
||||
---
|
||||
@@ -344,6 +374,40 @@ State: "Current phase is {X}. Milestone has {N} phases (highest: {Y})."
|
||||
|
||||
Read ROADMAP.md to get the next phase's name and goal.
|
||||
|
||||
Check if next phase has UI indicators:
|
||||
|
||||
```bash
|
||||
NEXT_PHASE_SECTION=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "$((Z+1))" 2>/dev/null)
|
||||
NEXT_HAS_UI=$(echo "$NEXT_PHASE_SECTION" | grep -qi "UI hint.*yes" && echo "true" || echo "false")
|
||||
```
|
||||
|
||||
**If next phase has UI (`NEXT_HAS_UI` is `true`):**
|
||||
|
||||
```
|
||||
---
|
||||
|
||||
## ✓ Phase {Z} Complete
|
||||
|
||||
## ▶ Next Up
|
||||
|
||||
**Phase {Z+1}: {Name}** — {Goal from ROADMAP.md}
|
||||
|
||||
`/gsd:discuss-phase {Z+1}` — gather context and clarify approach
|
||||
|
||||
<sub>`/clear` first → fresh context window</sub>
|
||||
|
||||
---
|
||||
|
||||
**Also available:**
|
||||
- `/gsd:ui-phase {Z+1}` — generate UI design contract (recommended for frontend phases)
|
||||
- `/gsd:plan-phase {Z+1}` — skip discussion, plan directly
|
||||
- `/gsd:verify-work {Z}` — user acceptance test before continuing
|
||||
|
||||
---
|
||||
```
|
||||
|
||||
**If next phase has no UI:**
|
||||
|
||||
```
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user