@undeemed/get-shit-done-codex 1.23.2 → 1.24.2

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 (46) hide show
  1. package/README.md +51 -5
  2. package/agents/gsd-debugger.md +8 -56
  3. package/agents/gsd-planner.md +2 -118
  4. package/agents/gsd-project-researcher.md +0 -3
  5. package/agents/gsd-research-synthesizer.md +0 -3
  6. package/bin/install.js +267 -5
  7. package/commands/gsd/add-phase.md +2 -6
  8. package/commands/gsd/add-todo.md +1 -6
  9. package/commands/gsd/check-todos.md +2 -6
  10. package/commands/gsd/debug.md +1 -6
  11. package/commands/gsd/discuss-phase.md +16 -9
  12. package/commands/gsd/execute-phase.md +2 -1
  13. package/commands/gsd/new-milestone.md +8 -1
  14. package/commands/gsd/pause-work.md +1 -4
  15. package/commands/gsd/plan-phase.md +1 -2
  16. package/commands/gsd/research-phase.md +15 -17
  17. package/commands/gsd/verify-work.md +2 -1
  18. package/get-shit-done/bin/gsd-tools.cjs +4951 -121
  19. package/get-shit-done/bin/lib/commands.cjs +4 -9
  20. package/get-shit-done/bin/lib/core.cjs +102 -23
  21. package/get-shit-done/bin/lib/init.cjs +11 -11
  22. package/get-shit-done/bin/lib/milestone.cjs +54 -3
  23. package/get-shit-done/bin/lib/phase.cjs +40 -10
  24. package/get-shit-done/bin/lib/state.cjs +86 -33
  25. package/get-shit-done/references/checkpoints.md +0 -1
  26. package/get-shit-done/references/model-profile-resolution.md +13 -6
  27. package/get-shit-done/references/model-profiles.md +60 -51
  28. package/get-shit-done/templates/context.md +14 -0
  29. package/get-shit-done/templates/phase-prompt.md +0 -2
  30. package/get-shit-done/workflows/audit-milestone.md +8 -63
  31. package/get-shit-done/workflows/diagnose-issues.md +1 -1
  32. package/get-shit-done/workflows/execute-phase.md +9 -54
  33. package/get-shit-done/workflows/execute-plan.md +13 -17
  34. package/get-shit-done/workflows/help.md +3 -3
  35. package/get-shit-done/workflows/map-codebase.md +44 -32
  36. package/get-shit-done/workflows/new-milestone.md +7 -16
  37. package/get-shit-done/workflows/new-project.md +80 -49
  38. package/get-shit-done/workflows/progress.md +26 -14
  39. package/get-shit-done/workflows/quick.md +15 -24
  40. package/get-shit-done/workflows/set-profile.md +12 -8
  41. package/get-shit-done/workflows/settings.md +14 -21
  42. package/get-shit-done/workflows/transition.md +0 -5
  43. package/get-shit-done/workflows/verify-work.md +12 -11
  44. package/hooks/dist/gsd-context-monitor.js +1 -1
  45. package/package.json +3 -2
  46. package/scripts/run-tests.cjs +43 -0
@@ -25,13 +25,13 @@ cat .planning/config.json
25
25
  ```
26
26
 
27
27
  Parse current values (default to `true` if not present):
28
+
28
29
  - `workflow.research` — spawn researcher during plan-phase
29
30
  - `workflow.plan_check` — spawn plan checker during plan-phase
30
31
  - `workflow.verifier` — spawn verifier during execute-phase
31
- - `workflow.nyquist_validation` — validation architecture research during plan-phase
32
32
  - `model_profile` — which model each agent uses (default: `balanced`)
33
33
  - `git.branching_strategy` — branching approach (default: `"none"`)
34
- </step>
34
+ </step>
35
35
 
36
36
  <step name="present_settings">
37
37
  Use AskUserQuestion with current values pre-selected:
@@ -43,9 +43,9 @@ AskUserQuestion([
43
43
  header: "Model",
44
44
  multiSelect: false,
45
45
  options: [
46
- { label: "Quality", description: "Opus everywhere except verification (highest cost)" },
47
- { label: "Balanced (Recommended)", description: "Opus for planning, Sonnet for execution/verification" },
48
- { label: "Budget", description: "Sonnet for writing, Haiku for research/verification (lowest cost)" }
46
+ { label: "Quality", description: "gpt-5.3-codex with xhigh thinking for decision-makers, high for analysis" },
47
+ { label: "Balanced (Recommended)", description: "gpt-5.3-codex with xhigh thinking for planner/debugger, high/medium for others" },
48
+ { label: "Budget", description: "gpt-5.3-codex with high thinking for planner/debugger, medium everywhere else" }
49
49
  ]
50
50
  },
51
51
  {
@@ -84,15 +84,6 @@ AskUserQuestion([
84
84
  { label: "Yes", description: "Chain stages via Task() subagents (same isolation)" }
85
85
  ]
86
86
  },
87
- {
88
- question: "Enable Nyquist Validation? (researches test coverage during planning)",
89
- header: "Nyquist",
90
- multiSelect: false,
91
- options: [
92
- { label: "Yes (Recommended)", description: "Research automated test coverage during plan-phase. Adds validation requirements to plans. Blocks approval if tasks lack automated verify." },
93
- { label: "No", description: "Skip validation research. Good for rapid prototyping or no-test phases." }
94
- ]
95
- },
96
87
  {
97
88
  question: "Git branching strategy?",
98
89
  header: "Branching",
@@ -105,6 +96,7 @@ AskUserQuestion([
105
96
  }
106
97
  ])
107
98
  ```
99
+
108
100
  </step>
109
101
 
110
102
  <step name="update_config">
@@ -118,8 +110,7 @@ Merge new settings into existing config.json:
118
110
  "research": true/false,
119
111
  "plan_check": true/false,
120
112
  "verifier": true/false,
121
- "auto_advance": true/false,
122
- "nyquist_validation": true/false
113
+ "auto_advance": true/false
123
114
  },
124
115
  "git": {
125
116
  "branching_strategy": "none" | "phase" | "milestone"
@@ -154,6 +145,7 @@ mkdir -p ~/.gsd
154
145
  ```
155
146
 
156
147
  Write `~/.gsd/defaults.json` with:
148
+
157
149
  ```json
158
150
  {
159
151
  "mode": <current>,
@@ -166,11 +158,11 @@ Write `~/.gsd/defaults.json` with:
166
158
  "research": <current>,
167
159
  "plan_check": <current>,
168
160
  "verifier": <current>,
169
- "auto_advance": <current>,
170
- "nyquist_validation": <current>
161
+ "auto_advance": <current>
171
162
  }
172
163
  }
173
164
  ```
165
+
174
166
  </step>
175
167
 
176
168
  <step name="confirm">
@@ -188,7 +180,6 @@ Display:
188
180
  | Plan Checker | {On/Off} |
189
181
  | Execution Verifier | {On/Off} |
190
182
  | Auto-Advance | {On/Off} |
191
- | Nyquist Validation | {On/Off} |
192
183
  | Git Branching | {None/Per Phase/Per Milestone} |
193
184
  | Saved as Defaults | {Yes/No} |
194
185
 
@@ -200,14 +191,16 @@ Quick commands:
200
191
  - $gsd-plan-phase --skip-research — skip research
201
192
  - $gsd-plan-phase --skip-verify — skip plan check
202
193
  ```
194
+
203
195
  </step>
204
196
 
205
197
  </process>
206
198
 
207
199
  <success_criteria>
200
+
208
201
  - [ ] Current config read
209
- - [ ] User presented with 7 settings (profile + 5 workflow toggles + git branching)
202
+ - [ ] User presented with 6 settings (profile + 4 workflow toggles + git branching)
210
203
  - [ ] Config updated with model_profile, workflow, and git sections
211
204
  - [ ] User offered to save as global defaults (~/.gsd/defaults.json)
212
205
  - [ ] Changes confirmed to user
213
- </success_criteria>
206
+ </success_criteria>
@@ -451,11 +451,6 @@ Exit skill and invoke SlashCommand("$gsd-discuss-phase [X+1] --auto")
451
451
 
452
452
  **Route B: Milestone complete (all phases done)**
453
453
 
454
- **Clear auto-advance** — milestone boundary is the natural stopping point:
455
- ```bash
456
- node ~/.codex/get-shit-done/bin/gsd-tools.cjs config-set workflow.auto_advance false
457
- ```
458
-
459
454
  <if mode="yolo">
460
455
 
461
456
  ```
@@ -365,11 +365,14 @@ Task(
365
365
  **Phase:** {phase_number}
366
366
  **Mode:** gap_closure
367
367
 
368
- <files_to_read>
369
- - {phase_dir}/{phase_num}-UAT.md (UAT with diagnoses)
370
- - .planning/STATE.md (Project State)
371
- - .planning/ROADMAP.md (Roadmap)
372
- </files_to_read>
368
+ **UAT with diagnoses:**
369
+ @.planning/phases/{phase_dir}/{phase_num}-UAT.md
370
+
371
+ **Project State:**
372
+ @.planning/STATE.md
373
+
374
+ **Roadmap:**
375
+ @.planning/ROADMAP.md
373
376
 
374
377
  </planning_context>
375
378
 
@@ -413,9 +416,8 @@ Task(
413
416
  **Phase:** {phase_number}
414
417
  **Phase Goal:** Close diagnosed gaps from UAT
415
418
 
416
- <files_to_read>
417
- - {phase_dir}/*-PLAN.md (Plans to verify)
418
- </files_to_read>
419
+ **Plans to verify:**
420
+ @.planning/phases/{phase_dir}/*-PLAN.md
419
421
 
420
422
  </verification_context>
421
423
 
@@ -453,9 +455,8 @@ Task(
453
455
  **Phase:** {phase_number}
454
456
  **Mode:** revision
455
457
 
456
- <files_to_read>
457
- - {phase_dir}/*-PLAN.md (Existing plans)
458
- </files_to_read>
458
+ **Existing plans:**
459
+ @.planning/phases/{phase_dir}/*-PLAN.md
459
460
 
460
461
  **Checker issues:**
461
462
  {structured_issues_from_checker}
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- // Context Monitor - PostToolUse hook
2
+ // Context Monitor - PostToolUse hook for Codex CLI
3
3
  // Reads context metrics from the statusline bridge file and injects
4
4
  // warnings when context usage is high. This makes the AGENT aware of
5
5
  // context limits (the statusline only shows the user).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@undeemed/get-shit-done-codex",
3
- "version": "1.23.2",
3
+ "version": "1.24.2",
4
4
  "description": "A meta-prompting, context engineering and spec-driven development system for OpenAI Codex (CLI and Desktop). Fork of get-shit-done by TÂCHES, adapted for Codex.",
5
5
  "bin": {
6
6
  "get-shit-done-codex": "bin/install.js"
@@ -67,6 +67,7 @@
67
67
  "scripts": {
68
68
  "build:hooks": "node scripts/build-hooks.js",
69
69
  "prepublishOnly": "npm run build:hooks",
70
- "test": "node --test tests/*.test.cjs"
70
+ "test": "node scripts/run-tests.cjs",
71
+ "test:coverage": "node scripts/run-tests.cjs --coverage"
71
72
  }
72
73
  }
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env node
2
+
3
+ const fs = require("node:fs");
4
+ const path = require("node:path");
5
+ const { spawnSync } = require("node:child_process");
6
+
7
+ function collectTests(dir) {
8
+ if (!fs.existsSync(dir)) return [];
9
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
10
+ const files = [];
11
+
12
+ for (const entry of entries) {
13
+ const fullPath = path.join(dir, entry.name);
14
+ if (entry.isDirectory()) {
15
+ files.push(...collectTests(fullPath));
16
+ continue;
17
+ }
18
+ if (entry.isFile() && entry.name.endsWith(".test.cjs")) {
19
+ files.push(fullPath);
20
+ }
21
+ }
22
+
23
+ return files;
24
+ }
25
+
26
+ const withCoverage = process.argv.includes("--coverage");
27
+ const testFiles = collectTests(path.resolve(__dirname, "..", "tests")).sort();
28
+
29
+ if (testFiles.length === 0) {
30
+ console.error("No test files found in ./tests");
31
+ process.exit(1);
32
+ }
33
+
34
+ const args = [];
35
+ if (withCoverage) args.push("--experimental-test-coverage");
36
+ args.push("--test", ...testFiles);
37
+
38
+ const result = spawnSync(process.execPath, args, { stdio: "inherit" });
39
+ if (result.error) {
40
+ console.error(result.error.message);
41
+ process.exit(1);
42
+ }
43
+ process.exit(result.status ?? 1);