feat: add /gsd:ui-phase + /gsd:ui-review design contract and visual audit layer (closes #986)
Add pre-planning design contract generation and post-execution visual audit for frontend phases. Closes the gap where execute-phase runs without a visual contract, producing inconsistent spacing, color, and typography across components. New agents: gsd-ui-researcher (UI-SPEC.md), gsd-ui-checker (6-dimension validation), gsd-ui-auditor (6-pillar scored audit + registry re-vetting). Third-party shadcn registry blocks are machine-vetted at contract time, verification time, and audit time — three enforcement points, not a checkbox. Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -24,6 +24,8 @@ When a milestone completes:
|
||||
4. Delete REQUIREMENTS.md (fresh one for next milestone)
|
||||
5. Perform full PROJECT.md evolution review
|
||||
6. Offer to create next milestone inline
|
||||
7. Archive UI artifacts (`*-UI-SPEC.md`, `*-UI-REVIEW.md`) alongside other phase documents
|
||||
8. Clean up `.planning/ui-reviews/` screenshot files (binary assets, never archived)
|
||||
|
||||
**Context Efficiency:** Archives keep ROADMAP.md constant-size and REQUIREMENTS.md milestone-scoped.
|
||||
|
||||
|
||||
@@ -638,6 +638,7 @@ Created: .planning/phases/${PADDED_PHASE}-${SLUG}/${PADDED_PHASE}-CONTEXT.md
|
||||
|
||||
**Also available:**
|
||||
- `/gsd:plan-phase ${PHASE} --skip-research` — plan without research
|
||||
- `/gsd:ui-phase ${PHASE}` — generate UI design contract before planning (if phase has frontend work)
|
||||
- Review/edit CONTEXT.md before continuing
|
||||
|
||||
---
|
||||
|
||||
@@ -259,6 +259,46 @@ test -f "${PHASE_DIR}/${PADDED_PHASE}-VALIDATION.md" && echo "VALIDATION_CREATED
|
||||
|
||||
**If not found:** Warn and continue — plans may fail Dimension 8.
|
||||
|
||||
## 5.6. UI Design Contract Gate
|
||||
|
||||
> Skip if `workflow.ui_phase` is explicitly `false` AND `workflow.ui_safety_gate` is explicitly `false` in `.planning/config.json`. If keys are absent, treat as enabled.
|
||||
|
||||
```bash
|
||||
UI_PHASE_CFG=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-get workflow.ui_phase 2>/dev/null || echo "true")
|
||||
UI_GATE_CFG=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-get workflow.ui_safety_gate 2>/dev/null || echo "true")
|
||||
```
|
||||
|
||||
**If both are `false`:** Skip to step 6.
|
||||
|
||||
Check if phase has frontend indicators:
|
||||
|
||||
```bash
|
||||
PHASE_SECTION=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "${PHASE}" 2>/dev/null)
|
||||
echo "$PHASE_SECTION" | grep -iE "UI|interface|frontend|component|layout|page|screen|view|form|dashboard|widget" > /dev/null 2>&1
|
||||
HAS_UI=$?
|
||||
```
|
||||
|
||||
**If `HAS_UI` is 0 (frontend indicators found):**
|
||||
|
||||
Check for existing UI-SPEC:
|
||||
```bash
|
||||
UI_SPEC_FILE=$(ls "${PHASE_DIR}"/*-UI-SPEC.md 2>/dev/null | head -1)
|
||||
```
|
||||
|
||||
**If UI-SPEC.md found:** Set `UI_SPEC_PATH=$UI_SPEC_FILE`. Display: `Using UI design contract: ${UI_SPEC_PATH}`
|
||||
|
||||
**If UI-SPEC.md missing AND `UI_GATE_CFG` is `true`:**
|
||||
|
||||
Use AskUserQuestion:
|
||||
- header: "UI Design Contract"
|
||||
- question: "Phase {N} has frontend indicators but no UI-SPEC.md. Generate a design contract before planning?"
|
||||
- options:
|
||||
- "Generate UI-SPEC first" → Display: "Run `/gsd:ui-phase {N}` then re-run `/gsd:plan-phase {N}`". Exit workflow.
|
||||
- "Continue without UI-SPEC" → Continue to step 6.
|
||||
- "Not a frontend phase" → Continue to step 6.
|
||||
|
||||
**If `HAS_UI` is 1 (no frontend indicators):** Skip silently to step 6.
|
||||
|
||||
## 6. Check Existing Plans
|
||||
|
||||
```bash
|
||||
@@ -322,6 +362,7 @@ Planner prompt:
|
||||
- {research_path} (Technical Research)
|
||||
- {verification_path} (Verification Gaps - if --gaps)
|
||||
- {uat_path} (UAT Gaps - if --gaps)
|
||||
- {UI_SPEC_PATH} (UI Design Contract — visual/interaction specs, if exists)
|
||||
</files_to_read>
|
||||
|
||||
**Phase requirement IDs (every ID MUST appear in a plan's `requirements` field):** {phase_req_ids}
|
||||
|
||||
@@ -30,6 +30,8 @@ Parse current values (default to `true` if not present):
|
||||
- `workflow.plan_check` — spawn plan checker during plan-phase
|
||||
- `workflow.verifier` — spawn verifier during execute-phase
|
||||
- `workflow.nyquist_validation` — validation architecture research during plan-phase (default: true if absent)
|
||||
- `workflow.ui_phase` — generate UI-SPEC.md design contracts for frontend phases (default: true if absent)
|
||||
- `workflow.ui_safety_gate` — prompt to run /gsd:ui-phase before planning frontend phases (default: true if absent)
|
||||
- `model_profile` — which model each agent uses (default: `balanced`)
|
||||
- `git.branching_strategy` — branching approach (default: `"none"`)
|
||||
</step>
|
||||
@@ -96,6 +98,24 @@ AskUserQuestion([
|
||||
},
|
||||
// Note: Nyquist validation depends on research output. If research is disabled,
|
||||
// plan-phase automatically skips Nyquist steps (no RESEARCH.md to extract from).
|
||||
{
|
||||
question: "Enable UI Phase? (generates UI-SPEC.md design contracts for frontend phases)",
|
||||
header: "UI Phase",
|
||||
multiSelect: false,
|
||||
options: [
|
||||
{ label: "Yes (Recommended)", description: "Generate UI design contracts before planning frontend phases. Locks spacing, typography, color, and copywriting." },
|
||||
{ label: "No", description: "Skip UI-SPEC generation. Good for backend-only projects or API phases." }
|
||||
]
|
||||
},
|
||||
{
|
||||
question: "Enable UI Safety Gate? (prompts to run /gsd:ui-phase before planning frontend phases)",
|
||||
header: "UI Gate",
|
||||
multiSelect: false,
|
||||
options: [
|
||||
{ label: "Yes (Recommended)", description: "plan-phase asks to run /gsd:ui-phase first when frontend indicators detected." },
|
||||
{ label: "No", description: "No prompt — plan-phase proceeds without UI-SPEC check." }
|
||||
]
|
||||
},
|
||||
{
|
||||
question: "Git branching strategy?",
|
||||
header: "Branching",
|
||||
@@ -122,7 +142,9 @@ Merge new settings into existing config.json:
|
||||
"plan_check": true/false,
|
||||
"verifier": true/false,
|
||||
"auto_advance": true/false,
|
||||
"nyquist_validation": true/false
|
||||
"nyquist_validation": true/false,
|
||||
"ui_phase": true/false,
|
||||
"ui_safety_gate": true/false
|
||||
},
|
||||
"git": {
|
||||
"branching_strategy": "none" | "phase" | "milestone"
|
||||
@@ -170,7 +192,9 @@ Write `~/.gsd/defaults.json` with:
|
||||
"plan_check": <current>,
|
||||
"verifier": <current>,
|
||||
"auto_advance": <current>,
|
||||
"nyquist_validation": <current>
|
||||
"nyquist_validation": <current>,
|
||||
"ui_phase": <current>,
|
||||
"ui_safety_gate": <current>
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -192,6 +216,8 @@ Display:
|
||||
| Execution Verifier | {On/Off} |
|
||||
| Auto-Advance | {On/Off} |
|
||||
| Nyquist Validation | {On/Off} |
|
||||
| UI Phase | {On/Off} |
|
||||
| UI Safety Gate | {On/Off} |
|
||||
| Git Branching | {None/Per Phase/Per Milestone} |
|
||||
| Saved as Defaults | {Yes/No} |
|
||||
|
||||
@@ -209,7 +235,7 @@ Quick commands:
|
||||
|
||||
<success_criteria>
|
||||
- [ ] Current config read
|
||||
- [ ] User presented with 7 settings (profile + 5 workflow toggles + git branching)
|
||||
- [ ] User presented with 9 settings (profile + 7 workflow toggles + git branching)
|
||||
- [ ] Config updated with model_profile, workflow, and git sections
|
||||
- [ ] User offered to save as global defaults (~/.gsd/defaults.json)
|
||||
- [ ] Changes confirmed to user
|
||||
|
||||
290
get-shit-done/workflows/ui-phase.md
Normal file
290
get-shit-done/workflows/ui-phase.md
Normal file
@@ -0,0 +1,290 @@
|
||||
<purpose>
|
||||
Generate a UI design contract (UI-SPEC.md) for frontend phases. Orchestrates gsd-ui-researcher and gsd-ui-checker with a revision loop. Inserts between discuss-phase and plan-phase in the lifecycle.
|
||||
|
||||
UI-SPEC.md locks spacing, typography, color, copywriting, and design system decisions before the planner creates tasks. This prevents design debt caused by ad-hoc styling decisions during execution.
|
||||
</purpose>
|
||||
|
||||
<required_reading>
|
||||
@~/.claude/get-shit-done/references/ui-brand.md
|
||||
</required_reading>
|
||||
|
||||
<process>
|
||||
|
||||
## 1. Initialize
|
||||
|
||||
```bash
|
||||
INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init plan-phase "$PHASE")
|
||||
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
||||
```
|
||||
|
||||
Parse JSON for: `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`, `has_context`, `has_research`, `commit_docs`.
|
||||
|
||||
**File paths:** `state_path`, `roadmap_path`, `requirements_path`, `context_path`, `research_path`.
|
||||
|
||||
Resolve UI agent models:
|
||||
|
||||
```bash
|
||||
UI_RESEARCHER_MODEL=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" resolve-model gsd-ui-researcher --raw)
|
||||
UI_CHECKER_MODEL=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" resolve-model gsd-ui-checker --raw)
|
||||
```
|
||||
|
||||
Check config:
|
||||
|
||||
```bash
|
||||
UI_ENABLED=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" config-get workflow.ui_phase 2>/dev/null || echo "true")
|
||||
```
|
||||
|
||||
**If `UI_ENABLED` is `false`:**
|
||||
```
|
||||
UI phase is disabled in config. Enable via /gsd:settings.
|
||||
```
|
||||
Exit workflow.
|
||||
|
||||
**If `planning_exists` is false:** Error — run `/gsd:new-project` first.
|
||||
|
||||
## 2. Parse and Validate Phase
|
||||
|
||||
Extract phase number from $ARGUMENTS. If not provided, detect next unplanned phase.
|
||||
|
||||
```bash
|
||||
PHASE_INFO=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "${PHASE}")
|
||||
```
|
||||
|
||||
**If `found` is false:** Error with available phases.
|
||||
|
||||
## 3. Check Prerequisites
|
||||
|
||||
**If `has_context` is false:**
|
||||
```
|
||||
No CONTEXT.md found for Phase {N}.
|
||||
Recommended: run /gsd:discuss-phase {N} first to capture design preferences.
|
||||
Continuing without user decisions — UI researcher will ask all questions.
|
||||
```
|
||||
Continue (non-blocking).
|
||||
|
||||
**If `has_research` is false:**
|
||||
```
|
||||
No RESEARCH.md found for Phase {N}.
|
||||
Note: stack decisions (component library, styling approach) will be asked during UI research.
|
||||
```
|
||||
Continue (non-blocking).
|
||||
|
||||
## 4. Check Existing UI-SPEC
|
||||
|
||||
```bash
|
||||
UI_SPEC_FILE=$(ls "${PHASE_DIR}"/*-UI-SPEC.md 2>/dev/null | head -1)
|
||||
```
|
||||
|
||||
**If exists:** Use AskUserQuestion:
|
||||
- header: "Existing UI-SPEC"
|
||||
- question: "UI-SPEC.md already exists for Phase {N}. What would you like to do?"
|
||||
- options:
|
||||
- "Update — re-run researcher with existing as baseline"
|
||||
- "View — display current UI-SPEC and exit"
|
||||
- "Skip — keep current UI-SPEC, proceed to verification"
|
||||
|
||||
If "View": display file contents, exit.
|
||||
If "Skip": proceed to step 7 (checker).
|
||||
If "Update": continue to step 5.
|
||||
|
||||
## 5. Spawn gsd-ui-researcher
|
||||
|
||||
Display:
|
||||
```
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
GSD ► UI DESIGN CONTRACT — PHASE {N}
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
◆ Spawning UI researcher...
|
||||
```
|
||||
|
||||
Build prompt:
|
||||
|
||||
```markdown
|
||||
Read ~/.claude/agents/gsd-ui-researcher.md for instructions.
|
||||
|
||||
<objective>
|
||||
Create UI design contract for Phase {phase_number}: {phase_name}
|
||||
Answer: "What visual and interaction contracts does this phase need?"
|
||||
</objective>
|
||||
|
||||
<files_to_read>
|
||||
- {state_path} (Project State)
|
||||
- {roadmap_path} (Roadmap)
|
||||
- {requirements_path} (Requirements)
|
||||
- {context_path} (USER DECISIONS from /gsd:discuss-phase)
|
||||
- {research_path} (Technical Research — stack decisions)
|
||||
</files_to_read>
|
||||
|
||||
<output>
|
||||
Write to: {phase_dir}/{padded_phase}-UI-SPEC.md
|
||||
Template: ~/.claude/get-shit-done/templates/UI-SPEC.md
|
||||
</output>
|
||||
|
||||
<config>
|
||||
commit_docs: {commit_docs}
|
||||
phase_dir: {phase_dir}
|
||||
padded_phase: {padded_phase}
|
||||
</config>
|
||||
```
|
||||
|
||||
Omit null file paths from `<files_to_read>`.
|
||||
|
||||
```
|
||||
Task(
|
||||
prompt=ui_research_prompt,
|
||||
subagent_type="gsd-ui-researcher",
|
||||
model="{UI_RESEARCHER_MODEL}",
|
||||
description="UI Design Contract Phase {N}"
|
||||
)
|
||||
```
|
||||
|
||||
## 6. Handle Researcher Return
|
||||
|
||||
**If `## UI-SPEC COMPLETE`:**
|
||||
Display confirmation. Continue to step 7.
|
||||
|
||||
**If `## UI-SPEC BLOCKED`:**
|
||||
Display blocker details and options. Exit workflow.
|
||||
|
||||
## 7. Spawn gsd-ui-checker
|
||||
|
||||
Display:
|
||||
```
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
GSD ► VERIFYING UI-SPEC
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
◆ Spawning UI checker...
|
||||
```
|
||||
|
||||
Build prompt:
|
||||
|
||||
```markdown
|
||||
Read ~/.claude/agents/gsd-ui-checker.md for instructions.
|
||||
|
||||
<objective>
|
||||
Validate UI design contract for Phase {phase_number}: {phase_name}
|
||||
Check all 6 dimensions. Return APPROVED or BLOCKED.
|
||||
</objective>
|
||||
|
||||
<files_to_read>
|
||||
- {phase_dir}/{padded_phase}-UI-SPEC.md (UI Design Contract — PRIMARY INPUT)
|
||||
- {context_path} (USER DECISIONS — check compliance)
|
||||
- {research_path} (Technical Research — check stack alignment)
|
||||
</files_to_read>
|
||||
|
||||
<config>
|
||||
ui_safety_gate: {ui_safety_gate config value}
|
||||
</config>
|
||||
```
|
||||
|
||||
```
|
||||
Task(
|
||||
prompt=ui_checker_prompt,
|
||||
subagent_type="gsd-ui-checker",
|
||||
model="{UI_CHECKER_MODEL}",
|
||||
description="Verify UI-SPEC Phase {N}"
|
||||
)
|
||||
```
|
||||
|
||||
## 8. Handle Checker Return
|
||||
|
||||
**If `## UI-SPEC VERIFIED`:**
|
||||
Display dimension results. Proceed to step 10.
|
||||
|
||||
**If `## ISSUES FOUND`:**
|
||||
Display blocking issues. Proceed to step 9.
|
||||
|
||||
## 9. Revision Loop (Max 2 Iterations)
|
||||
|
||||
Track `revision_count` (starts at 0).
|
||||
|
||||
**If `revision_count` < 2:**
|
||||
- Increment `revision_count`
|
||||
- Re-spawn gsd-ui-researcher with revision context:
|
||||
|
||||
```markdown
|
||||
<revision>
|
||||
The UI checker found issues with the current UI-SPEC.md.
|
||||
|
||||
### Issues to Fix
|
||||
{paste blocking issues from checker return}
|
||||
|
||||
Read the existing UI-SPEC.md, fix ONLY the listed issues, re-write the file.
|
||||
Do NOT re-ask the user questions that are already answered.
|
||||
</revision>
|
||||
```
|
||||
|
||||
- After researcher returns → re-spawn checker (step 7)
|
||||
|
||||
**If `revision_count` >= 2:**
|
||||
```
|
||||
Max revision iterations reached. Remaining issues:
|
||||
|
||||
{list remaining issues}
|
||||
|
||||
Options:
|
||||
1. Force approve — proceed with current UI-SPEC (FLAGs become accepted)
|
||||
2. Edit manually — open UI-SPEC.md in editor, re-run /gsd:ui-phase
|
||||
3. Abandon — exit without approving
|
||||
```
|
||||
|
||||
Use AskUserQuestion for the choice.
|
||||
|
||||
## 10. Present Final Status
|
||||
|
||||
Display:
|
||||
```
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
GSD ► UI-SPEC READY ✓
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
**Phase {N}: {Name}** — UI design contract approved
|
||||
|
||||
Dimensions: 6/6 passed
|
||||
{If any FLAGs: "Recommendations: {N} (non-blocking)"}
|
||||
|
||||
───────────────────────────────────────────────────────────────
|
||||
|
||||
## ▶ Next Up
|
||||
|
||||
**Plan Phase {N}** — planner will use UI-SPEC.md as design context
|
||||
|
||||
`/gsd:plan-phase {N}`
|
||||
|
||||
<sub>/clear first → fresh context window</sub>
|
||||
|
||||
───────────────────────────────────────────────────────────────
|
||||
```
|
||||
|
||||
## 11. Commit (if configured)
|
||||
|
||||
```bash
|
||||
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs(${padded_phase}): UI design contract" --files "${PHASE_DIR}/${PADDED_PHASE}-UI-SPEC.md"
|
||||
```
|
||||
|
||||
## 12. Update State
|
||||
|
||||
```bash
|
||||
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state record-session \
|
||||
--stopped-at "Phase ${PHASE} UI-SPEC approved" \
|
||||
--resume-file "${PHASE_DIR}/${PADDED_PHASE}-UI-SPEC.md"
|
||||
```
|
||||
|
||||
</process>
|
||||
|
||||
<success_criteria>
|
||||
- [ ] Config checked (exit if ui_phase disabled)
|
||||
- [ ] Phase validated against roadmap
|
||||
- [ ] Prerequisites checked (CONTEXT.md, RESEARCH.md — non-blocking warnings)
|
||||
- [ ] Existing UI-SPEC handled (update/view/skip)
|
||||
- [ ] gsd-ui-researcher spawned with correct context and file paths
|
||||
- [ ] UI-SPEC.md created in correct location
|
||||
- [ ] gsd-ui-checker spawned with UI-SPEC.md
|
||||
- [ ] All 6 dimensions evaluated
|
||||
- [ ] Revision loop if BLOCKED (max 2 iterations)
|
||||
- [ ] Final status displayed with next steps
|
||||
- [ ] UI-SPEC.md committed (if commit_docs enabled)
|
||||
- [ ] State updated
|
||||
</success_criteria>
|
||||
157
get-shit-done/workflows/ui-review.md
Normal file
157
get-shit-done/workflows/ui-review.md
Normal file
@@ -0,0 +1,157 @@
|
||||
<purpose>
|
||||
Retroactive 6-pillar visual audit of implemented frontend code. Standalone command that works on any project — GSD-managed or not. Produces scored UI-REVIEW.md with actionable findings.
|
||||
</purpose>
|
||||
|
||||
<required_reading>
|
||||
@~/.claude/get-shit-done/references/ui-brand.md
|
||||
</required_reading>
|
||||
|
||||
<process>
|
||||
|
||||
## 0. Initialize
|
||||
|
||||
```bash
|
||||
INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" init phase-op "${PHASE_ARG}")
|
||||
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
||||
```
|
||||
|
||||
Parse: `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`, `commit_docs`.
|
||||
|
||||
```bash
|
||||
UI_AUDITOR_MODEL=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" resolve-model gsd-ui-auditor --raw)
|
||||
```
|
||||
|
||||
Display banner:
|
||||
```
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
GSD ► UI AUDIT — PHASE {N}: {name}
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
```
|
||||
|
||||
## 1. Detect Input State
|
||||
|
||||
```bash
|
||||
SUMMARY_FILES=$(ls "${PHASE_DIR}"/*-SUMMARY.md 2>/dev/null)
|
||||
UI_SPEC_FILE=$(ls "${PHASE_DIR}"/*-UI-SPEC.md 2>/dev/null | head -1)
|
||||
UI_REVIEW_FILE=$(ls "${PHASE_DIR}"/*-UI-REVIEW.md 2>/dev/null | head -1)
|
||||
```
|
||||
|
||||
**If `SUMMARY_FILES` empty:** Exit — "Phase {N} not executed. Run /gsd:execute-phase {N} first."
|
||||
|
||||
**If `UI_REVIEW_FILE` non-empty:** Use AskUserQuestion:
|
||||
- header: "Existing UI Review"
|
||||
- question: "UI-REVIEW.md already exists for Phase {N}."
|
||||
- options:
|
||||
- "Re-audit — run fresh audit"
|
||||
- "View — display current review and exit"
|
||||
|
||||
If "View": display file, exit.
|
||||
If "Re-audit": continue.
|
||||
|
||||
## 2. Gather Context Paths
|
||||
|
||||
Build file list for auditor:
|
||||
- All SUMMARY.md files in phase dir
|
||||
- All PLAN.md files in phase dir
|
||||
- UI-SPEC.md (if exists — audit baseline)
|
||||
- CONTEXT.md (if exists — locked decisions)
|
||||
|
||||
## 3. Spawn gsd-ui-auditor
|
||||
|
||||
```
|
||||
◆ Spawning UI auditor...
|
||||
```
|
||||
|
||||
Build prompt:
|
||||
|
||||
```markdown
|
||||
Read ~/.claude/agents/gsd-ui-auditor.md for instructions.
|
||||
|
||||
<objective>
|
||||
Conduct 6-pillar visual audit of Phase {phase_number}: {phase_name}
|
||||
{If UI-SPEC exists: "Audit against UI-SPEC.md design contract."}
|
||||
{If no UI-SPEC: "Audit against abstract 6-pillar standards."}
|
||||
</objective>
|
||||
|
||||
<files_to_read>
|
||||
- {summary_paths} (Execution summaries)
|
||||
- {plan_paths} (Execution plans — what was intended)
|
||||
- {ui_spec_path} (UI Design Contract — audit baseline, if exists)
|
||||
- {context_path} (User decisions, if exists)
|
||||
</files_to_read>
|
||||
|
||||
<config>
|
||||
phase_dir: {phase_dir}
|
||||
padded_phase: {padded_phase}
|
||||
</config>
|
||||
```
|
||||
|
||||
Omit null file paths.
|
||||
|
||||
```
|
||||
Task(
|
||||
prompt=ui_audit_prompt,
|
||||
subagent_type="gsd-ui-auditor",
|
||||
model="{UI_AUDITOR_MODEL}",
|
||||
description="UI Audit Phase {N}"
|
||||
)
|
||||
```
|
||||
|
||||
## 4. Handle Return
|
||||
|
||||
**If `## UI REVIEW COMPLETE`:**
|
||||
|
||||
Display score summary:
|
||||
|
||||
```
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
GSD ► UI AUDIT COMPLETE ✓
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
**Phase {N}: {Name}** — Overall: {score}/24
|
||||
|
||||
| Pillar | Score |
|
||||
|--------|-------|
|
||||
| Copywriting | {N}/4 |
|
||||
| Visuals | {N}/4 |
|
||||
| Color | {N}/4 |
|
||||
| Typography | {N}/4 |
|
||||
| Spacing | {N}/4 |
|
||||
| Experience Design | {N}/4 |
|
||||
|
||||
Top fixes:
|
||||
1. {fix}
|
||||
2. {fix}
|
||||
3. {fix}
|
||||
|
||||
Full review: {path to UI-REVIEW.md}
|
||||
|
||||
───────────────────────────────────────────────────────────────
|
||||
|
||||
## ▶ Next
|
||||
|
||||
- `/gsd:verify-work {N}` — UAT testing
|
||||
- `/gsd:plan-phase {N+1}` — plan next phase
|
||||
|
||||
<sub>/clear first → fresh context window</sub>
|
||||
|
||||
───────────────────────────────────────────────────────────────
|
||||
```
|
||||
|
||||
## 5. Commit (if configured)
|
||||
|
||||
```bash
|
||||
node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs(${padded_phase}): UI audit review" --files "${PHASE_DIR}/${PADDED_PHASE}-UI-REVIEW.md"
|
||||
```
|
||||
|
||||
</process>
|
||||
|
||||
<success_criteria>
|
||||
- [ ] Phase validated
|
||||
- [ ] SUMMARY.md files found (execution completed)
|
||||
- [ ] Existing review handled (re-audit/view)
|
||||
- [ ] gsd-ui-auditor spawned with correct context
|
||||
- [ ] UI-REVIEW.md created in phase directory
|
||||
- [ ] Score summary displayed to user
|
||||
- [ ] Next steps presented
|
||||
</success_criteria>
|
||||
@@ -333,6 +333,7 @@ All tests passed. Ready to continue.
|
||||
|
||||
- `/gsd:plan-phase {next}` — Plan next phase
|
||||
- `/gsd:execute-phase {next}` — Execute next phase
|
||||
- `/gsd:ui-review {phase}` — visual quality audit (if frontend files were modified)
|
||||
```
|
||||
</step>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user