get-shit-done-cc 1.41.0 → 1.41.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 (111) hide show
  1. package/agents/gsd-code-fixer.md +5 -5
  2. package/agents/gsd-code-reviewer.md +2 -0
  3. package/agents/gsd-intel-updater.md +11 -3
  4. package/agents/gsd-planner.md +5 -3
  5. package/agents/gsd-verifier.md +49 -3
  6. package/bin/install.js +772 -47
  7. package/get-shit-done/bin/gsd-tools.cjs +47 -7
  8. package/get-shit-done/bin/lib/config-schema.cjs +6 -0
  9. package/get-shit-done/bin/lib/config.cjs +2 -0
  10. package/get-shit-done/bin/lib/core.cjs +8 -95
  11. package/get-shit-done/bin/lib/model-catalog.cjs +136 -0
  12. package/get-shit-done/bin/lib/model-profiles.cjs +12 -180
  13. package/get-shit-done/bin/lib/phase.cjs +175 -33
  14. package/get-shit-done/bin/lib/state.cjs +179 -45
  15. package/get-shit-done/workflows/code-review.md +10 -4
  16. package/get-shit-done/workflows/execute-phase.md +82 -16
  17. package/get-shit-done/workflows/execute-plan.md +10 -0
  18. package/get-shit-done/workflows/forensics.md +12 -0
  19. package/get-shit-done/workflows/plan-phase.md +10 -8
  20. package/get-shit-done/workflows/plant-seed.md +144 -87
  21. package/get-shit-done/workflows/settings-advanced.md +1 -0
  22. package/get-shit-done/workflows/ship.md +2 -2
  23. package/get-shit-done/workflows/verify-phase.md +2 -1
  24. package/package.json +2 -1
  25. package/scripts/build-hooks.js +18 -23
  26. package/sdk/dist/model-catalog.d.ts +31 -0
  27. package/sdk/dist/model-catalog.d.ts.map +1 -0
  28. package/sdk/dist/model-catalog.js +31 -0
  29. package/sdk/dist/model-catalog.js.map +1 -0
  30. package/sdk/dist/phase-runner.d.ts +20 -1
  31. package/sdk/dist/phase-runner.d.ts.map +1 -1
  32. package/sdk/dist/phase-runner.js +200 -12
  33. package/sdk/dist/phase-runner.js.map +1 -1
  34. package/sdk/dist/plan-parser.d.ts +4 -0
  35. package/sdk/dist/plan-parser.d.ts.map +1 -1
  36. package/sdk/dist/plan-parser.js +7 -3
  37. package/sdk/dist/plan-parser.js.map +1 -1
  38. package/sdk/dist/query/check-ship-ready.d.ts.map +1 -1
  39. package/sdk/dist/query/check-ship-ready.js +3 -2
  40. package/sdk/dist/query/check-ship-ready.js.map +1 -1
  41. package/sdk/dist/query/config-query.d.ts +1 -12
  42. package/sdk/dist/query/config-query.d.ts.map +1 -1
  43. package/sdk/dist/query/config-query.js +47 -46
  44. package/sdk/dist/query/config-query.js.map +1 -1
  45. package/sdk/dist/query/config-schema.d.ts.map +1 -1
  46. package/sdk/dist/query/config-schema.js +8 -0
  47. package/sdk/dist/query/config-schema.js.map +1 -1
  48. package/sdk/dist/query/detect-custom-files.d.ts.map +1 -1
  49. package/sdk/dist/query/detect-custom-files.js +1 -0
  50. package/sdk/dist/query/detect-custom-files.js.map +1 -1
  51. package/sdk/dist/query/frontmatter.d.ts +4 -1
  52. package/sdk/dist/query/frontmatter.d.ts.map +1 -1
  53. package/sdk/dist/query/frontmatter.js +5 -7
  54. package/sdk/dist/query/frontmatter.js.map +1 -1
  55. package/sdk/dist/query/helpers.d.ts +2 -5
  56. package/sdk/dist/query/helpers.d.ts.map +1 -1
  57. package/sdk/dist/query/helpers.js +6 -7
  58. package/sdk/dist/query/helpers.js.map +1 -1
  59. package/sdk/dist/query/init-complex.js +1 -1
  60. package/sdk/dist/query/init-complex.js.map +1 -1
  61. package/sdk/dist/query/phase-lifecycle.d.ts +4 -1
  62. package/sdk/dist/query/phase-lifecycle.d.ts.map +1 -1
  63. package/sdk/dist/query/phase-lifecycle.js +115 -54
  64. package/sdk/dist/query/phase-lifecycle.js.map +1 -1
  65. package/sdk/dist/query/phase.d.ts.map +1 -1
  66. package/sdk/dist/query/phase.js +125 -28
  67. package/sdk/dist/query/phase.js.map +1 -1
  68. package/sdk/dist/query/query-dispatch.d.ts.map +1 -1
  69. package/sdk/dist/query/query-dispatch.js +9 -0
  70. package/sdk/dist/query/query-dispatch.js.map +1 -1
  71. package/sdk/dist/query/state.d.ts.map +1 -1
  72. package/sdk/dist/query/state.js +36 -14
  73. package/sdk/dist/query/state.js.map +1 -1
  74. package/sdk/dist/session-runner.d.ts.map +1 -1
  75. package/sdk/dist/session-runner.js +9 -6
  76. package/sdk/dist/session-runner.js.map +1 -1
  77. package/sdk/dist/types.d.ts +6 -0
  78. package/sdk/dist/types.d.ts.map +1 -1
  79. package/sdk/dist/types.js.map +1 -1
  80. package/sdk/package-lock.json +2 -2
  81. package/sdk/package.json +2 -1
  82. package/sdk/shared/model-catalog.json +122 -0
  83. package/sdk/src/model-catalog.ts +70 -0
  84. package/sdk/src/phase-runner.test.ts +430 -11
  85. package/sdk/src/phase-runner.ts +229 -13
  86. package/sdk/src/plan-parser.test.ts +51 -0
  87. package/sdk/src/plan-parser.ts +7 -3
  88. package/sdk/src/query/check-ship-ready.test.ts +34 -0
  89. package/sdk/src/query/check-ship-ready.ts +3 -2
  90. package/sdk/src/query/config-query.test.ts +62 -12
  91. package/sdk/src/query/config-query.ts +66 -49
  92. package/sdk/src/query/config-schema.ts +8 -0
  93. package/sdk/src/query/detect-custom-files.test.ts +115 -0
  94. package/sdk/src/query/detect-custom-files.ts +1 -0
  95. package/sdk/src/query/frontmatter.test.ts +48 -3
  96. package/sdk/src/query/frontmatter.ts +5 -7
  97. package/sdk/src/query/helpers.test.ts +3 -1
  98. package/sdk/src/query/helpers.ts +6 -10
  99. package/sdk/src/query/init-complex.test.ts +28 -0
  100. package/sdk/src/query/init-complex.ts +1 -1
  101. package/sdk/src/query/phase-lifecycle.test.ts +200 -0
  102. package/sdk/src/query/phase-lifecycle.ts +123 -54
  103. package/sdk/src/query/phase.test.ts +201 -0
  104. package/sdk/src/query/phase.ts +154 -29
  105. package/sdk/src/query/query-dispatch.test.ts +210 -1
  106. package/sdk/src/query/query-dispatch.ts +15 -0
  107. package/sdk/src/query/state.test.ts +207 -0
  108. package/sdk/src/query/state.ts +35 -14
  109. package/sdk/src/session-runner.ts +8 -6
  110. package/sdk/src/types.ts +6 -0
  111. package/sdk-bundle/gsd-sdk.tgz +0 -0
@@ -153,7 +153,7 @@ Each finding starts with:
153
153
  ### {ID}: {Title}
154
154
  ```
155
155
 
156
- Where ID matches: `CR-\d+` (Critical), `WR-\d+` (Warning), or `IN-\d+` (Info)
156
+ Where ID matches: `CR-\d+` or `BL-\d+` (Critical-tier-equivalent), `WR-\d+` (Warning), or `IN-\d+` (Info)
157
157
 
158
158
  **Required Fields:**
159
159
 
@@ -387,7 +387,7 @@ Read `./CLAUDE.md` and check for `.claude/skills/` or `.agents/skills/` (as desc
387
387
 
388
388
  For each finding, extract:
389
389
  - `id`: Finding identifier (e.g., CR-01, WR-03, IN-12)
390
- - `severity`: Critical (CR-*), Warning (WR-*), Info (IN-*)
390
+ - `severity`: Critical (CR-* or BL-*), Warning (WR-*), Info (IN-*)
391
391
  - `title`: Issue title from `### ` heading
392
392
  - `file`: Primary file path from **File:** line
393
393
  - `files`: ALL file paths referenced in finding (including in Fix section) — for multi-file fixes
@@ -396,11 +396,11 @@ For each finding, extract:
396
396
  - `fix`: Full fix content from **Fix:** section (may be multi-line, may contain code fences)
397
397
 
398
398
  **2. Filter by fix_scope:**
399
- - If `fix_scope == "critical_warning"`: include only CR-* and WR-* findings
400
- - If `fix_scope == "all"`: include CR-*, WR-*, and IN-* findings
399
+ - If `fix_scope == "critical_warning"`: include only CR-*, BL-*, and WR-* findings
400
+ - If `fix_scope == "all"`: include CR-*, BL-*, WR-*, and IN-* findings
401
401
 
402
402
  **3. Sort findings by severity:**
403
- - Critical first, then Warning, then Info
403
+ - Critical (CR-* and BL-*) first, then Warning, then Info
404
404
  - Within same severity, maintain document order
405
405
 
406
406
  **4. Count findings in scope:**
@@ -269,6 +269,8 @@ status: clean | issues_found
269
269
  ---
270
270
  ```
271
271
 
272
+ **Label equivalence:** The canonical frontmatter key is `critical:`. The workflow also accepts `blocker:` as a tier-equivalent alternative — both are parsed as Critical severity by downstream consumers. Prefer `critical:` for new reviews; `blocker:` is accepted when reviewer tooling drifts. Similarly, finding IDs beginning with `BL-` are treated as Critical-tier-equivalent to `CR-` IDs by the fixer and pipeline; prefer `CR-` as the canonical prefix.
273
+
272
274
  The `files_reviewed_list` field is REQUIRED — it preserves the exact file scope for downstream consumers (e.g., --auto re-review in code-review-fix workflow). List every file that was reviewed, one per line in YAML list format.
273
275
 
274
276
  **3. Body structure:**
@@ -57,12 +57,20 @@ The /gsd-intel command has already confirmed that intel.enabled is true before s
57
57
 
58
58
  ## Project Scope
59
59
 
60
- **Runtime layout detection (do this first):** Check which runtime root exists by running:
60
+ <!-- Layout detection: only meaningful when analysing the GSD framework's own repo (#3290). -->
61
+
62
+ **Runtime layout detection (GSD framework repo only):** If `package.json` `"name"` equals `"get-shit-done-cc"`, this project IS the GSD framework. In that case, detect the runtime root to choose canonical paths:
63
+
61
64
  ```bash
62
- ls -d .kilo 2>/dev/null && echo "kilo" || (ls -d .claude/get-shit-done 2>/dev/null && echo "claude") || echo "unknown"
65
+ # Only run layout detection when analysing the GSD framework repo itself.
66
+ if [[ "$(jq -r '.name // ""' package.json 2>/dev/null)" == "get-shit-done-cc" ]]; then
67
+ ls -d .kilo 2>/dev/null && echo "kilo" || (ls -d .claude/get-shit-done 2>/dev/null && echo "claude") || echo "unknown"
68
+ fi
63
69
  ```
64
70
 
65
- Use the detected root to resolve all canonical paths below:
71
+ For all other projects, skip this step and proceed directly to Step 1.
72
+
73
+ Use the detected root (when applicable) to resolve all canonical paths below:
66
74
 
67
75
  | Source type | Standard `.claude` layout | `.kilo` layout |
68
76
  |-------------|--------------------------|----------------|
@@ -198,8 +198,10 @@ Every task has four required fields:
198
198
  - Bad: "the auth files", "relevant components"
199
199
 
200
200
  **<action>:** Specific implementation instructions, including what to avoid and WHY.
201
- - Good: "Create POST endpoint accepting {email, password}, validates using bcrypt against User table, returns JWT in httpOnly cookie with 15-min expiry. Use jose library (not jsonwebtoken - CommonJS issues with Edge runtime)."
201
+ - Good: "Create POST /login for {email,password}, bcrypt-validates User, returns 15-min JWT cookie via jose (not jsonwebtoken - Edge CJS issues)."
202
202
  - Bad: "Add authentication", "Make login work"
203
+ - NEVER place fenced code blocks (```) inside `<action>`. Action is directive prose, not implementation code.
204
+ - Code excerpts belong in `<read_first>` source files or referenced context. Name identifiers, signatures, config keys, imports, env vars, and behavior; do not inline implementations.
203
205
 
204
206
  **<verify>:** How to prove the task is complete.
205
207
 
@@ -213,9 +215,9 @@ Every task has four required fields:
213
215
  - Bad: "It works", "Looks good", manual-only verification
214
216
  - Simple format also accepted: `npm test` passes, `curl -X POST /api/auth/login` returns 200
215
217
 
216
- **Nyquist Rule:** Every `<verify>` must include an `<automated>` command. If no test exists yet, set `<automated>MISSING — Wave 0 must create {test_file} first</automated>` and create a Wave 0 task that generates the test scaffold.
218
+ **Nyquist Rule:** Every `<verify>` includes `<automated>`. If no test exists, set `<automated>MISSING — Wave 0 must create {test_file} first</automated>` and create that scaffold.
217
219
 
218
- **Grep gate hygiene:** `grep -c` counts comments header prose triggers its own invariant ("self-invalidating grep gate"). Use `grep -v '^#' | grep -c token`. Bare `== 0` gates on unfiltered files are forbidden.
220
+ **Grep gate hygiene:** `grep -c` counts comments, so header prose can be self-invalidating. Use `grep -v '^#' | grep -c token`. Bare `== 0` gates on unfiltered files are forbidden.
219
221
 
220
222
  **<done>:** Acceptance criteria - measurable state of completion.
221
223
  - Good: "Valid credentials return 200 + JWT cookie, invalid credentials return 401"
@@ -422,8 +422,10 @@ grep -E "^\- \`" "$PHASE_DIR"/*-SUMMARY.md | sed 's/.*`\([^`]*\)`.*/\1/' | sort
422
422
  Run anti-pattern detection on each file:
423
423
 
424
424
  ```bash
425
- # TODO/FIXME/placeholder comments
426
- grep -n -E "TODO|FIXME|XXX|HACK|PLACEHOLDER" "$file" 2>/dev/null
425
+ # Debt-marker comments
426
+ grep -n -E "TBD|FIXME|XXX" "$file" 2>/dev/null
427
+ # Warning-level cleanup comments
428
+ grep -n -E "TODO|HACK|PLACEHOLDER" "$file" 2>/dev/null
427
429
  grep -n -E "placeholder|coming soon|will be here|not yet implemented|not available" "$file" -i 2>/dev/null
428
430
  # Empty implementations
429
431
  grep -n -E "return null|return \{\}|return \[\]|=> \{\}" "$file" 2>/dev/null
@@ -437,7 +439,9 @@ grep -n -B 2 -A 2 "console\.log" "$file" 2>/dev/null | grep -E "^\s*(const|funct
437
439
 
438
440
  **Stub classification:** A grep match is a STUB only when the value flows to rendering or user-visible output AND no other code path populates it with real data. A test helper, type default, or initial state that gets overwritten by a fetch/store is NOT a stub. Check for data-fetching (useEffect, fetch, query, useSWR, useQuery, subscribe) that writes to the same variable before flagging.
439
441
 
440
- Categorize: 🛑 Blocker (prevents goal) | ⚠️ Warning (incomplete) | ℹ️ Info (notable)
442
+ **Debt marker gate:** Any `TBD`, `FIXME`, or `XXX` marker in a file modified by this phase is a 🛑 BLOCKER unless the same line references formal follow-up work (`issue #123`, `PR #123`, `#123`, or `DEF-*`). Unreferenced markers mean completion is not auditable; set `status: gaps_found` and list each marker under `gaps`.
443
+
444
+ Categorize: 🛑 Blocker (prevents goal or unresolved debt marker) | ⚠️ Warning (incomplete) | ℹ️ Info (notable)
441
445
 
442
446
  ## Step 7b: Behavioral Spot-Checks
443
447
 
@@ -485,6 +489,43 @@ npm test -- --grep "$PHASE_TEST_PATTERN" 2>&1 | grep -q "passing"
485
489
  - Do not modify state (no writes, no mutations, no side effects)
486
490
  - If the project has no runnable entry points yet, skip with: "Step 7b: SKIPPED (no runnable entry points)"
487
491
 
492
+ ## Step 7c: Probe Execution
493
+
494
+ SUMMARY.md probe pass claims are not evidence. If a phase declares or implies probe-based verification, the verifier must run the probe in its own process and record the command result.
495
+
496
+ **When to run:** For migration phases, CLI/tooling phases, or any phase whose PLAN/SUMMARY/verification criteria mention probes, PASS markers, stage markers, runnable checks, or `scripts/*/tests/probe-*.sh`.
497
+
498
+ **Probe discovery:**
499
+
500
+ ```bash
501
+ # Conventional project probes
502
+ find scripts -path '*/tests/probe-*.sh' -type f 2>/dev/null | sort
503
+
504
+ # Phase-declared probes
505
+ grep -R -n -E 'probe-[^[:space:]]+\.sh|scripts/.*/tests/probe-.*\.sh' "$PHASE_DIR"/*-PLAN.md "$PHASE_DIR"/*-SUMMARY.md 2>/dev/null
506
+ ```
507
+
508
+ **Execution contract:**
509
+
510
+ 1. Build the `PROBES` list from explicit PLAN declarations first; include conventional `scripts/*/tests/probe-*.sh` when the phase is a migration/tooling phase or the success criteria mention probes.
511
+ 2. For every documented probe path, if the file is missing or unreadable, mark `MISSING_PROBE` and set `status: gaps_found`. Do not require the executable bit because probes run through `bash "$probe"`.
512
+ 3. Run each probe from the built `PROBES` list (declared + conventional) from the repository root:
513
+
514
+ ```bash
515
+ for probe in "${PROBES[@]}"; do
516
+ timeout 30s bash "$probe"
517
+ done
518
+ ```
519
+
520
+ 4. Exit code 0 is PASS. Any non-zero exit is FAILED and must include stdout/stderr evidence in VERIFICATION.md.
521
+ 5. Do not substitute executor narration, SUMMARY.md PASS-marker counts, or a different dry-run driver command for the probe result.
522
+
523
+ **Probe status:**
524
+
525
+ | Probe | Command | Result | Status |
526
+ | ----- | ------- | ------ | ------ |
527
+ | `scripts/.../probe-name.sh` | `bash "$probe"` | exit code/output | PASS / FAILED / MISSING_PROBE |
528
+
488
529
  ## Step 8: Identify Human Verification Needs
489
530
 
490
531
  **Always needs human:** Visual appearance, user flow completion, real-time behavior, external service integration, performance feel, error message clarity.
@@ -706,6 +747,11 @@ Only include this section if deferred items exist (from Step 9b).
706
747
  | Behavior | Command | Result | Status |
707
748
  | -------- | ------- | ------ | ------ |
708
749
 
750
+ ### Probe Execution
751
+
752
+ | Probe | Command | Result | Status |
753
+ | ----- | ------- | ------ | ------ |
754
+
709
755
  ### Requirements Coverage
710
756
 
711
757
  | Requirement | Source Plan | Description | Status | Evidence |