AskUserQuestion is a Claude Code-only tool. When running GSD on OpenAI Codex, Gemini CLI, or other non-Claude runtimes, the model renders the tool call as a markdown code block instead of executing it, so the interactive TUI never appears and the session stalls without collecting user input. The workflow.text_mode / --text flag mechanism already handles this in 5 of the 37 affected workflows. This commit adds the same TEXT_MODE fallback instruction to all remaining 32 workflows so that, when text_mode is enabled, every AskUserQuestion call is replaced with a plain-text numbered list that any runtime can handle. Fixes #2012 Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
191 lines
6.4 KiB
Markdown
191 lines
6.4 KiB
Markdown
<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>
|
|
|
|
<available_agent_types>
|
|
Valid GSD subagent types (use exact names — do not fall back to 'general-purpose'):
|
|
- gsd-ui-auditor — Audits UI against design requirements
|
|
</available_agent_types>
|
|
|
|
<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
|
|
AGENT_SKILLS_UI_REVIEWER=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" agent-skills gsd-ui-reviewer 2>/dev/null)
|
|
```
|
|
|
|
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."
|
|
|
|
|
|
**Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available.
|
|
**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>
|
|
|
|
${AGENT_SKILLS_UI_REVIEWER}
|
|
|
|
<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
|
|
|
|
`/clear` then one of:
|
|
|
|
- `/gsd-verify-work {N}` — UAT testing
|
|
- `/gsd-plan-phase {N+1}` — plan next phase
|
|
|
|
- `/gsd-verify-work {N}` — UAT testing
|
|
- `/gsd-plan-phase {N+1}` — plan next phase
|
|
|
|
───────────────────────────────────────────────────────────────
|
|
```
|
|
|
|
## Automated UI Verification (when Playwright-MCP is available)
|
|
|
|
If `mcp__playwright__*` tools are accessible in this session:
|
|
|
|
1. Navigate to each UI component described in the phase's UI-SPEC.md using
|
|
`mcp__playwright__navigate` (or equivalent Playwright-MCP tool).
|
|
2. Take a screenshot of each component using `mcp__playwright__screenshot`.
|
|
3. Compare against the spec's visual requirements — dimensions, color palette,
|
|
layout, spacing scale, and typography.
|
|
4. Report any dimension, color, or layout discrepancies automatically as
|
|
additional findings within the relevant pillar section of UI-REVIEW.md.
|
|
5. Flag items that require human judgment (brand feel, content tone) as
|
|
`needs_human_review: true` in the findings — these are surfaced to the user
|
|
separately after the automated pass completes.
|
|
|
|
If Playwright-MCP is not available in this session, this section is skipped
|
|
entirely. The audit falls back to the standard code-only review described above.
|
|
No configuration change is required — the availability of `mcp__playwright__*`
|
|
tools is detected at runtime.
|
|
|
|
## 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>
|