* 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:
@@ -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
|
||||
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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.
|
||||
```
|
||||
|
||||
@@ -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 |
|
||||
|-------------|------------|-------|
|
||||
|
||||
@@ -2,9 +2,7 @@
|
||||
|
||||
Display banner:
|
||||
```text
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
GSD ► AUTO-ADVANCING TO PLAN
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
### GSD ► AUTO-ADVANCING TO PLAN
|
||||
|
||||
Context captured (assumptions mode). Launching plan-phase...
|
||||
```
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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 |
|
||||
|------|---------|---------------|
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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">)
|
||||
```
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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]**
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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...
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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}
|
||||
```
|
||||
|
||||
@@ -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)
|
||||
```
|
||||
|
||||
@@ -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)
|
||||
```
|
||||
|
||||
@@ -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)
|
||||
```
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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 |
|
||||
|--------------------------------------------|-------|
|
||||
|
||||
@@ -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 |
|
||||
|
||||
@@ -606,9 +606,7 @@ Write `~/.gsd/defaults.json` with:
|
||||
Display:
|
||||
|
||||
```
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
GSD ► SETTINGS UPDATED
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
### GSD ► SETTINGS UPDATED
|
||||
|
||||
| Setting | Value |
|
||||
|----------------------|-------|
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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}
|
||||
```
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user