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:
Tom Boucher
2026-03-22 10:20:57 -04:00
committed by GitHub
3 changed files with 125 additions and 1 deletions

View File

@@ -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

View File

@@ -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:**
```
───────────────────────────────────────────────────────────────

View File

@@ -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:**
```
---