enhance(#3028): responsive Markdown separators instead of fixed-width rules (#3789)

* feat(#3028): responsive Markdown separators instead of fixed-width rules

Stage banners, checkpoints, completion and error panels used fixed-width
runs of box-drawing characters -- a 53-column heavy rule and a 62-column
double-line box. Those runs are ordinary text to a Markdown-rendering
host, so in a narrower pane they wrap and the border comes apart from
the heading it framed.

Shipped content now emits an ATX heading for a titled section and a
blank-line-delimited --- for a break between sections, both of which
adapt to the available width. The same convention is applied to the
three code sites that built these strings at runtime: the UAT
checkpoint renderer, the milestone-close audit report, and the TDD
review checkpoint table.

Removing the box also removes its only reason to exist -- the
east-asian-width padding helpers that kept its right border aligned
(checkpointBoxLine, displayWidth, isWideCodePoint, ZERO_WIDTH_MARK_RE,
CHECKPOINT_BOX_WIDTH). RTL directional isolation is unchanged.

The convention is specified in gsd-core/references/ui-brand.md and
enforced across all shipped content by tests/responsive-separators.test.cjs.

Refs #3028

* test(#3028): pin the heading form in checkpoint and audit-report assertions

These suites asserted the exact box borders and the 62-column padded
banner interior. With the box gone they assert the ### heading form,
the --- break and the bolded instruction line, and each now carries a
positive assertion that no box character remains -- which is what pins
the fix rather than merely tolerating it.

Language coverage is converted, not dropped: Japanese, Chinese, Korean,
Hindi and Arabic all still assert their rendered banner, and the Arabic
case still asserts the RTL directional isolates the box removal must
not disturb. Adds a case for a banner longer than the old inner width,
which previously produced a ragged border and now has none.

Refs #3028

* chore(#3028): acknowledge execute-plan.md growth from the checkpoint display spec

The checkpoint_protocol display spec described the drawn box; it now
describes the heading, the --- break and the bolded action prompt,
which costs 22 bytes (40111 -> 40133, 827 under the cap).

Appended to the existing #3370 fragment rather than filed as a new one:
a growth ack keys on the bare filename and #3370 already declares
execute-plan.md, so a second source naming it would be a hard
duplicate-key error. Same supersede-by-append route #3370 took for the
spent #2652 fragment.

Refs #3028

* docs(#3028): state the load-bearing half of the separator rule, and amend the zh-CN reference

Review found three things.

The rule as first written demanded a blank line above AND below every
---. Only the one above is load-bearing: it is what stops CommonMark
reading the rule as a setext underline for the line above. The one below
is cosmetic, because a thematic break is a leaf block. The rule now says
that, with the reason, instead of asserting a stricter form the content
does not keep.

The zh-CN reference had received the mechanical box-to-heading swap but
none of the prose behind it: it still claimed a 62-character checkpoint
width and still listed --- among forbidden mixed banner styles, so it
contradicted the convention it was translating. It now carries the
separator section, the setext reasoning, the unconditional-vs-per-runtime
rationale and a corrected anti-pattern list, in Chinese.

The user guide asserted that a heading is not a degradation anywhere.
That is an assertion, not a demonstration. It now says what was actually
traded away in a plain terminal, points at the recorded rationale, and
invites the report that would justify the capability flag instead.

Refs #3028

* chore(#3028): backfill changeset PR number

Refs #3028

---------

Co-authored-by: sim <sim@local>
This commit is contained in:
Tom Boucher
2026-08-23 22:38:12 -04:00
committed by GitHub
parent 107eb8c1d9
commit cf15682d1c
74 changed files with 849 additions and 699 deletions

View File

@@ -63,9 +63,7 @@ Exit.
Present banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► ADD TESTS — Phase ${phase_number}: ${phase_name}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► ADD TESTS — Phase ${phase_number}: ${phase_name}
```
</step>
@@ -111,7 +109,6 @@ Read each file to verify classification. Don't classify based on filename alone.
<step name="present_classification">
Present the classification to the user for confirmation before proceeding:
**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.
```
@@ -280,9 +277,7 @@ For each approved E2E test:
Create a test coverage report and present to user:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► TEST GENERATION COMPLETE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► TEST GENERATION COMPLETE
## Results

View File

@@ -78,7 +78,6 @@ Continue (non-blocking).
AI_SPEC_FILE=$(ls "${PHASE_DIR}"/*-AI-SPEC.md 2>/dev/null | head -1)
```
**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 exists:** Use AskUserQuestion:
- header: "Existing AI-SPEC"
@@ -96,9 +95,7 @@ If "Update": continue to step 5.
Display:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► AI DESIGN CONTRACT — PHASE {N}: {name}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► AI DESIGN CONTRACT — PHASE {N}: {name}
◆ Step 1/4 — Framework Selection...
```
@@ -265,9 +262,7 @@ gsd_run query commit "docs({phase_slug}): generate AI-SPEC.md — {primary_frame
## 12. Display Completion
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► AI-SPEC COMPLETE — PHASE {N}: {name}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► AI-SPEC COMPLETE — PHASE {N}: {name}
◆ Framework: {primary_framework}
◆ System Type: {system_type}

View File

@@ -244,7 +244,7 @@ Output this markdown directly (not as a code block). Route based on status:
All requirements covered. Cross-phase integration verified. E2E flows complete.
───────────────────────────────────────────────────────────────
---
## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
@@ -254,7 +254,7 @@ All requirements covered. Cross-phase integration verified. E2E flows complete.
/gsd:complete-milestone {version}
───────────────────────────────────────────────────────────────
---
---
@@ -289,7 +289,7 @@ All requirements covered. Cross-phase integration verified. E2E flows complete.
Phases needing validation: run `/gsd:validate-phase {N}` for each flagged phase.
───────────────────────────────────────────────────────────────
---
## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
@@ -310,13 +310,13 @@ For Nyquist-coverage gaps flagged in the table above, prefer running
<N>` if SECURITY.md was flagged) before inserting a new closure phase —
they may close the gap retroactively without a new phase.
───────────────────────────────────────────────────────────────
---
**Also available:**
- cat .planning/v{version}-MILESTONE-AUDIT.md — see full report
- /gsd:complete-milestone {version} — proceed anyway (accept tech debt)
───────────────────────────────────────────────────────────────
---
---
@@ -338,7 +338,7 @@ All requirements met. No critical blockers. Accumulated tech debt needs review.
### Total: {N} items across {M} phases
───────────────────────────────────────────────────────────────
---
## ▶ Options
@@ -356,7 +356,7 @@ Insert a closure phase using the standard chain:
/gsd:plan-phase <N>
/gsd:execute-phase <N>
───────────────────────────────────────────────────────────────
---
</offer_next>
<success_criteria>

View File

@@ -106,9 +106,7 @@ Parse JSON for: `milestone_version`, `milestone_name`, `phase_count`, `completed
Display startup banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► AUTONOMOUS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► AUTONOMOUS
Milestone: {milestone_version} — {milestone_name}
Phases: {phase_count} total, {completed_phases} complete
@@ -175,9 +173,7 @@ Exit cleanly.
**If no incomplete phases remain:**
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► AUTONOMOUS ▸ COMPLETE 🎉
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► AUTONOMOUS ▸ COMPLETE 🎉
All phases complete! Nothing left to do.
```
@@ -216,9 +212,7 @@ Extract `phase_name`, `goal`, `success_criteria` from each. Store for use in exe
For the current phase, display the progress banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► AUTONOMOUS ▸ Phase {N}/{T}: {Name} [████░░░░] {P}%
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► AUTONOMOUS ▸ Phase {N}/{T}: {Name} [████░░░░] {P}%
```
Where N is the ROADMAP phase number, T is the milestone `phase_count`, and P = completed milestone phases / T × 100. Use `phase_count`, not remaining phases: phase 63 in a 7-phase milestone is `Phase 63/7`, not `Phase 63/3`. If N > T, render `Phase {N} ({position}/{T})`. Use an 8-character bar with █ and ░.
@@ -594,9 +588,7 @@ Read and execute: `$HOME/.claude/gsd-core/references/autonomous-smart-discuss.md
**If `TO_PHASE` is set and current phase number >= `TO_PHASE`:** The target phase has been reached. Do not iterate further. Display:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► AUTONOMOUS ▸ --to ${TO_PHASE} REACHED
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► AUTONOMOUS ▸ --to ${TO_PHASE} REACHED
Completed through phase ${TO_PHASE} as requested.
Remaining phases were not executed.
@@ -646,9 +638,7 @@ If all phases complete, proceed to lifecycle step.
**If `ONLY_PHASE` is set:** Skip lifecycle. A single phase does not trigger audit/complete/cleanup. Display:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► AUTONOMOUS ▸ PHASE ${ONLY_PHASE} COMPLETE ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► AUTONOMOUS ▸ PHASE ${ONLY_PHASE} COMPLETE ✓
Phase ${ONLY_PHASE}: ${PHASE_NAME} — Done
Mode: Single phase (--only)
@@ -664,9 +654,7 @@ Exit cleanly.
Display lifecycle transition banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► AUTONOMOUS ▸ LIFECYCLE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► AUTONOMOUS ▸ LIFECYCLE
All phases complete → Starting lifecycle: audit → complete → cleanup
Milestone: {milestone_version} — {milestone_name}
@@ -755,9 +743,7 @@ Cleanup shows its own dry-run and asks user for approval internally — this is
Display final completion banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► AUTONOMOUS ▸ COMPLETE 🎉
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► AUTONOMOUS ▸ COMPLETE 🎉
Milestone: {milestone_version} — {milestone_name}
Status: Complete ✅
@@ -788,9 +774,7 @@ When any phase operation fails or a blocker is detected, present 3 options via A
**On "Stop autonomous mode":** Display progress summary:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► AUTONOMOUS ▸ STOPPED
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► AUTONOMOUS ▸ STOPPED
Completed: {list of completed phases}
Skipped: {list of skipped phases}

View File

@@ -690,11 +690,11 @@ TOTAL=$(echo "$FRONTMATTER" | grep "total:" | head -1 | cut -d: -f2 | xargs)
Display inline summary to user:
```
═══════════════════════════════════════════════════════════════
---
Code Review Complete: Phase ${PHASE_NUMBER} (${PHASE_NAME})
───────────────────────────────────────────────────────────────
---
Depth: ${REVIEW_DEPTH} (${DEPTH_PROVENANCE})
Files Reviewed: ${FILES_REVIEWED}
@@ -703,10 +703,11 @@ Display inline summary to user:
Critical: ${CRITICAL}
Warning: ${WARNING}
Info: ${INFO}
──────────
---
Total: ${TOTAL}
───────────────────────────────────────────────────────────────
---
```
If status is "clean":
@@ -735,7 +736,7 @@ grep -A 3 "^### CR-\|^### BL-\|^### WR-" "${REVIEW_PATH}" | head -n 12
**Note on tests:** Automated tests for this command and workflow are planned for Phase 4 (Pipeline Integration & Testing, requirement INFR-03). Phase 2 focuses on correct implementation; Phase 4 adds regression coverage across platforms.
═══════════════════════════════════════════════════════════════
---
</step>
</process>

View File

@@ -44,7 +44,8 @@ For each file found, parse frontmatter fields (`status`, `trigger`, `updated`) a
```
Active Debug Sessions
─────────────────────────────────────────────
---
# Slug Status Updated
1 auth-token-null investigating 2026-04-12
hypothesis: JWT decode fails when token contains nested claims
@@ -53,7 +54,8 @@ Active Debug Sessions
2 form-submit-500 fixing 2026-04-11
hypothesis: Missing null check on req.body.user
next: Verify fix passes regression test
─────────────────────────────────────────────
---
Run `/gsd:debug continue <slug>` to resume a session.
No sessions? `/gsd:debug <description>` to start.
```

View File

@@ -258,9 +258,7 @@ gsd_run query commit "docs({phase_num}): add root causes from diagnosis" --files
Display:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► DIAGNOSIS COMPLETE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► DIAGNOSIS COMPLETE
| Gap (Truth) | Root Cause | Files |
|-------------|------------|-------|

View File

@@ -2,9 +2,7 @@
Display banner:
```text
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► AUTO-ADVANCING TO PLAN
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► AUTO-ADVANCING TO PLAN
Context captured (assumptions mode). Launching plan-phase...
```

View File

@@ -48,9 +48,7 @@ _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-pars
Banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► AUTO-ADVANCING TO PLAN
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► AUTO-ADVANCING TO PLAN
Context captured. Launching plan-phase...
```
@@ -69,9 +67,7 @@ _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-pars
- **PHASE COMPLETE** → Full chain succeeded. Display:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► PHASE ${PHASE} COMPLETE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► PHASE ${PHASE} COMPLETE
Auto-advance pipeline finished: discuss → plan → execute

View File

@@ -18,7 +18,6 @@ RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/d
<step name="validate">
**Check for input.**
**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 `$ARGUMENTS` is empty, ask via AskUserQuestion:
@@ -85,9 +84,7 @@ Which approach fits better?
**Show the routing decision.**
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► ROUTING
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► ROUTING
**Input:** {first 80 chars of $ARGUMENTS}
**Routing to:** {chosen command}

View File

@@ -30,9 +30,7 @@ AGENT_SKILLS_AUDITOR=$(gsd_run query agent-skills gsd-eval-auditor)
Display banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► EVAL AUDIT — PHASE {N}: {name}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► EVAL AUDIT — PHASE {N}: {name}
```
## 1. Detect Input State
@@ -47,7 +45,6 @@ EVAL_REVIEW_FILE=$(ls "${PHASE_DIR}"/*-EVAL-REVIEW.md 2>/dev/null | head -1)
**State B** — SUMMARY.md exists, no AI-SPEC.md: Audit against general best practices
**State C** — No SUMMARY.md: 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 `EVAL_REVIEW_FILE` non-empty:** Use AskUserQuestion:
- header: "Existing Eval Review"
@@ -121,9 +118,7 @@ Read the written EVAL-REVIEW.md. Extract:
## 5. Display Summary
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► EVAL AUDIT COMPLETE — PHASE {N}: {name}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► EVAL AUDIT COMPLETE — PHASE {N}: {name}
◆ Score: {overall_score}/100
◆ Verdict: {verdict}

View File

@@ -333,7 +333,7 @@ Canonical per-task commit rules live in **`agents/gsd-executor.md`** (`<task_com
<step name="checkpoint_protocol">
On `type="checkpoint:*"`: automate everything possible first. Checkpoints are for verification/decisions only.
Display: `CHECKPOINT: [Type]` box → Progress {X}/{Y} → Task name → type-specific content → `YOUR ACTION: [signal]`
Display: `### CHECKPOINT: [Type]` heading → Progress {X}/{Y} → Task name → type-specific content → `---` → `**YOUR ACTION: [signal]**`
| Type | Content | Resume signal |
|------|---------|---------------|

View File

@@ -14,7 +14,6 @@ RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/d
**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated.
<step name="parse_args">
**Parse arguments:**
@@ -136,9 +135,7 @@ If the check prints, append it to the Warnings section of the report as `[W025]`
**Format and display results:**
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD Health Check
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD Health Check
Status: HEALTHY | DEGRADED | BROKEN
Errors: N | Warnings: N | Info: N

View File

@@ -19,9 +19,7 @@ RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/d
**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated.
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► IMPORT
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► IMPORT
```
</step>
@@ -57,9 +55,7 @@ test -f "{FILEPATH}" || echo "FILE_NOT_FOUND"
If FILE_NOT_FOUND: display error and exit:
```
╔══════════════════════════════════════════════════════════════╗
║ ERROR ║
╚══════════════════════════════════════════════════════════════╝
### ERROR
File not found: {FILEPATH}
@@ -251,9 +247,7 @@ gsd_run query commit "docs({phase}): import plan from {basename FILEPATH}" --fil
Display completion:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► IMPORT COMPLETE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► IMPORT COMPLETE
```
Show: plan filename written, phase directory, validation result, next steps.

View File

@@ -24,7 +24,6 @@ RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/d
**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated.
<step name="preflight">
Verify prerequisites:
@@ -351,7 +350,7 @@ AskUserQuestion:
<step name="report">
```
───────────────────────────────────────────────────────────────
---
## Inbox Triage Complete
@@ -368,7 +367,7 @@ Next steps:
- Merge ready PRs
- Triage unclassified issues
───────────────────────────────────────────────────────────────
---
```
</step>

View File

@@ -14,9 +14,7 @@ Scan a repo for mixed planning documents (ADR, PRD, SPEC, DOC), synthesize them
Display the stage banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► INGEST DOCS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► INGEST DOCS
```
</step>
@@ -332,9 +330,7 @@ gsd_run commit \
Display completion:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► INGEST DOCS COMPLETE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► INGEST DOCS COMPLETE
```
Show:

View File

@@ -37,11 +37,13 @@ Render the seeds as a table, sorted by `seed_id` (already sorted by the tool). T
```
Seeds
─────────────────────────────────────────────────────────────────────
---
ID Status Scope Trigger Title
SEED-001 dormant large when websockets land Real-time collaboration
SEED-006 triggered medium MILE-04 planning Remove legacy auth crates
─────────────────────────────────────────────────────────────────────
---
<count> seeds (<summary rendered as "N status" pairs, e.g. "1 dormant, 1 triggered">)
```

View File

@@ -40,16 +40,15 @@ These are empty strings by default. Set via: `gsd-tools.cjs query config-set man
Display startup banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► MANAGER
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► MANAGER
{milestone_version} — {milestone_name}
{phase_count} phases · {completed_count} complete
✓ Discuss → inline ◆ Plan/Execute → inline (background when FLATTEN=false)
Dashboard auto-refreshes when background work is active.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
---
```
Proceed to dashboard step.
@@ -92,9 +91,7 @@ Use `deps_display` from init JSON for the Deps column — shows which phases thi
Example output:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► DASHBOARD
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► DASHBOARD
████████████░░░░░░░░ 60% (3/5 phases)
◆ Background: Planning Phase 4
| # | Phase | Deps | D | P | E | Status |
@@ -116,9 +113,7 @@ Use `queued_milestone_version` and `queued_milestone_name` for the header. Phase
Example:
```
───────────────────────────────────────────────────────────────
◆ Queued — {queued_milestone_version} {queued_milestone_name} ({queued_phases.length} phases)
───────────────────────────────────────────────────────────────
### ◆ Queued — {queued_milestone_version} {queued_milestone_name} ({queued_phases.length} phases)
| # | Phase | Deps | Status |
|---|----------------------|------|--------------|
| 31| Email Logs | — | · Queued |
@@ -134,16 +129,13 @@ Queued phases are NOT eligible for the Continue action menu — they live in a f
If `all_complete` is true:
```
╔══════════════════════════════════════════════════════════════╗
║ MILESTONE COMPLETE ║
╚══════════════════════════════════════════════════════════════╝
### MILESTONE COMPLETE
All {phase_count} phases verified complete. Ready for final steps:
→ /gsd:verify-work — run acceptance testing
→ /gsd:complete-milestone — archive and wrap up
```
**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.
Ask user via AskUserQuestion:
- **question:** "All phases complete. What next?"
@@ -188,9 +180,7 @@ Handle responses:
Display recommendations compactly:
```
───────────────────────────────────────────────────────────────
▶ Next Steps
───────────────────────────────────────────────────────────────
### ▶ Next Steps
Continue:
→ Execute Phase 32 (background)
@@ -411,15 +401,14 @@ Classify the error:
Display final status with progress bar:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► SESSION END
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► SESSION END
{milestone_version} — {milestone_name}
{PROGRESS_BAR} {progress_pct}% ({completed_count}/{phase_count} phases)
Resume anytime: /gsd:manager
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
---
```
**Note:** Any background agents still running will continue to completion. Their results will be visible on next `/gsd:manager` or `/gsd:progress` invocation.

View File

@@ -131,9 +131,7 @@ AskUserQuestion(
Before writing any files, present a summary of what was gathered and ask for confirmation.
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► MILESTONE SUMMARY
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► MILESTONE SUMMARY
**Milestone v[X.Y]: [Name]**
@@ -325,9 +323,7 @@ AskUserQuestion: "Research the domain ecosystem for new features before defining
**If user chose "Research first":**
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► RESEARCHING
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► RESEARCHING
◆ Spawning 4 researchers in parallel... (each runs in a subagent — no output until they return, ~1–5 min; expected, not a freeze)
→ Stack, Features, Architecture, Pitfalls
@@ -422,9 +418,7 @@ This guarantees `gsd-roadmapper` (which lists SUMMARY.md as required reading) ne
Display key findings from SUMMARY.md:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► RESEARCH COMPLETE ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► RESEARCH COMPLETE ✓
**Stack additions:** [from SUMMARY.md]
**Feature table stakes:** [from SUMMARY.md]
@@ -436,9 +430,7 @@ Display key findings from SUMMARY.md:
## 9. Define Requirements
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► DEFINING REQUIREMENTS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► DEFINING REQUIREMENTS
```
Read PROJECT.md: core value, current milestone goals, validated requirements (what exists).
@@ -509,9 +501,7 @@ gsd_run query commit "docs: define milestone v[X.Y] requirements" --files .plann
## 10. Create Roadmap
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► CREATING ROADMAP
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► CREATING ROADMAP
◆ Spawning roadmapper... (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)
```
@@ -645,9 +635,7 @@ Print a summary:
## 11. Done
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► MILESTONE INITIALIZED ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► MILESTONE INITIALIZED ✓
**Milestone v[X.Y]: [Name]**

View File

@@ -151,9 +151,7 @@ If spike/sketch findings skills exist, read their SKILL.md files to inform the q
**Display stage banner:**
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► QUESTIONING
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► QUESTIONING
```
**Open the conversation:**
@@ -700,9 +698,7 @@ Use AskUserQuestion:
Display stage banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► RESEARCHING
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► RESEARCHING
Researching [domain] ecosystem...
```
@@ -942,9 +938,7 @@ This guarantees `gsd-roadmapper` (which lists SUMMARY.md as required reading) ne
Display research complete banner and key findings:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► RESEARCH COMPLETE ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► RESEARCH COMPLETE ✓
## Key Findings
@@ -962,9 +956,7 @@ Files: `.planning/research/`
Display stage banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► DEFINING REQUIREMENTS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► DEFINING REQUIREMENTS
```
**Load context:**
@@ -1131,9 +1123,7 @@ When `TEXT_MODE=true` (per the workflow's existing TEXT_MODE handling for non-Cl
Display stage banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► CREATING ROADMAP
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► CREATING ROADMAP
◆ Spawning roadmapper... (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)
```
@@ -1300,9 +1290,7 @@ gsd_run query commit "docs: create roadmap ([N] phases)" --files .planning/ROADM
Present completion summary:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► PROJECT INITIALIZED ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► PROJECT INITIALIZED ✓
**[Project Name]**
@@ -1321,9 +1309,7 @@ Present completion summary:
**If auto mode:**
```
╔══════════════════════════════════════════╗
║ AUTO-ADVANCING → DISCUSS PHASE 1 ║
╚══════════════════════════════════════════╝
### AUTO-ADVANCING → DISCUSS PHASE 1
```
Exit skill and invoke SlashCommand("/gsd:discuss-phase 1 --auto")
@@ -1340,7 +1326,7 @@ PHASE1_HAS_UI=$(echo "$PHASE1_SECTION" | grep -qi "UI hint.*yes" && echo "true"
**If Phase 1 has UI (`PHASE1_HAS_UI` is `true`):**
```
───────────────────────────────────────────────────────────────
---
## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
@@ -1356,13 +1342,13 @@ PHASE1_HAS_UI=$(echo "$PHASE1_SECTION" | grep -qi "UI hint.*yes" && echo "true"
- /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:**
```
───────────────────────────────────────────────────────────────
---
## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
@@ -1377,7 +1363,7 @@ PHASE1_HAS_UI=$(echo "$PHASE1_SECTION" | grep -qi "UI hint.*yes" && echo "true"
**Also available:**
- /gsd:plan-phase 1 — skip discussion, plan directly
───────────────────────────────────────────────────────────────
---
```
</process>

View File

@@ -337,9 +337,7 @@ If user selects "Skip research": skip to step 6.
Display banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► RESEARCHING PHASE {X}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► RESEARCHING PHASE {X}
◆ Spawning researcher... (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)
```
@@ -434,9 +432,7 @@ Resolve active contribution hooks from `PLAN_PRE_HOOKS_JSON` where `kind == "con
Display banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► SECURITY THREAT MODEL REQUIRED (ASVS L{SECURITY_ASVS})
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► SECURITY THREAT MODEL REQUIRED (ASVS L{SECURITY_ASVS})
Each PLAN.md must include a <threat_model> block.
Block on: {SECURITY_BLOCK} severity threats.
@@ -522,7 +518,8 @@ Output this markdown directly (not as a code block):
## ⚠ UI-SPEC.md missing for Phase {N}
▶ Recommended next step:
`/gsd:ui-phase {N} ${GSD_WS}` — generate UI design contract before planning
───────────────────────────────────────────────
---
Also available:
- `/gsd:plan-phase {N} --skip-ui ${GSD_WS}` — plan without UI-SPEC (not recommended for frontend phases)
```
@@ -618,9 +615,7 @@ Pattern mapper activation is owned by the `pattern-mapper` capability's `plan:pr
Display banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► PATTERN MAPPING PHASE {X}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► PATTERN MAPPING PHASE {X}
◆ Spawning pattern mapper... (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)
```
@@ -690,9 +685,7 @@ independent of the teams-status guard above, AC2).
Display banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► PLANNING PHASE {X}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► PLANNING PHASE {X}
◆ Spawning planner... (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)
```
@@ -993,9 +986,7 @@ Use AskUserQuestion for each gap (or batch if multiple gaps).
Display banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► VERIFYING PLANS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► VERIFYING PLANS
◆ Spawning plan checker... (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)
```
@@ -1222,9 +1213,7 @@ BOUNCE_SCRIPT=$(gsd_run query config-get workflow.plan_bounce_script --raw 2>/de
Display banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► BOUNCING PLANS (External Refinement)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► BOUNCING PLANS (External Refinement)
Script: ${BOUNCE_SCRIPT}
Max passes: ${BOUNCE_PASSES}
@@ -1498,9 +1487,7 @@ fi
Display banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► AUTO-ADVANCING TO EXECUTE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► AUTO-ADVANCING TO EXECUTE
Plans ready. Launching execute-phase...
```
@@ -1515,9 +1502,7 @@ The `--no-transition` flag tells execute-phase to return status after verificati
**Handle execute-phase return:**
- **PHASE COMPLETE** → Display final summary:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► PHASE ${PHASE} COMPLETE ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► PHASE ${PHASE} COMPLETE ✓
Auto-advance pipeline finished.
@@ -1541,9 +1526,7 @@ Output this markdown directly (not as a code block):
`${GAPS_EXEC_FLAG}` projects the just-completed planning mode onto the follow-up execute command (#3297): it expands to `--gaps-only` for a `--gaps` planning run (so the handoff points at execute-phase's gap-closure scope — only the newly created `gap_closure: true` plans — not the whole phase) and to empty for a standard or `--reviews` run (whole-phase scope, unchanged). Substitute it verbatim; when empty, collapse the extra space.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► PHASE {X} PLANNED ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► PHASE {X} PLANNED ✓
**Phase {X}: {Name}** — {N} plan(s) in {M} wave(s)
@@ -1555,7 +1538,7 @@ Output this markdown directly (not as a code block):
Research: {Completed | Used existing | Skipped}
Verification: {Passed | Passed with override | Skipped}
───────────────────────────────────────────────────────────────
---
## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
@@ -1565,7 +1548,7 @@ Verification: {Passed | Passed with override | Skipped}
/gsd:execute-phase {X} ${GAPS_EXEC_FLAG} ${GSD_WS}
───────────────────────────────────────────────────────────────
---
**Also available:**
- cat .planning/phases/{phase-dir}/*-PLAN.md — review plans
@@ -1573,7 +1556,7 @@ Verification: {Passed | Passed with override | Skipped}
- /gsd:review --phase {X} --all — peer review plans with external AIs
- /gsd:plan-phase {X} --reviews — replan incorporating review feedback
───────────────────────────────────────────────────────────────
---
</offer_next>
<windows_troubleshooting>

View File

@@ -13,9 +13,7 @@ fi
2. Display banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► PRD EXPRESS PATH
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► PRD EXPRESS PATH
Using PRD: {PRD_FILE}
Generating CONTEXT.md from requirements...

View File

@@ -134,9 +134,7 @@ PHASE_INFO=$(gsd_run roadmap get-phase "${PHASE}")
Display startup banner:
```text
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► PLAN CONVERGENCE — Phase {phase_number}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► PLAN CONVERGENCE — Phase {phase_number}
Reviewers: {REVIEWER_DISPLAY}
Max cycles: {MAX_CYCLES}
@@ -400,9 +398,7 @@ gsd_run state planned-phase --phase "${PHASE}" --name "${phase_name}" --plans "$
Display:
```text
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► CONVERGENCE COMPLETE ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► CONVERGENCE COMPLETE ✓
Phase {phase_number} converged in {cycle} cycle(s).
No HIGH concerns remaining.

View File

@@ -63,9 +63,7 @@ if [ "$PR_STRICT" = "true" ]; then PR_MODE="strict"; else PR_MODE="default"; PR_
Display:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► PR BRANCH
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► PR BRANCH
Branch: {CURRENT_BRANCH}
Target: {TARGET}

View File

@@ -21,7 +21,6 @@ RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/d
**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated.
## 1. Initialize
Parse flags from $ARGUMENTS:
@@ -37,7 +36,6 @@ PROFILE_PATH="$HOME/.claude/gsd-core/USER-PROFILE.md"
**If profile exists AND --refresh NOT set AND --questionnaire NOT set:**
**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.
Use AskUserQuestion:
- header: "Existing Profile"
@@ -72,9 +70,7 @@ Continue to step 2.
Display consent screen:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD > PROFILE YOUR CODING STYLE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD > PROFILE YOUR CODING STYLE
Claude starts every conversation generic. A profile teaches Claude
how YOU actually work -- not how you think you work.
@@ -421,9 +417,7 @@ If nothing changed: Display "No changes detected -- your profile is already up t
**Display final summary:**
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD > PROFILE COMPLETE ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD > PROFILE COMPLETE ✓
Your profile: $HOME/.claude/gsd-core/USER-PROFILE.md
```

View File

@@ -65,63 +65,49 @@ Display banner based on active flags:
If `$FULL_MODE` (all phases enabled — `--full` or all granular flags):
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► QUICK TASK (FULL)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► QUICK TASK (FULL)
◆ Discussion + research + plan checking + verification enabled
```
If `$DISCUSS_MODE` and `$VALIDATE_MODE` (no research):
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► QUICK TASK (DISCUSS + VALIDATE)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► QUICK TASK (DISCUSS + VALIDATE)
◆ Discussion + plan checking + verification enabled
```
If `$DISCUSS_MODE` and `$RESEARCH_MODE` (no validate):
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► QUICK TASK (DISCUSS + RESEARCH)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► QUICK TASK (DISCUSS + RESEARCH)
◆ Discussion + research enabled
```
If `$RESEARCH_MODE` and `$VALIDATE_MODE` (no discuss):
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► QUICK TASK (RESEARCH + VALIDATE)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► QUICK TASK (RESEARCH + VALIDATE)
◆ Research + plan checking + verification enabled
```
If `$DISCUSS_MODE` only:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► QUICK TASK (DISCUSS)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► QUICK TASK (DISCUSS)
◆ Discussion phase enabled — surfacing gray areas before planning
```
If `$RESEARCH_MODE` only:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► QUICK TASK (RESEARCH)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► QUICK TASK (RESEARCH)
◆ Research phase enabled — investigating approaches before planning
```
If `$VALIDATE_MODE` only:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► QUICK TASK (VALIDATE)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► QUICK TASK (VALIDATE)
◆ Plan checking + verification enabled
```

View File

@@ -4,9 +4,7 @@ Skip this step entirely if NOT `$DISCUSS_MODE`.
Display banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► DISCUSSING QUICK TASK
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► DISCUSSING QUICK TASK
◆ Surfacing gray areas for: ${DESCRIPTION}
```

View File

@@ -4,9 +4,7 @@ Skip this step entirely if NOT `$VALIDATE_MODE`.
Display banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► CHECKING PLAN
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► CHECKING PLAN
◆ Spawning plan checker... (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)
```

View File

@@ -4,9 +4,7 @@ Skip this step entirely if NOT `$VALIDATE_MODE`.
Display banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► VERIFYING RESULTS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► VERIFYING RESULTS
◆ Spawning verifier... (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)
```

View File

@@ -4,9 +4,7 @@ Skip this step entirely if NOT `$RESEARCH_MODE`.
Display banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► RESEARCHING QUICK TASK
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► RESEARCHING QUICK TASK
◆ Investigating approaches for: ${DESCRIPTION} (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)
```

View File

@@ -133,17 +133,13 @@ fi
Present complete project status to user:
```
╔══════════════════════════════════════════════════════════════╗
║ PROJECT STATUS ║
╠══════════════════════════════════════════════════════════════╣
║ Building: [one-liner from PROJECT.md "What This Is"] ║
║ ║
║ Phase: [X] of [Y] - [Phase name] ║
║ Plan: [A] of [B] - [Status] ║
║ Progress: [██████░░░░] XX% ║
║ ║
║ Last activity: [date] - [what happened] ║
╚══════════════════════════════════════════════════════════════╝
### PROJECT STATUS
Building: [one-liner from PROJECT.md "What This Is"]
Phase: [X] of [Y] - [Phase name]
Plan: [A] of [B] - [Status]
Progress: [██████░░░░] XX%
Last activity: [date] - [what happened]
[If incomplete work found:]
⚠️ Incomplete work detected:

View File

@@ -404,9 +404,7 @@ blocked, not silently redirected** (ADR-2782 D5).
Display progress:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► CROSS-AI REVIEW — Phase {N}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► CROSS-AI REVIEW — Phase {N}
◆ Reviewing with {CLI}... done ✓
◆ Reviewing with {CLI}... done ✓
@@ -507,9 +505,7 @@ gsd_run query commit "docs: cross-AI review for phase {N}" --files {phase_dir}/{
Display summary:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► REVIEW COMPLETE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► REVIEW COMPLETE
Phase {N} reviewed by {count} AI systems.

View File

@@ -747,9 +747,7 @@ Never write a tier the user explicitly chose to keep; the existing value must su
Display:
```text
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► ADVANCED SETTINGS UPDATED
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► ADVANCED SETTINGS UPDATED
| Setting | Value |
|--------------------------------------------|-------|

View File

@@ -302,9 +302,7 @@ Display the masked confirmation table. **No plaintext API keys appear in this
output under any circumstance.**
```text
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► INTEGRATIONS UPDATED
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► INTEGRATIONS UPDATED
Search Integrations
| Field | Value |

View File

@@ -606,9 +606,7 @@ Write `~/.gsd/defaults.json` with:
Display:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► SETTINGS UPDATED
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► SETTINGS UPDATED
| Setting | Value |
|----------------------|-------|

View File

@@ -571,7 +571,7 @@ Each dispatch is best-effort: if it errors, record a warning and continue — ne
<step name="report">
```
───────────────────────────────────────────────────────────────
---
## ✓ Phase {X}: {Name} — Shipped
@@ -587,7 +587,7 @@ Next steps:
- /gsd:complete-milestone (if last phase in milestone)
- /gsd:progress (to see what's next)
───────────────────────────────────────────────────────────────
---
```
</step>

View File

@@ -13,9 +13,7 @@ Read all files referenced by the invoking prompt's execution_context before star
<step name="banner">
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► SKETCH WRAP-UP
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► SKETCH WRAP-UP
```
</step>
@@ -55,17 +53,15 @@ Present each unprocessed sketch in ascending order. For each sketch, show:
Then ask the user:
╔══════════════════════════════════════════════════════════════╗
║ CHECKPOINT: Decision Required ║
╚══════════════════════════════════════════════════════════════╝
### CHECKPOINT: Decision Required
Sketch {NNN}: {name} — Winner: Variant {X}
{key design decisions summary}
──────────────────────────────────────────────────────────────
→ Include / Exclude / Partial / Let me look at it
──────────────────────────────────────────────────────────────
---
**→ Include / Exclude / Partial / Let me look at it**
**If "Let me look at it":**
1. Provide: `open .planning/sketches/NNN-name/index.html`
@@ -239,9 +235,7 @@ gsd_run query commit "docs(sketch-wrap-up): package [N] sketch findings into pro
<step name="report">
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► SKETCH WRAP-UP COMPLETE ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► SKETCH WRAP-UP COMPLETE ✓
**Curated:** {N} sketches ({included} included, {excluded} excluded)
**Design areas:** {list}
@@ -252,7 +246,7 @@ gsd_run query commit "docs(sketch-wrap-up): package [N] sketch findings into pro
The sketch-findings skill will auto-load when building the UI.
```
───────────────────────────────────────────────────────────────
---
## ▶ Next Up
@@ -260,7 +254,7 @@ The sketch-findings skill will auto-load when building the UI.
`/gsd:sketch` (run with no argument — its frontier mode analyzes the sketch landscape and proposes consistency and frontier sketches)
───────────────────────────────────────────────────────────────
---
**Also available:**
- `/gsd:plan-phase` — start building the real UI
@@ -268,7 +262,7 @@ The sketch-findings skill will auto-load when building the UI.
- `/gsd:sketch [idea]` — sketch a specific new design area
- `/gsd:explore` — continue exploring
───────────────────────────────────────────────────────────────
---
</step>
</process>

View File

@@ -21,9 +21,7 @@ Read all files referenced by the invoking prompt's execution_context before star
<step name="banner">
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► SKETCHING
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► SKETCHING
```
Parse `$ARGUMENTS` for:
@@ -272,9 +270,7 @@ open .planning/sketches/NNN-descriptive-name/index.html
**e.** Present to the user with a checkpoint:
╔══════════════════════════════════════════════════════════════╗
║ CHECKPOINT: Verification Required ║
╚══════════════════════════════════════════════════════════════╝
### CHECKPOINT: Verification Required
**Sketch {NNN}: {name}**
@@ -282,9 +278,9 @@ Open: `open .planning/sketches/NNN-name/index.html`
Compare: {what to look for between variants}
──────────────────────────────────────────────────────────────
→ Which variant feels right? Or cherry-pick elements across variants.
──────────────────────────────────────────────────────────────
---
**→ Which variant feels right? Or cherry-pick elements across variants.**
**f.** Handle feedback:
- **Pick a direction:** mark winner, move to next sketch
@@ -315,9 +311,7 @@ gsd_run query commit "docs(sketch-NNN): [winning direction] — [key visual insi
After all sketches complete:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► SKETCH COMPLETE ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► SKETCH COMPLETE ✓
## Design Direction
{what we landed on overall}
@@ -329,7 +323,7 @@ After all sketches complete:
{anything unresolved or worth revisiting}
```
───────────────────────────────────────────────────────────────
---
## ▶ Next Up
@@ -337,14 +331,14 @@ After all sketches complete:
`/gsd:sketch --wrap-up`
───────────────────────────────────────────────────────────────
---
**Also available:**
- `/gsd:sketch` — sketch more (or run with no argument for frontier mode)
- `/gsd:plan-phase` — start building the real UI
- `/gsd:spike` — spike technical feasibility of a design pattern
───────────────────────────────────────────────────────────────
---
</step>
</process>

View File

@@ -93,9 +93,7 @@ Wait for the user's response before continuing. Map the chosen number to the cor
**Show the routing decision.**
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► SMART ENTRY
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► SMART ENTRY
**Situation:** {situation}
**Routing to:** {chosen command}

View File

@@ -13,9 +13,7 @@ Read all files referenced by the invoking prompt's execution_context before star
<step name="banner">
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► SPIKE WRAP-UP
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► SPIKE WRAP-UP
```
</step>
@@ -267,9 +265,7 @@ gsd_run query commit "docs(spike-wrap-up): package [N] spike findings into proje
<step name="report">
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► SPIKE WRAP-UP COMPLETE ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► SPIKE WRAP-UP COMPLETE ✓
**Processed:** {N} spikes
**Feature areas:** {list}
@@ -287,7 +283,7 @@ The spike-findings skill will auto-load in future build conversations.
After the summary, present next-step options:
───────────────────────────────────────────────────────────────
---
## ▶ Next Up
@@ -295,7 +291,7 @@ After the summary, present next-step options:
`/gsd:spike` (run with no argument — its frontier mode analyzes the spike landscape and proposes integration and frontier spikes)
───────────────────────────────────────────────────────────────
---
**Also available:**
- `/gsd:plan-phase` — start planning the real implementation
@@ -303,7 +299,7 @@ After the summary, present next-step options:
- `/gsd:explore` — continue exploring
- Other
───────────────────────────────────────────────────────────────
---
</step>
</process>

View File

@@ -20,12 +20,9 @@ RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/d
**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated.
<step name="banner">
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► SPIKING
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► SPIKING
```
Parse `$ARGUMENTS` for:
@@ -175,15 +172,13 @@ Order by risk — most likely to kill the idea runs first.
<step name="align">
**If `QUICK_MODE` is true:** Skip.
╔══════════════════════════════════════════════════════════════╗
║ CHECKPOINT: Decision Required ║
╚══════════════════════════════════════════════════════════════╝
### CHECKPOINT: Decision Required
{spike table from decompose step}
──────────────────────────────────────────────────────────────
→ Build all in this order, or adjust the list?
──────────────────────────────────────────────────────────────
---
**→ Build all in this order, or adjust the list?**
</step>
<step name="research">
@@ -358,17 +353,15 @@ tags: [tag1, tag2]
- Self-verifiable: run, iterate if findings warrant deeper investigation, update verdict
- Needs human judgment: present checkpoint box:
╔══════════════════════════════════════════════════════════════╗
║ CHECKPOINT: Verification Required ║
╚══════════════════════════════════════════════════════════════╝
### CHECKPOINT: Verification Required
**Spike {NNN}: {name}**
**How to run:** {command}
**What to expect:** {concrete outcomes}
──────────────────────────────────────────────────────────────
→ Does this match what you expected? Describe what you see.
──────────────────────────────────────────────────────────────
---
**→ Does this match what you expected? Describe what you see.**
**h.** Update `.planning/spikes/MANIFEST.md` with the spike's row, setting the Idea column to
this spike's idea key.
@@ -390,16 +383,14 @@ Do not rush to a verdict. A spike that says "VALIDATED — it works" with no nua
**k.** If core assumption invalidated:
╔══════════════════════════════════════════════════════════════╗
║ CHECKPOINT: Decision Required ║
╚══════════════════════════════════════════════════════════════╝
### CHECKPOINT: Decision Required
Core assumption invalidated by Spike {NNN}.
{what was invalidated and why}
──────────────────────────────────────────────────────────────
→ Continue with remaining spikes / Pivot approach / Abandon
──────────────────────────────────────────────────────────────
---
**→ Continue with remaining spikes / Pivot approach / Abandon**
</step>
<step name="update_conventions">
@@ -435,9 +426,7 @@ gsd_run query commit "docs(spikes): update conventions" --files .planning/spikes
<step name="report">
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► SPIKE COMPLETE ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► SPIKE COMPLETE ✓
## Verdicts
@@ -456,7 +445,7 @@ gsd_run query commit "docs(spikes): update conventions" --files .planning/spikes
{what to use, avoid, watch out for}
```
───────────────────────────────────────────────────────────────
---
## ▶ Next Up
@@ -464,14 +453,14 @@ gsd_run query commit "docs(spikes): update conventions" --files .planning/spikes
`/gsd:spike --wrap-up`
───────────────────────────────────────────────────────────────
---
**Also available:**
- `/gsd:spike` — spike more ideas (or run with no argument for frontier mode)
- `/gsd:plan-phase` — start planning the real implementation
- `/gsd:explore` — continue exploring the idea
───────────────────────────────────────────────────────────────
---
</step>
</process>

View File

@@ -42,12 +42,14 @@ Apply filter for LIST-OPEN (show only status=open or status=in_progress) or LIST
Display:
```
Context Threads
─────────────────────────────────────────────────────────
---
slug status updated title
auth-decision open 2026-04-09 OAuth vs Session tokens
db-schema-v2 in_progress 2026-04-07 Connection pool sizing
frontend-build-tools resolved 2026-04-01 Vite vs webpack
─────────────────────────────────────────────────────────
---
3 threads (2 open/in_progress, 1 resolved)
```
@@ -96,7 +98,8 @@ When SUBCMD=status and SLUG is set (already sanitized):
2. Read the file and display a summary:
```
Thread: {SLUG}
─────────────────────────────────────
---
Title: {title from frontmatter or # heading}
Status: {status from frontmatter or ## Status heading}
Updated: {updated from frontmatter}
@@ -107,7 +110,8 @@ When SUBCMD=status and SLUG is set (already sanitized):
Next Steps:
{content of ## Next Steps section}
─────────────────────────────────────
---
Resume with: /gsd:thread {SLUG}
Close with: /gsd:thread close {SLUG}
```

View File

@@ -115,9 +115,7 @@ If "Update": continue to step 5.
Display:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► UI DESIGN CONTRACT — PHASE {N}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► UI DESIGN CONTRACT — PHASE {N}
◆ Spawning UI researcher... (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)
```
@@ -188,9 +186,7 @@ Display blocker details and options. Exit workflow.
Display:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► VERIFYING UI-SPEC
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► VERIFYING UI-SPEC
◆ Spawning UI checker... (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)
```
@@ -423,16 +419,14 @@ STATE coverage and REFERENCES those rows rather than restating the copy (de-dup)
Display:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► UI-SPEC READY ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► UI-SPEC READY ✓
**Phase {N}: {Name}** — UI design contract approved
Dimensions: 7/7 passed
{If any FLAGs: "Recommendations: {N} (non-blocking)"}
───────────────────────────────────────────────────────────────
---
## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
@@ -448,7 +442,7 @@ Dimensions: 7/7 passed
(or `/gsd:plan-phase {N}` to skip discussion)
───────────────────────────────────────────────────────────────
---
```
## 11. Commit (if configured)

View File

@@ -33,9 +33,7 @@ UI_AUDITOR_MODEL=$(gsd_run query resolve-model gsd-ui-auditor --raw)
Display banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► UI AUDIT — PHASE {N}: {name}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► UI AUDIT — PHASE {N}: {name}
```
## 1. Detect Input State
@@ -127,9 +125,7 @@ Agent(
Display score summary:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► UI AUDIT COMPLETE ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► UI AUDIT COMPLETE ✓
**Phase {N}: {Name}** — Overall: {score}/24
@@ -149,7 +145,7 @@ Top fixes:
Full review: {path to UI-REVIEW.md}
───────────────────────────────────────────────────────────────
---
## ▶ Next
@@ -157,7 +153,7 @@ Full review: {path to UI-REVIEW.md}
- `/gsd:verify-work {N}` — UAT testing before phase completion
───────────────────────────────────────────────────────────────
---
```
## Automated UI Verification (when Playwright-MCP is available)

View File

@@ -13,9 +13,7 @@ affect the core planning pipeline.
Display the stage banner:
```text
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► ULTRAPLAN PHASE ⚠ BETA
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► ULTRAPLAN PHASE ⚠ BETA
Ultraplan is in research preview (Claude Code v2.1.91+).
Use /gsd:plan-phase for stable local planning.
```
@@ -44,9 +42,7 @@ fi
If the output is empty or unset, display the following error and exit:
```text
╔══════════════════════════════════════════════════════════════╗
║ RUNTIME ERROR ║
╚══════════════════════════════════════════════════════════════╝
### RUNTIME ERROR
/gsd:ultraplan-phase requires Claude Code.
ultraplan is not available in this runtime.
@@ -159,9 +155,7 @@ Display the return-path instructions **before** triggering ultraplan so they are
in the terminal scroll-back after ultraplan launches:
```text
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
WHEN THE PLAN IS READY — WHAT TO DO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### WHEN THE PLAN IS READY — WHAT TO DO
When ◆ ultraplan ready appears in your terminal:
@@ -176,9 +170,7 @@ When ◆ ultraplan ready appears in your terminal:
/gsd:import will run conflict detection, convert to GSD format,
validate via plan-checker, update ROADMAP.md, and commit.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Launching ultraplan for Phase {N}: {phase_name}...
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### Launching ultraplan for Phase {N}: {phase_name}...
```
</step>

View File

@@ -15,14 +15,11 @@ RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --default "" 2>/d
**If `response_language` is set:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in `{response_language}`. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated.
<step name="banner" priority="first">
Display the stage banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► UNDO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► UNDO
```
</step>
@@ -70,7 +67,6 @@ Recent GSD commits:
3. ghi9012 fix(02-03): correct validation logic
```
**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.
Use AskUserQuestion to ask:
- question: "Which commits to revert? Enter numbers (e.g., 1,3) or 'all'"
@@ -237,9 +233,7 @@ If any revert fails (merge conflict or error):
```
3. Display:
```
╔══════════════════════════════════════════════════════════════╗
║ ERROR ║
╚══════════════════════════════════════════════════════════════╝
### ERROR
Revert failed on commit ${HASH}.
Likely cause: merge conflict with subsequent changes.
@@ -271,9 +265,7 @@ git commit -m "revert: undo ${N} selected commits — ${REVERT_REASON}"
Display the completion banner:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► UNDO COMPLETE ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► UNDO COMPLETE ✓
```
Show summary:
@@ -284,7 +276,7 @@ Show summary:
Show next steps:
```
───────────────────────────────────────────────────────────────
---
## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
@@ -294,13 +286,13 @@ Show next steps:
/gsd:progress
───────────────────────────────────────────────────────────────
---
**Also available:**
- `/gsd:execute-phase ${PHASE}` — re-execute if needed
- `/gsd:undo --last 1` — undo the revert itself if something went wrong
───────────────────────────────────────────────────────────────
---
```
</step>

View File

@@ -9,7 +9,6 @@ Read all files referenced by the invoking prompt's execution_context before star
<process>
**If `response_language` is configured:** All user-facing questions, prompts, and explanations in this workflow MUST be presented in that language. Technical terms, code, file paths, and subagent prompts stay in English — only user-facing output is translated.
<step name="get_installed_version">
Detect the installed GSD version, scope, runtime, and config dir.
@@ -253,11 +252,12 @@ rm -f "$CHANGELOG_TMP"
**Latest:** {LATEST_VERSION}
### What's New
────────────────────────────────────────────────────────────
---
{CHANGELOG_PREVIEW}
────────────────────────────────────────────────────────────
---
⚠️ **Note:** The installer performs a clean install of GSD folders:
- `commands/gsd/` will be wiped and replaced
@@ -277,7 +277,6 @@ Your custom files in other locations are preserved:
If you've modified any GSD files directly, they'll be automatically backed up to `gsd-local-patches/` and can be reapplied with `/gsd:update --reapply` after the update.
```
**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.
Use AskUserQuestion:
- Question: "Proceed with update?"
@@ -480,9 +479,7 @@ The SessionStart hook (`gsd-check-update.js`) writes to the detected runtime's c
Format completion message (changelog was already shown in confirmation step):
```
╔═══════════════════════════════════════════════════════════╗
║ GSD Updated: v1.5.10 → v1.5.15 ║
╚═══════════════════════════════════════════════════════════╝
### GSD Updated: v1.5.10 → v1.5.15
⚠️ Restart your runtime to pick up the new commands.
@@ -490,7 +487,6 @@ Format completion message (changelog was already shown in confirmation step):
```
</step>
<step name="restore_custom_files">
`backup_custom_files` copied user-added files into `gsd-user-files-backup/`
before the wipe. Offer to put them back — now, against the release that was

View File

@@ -649,9 +649,12 @@ Parse the JSON output. For the CURRENT PHASE ONLY, surface:
If any are found, display:
```
Phase {N} Artifact Check
─────────────────────────────────────────────────
---
{list each item with status and file path}
─────────────────────────────────────────────────
---
These items are open. Proceed anyway? [Y/n]
```
@@ -687,9 +690,7 @@ Diagnosis runs automatically - no user prompt. Parallel agents investigate simul
Display:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► PLANNING FIXES
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► PLANNING FIXES
◆ Spawning planner for gap closure... (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)
```
@@ -754,9 +755,7 @@ On return:
Display:
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► VERIFYING FIX PLANS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► VERIFYING FIX PLANS
◆ Spawning plan checker... (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)
```
@@ -860,9 +859,7 @@ Wait for user response.
**Present completion and next steps:**
```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GSD ► FIXES READY ✓
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
### GSD ► FIXES READY ✓
**Phase {X}: {Name}** — {N} gap(s) diagnosed, {M} fix plan(s) created
@@ -873,7 +870,7 @@ Wait for user response.
Plans verified and ready for execution.
───────────────────────────────────────────────────────────────
---
## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
@@ -881,7 +878,7 @@ Plans verified and ready for execution.
`/clear` then `/gsd:execute-phase {phase} --gaps-only`
───────────────────────────────────────────────────────────────
---
```
</step>