gsd-remix 1.0.2 → 1.1.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 (230) hide show
  1. package/README.md +13 -81
  2. package/README.zh-CN.md +13 -57
  3. package/agents/gsd-debugger.md +0 -3
  4. package/agents/gsd-executor.md +5 -11
  5. package/agents/gsd-phase-researcher.md +3 -107
  6. package/agents/gsd-plan-checker.md +0 -61
  7. package/agents/gsd-planner.md +4 -63
  8. package/agents/gsd-roadmapper.md +0 -29
  9. package/agents/gsd-security-auditor.md +62 -114
  10. package/agents/gsd-verifier.md +0 -3
  11. package/bin/install.js +20 -118
  12. package/commands/gsd/complete-milestone.md +0 -22
  13. package/commands/gsd/plan-phase.md +1 -2
  14. package/get-shit-done/bin/gsd-tools.cjs +5 -224
  15. package/get-shit-done/bin/lib/claude-md.cjs +427 -0
  16. package/get-shit-done/bin/lib/config-schema.cjs +2 -12
  17. package/get-shit-done/bin/lib/config.cjs +3 -12
  18. package/get-shit-done/bin/lib/core.cjs +4 -5
  19. package/get-shit-done/bin/lib/init.cjs +0 -163
  20. package/get-shit-done/bin/lib/model-profiles.cjs +12 -18
  21. package/get-shit-done/bin/lib/verify.cjs +0 -66
  22. package/get-shit-done/references/agent-contracts.md +0 -6
  23. package/get-shit-done/references/artifact-types.md +0 -30
  24. package/get-shit-done/references/continuation-format.md +0 -1
  25. package/get-shit-done/references/model-profiles.md +39 -37
  26. package/get-shit-done/references/planning-config.md +7 -12
  27. package/get-shit-done/references/verification-overrides.md +1 -1
  28. package/get-shit-done/templates/README.md +2 -9
  29. package/get-shit-done/templates/claude-md.md +0 -14
  30. package/get-shit-done/templates/config.json +5 -19
  31. package/get-shit-done/workflows/autonomous.md +9 -141
  32. package/get-shit-done/workflows/complete-milestone.md +3 -4
  33. package/get-shit-done/workflows/discuss-phase-assumptions.md +1 -18
  34. package/get-shit-done/workflows/discuss-phase.md +10 -104
  35. package/get-shit-done/workflows/do.md +1 -5
  36. package/get-shit-done/workflows/execute-phase.md +53 -103
  37. package/get-shit-done/workflows/execute-plan.md +4 -4
  38. package/get-shit-done/workflows/health.md +2 -5
  39. package/get-shit-done/workflows/help.md +0 -165
  40. package/get-shit-done/workflows/new-milestone.md +0 -51
  41. package/get-shit-done/workflows/new-project.md +2 -63
  42. package/get-shit-done/workflows/next.md +0 -23
  43. package/get-shit-done/workflows/pause-work.md +7 -15
  44. package/get-shit-done/workflows/plan-phase.md +20 -304
  45. package/get-shit-done/workflows/pr-branch.md +0 -1
  46. package/get-shit-done/workflows/progress.md +1 -68
  47. package/get-shit-done/workflows/quick.md +0 -3
  48. package/get-shit-done/workflows/research-phase.md +0 -1
  49. package/get-shit-done/workflows/settings.md +1 -57
  50. package/get-shit-done/workflows/transition.md +3 -86
  51. package/get-shit-done/workflows/verify-work.md +0 -64
  52. package/package.json +1 -1
  53. package/scripts/build-hooks.js +0 -2
  54. package/sdk/prompts/agents/gsd-executor.md +2 -0
  55. package/sdk/prompts/agents/gsd-plan-checker.md +0 -3
  56. package/sdk/prompts/agents/gsd-roadmapper.md +0 -29
  57. package/sdk/src/config.ts +4 -5
  58. package/sdk/src/golden/golden-integration-covered.ts +0 -2
  59. package/sdk/src/golden/golden-policy.ts +1 -1
  60. package/sdk/src/golden/golden.integration.test.ts +0 -27
  61. package/sdk/src/golden/read-only-golden-rows.ts +0 -15
  62. package/sdk/src/query/QUERY-HANDLERS.md +3 -34
  63. package/sdk/src/query/claude-md.ts +421 -0
  64. package/sdk/src/query/commit.test.ts +155 -1
  65. package/sdk/src/query/commit.ts +71 -17
  66. package/sdk/src/query/config-gates.test.ts +1 -2
  67. package/sdk/src/query/config-gates.ts +1 -5
  68. package/sdk/src/query/config-mutation.test.ts +0 -1
  69. package/sdk/src/query/config-mutation.ts +5 -6
  70. package/sdk/src/query/config-query.test.ts +2 -2
  71. package/sdk/src/query/config-query.ts +12 -18
  72. package/sdk/src/query/decomposed-handlers.test.ts +0 -64
  73. package/sdk/src/query/index.ts +4 -68
  74. package/sdk/src/query/init.test.ts +0 -64
  75. package/sdk/src/query/init.ts +0 -189
  76. package/sdk/src/query/normalize-query-command.ts +0 -2
  77. package/sdk/src/query/profile.test.ts +0 -43
  78. package/sdk/src/query/profile.ts +1 -141
  79. package/sdk/src/query/state-mutation.ts +18 -0
  80. package/sdk/src/runtime-health.ts +3 -3
  81. package/agents/gsd-ai-researcher.md +0 -133
  82. package/agents/gsd-doc-classifier.md +0 -168
  83. package/agents/gsd-doc-synthesizer.md +0 -204
  84. package/agents/gsd-doc-verifier.md +0 -217
  85. package/agents/gsd-doc-writer.md +0 -615
  86. package/agents/gsd-domain-researcher.md +0 -153
  87. package/agents/gsd-eval-auditor.md +0 -191
  88. package/agents/gsd-eval-planner.md +0 -154
  89. package/agents/gsd-framework-selector.md +0 -160
  90. package/agents/gsd-intel-updater.md +0 -334
  91. package/agents/gsd-nyquist-auditor.md +0 -203
  92. package/agents/gsd-ui-auditor.md +0 -495
  93. package/agents/gsd-ui-checker.md +0 -309
  94. package/agents/gsd-ui-researcher.md +0 -380
  95. package/agents/gsd-user-profiler.md +0 -171
  96. package/commands/gsd/ai-integration-phase.md +0 -36
  97. package/commands/gsd/analyze-dependencies.md +0 -34
  98. package/commands/gsd/audit-fix.md +0 -33
  99. package/commands/gsd/audit-milestone.md +0 -36
  100. package/commands/gsd/audit-uat.md +0 -24
  101. package/commands/gsd/docs-update.md +0 -48
  102. package/commands/gsd/eval-review.md +0 -32
  103. package/commands/gsd/explore.md +0 -27
  104. package/commands/gsd/extract_learnings.md +0 -22
  105. package/commands/gsd/forensics.md +0 -56
  106. package/commands/gsd/from-gsd2.md +0 -47
  107. package/commands/gsd/graphify.md +0 -201
  108. package/commands/gsd/import.md +0 -37
  109. package/commands/gsd/inbox.md +0 -38
  110. package/commands/gsd/ingest-docs.md +0 -42
  111. package/commands/gsd/intel.md +0 -179
  112. package/commands/gsd/join-discord.md +0 -19
  113. package/commands/gsd/list-phase-assumptions.md +0 -46
  114. package/commands/gsd/list-workspaces.md +0 -19
  115. package/commands/gsd/manager.md +0 -40
  116. package/commands/gsd/milestone-summary.md +0 -51
  117. package/commands/gsd/new-workspace.md +0 -44
  118. package/commands/gsd/plan-milestone-gaps.md +0 -34
  119. package/commands/gsd/plan-review-convergence.md +0 -52
  120. package/commands/gsd/plant-seed.md +0 -28
  121. package/commands/gsd/profile-user.md +0 -46
  122. package/commands/gsd/reapply-patches.md +0 -331
  123. package/commands/gsd/remove-workspace.md +0 -26
  124. package/commands/gsd/review.md +0 -40
  125. package/commands/gsd/scan.md +0 -26
  126. package/commands/gsd/secure-phase.md +0 -35
  127. package/commands/gsd/session-report.md +0 -19
  128. package/commands/gsd/set-profile.md +0 -12
  129. package/commands/gsd/ship.md +0 -23
  130. package/commands/gsd/sketch-wrap-up.md +0 -31
  131. package/commands/gsd/sketch.md +0 -49
  132. package/commands/gsd/spec-phase.md +0 -62
  133. package/commands/gsd/spike-wrap-up.md +0 -31
  134. package/commands/gsd/spike.md +0 -46
  135. package/commands/gsd/stats.md +0 -18
  136. package/commands/gsd/sync-skills.md +0 -19
  137. package/commands/gsd/thread.md +0 -227
  138. package/commands/gsd/ui-phase.md +0 -34
  139. package/commands/gsd/ui-review.md +0 -32
  140. package/commands/gsd/ultraplan-phase.md +0 -33
  141. package/commands/gsd/update.md +0 -37
  142. package/commands/gsd/validate-phase.md +0 -35
  143. package/commands/gsd/workstreams.md +0 -69
  144. package/get-shit-done/bin/lib/docs.cjs +0 -267
  145. package/get-shit-done/bin/lib/graphify.cjs +0 -494
  146. package/get-shit-done/bin/lib/gsd2-import.cjs +0 -511
  147. package/get-shit-done/bin/lib/intel.cjs +0 -639
  148. package/get-shit-done/bin/lib/profile-output.cjs +0 -1080
  149. package/get-shit-done/bin/lib/profile-pipeline.cjs +0 -539
  150. package/get-shit-done/bin/lib/workstream.cjs +0 -495
  151. package/get-shit-done/references/ai-evals.md +0 -156
  152. package/get-shit-done/references/ai-frameworks.md +0 -186
  153. package/get-shit-done/references/doc-conflict-engine.md +0 -91
  154. package/get-shit-done/references/model-profile-resolution.md +0 -38
  155. package/get-shit-done/references/planner-reviews.md +0 -39
  156. package/get-shit-done/references/sketch-interactivity.md +0 -41
  157. package/get-shit-done/references/sketch-theme-system.md +0 -94
  158. package/get-shit-done/references/sketch-tooling.md +0 -45
  159. package/get-shit-done/references/sketch-variant-patterns.md +0 -81
  160. package/get-shit-done/references/thinking-models-debug.md +0 -44
  161. package/get-shit-done/references/thinking-models-execution.md +0 -50
  162. package/get-shit-done/references/thinking-models-planning.md +0 -62
  163. package/get-shit-done/references/thinking-models-research.md +0 -50
  164. package/get-shit-done/references/thinking-models-verification.md +0 -55
  165. package/get-shit-done/references/thinking-partner.md +0 -96
  166. package/get-shit-done/references/user-profiling.md +0 -681
  167. package/get-shit-done/references/workstream-flag.md +0 -111
  168. package/get-shit-done/templates/AI-SPEC.md +0 -246
  169. package/get-shit-done/templates/SECURITY.md +0 -61
  170. package/get-shit-done/templates/UI-SPEC.md +0 -100
  171. package/get-shit-done/templates/VALIDATION.md +0 -76
  172. package/get-shit-done/templates/dev-preferences.md +0 -21
  173. package/get-shit-done/templates/user-profile.md +0 -146
  174. package/get-shit-done/workflows/ai-integration-phase.md +0 -284
  175. package/get-shit-done/workflows/analyze-dependencies.md +0 -96
  176. package/get-shit-done/workflows/audit-fix.md +0 -175
  177. package/get-shit-done/workflows/audit-milestone.md +0 -340
  178. package/get-shit-done/workflows/audit-uat.md +0 -109
  179. package/get-shit-done/workflows/docs-update.md +0 -1155
  180. package/get-shit-done/workflows/eval-review.md +0 -155
  181. package/get-shit-done/workflows/explore.md +0 -141
  182. package/get-shit-done/workflows/extract_learnings.md +0 -242
  183. package/get-shit-done/workflows/forensics.md +0 -265
  184. package/get-shit-done/workflows/import.md +0 -246
  185. package/get-shit-done/workflows/inbox.md +0 -387
  186. package/get-shit-done/workflows/ingest-docs.md +0 -328
  187. package/get-shit-done/workflows/list-phase-assumptions.md +0 -178
  188. package/get-shit-done/workflows/list-workspaces.md +0 -56
  189. package/get-shit-done/workflows/manager.md +0 -365
  190. package/get-shit-done/workflows/milestone-summary.md +0 -223
  191. package/get-shit-done/workflows/new-workspace.md +0 -239
  192. package/get-shit-done/workflows/plan-milestone-gaps.md +0 -273
  193. package/get-shit-done/workflows/plan-review-convergence.md +0 -254
  194. package/get-shit-done/workflows/plant-seed.md +0 -172
  195. package/get-shit-done/workflows/profile-user.md +0 -452
  196. package/get-shit-done/workflows/remove-workspace.md +0 -92
  197. package/get-shit-done/workflows/review.md +0 -344
  198. package/get-shit-done/workflows/scan.md +0 -102
  199. package/get-shit-done/workflows/secure-phase.md +0 -166
  200. package/get-shit-done/workflows/session-report.md +0 -146
  201. package/get-shit-done/workflows/ship.md +0 -302
  202. package/get-shit-done/workflows/sketch-wrap-up.md +0 -283
  203. package/get-shit-done/workflows/sketch.md +0 -286
  204. package/get-shit-done/workflows/spec-phase.md +0 -262
  205. package/get-shit-done/workflows/spike-wrap-up.md +0 -281
  206. package/get-shit-done/workflows/spike.md +0 -362
  207. package/get-shit-done/workflows/stats.md +0 -60
  208. package/get-shit-done/workflows/sync-skills.md +0 -182
  209. package/get-shit-done/workflows/ui-phase.md +0 -323
  210. package/get-shit-done/workflows/ui-review.md +0 -190
  211. package/get-shit-done/workflows/ultraplan-phase.md +0 -189
  212. package/get-shit-done/workflows/update.md +0 -587
  213. package/get-shit-done/workflows/validate-phase.md +0 -176
  214. package/hooks/dist/gsd-check-update-worker.js +0 -108
  215. package/hooks/dist/gsd-check-update.js +0 -63
  216. package/hooks/gsd-check-update-worker.js +0 -108
  217. package/hooks/gsd-check-update.js +0 -63
  218. package/sdk/src/golden/fixtures/profile-sample-sessions/demo-project/sample.jsonl +0 -3
  219. package/sdk/src/query/docs-init.ts +0 -257
  220. package/sdk/src/query/intel.test.ts +0 -90
  221. package/sdk/src/query/intel.ts +0 -404
  222. package/sdk/src/query/profile-extract-messages.ts +0 -247
  223. package/sdk/src/query/profile-output.ts +0 -908
  224. package/sdk/src/query/profile-questionnaire-data.ts +0 -181
  225. package/sdk/src/query/profile-sample.ts +0 -184
  226. package/sdk/src/query/profile-scan-sessions.ts +0 -174
  227. package/sdk/src/query/workspace.test.ts +0 -119
  228. package/sdk/src/query/workspace.ts +0 -131
  229. package/sdk/src/query/workstream.test.ts +0 -51
  230. package/sdk/src/query/workstream.ts +0 -434
@@ -1364,165 +1364,6 @@ function cmdInitProgress(cwd, raw) {
1364
1364
  output(withProjectRoot(cwd, result), raw);
1365
1365
  }
1366
1366
 
1367
- /**
1368
- * Detect child git repos in a directory (one level deep).
1369
- * Returns array of { name, path, has_uncommitted } objects.
1370
- */
1371
- function detectChildRepos(dir) {
1372
- const repos = [];
1373
- let entries;
1374
- try { entries = fs.readdirSync(dir, { withFileTypes: true }); } catch { return repos; }
1375
- for (const entry of entries) {
1376
- if (!entry.isDirectory()) continue;
1377
- if (entry.name.startsWith('.')) continue;
1378
- const fullPath = path.join(dir, entry.name);
1379
- const gitDir = path.join(fullPath, '.git');
1380
- if (fs.existsSync(gitDir)) {
1381
- let hasUncommitted = false;
1382
- try {
1383
- const status = execSync('git status --porcelain', { cwd: fullPath, encoding: 'utf8', timeout: 5000 });
1384
- hasUncommitted = status.trim().length > 0;
1385
- } catch { /* best-effort */ }
1386
- repos.push({ name: entry.name, path: fullPath, has_uncommitted: hasUncommitted });
1387
- }
1388
- }
1389
- return repos;
1390
- }
1391
-
1392
- function cmdInitNewWorkspace(cwd, raw) {
1393
- const homedir = process.env.HOME || require('os').homedir();
1394
- const defaultBase = path.join(homedir, 'gsd-workspaces');
1395
-
1396
- // Detect child git repos for interactive selection
1397
- const childRepos = detectChildRepos(cwd);
1398
-
1399
- // Check if git worktree is available
1400
- let worktreeAvailable = false;
1401
- try {
1402
- execSync('git --version', { encoding: 'utf8', timeout: 5000, stdio: 'pipe' });
1403
- worktreeAvailable = true;
1404
- } catch { /* no git at all */ }
1405
-
1406
- const result = {
1407
- default_workspace_base: defaultBase,
1408
- child_repos: childRepos,
1409
- child_repo_count: childRepos.length,
1410
- worktree_available: worktreeAvailable,
1411
- is_git_repo: pathExistsInternal(cwd, '.git'),
1412
- cwd_repo_name: path.basename(cwd),
1413
- };
1414
-
1415
- output(withProjectRoot(cwd, result), raw);
1416
- }
1417
-
1418
- function cmdInitListWorkspaces(cwd, raw) {
1419
- const homedir = process.env.HOME || require('os').homedir();
1420
- const defaultBase = path.join(homedir, 'gsd-workspaces');
1421
-
1422
- const workspaces = [];
1423
- if (fs.existsSync(defaultBase)) {
1424
- let entries;
1425
- try { entries = fs.readdirSync(defaultBase, { withFileTypes: true }); } catch { entries = []; }
1426
- for (const entry of entries) {
1427
- if (!entry.isDirectory()) continue;
1428
- const wsPath = path.join(defaultBase, entry.name);
1429
- const manifestPath = path.join(wsPath, 'WORKSPACE.md');
1430
- if (!fs.existsSync(manifestPath)) continue;
1431
-
1432
- let repoCount = 0;
1433
- let hasProject = false;
1434
- let strategy = 'unknown';
1435
- try {
1436
- const manifest = fs.readFileSync(manifestPath, 'utf8');
1437
- const strategyMatch = manifest.match(/^Strategy:\s*(.+)$/m);
1438
- if (strategyMatch) strategy = strategyMatch[1].trim();
1439
- // Count table rows (lines starting with |, excluding header and separator)
1440
- const tableRows = manifest.split('\n').filter(l => l.match(/^\|\s*\w/) && !l.includes('Repo') && !l.includes('---'));
1441
- repoCount = tableRows.length;
1442
- } catch { /* best-effort */ }
1443
- hasProject = fs.existsSync(path.join(wsPath, '.planning', 'PROJECT.md'));
1444
-
1445
- workspaces.push({
1446
- name: entry.name,
1447
- path: wsPath,
1448
- repo_count: repoCount,
1449
- strategy,
1450
- has_project: hasProject,
1451
- });
1452
- }
1453
- }
1454
-
1455
- const result = {
1456
- workspace_base: defaultBase,
1457
- workspaces,
1458
- workspace_count: workspaces.length,
1459
- };
1460
-
1461
- output(result, raw);
1462
- }
1463
-
1464
- function cmdInitRemoveWorkspace(cwd, name, raw) {
1465
- const homedir = process.env.HOME || require('os').homedir();
1466
- const defaultBase = path.join(homedir, 'gsd-workspaces');
1467
-
1468
- if (!name) {
1469
- error('workspace name required for init remove-workspace');
1470
- }
1471
-
1472
- const wsPath = path.join(defaultBase, name);
1473
- const manifestPath = path.join(wsPath, 'WORKSPACE.md');
1474
-
1475
- if (!fs.existsSync(wsPath)) {
1476
- error(`Workspace not found: ${wsPath}`);
1477
- }
1478
-
1479
- // Parse manifest for repo info
1480
- const repos = [];
1481
- let strategy = 'unknown';
1482
- if (fs.existsSync(manifestPath)) {
1483
- try {
1484
- const manifest = fs.readFileSync(manifestPath, 'utf8');
1485
- const strategyMatch = manifest.match(/^Strategy:\s*(.+)$/m);
1486
- if (strategyMatch) strategy = strategyMatch[1].trim();
1487
-
1488
- // Parse table rows for repo names and source paths
1489
- const lines = manifest.split('\n');
1490
- for (const line of lines) {
1491
- const match = line.match(/^\|\s*(\S+)\s*\|\s*(\S+)\s*\|\s*(\S+)\s*\|\s*(\S+)\s*\|$/);
1492
- if (match && match[1] !== 'Repo' && !match[1].includes('---')) {
1493
- repos.push({ name: match[1], source: match[2], branch: match[3], strategy: match[4] });
1494
- }
1495
- }
1496
- } catch { /* best-effort */ }
1497
- }
1498
-
1499
- // Check for uncommitted changes in workspace repos
1500
- const dirtyRepos = [];
1501
- for (const repo of repos) {
1502
- const repoPath = path.join(wsPath, repo.name);
1503
- if (!fs.existsSync(repoPath)) continue;
1504
- try {
1505
- const status = execSync('git status --porcelain', { cwd: repoPath, encoding: 'utf8', timeout: 5000, stdio: 'pipe' });
1506
- if (status.trim().length > 0) {
1507
- dirtyRepos.push(repo.name);
1508
- }
1509
- } catch { /* best-effort */ }
1510
- }
1511
-
1512
- const result = {
1513
- workspace_name: name,
1514
- workspace_path: wsPath,
1515
- has_manifest: fs.existsSync(manifestPath),
1516
- strategy,
1517
- repos,
1518
- repo_count: repos.length,
1519
- dirty_repos: dirtyRepos,
1520
- has_dirty_repos: dirtyRepos.length > 0,
1521
- };
1522
-
1523
- output(result, raw);
1524
- }
1525
-
1526
1367
  /**
1527
1368
  * Build a formatted agent skills block for injection into Task() prompts.
1528
1369
  *
@@ -1867,10 +1708,6 @@ module.exports = {
1867
1708
  cmdInitMapCodebase,
1868
1709
  cmdInitProgress,
1869
1710
  cmdInitManager,
1870
- cmdInitNewWorkspace,
1871
- cmdInitListWorkspaces,
1872
- cmdInitRemoveWorkspace,
1873
- detectChildRepos,
1874
1711
  buildAgentSkillsBlock,
1875
1712
  cmdAgentSkills,
1876
1713
  buildSkillManifest,
@@ -7,24 +7,18 @@
7
7
  * would be faster, use fewer tokens, and be less error-prone).
8
8
  */
9
9
  const MODEL_PROFILES = {
10
- 'gsd-planner': { quality: 'opus', balanced: 'opus', budget: 'sonnet', adaptive: 'opus' },
11
- 'gsd-roadmapper': { quality: 'opus', balanced: 'sonnet', budget: 'sonnet', adaptive: 'sonnet' },
12
- 'gsd-executor': { quality: 'opus', balanced: 'sonnet', budget: 'sonnet', adaptive: 'sonnet' },
13
- 'gsd-phase-researcher': { quality: 'opus', balanced: 'sonnet', budget: 'haiku', adaptive: 'sonnet' },
14
- 'gsd-project-researcher': { quality: 'opus', balanced: 'sonnet', budget: 'haiku', adaptive: 'sonnet' },
15
- 'gsd-research-synthesizer': { quality: 'sonnet', balanced: 'sonnet', budget: 'haiku', adaptive: 'haiku' },
16
- 'gsd-debugger': { quality: 'opus', balanced: 'sonnet', budget: 'sonnet', adaptive: 'opus' },
17
- 'gsd-codebase-mapper': { quality: 'sonnet', balanced: 'haiku', budget: 'haiku', adaptive: 'haiku' },
18
- 'gsd-verifier': { quality: 'sonnet', balanced: 'sonnet', budget: 'haiku', adaptive: 'sonnet' },
19
- 'gsd-plan-checker': { quality: 'sonnet', balanced: 'sonnet', budget: 'haiku', adaptive: 'haiku' },
20
- 'gsd-integration-checker': { quality: 'sonnet', balanced: 'sonnet', budget: 'haiku', adaptive: 'haiku' },
21
- 'gsd-nyquist-auditor': { quality: 'sonnet', balanced: 'sonnet', budget: 'haiku', adaptive: 'haiku' },
22
- 'gsd-pattern-mapper': { quality: 'sonnet', balanced: 'sonnet', budget: 'haiku', adaptive: 'haiku' },
23
- 'gsd-ui-researcher': { quality: 'opus', balanced: 'sonnet', budget: 'haiku', adaptive: 'sonnet' },
24
- 'gsd-ui-checker': { quality: 'sonnet', balanced: 'sonnet', budget: 'haiku', adaptive: 'haiku' },
25
- 'gsd-ui-auditor': { quality: 'sonnet', balanced: 'sonnet', budget: 'haiku', adaptive: 'haiku' },
26
- 'gsd-doc-writer': { quality: 'opus', balanced: 'sonnet', budget: 'haiku', adaptive: 'sonnet' },
27
- 'gsd-doc-verifier': { quality: 'sonnet', balanced: 'sonnet', budget: 'haiku', adaptive: 'haiku' },
10
+ 'gsd-planner': { quality: 'opus', balanced: 'opus', budget: 'opus', adaptive: 'opus' },
11
+ 'gsd-roadmapper': { quality: 'opus', balanced: 'opus', budget: 'opus', adaptive: 'opus' },
12
+ 'gsd-executor': { quality: 'sonnet', balanced: 'sonnet', budget: 'sonnet', adaptive: 'sonnet' },
13
+ 'gsd-phase-researcher': { quality: 'opus', balanced: 'opus', budget: 'opus', adaptive: 'opus' },
14
+ 'gsd-project-researcher': { quality: 'opus', balanced: 'opus', budget: 'opus', adaptive: 'opus' },
15
+ 'gsd-research-synthesizer': { quality: 'sonnet', balanced: 'sonnet', budget: 'sonnet', adaptive: 'sonnet' },
16
+ 'gsd-debugger': { quality: 'opus', balanced: 'opus', budget: 'opus', adaptive: 'opus' },
17
+ 'gsd-codebase-mapper': { quality: 'sonnet', balanced: 'sonnet', budget: 'sonnet', adaptive: 'sonnet' },
18
+ 'gsd-verifier': { quality: 'sonnet', balanced: 'sonnet', budget: 'sonnet', adaptive: 'sonnet' },
19
+ 'gsd-plan-checker': { quality: 'sonnet', balanced: 'sonnet', budget: 'sonnet', adaptive: 'sonnet' },
20
+ 'gsd-integration-checker': { quality: 'sonnet', balanced: 'sonnet', budget: 'sonnet', adaptive: 'sonnet' },
21
+ 'gsd-pattern-mapper': { quality: 'sonnet', balanced: 'sonnet', budget: 'sonnet', adaptive: 'sonnet' },
28
22
  };
29
23
  const VALID_PROFILES = Object.keys(MODEL_PROFILES['gsd-planner']);
30
24
 
@@ -639,22 +639,6 @@ function cmdValidateHealth(cwd, options, raw) {
639
639
  }
640
640
  }
641
641
 
642
- // ─── Check 5b: Nyquist validation key presence ──────────────────────────
643
- if (fs.existsSync(configPath)) {
644
- try {
645
- const configRaw = fs.readFileSync(configPath, 'utf-8');
646
- const configParsed = JSON.parse(configRaw);
647
- if (configParsed.workflow && configParsed.workflow.nyquist_validation === undefined) {
648
- addIssue('warning', 'W008', 'config.json: workflow.nyquist_validation absent (defaults to enabled but agents may skip)', 'Run /gsd-health --repair to add key', true);
649
- if (!repairs.includes('addNyquistKey')) repairs.push('addNyquistKey');
650
- }
651
- if (configParsed.workflow && configParsed.workflow.ai_integration_phase === undefined) {
652
- addIssue('warning', 'W016', 'config.json: workflow.ai_integration_phase absent (defaults to enabled — run /gsd-ai-integration-phase before planning AI system phases)', 'Run /gsd-health --repair to add key', true);
653
- if (!repairs.includes('addAiIntegrationPhaseKey')) repairs.push('addAiIntegrationPhaseKey');
654
- }
655
- } catch { /* intentionally empty */ }
656
- }
657
-
658
642
  // ─── Read phase directories once for checks 6, 7, 7b, and 8 (#1973) ──────
659
643
  let phaseDirEntries = [];
660
644
  const phaseDirFiles = new Map(); // phase dir name → file list
@@ -689,22 +673,6 @@ function cmdValidateHealth(cwd, options, raw) {
689
673
  }
690
674
  }
691
675
 
692
- // ─── Check 7b: Nyquist VALIDATION.md consistency ────────────────────────
693
- for (const e of phaseDirEntries) {
694
- const phaseFiles = phaseDirFiles.get(e.name) || [];
695
- const hasResearch = phaseFiles.some(f => f.endsWith('-RESEARCH.md'));
696
- const hasValidation = phaseFiles.some(f => f.endsWith('-VALIDATION.md'));
697
- if (hasResearch && !hasValidation) {
698
- const researchFile = phaseFiles.find(f => f.endsWith('-RESEARCH.md'));
699
- try {
700
- const researchContent = fs.readFileSync(path.join(phasesDir, e.name, researchFile), 'utf-8');
701
- if (researchContent.includes('## Validation Architecture')) {
702
- addIssue('warning', 'W009', `Phase ${e.name}: has Validation Architecture in RESEARCH.md but no VALIDATION.md`, 'Re-run /gsd-plan-phase with --research to regenerate');
703
- }
704
- } catch { /* intentionally empty */ }
705
- }
706
- }
707
-
708
676
  // ─── Check 7c: Agent installation (#1371) ──────────────────────────────────
709
677
  // Verify GSD agents are installed. Missing agents cause Task(subagent_type=...)
710
678
  // to silently fall back to general-purpose, losing specialized instructions.
@@ -974,40 +942,6 @@ function cmdValidateHealth(cwd, options, raw) {
974
942
  repairActions.push({ action: repair, success: true, path: 'STATE.md' });
975
943
  break;
976
944
  }
977
- case 'addNyquistKey': {
978
- if (fs.existsSync(configPath)) {
979
- try {
980
- const configRaw = fs.readFileSync(configPath, 'utf-8');
981
- const configParsed = JSON.parse(configRaw);
982
- if (!configParsed.workflow) configParsed.workflow = {};
983
- if (configParsed.workflow.nyquist_validation === undefined) {
984
- configParsed.workflow.nyquist_validation = true;
985
- fs.writeFileSync(configPath, JSON.stringify(configParsed, null, 2), 'utf-8');
986
- }
987
- repairActions.push({ action: repair, success: true, path: 'config.json' });
988
- } catch (err) {
989
- repairActions.push({ action: repair, success: false, error: err.message });
990
- }
991
- }
992
- break;
993
- }
994
- case 'addAiIntegrationPhaseKey': {
995
- if (fs.existsSync(configPath)) {
996
- try {
997
- const configRaw = fs.readFileSync(configPath, 'utf-8');
998
- const configParsed = JSON.parse(configRaw);
999
- if (!configParsed.workflow) configParsed.workflow = {};
1000
- if (configParsed.workflow.ai_integration_phase === undefined) {
1001
- configParsed.workflow.ai_integration_phase = true;
1002
- fs.writeFileSync(configPath, JSON.stringify(configParsed, null, 2), 'utf-8');
1003
- }
1004
- repairActions.push({ action: repair, success: true, path: 'config.json' });
1005
- } catch (err) {
1006
- repairActions.push({ action: repair, success: false, error: err.message });
1007
- }
1008
- }
1009
- break;
1010
- }
1011
945
  case 'backfillMilestones': {
1012
946
  if (!options.backfill && !options.repair) break;
1013
947
  const today = new Date().toISOString().split('T')[0];
@@ -18,20 +18,14 @@ This doc describes what IS, not what should be. Casing inconsistencies are docum
18
18
  | gsd-research-synthesizer | Multi-research synthesis | `## SYNTHESIS COMPLETE`, `## SYNTHESIS BLOCKED` |
19
19
  | gsd-debugger | Debug investigation | `## DEBUG COMPLETE`, `## ROOT CAUSE FOUND`, `## CHECKPOINT REACHED` |
20
20
  | gsd-roadmapper | Roadmap creation/revision | `## ROADMAP CREATED`, `## ROADMAP REVISED`, `## ROADMAP BLOCKED` |
21
- | gsd-ui-auditor | UI review | `## UI REVIEW COMPLETE` |
22
- | gsd-ui-checker | UI validation | `## ISSUES FOUND` |
23
- | gsd-ui-researcher | UI spec creation | `## UI-SPEC COMPLETE`, `## UI-SPEC BLOCKED` |
24
21
  | gsd-verifier | Post-execution verification | `## Verification Complete` (title case) |
25
22
  | gsd-integration-checker | Cross-phase integration check | `## Integration Check Complete` (title case) |
26
- | gsd-nyquist-auditor | Sampling audit | `## PARTIAL`, `## ESCALATE` (non-standard) |
27
23
  | gsd-security-auditor | Security audit | `## OPEN_THREATS`, `## ESCALATE` (non-standard) |
28
24
  | gsd-codebase-mapper | Codebase analysis | No marker (writes docs directly) |
29
25
  | gsd-assumptions-analyzer | Assumption extraction | No marker (returns `## Assumptions` sections) |
30
26
  | gsd-doc-verifier | Doc validation | No marker (writes JSON to `.planning/tmp/`) |
31
27
  | gsd-doc-writer | Doc generation | No marker (writes docs directly) |
32
28
  | gsd-advisor-researcher | Advisory research | No marker (utility agent) |
33
- | gsd-user-profiler | User profiling | No marker (returns JSON in analysis tags) |
34
- | gsd-intel-updater | Codebase intelligence analysis | `## INTEL UPDATE COMPLETE`, `## INTEL UPDATE FAILED` |
35
29
 
36
30
  ## Marker Rules
37
31
 
@@ -60,36 +60,6 @@ reads is inert — the consumption mechanism is what gives an artifact meaning.
60
60
  - **Location**: `.planning/phases/XX-name/XX-DISCUSSION-LOG.md`
61
61
  - **Consumed by**: Human review; not read by automated workflows
62
62
 
63
- ### USER-PROFILE.md
64
- - **Shape**: Calibration tier and preferences profile
65
- - **Lifecycle**: Created by `profile-user` → Updated as preferences are observed
66
- - **Location**: `~/.claude/get-shit-done/USER-PROFILE.md`
67
- - **Consumed by**: `discuss-phase-assumptions` (calibration tier), `plan-phase`
68
-
69
- ### SPIKE.md / DESIGN.md (per-spike)
70
- - **Shape**: Research question + methodology + findings + recommendation
71
- - **Lifecycle**: Created → Investigated → Decided → Archived
72
- - **Location**: `.planning/spikes/SPIKE-NNN/`
73
- - **Consumed by**: Planner when spike is referenced; `pause-work` for spike context handoff
74
-
75
- ### Spike README.md / MANIFEST.md (per-spike, via /gsd-spike)
76
- - **Shape**: YAML frontmatter (spike, name, validates, verdict, related, tags) + run instructions + results
77
- - **Lifecycle**: Created by `/gsd-spike` → Verified → Wrapped up by `/gsd-spike-wrap-up`
78
- - **Location**: `.planning/spikes/NNN-name/README.md`, `.planning/spikes/MANIFEST.md`
79
- - **Consumed by**: `/gsd-spike-wrap-up` for curation; `pause-work` for spike context handoff
80
-
81
- ### Sketch README.md / MANIFEST.md / index.html (per-sketch)
82
- - **Shape**: YAML frontmatter (sketch, name, question, winner, tags) + variants as tabbed HTML
83
- - **Lifecycle**: Created by `/gsd-sketch` → Evaluated → Wrapped up by `/gsd-sketch-wrap-up`
84
- - **Location**: `.planning/sketches/NNN-name/README.md`, `.planning/sketches/NNN-name/index.html`, `.planning/sketches/MANIFEST.md`
85
- - **Consumed by**: `/gsd-sketch-wrap-up` for curation; `pause-work` for sketch context handoff
86
-
87
- ### WRAP-UP-SUMMARY.md (per wrap-up session)
88
- - **Shape**: Curation results, included/excluded items, feature/design area groupings
89
- - **Lifecycle**: Created by `/gsd-spike-wrap-up` or `/gsd-sketch-wrap-up`
90
- - **Location**: `.planning/spikes/WRAP-UP-SUMMARY.md` or `.planning/sketches/WRAP-UP-SUMMARY.md`
91
- - **Consumed by**: Project history; not read by automated workflows
92
-
93
63
  ---
94
64
 
95
65
  ## Standing Reference Artifacts
@@ -56,7 +56,6 @@ Standard format for presenting next steps after completing a command or workflow
56
56
 
57
57
  **Also available:**
58
58
  - Review plan before executing
59
- - `/gsd-list-phase-assumptions 2` — check assumptions
60
59
 
61
60
  ---
62
61
  ```
@@ -4,44 +4,46 @@ Model profiles control which Claude model each GSD agent uses. This allows balan
4
4
 
5
5
  ## Profile Definitions
6
6
 
7
- | Agent | `quality` | `balanced` | `budget` | `adaptive` | `inherit` |
8
- |-------|-----------|------------|----------|------------|-----------|
9
- | gsd-planner | opus | opus | sonnet | opus | inherit |
10
- | gsd-roadmapper | opus | sonnet | sonnet | sonnet | inherit |
11
- | gsd-executor | opus | sonnet | sonnet | sonnet | inherit |
12
- | gsd-phase-researcher | opus | sonnet | haiku | sonnet | inherit |
13
- | gsd-project-researcher | opus | sonnet | haiku | sonnet | inherit |
14
- | gsd-research-synthesizer | sonnet | sonnet | haiku | haiku | inherit |
15
- | gsd-debugger | opus | sonnet | sonnet | opus | inherit |
16
- | gsd-codebase-mapper | sonnet | haiku | haiku | haiku | inherit |
17
- | gsd-verifier | sonnet | sonnet | haiku | sonnet | inherit |
18
- | gsd-plan-checker | sonnet | sonnet | haiku | haiku | inherit |
19
- | gsd-integration-checker | sonnet | sonnet | haiku | haiku | inherit |
20
- | gsd-nyquist-auditor | sonnet | sonnet | haiku | haiku | inherit |
7
+ All named profiles (`quality` / `balanced` / `budget` / `adaptive`) resolve to the same unified allocation — the profile keys are kept for config compatibility, not differentiation. `inherit` resolves every agent to the current session model.
8
+
9
+ | Agent | All profiles | `inherit` |
10
+ |-------|--------------|-----------|
11
+ | gsd-planner | opus | inherit |
12
+ | gsd-roadmapper | opus | inherit |
13
+ | gsd-phase-researcher | opus | inherit |
14
+ | gsd-project-researcher | opus | inherit |
15
+ | gsd-debugger | opus | inherit |
16
+ | gsd-executor | sonnet | inherit |
17
+ | gsd-research-synthesizer | sonnet | inherit |
18
+ | gsd-codebase-mapper | sonnet | inherit |
19
+ | gsd-verifier | sonnet | inherit |
20
+ | gsd-plan-checker | sonnet | inherit |
21
+ | gsd-integration-checker | sonnet | inherit |
22
+ | gsd-pattern-mapper | sonnet | inherit |
23
+
24
+ Agents not in the table (e.g. gsd-advisor-researcher) resolve to `sonnet` via the default fallback.
25
+
26
+ **Security reviewer special tier:** the execute-phase `security_review_gate` overrides the model per trigger — **Opus** when the review fires via a hard rule (`.env*`/Dockerfile/CI diff) or `workflow.security_review: "always"`, **Sonnet** when it fires via `auto` semantic judgment. Low-frequency, high-value path; the override is passed at spawn time and does not live in the profile table.
21
27
 
22
28
  ## Profile Philosophy
23
29
 
24
- **quality** - Maximum reasoning power
25
- - Opus for all decision-making agents
26
- - Sonnet for read-only verification
27
- - Use when: quota available, critical architecture work
30
+ **Unified allocation** (all named profiles)
31
+ - Opus for planning, roadmapping, research, and debugging — where reasoning quality has the highest downstream impact and the call frequency is low (once per phase)
32
+ - Sonnet for execution, verification, checking, and mapping — these follow explicit instructions produced by the Opus tier
33
+ - Research quality directly determines plan quality, so both researchers ride the Opus tier
28
34
 
29
- **balanced** (default) - Smart allocation
30
- - Opus only for planning (where architecture decisions happen)
31
- - Sonnet for execution and research (follows explicit instructions)
32
- - Sonnet for verification (needs reasoning, not just pattern matching)
33
- - Use when: normal development, good balance of quality and cost
35
+ **Executor escape hatch**
36
+ The executor stays on Sonnet by default (plans carry the reasoning; execution is implementation). If a phase's implementation itself demands top-tier reasoning, override just the executor without touching the profile:
34
37
 
35
- **budget** - Minimal Opus usage
36
- - Sonnet for anything that writes code
37
- - Haiku for research and verification
38
- - Use when: conserving quota, high-volume work, less critical phases
38
+ ```json
39
+ {
40
+ "model_overrides": {
41
+ "gsd-executor": "opus"
42
+ }
43
+ }
44
+ ```
39
45
 
40
- **adaptive** Role-based cost optimization
41
- - Opus for planning and debugging (where reasoning quality has highest impact)
42
- - Sonnet for execution, research, and verification (follows explicit instructions)
43
- - Haiku for mapping, checking, and auditing (high volume, structured output)
44
- - Use when: optimizing cost without sacrificing plan quality, solo development on paid API tiers
46
+ `model_overrides` takes precedence over the profile table (resolution order: override > profile > default). This turns the "small tasks run inline on Opus, big tasks spawn on Sonnet" inversion into a conscious, per-project choice.
45
47
 
46
48
  **inherit** - Follow the current session model
47
49
  - All agents resolve to `inherit`
@@ -115,7 +117,7 @@ Overrides take precedence over the profile. Valid values: `opus`, `sonnet`, `hai
115
117
 
116
118
  ## Switching Profiles
117
119
 
118
- Runtime: `/gsd-set-profile <profile>`
120
+ Runtime: `/gsd-settings` (model profile section)
119
121
 
120
122
  Per-project default: Set in `.planning/config.json`:
121
123
  ```json
@@ -132,11 +134,11 @@ Planning involves architecture decisions, goal decomposition, and task design. T
132
134
  **Why Sonnet for gsd-executor?**
133
135
  Executors follow explicit PLAN.md instructions. The plan already contains the reasoning; execution is implementation.
134
136
 
135
- **Why Sonnet (not Haiku) for verifiers in balanced?**
136
- Verification requires goal-backward reasoning - checking if code *delivers* what the phase promised, not just pattern matching. Sonnet handles this well; Haiku may miss subtle gaps.
137
+ **Why Opus for the researchers?**
138
+ Research quality directly determines plan quality, and each researcher runs at most once per phase a low-frequency, high-leverage path.
137
139
 
138
- **Why Haiku for gsd-codebase-mapper?**
139
- Read-only exploration and pattern extraction. No reasoning required, just structured output from file contents.
140
+ **Why Sonnet (not Haiku) for verifiers?**
141
+ Verification requires goal-backward reasoning - checking if code *delivers* what the phase promised, not just pattern matching. Sonnet handles this well; Haiku may miss subtle gaps.
140
142
 
141
143
  **Why `inherit` instead of passing `opus` directly?**
142
144
  Claude Code's `"opus"` alias maps to a specific model version. Organizations may block older opus versions while allowing newer ones. GSD returns `"inherit"` for opus-tier agents, causing them to use whatever opus version the user has configured in their session. This avoids version conflicts and silent fallbacks to Sonnet.
@@ -236,7 +236,6 @@ Generated from `CONFIG_DEFAULTS` (core.cjs) and `VALID_CONFIG_KEYS` (config.cjs)
236
236
  | `context_window` | number | `200000` | `200000`, `1000000` | Context window size; set `1000000` for 1M-context models |
237
237
  | `resolve_model_ids` | boolean\|string | `false` | `false`, `true`, `"omit"` | Map model aliases to full Claude IDs; `"omit"` returns empty string |
238
238
  | `context` | string\|null | `null` | `"dev"`, `"research"`, `"review"` | Execution context profile that adjusts agent behavior: `"dev"` for development tasks, `"research"` for investigation/exploration, `"review"` for code review workflows |
239
- | `review.models.<cli>` | string\|null | `null` | Any model ID string | Per-CLI model override for /gsd-review (e.g., `review.models.gemini`). Falls back to CLI default when null. |
240
239
 
241
240
  ### Workflow Fields
242
241
 
@@ -247,14 +246,12 @@ Set via `workflow.*` namespace in config.json (e.g., `"workflow": { "research":
247
246
  | `workflow.research` | boolean | `true` | `true`, `false` | Run research agent before planning |
248
247
  | `workflow.plan_check` | boolean | `true` | `true`, `false` | Run plan-checker agent to validate plans. _Alias:_ `plan_checker` is the flat-key form used in `CONFIG_DEFAULTS`; `workflow.plan_check` is the canonical namespaced form. |
249
248
  | `workflow.verifier` | boolean | `true` | `true`, `false` | Run verifier agent after execution |
250
- | `workflow.nyquist_validation` | boolean | `true` | `true`, `false` | Enable Nyquist-inspired validation gates |
249
+ | `workflow.nyquist_validation` | boolean | `false` | `true`, `false` | Legacy validation-gate switch. Feature removed; keep the key explicitly `false` — absent is treated as enabled by some readers |
251
250
  | `workflow.auto_prune_state` | boolean | `false` | `true`, `false` | Automatically prune old STATE.md entries on phase completion (keeps 3 most recent phases) |
252
251
  | `workflow.auto_advance` | boolean | `false` | `true`, `false` | Auto-advance to next phase after completion |
253
252
  | `workflow.node_repair` | boolean | `true` | `true`, `false` | Attempt automatic repair of failed plan nodes |
254
253
  | `workflow.node_repair_budget` | number | `2` | Any positive integer | Max repair retries per failed node |
255
- | `workflow.ai_integration_phase` | boolean | `true` | `true`, `false` | Run /gsd-ai-integration-phase before planning AI system phases |
256
- | `workflow.ui_phase` | boolean | `true` | `true`, `false` | Generate UI-SPEC.md for frontend phases |
257
- | `workflow.ui_safety_gate` | boolean | `true` | `true`, `false` | Require safety gate approval for UI changes |
254
+ | `workflow.ai_integration_phase` | boolean | `false` | `true`, `false` | Legacy AI-phase switch. Feature removed; key kept for config compatibility |
258
255
  | `workflow.text_mode` | boolean | `false` | `true`, `false` | Use plain-text numbered lists instead of AskUserQuestion menus |
259
256
  | `workflow.research_before_questions` | boolean | `false` | `true`, `false` | Run research before interactive questions in discuss phase |
260
257
  | `workflow.discuss_mode` | string | `"discuss"` | `"discuss"`, `"assumptions"` | Default mode for discuss-phase: `"discuss"` runs interactive questioning; `"assumptions"` analyzes codebase and surfaces assumptions instead |
@@ -265,9 +262,8 @@ Set via `workflow.*` namespace in config.json (e.g., `"workflow": { "research":
265
262
  | `workflow.code_review` | boolean | `true` | `true`, `false` | Enable built-in code review step in the ship workflow |
266
263
  | `workflow.code_review_depth` | string | `"standard"` | `"light"`, `"standard"`, `"deep"` | Depth level for code review analysis in the ship workflow |
267
264
  | `workflow._auto_chain_active` | boolean | `false` | `true`, `false` | Internal: tracks whether autonomous chaining is active |
268
- | `workflow.security_enforcement` | boolean | `true` | `true`, `false` | Enable threat-model-anchored security verification via `/gsd-secure-phase`. When `false`, security checks are skipped entirely |
269
- | `workflow.security_asvs_level` | number | `1` | `1`, `2`, `3` | OWASP ASVS verification level. Level 1 = opportunistic, Level 2 = standard, Level 3 = comprehensive |
270
- | `workflow.security_block_on` | string | `"high"` | `"high"`, `"medium"`, `"low"` | Minimum severity that blocks phase advancement |
265
+ | `workflow.security_enforcement` | boolean | `false` | `true`, `false` | Legacy threat-model-anchored security verification. Keep the key explicit absent is treated as enabled by some readers |
266
+ | `workflow.security_review` | string | `"auto"` | `"auto"`, `"always"`, `"off"` | Diff-scoped security review trigger: `auto` reviews when the diff touches security-relevant surface, `always` reviews every phase, `off` disables |
271
267
 
272
268
  ### Git Fields
273
269
 
@@ -293,11 +289,10 @@ These toggle external search integrations. Auto-detected at project creation whe
293
289
 
294
290
  ### Features Fields
295
291
 
296
- Set via `features.*` namespace (e.g., `"features": { "thinking_partner": true }`).
292
+ Set via `features.*` namespace (e.g., `"features": { "global_learnings": true }`).
297
293
 
298
294
  | Key | Type | Default | Allowed Values | Description |
299
295
  |-----|------|---------|----------------|-------------|
300
- | `features.thinking_partner` | boolean | `false` | `true`, `false` | Enable conditional extended thinking at workflow decision points (used by discuss-phase and plan-phase for architectural tradeoff analysis) |
301
296
  | `features.global_learnings` | boolean | `false` | `true`, `false` | Enable injection of global learnings from `~/.gsd/learnings/` into agent prompts |
302
297
 
303
298
  ### Hook Fields
@@ -409,7 +404,7 @@ Several config fields affect each other or trigger special behavior:
409
404
  "research": true,
410
405
  "plan_check": true,
411
406
  "verifier": true,
412
- "nyquist_validation": true,
407
+ "nyquist_validation": false,
413
408
  "use_worktrees": true,
414
409
  "discuss_mode": "discuss"
415
410
  },
@@ -441,7 +436,7 @@ Several config fields affect each other or trigger special behavior:
441
436
  "research": true,
442
437
  "plan_check": true,
443
438
  "verifier": true,
444
- "nyquist_validation": true,
439
+ "nyquist_validation": false,
445
440
  "subagent_timeout": 600000,
446
441
  "use_worktrees": true,
447
442
  "node_repair": true,
@@ -183,7 +183,7 @@ When a phase is re-verified (e.g., after gap closure):
183
183
 
184
184
  ### At Milestone Completion
185
185
 
186
- During `/gsd-audit-milestone`, overrides are surfaced in the audit report:
186
+ When closing a milestone, surface accumulated overrides for review:
187
187
 
188
188
  ```
189
189
  ### Verification Overrides ({count} across {phase_count} phases)
@@ -18,16 +18,14 @@ These files live directly at `.planning/` — not inside phase subdirectories.
18
18
  | `REQUIREMENTS.md` | `requirements.md` | `/gsd-new-milestone` | Functional requirements with traceability |
19
19
  | `MILESTONES.md` | `milestone.md` | `/gsd-complete-milestone` | Log of completed milestones with accomplishments |
20
20
  | `BACKLOG.md` | *(inline)* | `/gsd-add-backlog` | Pending ideas and deferred work |
21
- | `LEARNINGS.md` | *(inline)* | `/gsd-extract-learnings`, `/gsd-execute-phase` | Phase retrospective learnings for future plans |
22
- | `THREADS.md` | *(inline)* | `/gsd-thread` | Persistent discussion threads |
21
+ | `LEARNINGS.md` | *(inline)* | `/gsd-execute-phase` | Phase retrospective learnings for future plans |
23
22
  | `config.json` | `config.json` | `/gsd-new-project`, `/gsd-health --repair` | Project-specific GSD configuration |
24
- | `CLAUDE.md` | `claude-md.md` | `/gsd-profile` | Auto-assembled Claude Code context file |
23
+ | `CLAUDE.md` | `claude-md.md` | `/gsd-new-project` (generate-claude-md) | Auto-assembled Claude Code context file |
25
24
 
26
25
  ### Version-stamped artifacts (pattern: `vX.Y-*.md`)
27
26
 
28
27
  | Pattern | Produced by | Purpose |
29
28
  |---------|-------------|---------|
30
- | `vX.Y-MILESTONE-AUDIT.md` | `/gsd-audit-milestone` | Milestone audit report before archiving |
31
29
 
32
30
  These files are archived to `.planning/milestones/` by `/gsd-complete-milestone`. Finding them at the `.planning/` root after completion indicates the archive step was skipped.
33
31
 
@@ -43,14 +41,9 @@ These files live inside a phase directory. They are NOT checked by W019 (which o
43
41
  | `NN-MM-SUMMARY.md` | `summary.md` | `/gsd-execute-phase` | Post-execution summary with learnings |
44
42
  | `NN-CONTEXT.md` | `context.md` | `/gsd-discuss-phase` | Scoped discussion decisions for the phase |
45
43
  | `NN-RESEARCH.md` | `research.md` | `/gsd-research-phase`, `/gsd-plan-phase` | Technical research for the phase |
46
- | `NN-VALIDATION.md` | `VALIDATION.md` | `/gsd-research-phase` (Nyquist) | Validation architecture (Nyquist method) |
47
44
  | `NN-UAT.md` | `UAT.md` | `/gsd-validate-phase` | User acceptance test results |
48
45
  | `NN-PATTERNS.md` | *(inline)* | `/gsd-plan-phase` (pattern mapper) | Analog file mapping for the phase |
49
- | `NN-UI-SPEC.md` | `UI-SPEC.md` | `/gsd-ui-phase` | UI design contract |
50
- | `NN-SECURITY.md` | `SECURITY.md` | `/gsd-secure-phase` | Security threat model |
51
- | `NN-AI-SPEC.md` | `AI-SPEC.md` | `/gsd-ai-integration-phase` | AI integration spec with eval strategy |
52
46
  | `NN-DEBUG.md` | `DEBUG.md` | `/gsd-debug` | Debug session log |
53
- | `NN-REVIEWS.md` | *(inline)* | `/gsd-review` | Cross-AI review feedback |
54
47
 
55
48
  ---
56
49
 
@@ -4,7 +4,6 @@ Template for project-root `CLAUDE.md` — auto-generated by `gsd-tools generate-
4
4
 
5
5
  Contains 7 marker-bounded sections. Each section is independently updatable.
6
6
  The `generate-claude-md` subcommand manages 6 sections (project, stack, conventions, architecture, skills, workflow enforcement).
7
- The profile section is managed exclusively by `generate-claude-profile`.
8
7
 
9
8
  ---
10
9
 
@@ -104,19 +103,6 @@ Do not make direct repo edits outside a GSD workflow unless the user explicitly
104
103
  <!-- GSD:workflow-end -->
105
104
  ```
106
105
 
107
- ### Profile Section (Placeholder Only)
108
- ```
109
- <!-- GSD:profile-start -->
110
- ## Developer Profile
111
-
112
- > Profile not yet configured. Run `/gsd-profile-user` to generate your developer profile.
113
- > This section is managed by `generate-claude-profile` — do not edit manually.
114
- <!-- GSD:profile-end -->
115
- ```
116
-
117
- **Note:** This section is NOT managed by `generate-claude-md`. It is managed exclusively
118
- by `generate-claude-profile`. The placeholder above is only used when creating a new
119
- CLAUDE.md file and no profile section exists yet.
120
106
 
121
107
  ---
122
108