gsd-opencode 1.33.2 → 1.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/agents/gsd-advisor-researcher.md +23 -0
  2. package/agents/gsd-ai-researcher.md +142 -0
  3. package/agents/gsd-code-fixer.md +523 -0
  4. package/agents/gsd-code-reviewer.md +361 -0
  5. package/agents/gsd-debugger.md +14 -1
  6. package/agents/gsd-domain-researcher.md +162 -0
  7. package/agents/gsd-eval-auditor.md +170 -0
  8. package/agents/gsd-eval-planner.md +161 -0
  9. package/agents/gsd-executor.md +70 -7
  10. package/agents/gsd-framework-selector.md +167 -0
  11. package/agents/gsd-intel-updater.md +320 -0
  12. package/agents/gsd-phase-researcher.md +26 -0
  13. package/agents/gsd-plan-checker.md +12 -0
  14. package/agents/gsd-planner.md +16 -6
  15. package/agents/gsd-project-researcher.md +23 -0
  16. package/agents/gsd-ui-researcher.md +23 -0
  17. package/agents/gsd-verifier.md +55 -1
  18. package/commands/gsd/gsd-add-backlog.md +1 -1
  19. package/commands/gsd/gsd-add-phase.md +1 -1
  20. package/commands/gsd/gsd-add-todo.md +1 -1
  21. package/commands/gsd/gsd-ai-integration-phase.md +36 -0
  22. package/commands/gsd/gsd-audit-fix.md +33 -0
  23. package/commands/gsd/gsd-autonomous.md +1 -0
  24. package/commands/gsd/gsd-check-todos.md +1 -1
  25. package/commands/gsd/gsd-code-review-fix.md +52 -0
  26. package/commands/gsd/gsd-code-review.md +55 -0
  27. package/commands/gsd/gsd-complete-milestone.md +1 -1
  28. package/commands/gsd/gsd-debug.md +1 -1
  29. package/commands/gsd/gsd-eval-review.md +32 -0
  30. package/commands/gsd/gsd-explore.md +27 -0
  31. package/commands/gsd/gsd-from-gsd2.md +45 -0
  32. package/commands/gsd/gsd-health.md +1 -1
  33. package/commands/gsd/gsd-import.md +36 -0
  34. package/commands/gsd/gsd-insert-phase.md +1 -1
  35. package/commands/gsd/gsd-intel.md +183 -0
  36. package/commands/gsd/gsd-manager.md +1 -1
  37. package/commands/gsd/gsd-next.md +2 -0
  38. package/commands/gsd/gsd-reapply-patches.md +58 -3
  39. package/commands/gsd/gsd-remove-phase.md +1 -1
  40. package/commands/gsd/gsd-review.md +4 -2
  41. package/commands/gsd/gsd-scan.md +26 -0
  42. package/commands/gsd/gsd-set-profile.md +1 -1
  43. package/commands/gsd/gsd-thread.md +1 -1
  44. package/commands/gsd/gsd-undo.md +34 -0
  45. package/commands/gsd/gsd-workstreams.md +6 -6
  46. package/get-shit-done/bin/gsd-tools.cjs +143 -5
  47. package/get-shit-done/bin/lib/commands.cjs +10 -2
  48. package/get-shit-done/bin/lib/config.cjs +71 -37
  49. package/get-shit-done/bin/lib/core.cjs +70 -8
  50. package/get-shit-done/bin/lib/gsd2-import.cjs +511 -0
  51. package/get-shit-done/bin/lib/init.cjs +20 -6
  52. package/get-shit-done/bin/lib/intel.cjs +660 -0
  53. package/get-shit-done/bin/lib/learnings.cjs +378 -0
  54. package/get-shit-done/bin/lib/milestone.cjs +25 -15
  55. package/get-shit-done/bin/lib/model-profiles.cjs +17 -17
  56. package/get-shit-done/bin/lib/phase.cjs +148 -112
  57. package/get-shit-done/bin/lib/roadmap.cjs +12 -5
  58. package/get-shit-done/bin/lib/security.cjs +119 -0
  59. package/get-shit-done/bin/lib/state.cjs +283 -221
  60. package/get-shit-done/bin/lib/template.cjs +8 -4
  61. package/get-shit-done/bin/lib/verify.cjs +42 -5
  62. package/get-shit-done/references/ai-evals.md +156 -0
  63. package/get-shit-done/references/ai-frameworks.md +186 -0
  64. package/get-shit-done/references/common-bug-patterns.md +114 -0
  65. package/get-shit-done/references/few-shot-examples/plan-checker.md +73 -0
  66. package/get-shit-done/references/few-shot-examples/verifier.md +109 -0
  67. package/get-shit-done/references/gates.md +70 -0
  68. package/get-shit-done/references/ios-scaffold.md +123 -0
  69. package/get-shit-done/references/model-profile-resolution.md +6 -7
  70. package/get-shit-done/references/model-profiles.md +20 -14
  71. package/get-shit-done/references/planning-config.md +237 -0
  72. package/get-shit-done/references/thinking-models-debug.md +44 -0
  73. package/get-shit-done/references/thinking-models-execution.md +50 -0
  74. package/get-shit-done/references/thinking-models-planning.md +62 -0
  75. package/get-shit-done/references/thinking-models-research.md +50 -0
  76. package/get-shit-done/references/thinking-models-verification.md +55 -0
  77. package/get-shit-done/references/thinking-partner.md +96 -0
  78. package/get-shit-done/references/universal-anti-patterns.md +6 -1
  79. package/get-shit-done/references/verification-overrides.md +227 -0
  80. package/get-shit-done/templates/AI-SPEC.md +246 -0
  81. package/get-shit-done/workflows/add-tests.md +3 -0
  82. package/get-shit-done/workflows/add-todo.md +2 -0
  83. package/get-shit-done/workflows/ai-integration-phase.md +284 -0
  84. package/get-shit-done/workflows/audit-fix.md +154 -0
  85. package/get-shit-done/workflows/autonomous.md +33 -2
  86. package/get-shit-done/workflows/check-todos.md +2 -0
  87. package/get-shit-done/workflows/cleanup.md +2 -0
  88. package/get-shit-done/workflows/code-review-fix.md +497 -0
  89. package/get-shit-done/workflows/code-review.md +515 -0
  90. package/get-shit-done/workflows/complete-milestone.md +40 -15
  91. package/get-shit-done/workflows/diagnose-issues.md +1 -1
  92. package/get-shit-done/workflows/discovery-phase.md +3 -1
  93. package/get-shit-done/workflows/discuss-phase-assumptions.md +1 -1
  94. package/get-shit-done/workflows/discuss-phase.md +21 -7
  95. package/get-shit-done/workflows/do.md +2 -0
  96. package/get-shit-done/workflows/docs-update.md +2 -0
  97. package/get-shit-done/workflows/eval-review.md +155 -0
  98. package/get-shit-done/workflows/execute-phase.md +307 -57
  99. package/get-shit-done/workflows/execute-plan.md +64 -93
  100. package/get-shit-done/workflows/explore.md +136 -0
  101. package/get-shit-done/workflows/help.md +1 -1
  102. package/get-shit-done/workflows/import.md +273 -0
  103. package/get-shit-done/workflows/inbox.md +387 -0
  104. package/get-shit-done/workflows/manager.md +4 -10
  105. package/get-shit-done/workflows/new-milestone.md +3 -1
  106. package/get-shit-done/workflows/new-project.md +2 -0
  107. package/get-shit-done/workflows/new-workspace.md +2 -0
  108. package/get-shit-done/workflows/next.md +56 -0
  109. package/get-shit-done/workflows/note.md +2 -0
  110. package/get-shit-done/workflows/plan-phase.md +97 -17
  111. package/get-shit-done/workflows/plant-seed.md +3 -0
  112. package/get-shit-done/workflows/pr-branch.md +41 -13
  113. package/get-shit-done/workflows/profile-user.md +4 -2
  114. package/get-shit-done/workflows/quick.md +99 -4
  115. package/get-shit-done/workflows/remove-workspace.md +2 -0
  116. package/get-shit-done/workflows/review.md +53 -6
  117. package/get-shit-done/workflows/scan.md +98 -0
  118. package/get-shit-done/workflows/secure-phase.md +2 -0
  119. package/get-shit-done/workflows/settings.md +18 -3
  120. package/get-shit-done/workflows/ship.md +3 -0
  121. package/get-shit-done/workflows/ui-phase.md +10 -2
  122. package/get-shit-done/workflows/ui-review.md +2 -0
  123. package/get-shit-done/workflows/undo.md +314 -0
  124. package/get-shit-done/workflows/update.md +2 -0
  125. package/get-shit-done/workflows/validate-phase.md +2 -0
  126. package/get-shit-done/workflows/verify-phase.md +83 -0
  127. package/get-shit-done/workflows/verify-work.md +12 -1
  128. package/package.json +1 -1
  129. package/skills/gsd-code-review/SKILL.md +48 -0
  130. package/skills/gsd-code-review-fix/SKILL.md +44 -0
@@ -0,0 +1,387 @@
1
+ <objective>
2
+ Triage and review all open GitHub issues and PRs against project contribution templates.
3
+ Produces a structured report showing compliance status for each item, flags missing
4
+ required fields, identifies label gaps, and optionally takes action (label, comment, close).
5
+ </objective>
6
+
7
+ <required_reading>
8
+ Before starting, read these project files to understand the review criteria:
9
+ - `.github/ISSUE_TEMPLATE/feature_request.yml` — required fields for feature issues
10
+ - `.github/ISSUE_TEMPLATE/enhancement.yml` — required fields for enhancement issues
11
+ - `.github/ISSUE_TEMPLATE/chore.yml` — required fields for chore issues
12
+ - `.github/ISSUE_TEMPLATE/bug_report.yml` — required fields for bug reports
13
+ - `.github/PULL_REQUEST_TEMPLATE/feature.md` — required checklist for feature PRs
14
+ - `.github/PULL_REQUEST_TEMPLATE/enhancement.md` — required checklist for enhancement PRs
15
+ - `.github/PULL_REQUEST_TEMPLATE/fix.md` — required checklist for fix PRs
16
+ - `CONTRIBUTING.md` — the issue-first rule and approval gates
17
+ </required_reading>
18
+
19
+ <process>
20
+
21
+ <step name="preflight">
22
+ Verify prerequisites:
23
+
24
+ 1. **`gh` CLI available and authenticated?**
25
+ ```bash
26
+ which gh && gh auth status 2>&1
27
+ ```
28
+ If not available: print setup instructions and exit.
29
+
30
+ 2. **Detect repository:**
31
+ If `--repo` flag provided, use that. Otherwise:
32
+ ```bash
33
+ gh repo view --json nameWithOwner -q '.nameWithOwner' 2>/dev/null
34
+ ```
35
+ If no repo detected: error — must be in a git repo with a GitHub remote.
36
+
37
+ 3. **Parse flags:**
38
+ - `--issues` → set REVIEW_ISSUES=true, REVIEW_PRS=false
39
+ - `--prs` → set REVIEW_ISSUES=false, REVIEW_PRS=true
40
+ - `--label` → set AUTO_LABEL=true
41
+ - `--close-incomplete` → set AUTO_CLOSE=true
42
+ - Default (no flags): review both issues and PRs, report only (no auto-actions)
43
+ </step>
44
+
45
+ <step name="fetch_issues">
46
+ Skip if REVIEW_ISSUES=false.
47
+
48
+ Fetch all open issues:
49
+ ```bash
50
+ gh issue list --state open --json number,title,labels,body,author,createdAt,updatedAt --limit 100
51
+ ```
52
+
53
+ For each issue, classify by labels and body content:
54
+
55
+ | Label/Pattern | Type | Template |
56
+ |---|---|---|
57
+ | `feature-request` | Feature | feature_request.yml |
58
+ | `enhancement` | Enhancement | enhancement.yml |
59
+ | `bug` | Bug | bug_report.yml |
60
+ | `type: chore` | Chore | chore.yml |
61
+ | No matching label | Unknown | Flag for manual triage |
62
+
63
+ If an issue has no type label, attempt to classify from the body content:
64
+ - Contains "### Feature name" → likely Feature
65
+ - Contains "### What existing feature" → likely Enhancement
66
+ - Contains "### What happened?" → likely Bug
67
+ - Contains "### What is the maintenance task?" → likely Chore
68
+ - Cannot determine → mark as `needs-triage`
69
+ </step>
70
+
71
+ <step name="review_issues">
72
+ Skip if REVIEW_ISSUES=false.
73
+
74
+ For each classified issue, review against its template requirements.
75
+
76
+ **Feature Request Review Checklist:**
77
+ - [ ] Pre-submission checklist present (4 checkboxes)
78
+ - [ ] Feature name provided
79
+ - [ ] Type of addition selected
80
+ - [ ] Problem statement filled (not placeholder text)
81
+ - [ ] What is being added described with examples
82
+ - [ ] Full scope of changes listed (files created/modified/systems)
83
+ - [ ] User stories present (minimum 2)
84
+ - [ ] Acceptance criteria present (testable conditions)
85
+ - [ ] Applicable runtimes selected
86
+ - [ ] Breaking changes assessment present
87
+ - [ ] Maintenance burden described
88
+ - [ ] Alternatives considered (not empty)
89
+ - **Label check:** Has `needs-review` label? Has `approved-feature` label?
90
+ - **Gate check:** If PR exists linking this issue, does issue have `approved-feature`?
91
+
92
+ **Enhancement Review Checklist:**
93
+ - [ ] Pre-submission checklist present (4 checkboxes)
94
+ - [ ] What is being improved identified
95
+ - [ ] Current behavior described with examples
96
+ - [ ] Proposed behavior described with examples
97
+ - [ ] Reason and benefit articulated (not vague)
98
+ - [ ] Scope of changes listed
99
+ - [ ] Breaking changes assessed
100
+ - [ ] Alternatives considered
101
+ - [ ] Area affected selected
102
+ - **Label check:** Has `needs-review` label? Has `approved-enhancement` label?
103
+ - **Gate check:** If PR exists linking this issue, does issue have `approved-enhancement`?
104
+
105
+ **Bug Report Review Checklist:**
106
+ - [ ] GSD Version provided
107
+ - [ ] Runtime selected
108
+ - [ ] OS selected
109
+ - [ ] Node.js version provided
110
+ - [ ] Description of what happened
111
+ - [ ] Expected behavior described
112
+ - [ ] Steps to reproduce provided
113
+ - [ ] Frequency selected
114
+ - [ ] Severity/impact selected
115
+ - [ ] PII checklist confirmed
116
+ - **Label check:** Has `needs-triage` or `confirmed-bug` label?
117
+
118
+ **Chore Review Checklist:**
119
+ - [ ] Pre-submission checklist confirmed (no user-facing changes)
120
+ - [ ] Maintenance task described
121
+ - [ ] Type of maintenance selected
122
+ - [ ] Current state described with specifics
123
+ - [ ] Proposed work listed
124
+ - [ ] Acceptance criteria present
125
+ - [ ] Area affected selected
126
+ - **Label check:** Has `needs-triage` label?
127
+
128
+ **Scoring:** For each issue, calculate a completeness percentage:
129
+ - Count required fields present vs. total required fields
130
+ - Score = (present / total) * 100
131
+ - Status: COMPLETE (100%), MOSTLY COMPLETE (75-99%), INCOMPLETE (50-74%), REJECT (<50%)
132
+ </step>
133
+
134
+ <step name="fetch_prs">
135
+ Skip if REVIEW_PRS=false.
136
+
137
+ Fetch all open PRs:
138
+ ```bash
139
+ gh pr list --state open --json number,title,labels,body,author,headRefName,baseRefName,isDraft,createdAt,reviewDecision,statusCheckRollup --limit 100
140
+ ```
141
+
142
+ For each PR, classify by body content and linked issue:
143
+
144
+ | Body Pattern | Type | Template |
145
+ |---|---|---|
146
+ | Contains "## Feature PR" or "## Feature summary" | Feature PR | feature.md |
147
+ | Contains "## Enhancement PR" or "## What this enhancement improves" | Enhancement PR | enhancement.md |
148
+ | Contains "## Fix PR" or "## What was broken" | Fix PR | fix.md |
149
+ | Uses default template | Wrong Template | Flag — must use typed template |
150
+ | Cannot determine | Unknown | Flag for manual review |
151
+
152
+ Also check for linked issues:
153
+ ```bash
154
+ gh pr view {number} --json body -q '.body' | grep -oE '(Closes|Fixes|Resolves) #[0-9]+'
155
+ ```
156
+ </step>
157
+
158
+ <step name="review_prs">
159
+ Skip if REVIEW_PRS=false.
160
+
161
+ For each classified PR, review against its template requirements.
162
+
163
+ **Feature PR Review Checklist:**
164
+ - [ ] Uses feature PR template (not default)
165
+ - [ ] Issue linked with `Closes #NNN`
166
+ - [ ] Linked issue exists and has `approved-feature` label
167
+ - [ ] Feature summary present
168
+ - [ ] New files table filled
169
+ - [ ] Modified files table filled
170
+ - [ ] Implementation notes present
171
+ - [ ] Spec compliance checklist present (acceptance criteria from issue)
172
+ - [ ] Test coverage described
173
+ - [ ] Platforms tested checked (macOS, Windows, Linux)
174
+ - [ ] Runtimes tested checked
175
+ - [ ] Scope confirmation checked
176
+ - [ ] Full checklist completed
177
+ - [ ] Breaking changes section filled
178
+ - **CI check:** All status checks passing?
179
+ - **Review check:** Has review approval?
180
+
181
+ **Enhancement PR Review Checklist:**
182
+ - [ ] Uses enhancement PR template (not default)
183
+ - [ ] Issue linked with `Closes #NNN`
184
+ - [ ] Linked issue exists and has `approved-enhancement` label
185
+ - [ ] What is improved described
186
+ - [ ] Before/after provided
187
+ - [ ] Implementation approach described
188
+ - [ ] Verification method described
189
+ - [ ] Platforms tested checked
190
+ - [ ] Runtimes tested checked
191
+ - [ ] Scope confirmation checked
192
+ - [ ] Full checklist completed
193
+ - [ ] Breaking changes section filled
194
+ - **CI check:** All status checks passing?
195
+
196
+ **Fix PR Review Checklist:**
197
+ - [ ] Uses fix PR template (not default)
198
+ - [ ] Issue linked with `Fixes #NNN`
199
+ - [ ] Linked issue exists and has `confirmed-bug` label
200
+ - [ ] What was broken described
201
+ - [ ] What the fix does described
202
+ - [ ] Root cause explained
203
+ - [ ] Verification method described
204
+ - [ ] Regression test added (or explained why not)
205
+ - [ ] Platforms tested checked
206
+ - [ ] Runtimes tested checked
207
+ - [ ] Full checklist completed
208
+ - [ ] Breaking changes section filled
209
+ - **CI check:** All status checks passing?
210
+
211
+ **Cross-cutting PR Checks (all types):**
212
+ - [ ] PR title is descriptive (not just "fix" or "update")
213
+ - [ ] One concern per PR (not mixing fix + enhancement)
214
+ - [ ] No unrelated formatting changes visible in diff
215
+ - [ ] CHANGELOG.md updated
216
+ - [ ] Not using `--no-verify` or skipping hooks
217
+
218
+ **Scoring:** Same as issues — completeness percentage per PR.
219
+ </step>
220
+
221
+ <step name="check_gates">
222
+ Cross-reference issues and PRs to enforce the issue-first rule:
223
+
224
+ For each open PR:
225
+ 1. Extract linked issue number from body
226
+ 2. If no linked issue: **GATE VIOLATION** — PR has no issue
227
+ 3. If linked issue exists, check its labels:
228
+ - Feature PR → issue must have `approved-feature`
229
+ - Enhancement PR → issue must have `approved-enhancement`
230
+ - Fix PR → issue must have `confirmed-bug`
231
+ 4. If label is missing: **GATE VIOLATION** — PR opened before approval
232
+
233
+ Report gate violations prominently — these are the most important findings because
234
+ the project auto-closes PRs without proper approval gates.
235
+ </step>
236
+
237
+ <step name="generate_report">
238
+ Produce a structured triage report:
239
+
240
+ ```
241
+ ===================================================================
242
+ GSD INBOX TRIAGE — {repo} — {date}
243
+ ===================================================================
244
+
245
+ SUMMARY
246
+ -------
247
+ Open issues: {count} Open PRs: {count}
248
+ Features: {n} Feature PRs: {n}
249
+ Enhancements:{n} Enhancement PRs: {n}
250
+ Bugs: {n} Fix PRs: {n}
251
+ Chores: {n} Wrong template: {n}
252
+ Unclassified:{n} No linked issue: {n}
253
+
254
+ GATE VIOLATIONS (action required)
255
+ ---------------------------------
256
+ {For each violation:}
257
+ PR #{number}: {title}
258
+ Problem: {description — e.g., "No approved-feature label on linked issue #45"}
259
+ Action: {what to do — e.g., "Close PR or approve issue #45 first"}
260
+
261
+ ISSUES NEEDING ATTENTION
262
+ ------------------------
263
+ {For each issue sorted by completeness score, lowest first:}
264
+ #{number} [{type}] {title}
265
+ Score: {percentage}% complete
266
+ Missing: {list of missing required fields}
267
+ Labels: {current labels} → Suggested: {recommended labels}
268
+ Age: {days since created}
269
+
270
+ PRS NEEDING ATTENTION
271
+ ---------------------
272
+ {For each PR sorted by completeness score, lowest first:}
273
+ #{number} [{type}] {title}
274
+ Score: {percentage}% complete
275
+ Missing: {list of missing checklist items}
276
+ CI: {passing/failing/pending}
277
+ Review: {approved/changes_requested/none}
278
+ Linked issue: #{issue_number} ({issue_status})
279
+ Age: {days since created}
280
+
281
+ READY TO MERGE
282
+ --------------
283
+ {PRs that are 100% complete, CI passing, approved:}
284
+ #{number} {title} — ready
285
+
286
+ STALE ITEMS (>30 days, no activity)
287
+ ------------------------------------
288
+ {Issues and PRs with no updates in 30+ days}
289
+
290
+ ===================================================================
291
+ ```
292
+
293
+ write this report to `.planning/INBOX-TRIAGE.md` if a `.planning/` directory exists,
294
+ otherwise print to console only.
295
+ </step>
296
+
297
+ <step name="auto_actions">
298
+ Only execute if `--label` or `--close-incomplete` flags were set.
299
+
300
+ **If --label:**
301
+ For each issue/PR where labels are missing or incorrect:
302
+ ```bash
303
+ gh issue edit {number} --add-label "{label}"
304
+ ```
305
+ Or:
306
+ ```bash
307
+ gh pr edit {number} --add-label "{label}"
308
+ ```
309
+
310
+ Label recommendations:
311
+ - Unclassified issues → add `needs-triage`
312
+ - Feature issues without review → add `needs-review`
313
+ - Enhancement issues without review → add `needs-review`
314
+ - Bug reports without triage → add `needs-triage`
315
+ - PRs with gate violations → add `gate-violation`
316
+
317
+ **If --close-incomplete:**
318
+ For issues scoring below 50% completeness:
319
+ ```bash
320
+ gh issue close {number} --comment "Closed by GSD inbox triage: this issue is missing required fields per the issue template. Missing: {list}. Please reopen with a complete submission. See CONTRIBUTING.md for requirements."
321
+ ```
322
+
323
+ For PRs with gate violations:
324
+ ```bash
325
+ gh pr close {number} --comment "Closed by GSD inbox triage: this PR does not meet the issue-first requirement. {specific violation}. See CONTRIBUTING.md for the correct process."
326
+ ```
327
+
328
+ Always confirm with the user before closing anything:
329
+
330
+ **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 `question` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-OpenCode runtimes (OpenAI Codex, Gemini CLI, etc.) where `question` is not available.
331
+
332
+ ```
333
+ question:
334
+ question: "Found {N} items to close. Review the list above — proceed with closing?"
335
+ options:
336
+ - label: "Close all"
337
+ description: "Close all {N} non-compliant items with explanation comments"
338
+ - label: "Let me pick"
339
+ description: "I'll choose which ones to close"
340
+ - label: "Skip"
341
+ description: "Don't close anything — report only"
342
+ ```
343
+ </step>
344
+
345
+ <step name="report">
346
+ ```
347
+ ───────────────────────────────────────────────────────────────
348
+
349
+ ## Inbox Triage Complete
350
+
351
+ Reviewed: {issue_count} issues, {pr_count} PRs
352
+ Gate violations: {violation_count}
353
+ Ready to merge: {ready_count}
354
+ Needing attention: {attention_count}
355
+ Stale (30+ days): {stale_count}
356
+ {If report saved: "Report saved to .planning/INBOX-TRIAGE.md"}
357
+
358
+ Next steps:
359
+ - Review gate violations first — these block the contribution pipeline
360
+ - Address incomplete submissions (comment or close)
361
+ - Merge ready PRs
362
+ - Triage unclassified issues
363
+
364
+ ───────────────────────────────────────────────────────────────
365
+ ```
366
+ </step>
367
+
368
+ </process>
369
+
370
+ <offer_next>
371
+ After triage:
372
+
373
+ - /gsd-review — Run cross-AI peer review on a specific phase plan
374
+ - /gsd-ship — Create a PR from completed work
375
+ - /gsd-progress — See overall project state
376
+ - /gsd-inbox --label — Re-run with auto-labeling enabled
377
+ </offer_next>
378
+
379
+ <success_criteria>
380
+ - [ ] All open issues fetched and classified by type
381
+ - [ ] Each issue reviewed against its template requirements
382
+ - [ ] All open PRs fetched and classified by type
383
+ - [ ] Each PR reviewed against its template checklist
384
+ - [ ] Issue-first gate violations identified
385
+ - [ ] Structured report generated with scores and action items
386
+ - [ ] Auto-actions executed only when flagged and user-confirmed
387
+ </success_criteria>
@@ -117,6 +117,8 @@ All {phase_count} phases done. Ready for final steps:
117
117
  → /gsd-complete-milestone — archive and wrap up
118
118
  ```
119
119
 
120
+
121
+ **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 `question` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-OpenCode runtimes (OpenAI Codex, Gemini CLI, etc.) where `question` is not available.
120
122
  Ask user via question:
121
123
  - **question:** "All phases complete. What next?"
122
124
  - **options:** "Verify work" / "Complete milestone" / "Exit manager"
@@ -220,10 +222,7 @@ After discuss completes, loop back to dashboard step.
220
222
  Planning runs autonomously. Spawn a background agent that delegates to the skill pipeline with any configured flags:
221
223
 
222
224
  ```
223
- task(
224
- description="Plan phase {N}: {phase_name}",
225
- run_in_background=true,
226
- prompt="You are running the GSD plan-phase workflow for phase {N} of the project.
225
+ @gsd-planner "You are running the GSD plan-phase workflow for phase {N} of the project.
227
226
 
228
227
  Working directory: {cwd}
229
228
  Phase: {N} — {phase_name}
@@ -236,7 +235,6 @@ skill(skill=\"gsd-plan-phase\", args=\"{N} --auto {manager_flags.plan}\")
236
235
  This delegates to the full plan-phase pipeline including local patches, research, plan-checker, and all quality gates.
237
236
 
238
237
  Important: You are running in the background. Do NOT use question — make autonomous decisions based on project context. If you hit a blocker, write it to STATE.md as a blocker and stop. Do NOT silently work around permission or file access errors — let them fail so the manager can surface them with resolution hints. Do NOT use --no-verify on git commits."
239
- )
240
238
  ```
241
239
 
242
240
  Display:
@@ -252,10 +250,7 @@ Loop back to dashboard step.
252
250
  Execution runs autonomously. Spawn a background agent that delegates to the skill pipeline with any configured flags:
253
251
 
254
252
  ```
255
- task(
256
- description="Execute phase {N}: {phase_name}",
257
- run_in_background=true,
258
- prompt="You are running the GSD execute-phase workflow for phase {N} of the project.
253
+ @gsd-executor "You are running the GSD execute-phase workflow for phase {N} of the project.
259
254
 
260
255
  Working directory: {cwd}
261
256
  Phase: {N} — {phase_name}
@@ -268,7 +263,6 @@ skill(skill=\"gsd-execute-phase\", args=\"{N} {manager_flags.execute}\")
268
263
  This delegates to the full execute-phase pipeline including local patches, branching, wave-based execution, verification, and all quality gates.
269
264
 
270
265
  Important: You are running in the background. Do NOT use question — make autonomous decisions. Do NOT use --no-verify on git commits — let pre-commit hooks run normally. If you hit a permission error, file lock, or any access issue, do NOT work around it — let it fail and write the error to STATE.md as a blocker so the manager can surface it with resolution guidance."
271
- )
272
266
  ```
273
267
 
274
268
  Display:
@@ -40,6 +40,8 @@ If the flag is absent, keep the current behavior of continuing phase numbering f
40
40
 
41
41
  **If no context file:**
42
42
  - Present what shipped in last milestone
43
+
44
+ **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 `question` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-OpenCode runtimes (OpenAI Codex, Gemini CLI, etc.) where `question` is not available.
43
45
  - Ask inline (freeform, NOT question): "What do you want to build next?"
44
46
  - Wait for their response, then use question to probe specifics
45
47
  - If user selects "Other" at any point to provide freeform input, ask follow-up as plain text — not another question
@@ -140,7 +142,7 @@ Delete MILESTONE-CONTEXT.md if exists (consumed).
140
142
  Clear leftover phase directories from the previous milestone:
141
143
 
142
144
  ```bash
143
- node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" phases clear
145
+ node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" phases clear --confirm
144
146
  ```
145
147
 
146
148
  ```bash
@@ -103,6 +103,8 @@ git init
103
103
 
104
104
  **If `needs_codebase_map` is true** (from init — existing code detected but no codebase map):
105
105
 
106
+
107
+ **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 `question` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-OpenCode runtimes (OpenAI Codex, Gemini CLI, etc.) where `question` is not available.
106
108
  Use question:
107
109
 
108
110
  - header: "Codebase"
@@ -31,6 +31,8 @@ Extract from $ARGUMENTS:
31
31
 
32
32
  **If `--name` is missing and not `--auto`:**
33
33
 
34
+
35
+ **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 `question` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-OpenCode runtimes (OpenAI Codex, Gemini CLI, etc.) where `question` is not available.
34
36
  Use question:
35
37
  - header: "Workspace Name"
36
38
  - question: "What should this workspace be called?"
@@ -34,6 +34,62 @@ No GSD project detected. Run `/gsd-new-project` to get started.
34
34
  Exit.
35
35
  </step>
36
36
 
37
+ <step name="safety_gates">
38
+ Run hard-stop checks before routing. Exit on first hit unless `--force` was passed.
39
+
40
+ If `--force` flag was passed, skip all gates and the consecutive guard.
41
+ Print a one-line warning: `⚠ --force: skipping safety gates`
42
+ Then proceed directly to `determine_next_action`.
43
+
44
+ **Gate 1: Unresolved checkpoint**
45
+ Check if `.planning/.continue-here.md` exists:
46
+ ```bash
47
+ [ -f .planning/.continue-here.md ]
48
+ ```
49
+ If found:
50
+ ```
51
+ ⛔ Hard stop: Unresolved checkpoint
52
+
53
+ `.planning/.continue-here.md` exists — a previous session left
54
+ unfinished work that needs manual review before advancing.
55
+
56
+ read the file, resolve the issue, then delete it to continue.
57
+ Use `--force` to bypass this check.
58
+ ```
59
+ Exit (do not route).
60
+
61
+ **Gate 2: Error state**
62
+ Check if STATE.md contains `status: error` or `status: failed`:
63
+ If found:
64
+ ```
65
+ ⛔ Hard stop: Project in error state
66
+
67
+ STATE.md shows status: {status}. Resolve the error before advancing.
68
+ Run `/gsd-health` to diagnose, or manually fix STATE.md.
69
+ Use `--force` to bypass this check.
70
+ ```
71
+ Exit.
72
+
73
+ **Gate 3: Unchecked verification**
74
+ Check if the current phase has a VERIFICATION.md with any `FAIL` items that don't have overrides:
75
+ If found:
76
+ ```
77
+ ⛔ Hard stop: Unchecked verification failures
78
+
79
+ VERIFICATION.md for phase {N} has {count} unresolved FAIL items.
80
+ Address the failures or add overrides before advancing to the next phase.
81
+ Use `--force` to bypass this check.
82
+ ```
83
+ Exit.
84
+
85
+ **Consecutive-call guard:**
86
+ After passing all gates, check a counter file `.planning/.next-call-count`:
87
+ - If file exists and count >= 6: prompt "You've called /gsd-next {N} times consecutively. Continue? [y/N]"
88
+ - If user says no, exit
89
+ - Increment the counter
90
+ - The counter file is deleted by any non-`/gsd-next` command (convention — other workflows don't need to implement this, the note here is sufficient)
91
+ </step>
92
+
37
93
  <step name="determine_next_action">
38
94
  Apply routing rules based on state:
39
95
 
@@ -1,5 +1,7 @@
1
1
  <objective>
2
2
  Zero-friction idea capture. One write call, one confirmation line. No questions, no prompts.
3
+
4
+ **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 `question` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-OpenCode runtimes (OpenAI Codex, Gemini CLI, etc.) where `question` is not available.
3
5
  Runs inline — no task, no question, no bash.
4
6
  </objective>
5
7