gsd-pi 2.60.0-dev.2580e65 → 2.60.0-dev.d9052f5

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 (196) hide show
  1. package/dist/resources/extensions/ask-user-questions.js +4 -7
  2. package/dist/resources/extensions/gsd/auto/phases.js +7 -15
  3. package/dist/resources/extensions/gsd/auto-dashboard.js +8 -21
  4. package/dist/resources/extensions/gsd/auto-dispatch.js +3 -6
  5. package/dist/resources/extensions/gsd/auto-model-selection.js +9 -58
  6. package/dist/resources/extensions/gsd/auto-post-unit.js +2 -3
  7. package/dist/resources/extensions/gsd/auto-prompts.js +20 -36
  8. package/dist/resources/extensions/gsd/auto-recovery.js +18 -37
  9. package/dist/resources/extensions/gsd/auto-start.js +5 -9
  10. package/dist/resources/extensions/gsd/auto-timers.js +5 -11
  11. package/dist/resources/extensions/gsd/auto-unit-closeout.js +3 -5
  12. package/dist/resources/extensions/gsd/auto-verification.js +2 -3
  13. package/dist/resources/extensions/gsd/auto-worktree.js +55 -120
  14. package/dist/resources/extensions/gsd/auto.js +17 -39
  15. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +3 -6
  16. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +2 -2
  17. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +10 -4
  18. package/dist/resources/extensions/gsd/bootstrap/journal-tools.js +1 -2
  19. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +0 -7
  20. package/dist/resources/extensions/gsd/bootstrap/system-context.js +10 -11
  21. package/dist/resources/extensions/gsd/commands/catalog.js +0 -2
  22. package/dist/resources/extensions/gsd/commands-codebase.js +21 -48
  23. package/dist/resources/extensions/gsd/commands-inspect.js +1 -2
  24. package/dist/resources/extensions/gsd/commands-maintenance.js +19 -32
  25. package/dist/resources/extensions/gsd/complexity-classifier.js +4 -8
  26. package/dist/resources/extensions/gsd/custom-verification.js +2 -3
  27. package/dist/resources/extensions/gsd/gsd-db.js +13 -33
  28. package/dist/resources/extensions/gsd/guided-flow.js +9 -19
  29. package/dist/resources/extensions/gsd/init-wizard.js +0 -12
  30. package/dist/resources/extensions/gsd/markdown-renderer.js +9 -11
  31. package/dist/resources/extensions/gsd/md-importer.js +4 -5
  32. package/dist/resources/extensions/gsd/milestone-actions.js +2 -3
  33. package/dist/resources/extensions/gsd/milestone-ids.js +1 -2
  34. package/dist/resources/extensions/gsd/model-router.js +121 -156
  35. package/dist/resources/extensions/gsd/parallel-merge.js +3 -5
  36. package/dist/resources/extensions/gsd/parallel-orchestrator.js +14 -26
  37. package/dist/resources/extensions/gsd/preferences-types.js +0 -1
  38. package/dist/resources/extensions/gsd/preferences-validation.js +0 -45
  39. package/dist/resources/extensions/gsd/preferences.js +3 -15
  40. package/dist/resources/extensions/gsd/prompt-loader.js +2 -3
  41. package/dist/resources/extensions/gsd/prompts/rethink.md +1 -1
  42. package/dist/resources/extensions/gsd/rule-registry.js +6 -7
  43. package/dist/resources/extensions/gsd/safe-fs.js +8 -6
  44. package/dist/resources/extensions/gsd/tools/complete-milestone.js +2 -3
  45. package/dist/resources/extensions/gsd/tools/complete-slice.js +2 -3
  46. package/dist/resources/extensions/gsd/tools/complete-task.js +2 -3
  47. package/dist/resources/extensions/gsd/tools/plan-milestone.js +2 -3
  48. package/dist/resources/extensions/gsd/tools/plan-slice.js +2 -3
  49. package/dist/resources/extensions/gsd/tools/plan-task.js +1 -2
  50. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +4 -4
  51. package/dist/resources/extensions/gsd/tools/reopen-slice.js +1 -2
  52. package/dist/resources/extensions/gsd/tools/reopen-task.js +1 -2
  53. package/dist/resources/extensions/gsd/tools/replan-slice.js +1 -2
  54. package/dist/resources/extensions/gsd/tools/validate-milestone.js +1 -2
  55. package/dist/resources/extensions/gsd/triage-resolution.js +4 -11
  56. package/dist/resources/extensions/gsd/workflow-events.js +1 -2
  57. package/dist/resources/extensions/gsd/workflow-logger.js +4 -37
  58. package/dist/resources/extensions/gsd/workflow-migration.js +12 -14
  59. package/dist/resources/extensions/gsd/workflow-projections.js +2 -2
  60. package/dist/resources/extensions/gsd/workflow-reconcile.js +2 -2
  61. package/dist/resources/extensions/gsd/worktree-manager.js +14 -26
  62. package/dist/resources/extensions/shared/interview-ui.js +1 -3
  63. package/dist/web/standalone/.next/BUILD_ID +1 -1
  64. package/dist/web/standalone/.next/app-path-routes-manifest.json +19 -19
  65. package/dist/web/standalone/.next/build-manifest.json +2 -2
  66. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  67. package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
  68. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  69. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  70. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  71. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  72. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  73. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  74. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  75. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  76. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  77. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  78. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  79. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  80. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  81. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  82. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  83. package/dist/web/standalone/.next/server/app/index.html +1 -1
  84. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  85. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  86. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  87. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  88. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  89. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  90. package/dist/web/standalone/.next/server/app-paths-manifest.json +19 -19
  91. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  92. package/dist/web/standalone/.next/server/pages/500.html +2 -2
  93. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  94. package/package.json +1 -1
  95. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  96. package/packages/pi-coding-agent/dist/core/extensions/loader.js +0 -5
  97. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  98. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +1 -2
  99. package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
  100. package/packages/pi-coding-agent/dist/core/extensions/runner.js +0 -16
  101. package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
  102. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +0 -26
  103. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  104. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  105. package/packages/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -1
  106. package/packages/pi-coding-agent/dist/core/lsp/config.js +1 -6
  107. package/packages/pi-coding-agent/dist/core/lsp/config.js.map +1 -1
  108. package/packages/pi-coding-agent/dist/core/lsp/defaults.json +2 -2
  109. package/packages/pi-coding-agent/src/core/extensions/loader.ts +0 -6
  110. package/packages/pi-coding-agent/src/core/extensions/runner.ts +0 -19
  111. package/packages/pi-coding-agent/src/core/extensions/types.ts +0 -26
  112. package/packages/pi-coding-agent/src/core/lsp/config.ts +1 -7
  113. package/packages/pi-coding-agent/src/core/lsp/defaults.json +2 -2
  114. package/src/resources/extensions/ask-user-questions.ts +3 -7
  115. package/src/resources/extensions/gsd/auto/phases.ts +7 -17
  116. package/src/resources/extensions/gsd/auto-dashboard.ts +8 -22
  117. package/src/resources/extensions/gsd/auto-dispatch.ts +3 -7
  118. package/src/resources/extensions/gsd/auto-model-selection.ts +15 -77
  119. package/src/resources/extensions/gsd/auto-post-unit.ts +4 -4
  120. package/src/resources/extensions/gsd/auto-prompts.ts +20 -37
  121. package/src/resources/extensions/gsd/auto-recovery.ts +18 -38
  122. package/src/resources/extensions/gsd/auto-start.ts +9 -10
  123. package/src/resources/extensions/gsd/auto-timers.ts +5 -12
  124. package/src/resources/extensions/gsd/auto-unit-closeout.ts +2 -6
  125. package/src/resources/extensions/gsd/auto-verification.ts +6 -3
  126. package/src/resources/extensions/gsd/auto-worktree.ts +55 -121
  127. package/src/resources/extensions/gsd/auto.ts +17 -40
  128. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +3 -4
  129. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +2 -2
  130. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +16 -4
  131. package/src/resources/extensions/gsd/bootstrap/journal-tools.ts +1 -2
  132. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +0 -8
  133. package/src/resources/extensions/gsd/bootstrap/system-context.ts +10 -11
  134. package/src/resources/extensions/gsd/commands/catalog.ts +0 -2
  135. package/src/resources/extensions/gsd/commands-codebase.ts +20 -52
  136. package/src/resources/extensions/gsd/commands-inspect.ts +1 -2
  137. package/src/resources/extensions/gsd/commands-maintenance.ts +19 -28
  138. package/src/resources/extensions/gsd/complexity-classifier.ts +4 -9
  139. package/src/resources/extensions/gsd/custom-verification.ts +2 -3
  140. package/src/resources/extensions/gsd/gsd-db.ts +14 -12
  141. package/src/resources/extensions/gsd/guided-flow.ts +8 -9
  142. package/src/resources/extensions/gsd/init-wizard.ts +0 -12
  143. package/src/resources/extensions/gsd/markdown-renderer.ts +17 -11
  144. package/src/resources/extensions/gsd/md-importer.ts +4 -5
  145. package/src/resources/extensions/gsd/milestone-actions.ts +2 -3
  146. package/src/resources/extensions/gsd/milestone-ids.ts +1 -2
  147. package/src/resources/extensions/gsd/model-router.ts +173 -199
  148. package/src/resources/extensions/gsd/parallel-merge.ts +3 -5
  149. package/src/resources/extensions/gsd/parallel-orchestrator.ts +14 -18
  150. package/src/resources/extensions/gsd/preferences-types.ts +0 -13
  151. package/src/resources/extensions/gsd/preferences-validation.ts +0 -45
  152. package/src/resources/extensions/gsd/preferences.ts +3 -16
  153. package/src/resources/extensions/gsd/prompt-loader.ts +2 -3
  154. package/src/resources/extensions/gsd/prompts/rethink.md +1 -1
  155. package/src/resources/extensions/gsd/rule-registry.ts +6 -7
  156. package/src/resources/extensions/gsd/safe-fs.ts +5 -6
  157. package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +0 -63
  158. package/src/resources/extensions/gsd/tests/complexity-classifier.test.ts +2 -27
  159. package/src/resources/extensions/gsd/tests/db-path-worktree-symlink.test.ts +4 -4
  160. package/src/resources/extensions/gsd/tests/model-router.test.ts +3 -403
  161. package/src/resources/extensions/gsd/tests/preferences.test.ts +0 -62
  162. package/src/resources/extensions/gsd/tests/remote-questions.test.ts +0 -21
  163. package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +6 -6
  164. package/src/resources/extensions/gsd/tools/complete-milestone.ts +6 -3
  165. package/src/resources/extensions/gsd/tools/complete-slice.ts +6 -3
  166. package/src/resources/extensions/gsd/tools/complete-task.ts +6 -3
  167. package/src/resources/extensions/gsd/tools/plan-milestone.ts +6 -3
  168. package/src/resources/extensions/gsd/tools/plan-slice.ts +6 -3
  169. package/src/resources/extensions/gsd/tools/plan-task.ts +3 -2
  170. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +6 -4
  171. package/src/resources/extensions/gsd/tools/reopen-slice.ts +3 -2
  172. package/src/resources/extensions/gsd/tools/reopen-task.ts +3 -2
  173. package/src/resources/extensions/gsd/tools/replan-slice.ts +3 -2
  174. package/src/resources/extensions/gsd/tools/validate-milestone.ts +3 -2
  175. package/src/resources/extensions/gsd/triage-resolution.ts +4 -11
  176. package/src/resources/extensions/gsd/types.ts +0 -1
  177. package/src/resources/extensions/gsd/workflow-events.ts +1 -2
  178. package/src/resources/extensions/gsd/workflow-logger.ts +5 -52
  179. package/src/resources/extensions/gsd/workflow-migration.ts +12 -14
  180. package/src/resources/extensions/gsd/workflow-projections.ts +2 -2
  181. package/src/resources/extensions/gsd/workflow-reconcile.ts +2 -2
  182. package/src/resources/extensions/gsd/worktree-manager.ts +14 -16
  183. package/src/resources/extensions/shared/interview-ui.ts +1 -3
  184. package/packages/pi-coding-agent/dist/core/lsp/lsp-legacy-alias.test.d.ts +0 -2
  185. package/packages/pi-coding-agent/dist/core/lsp/lsp-legacy-alias.test.d.ts.map +0 -1
  186. package/packages/pi-coding-agent/dist/core/lsp/lsp-legacy-alias.test.js +0 -47
  187. package/packages/pi-coding-agent/dist/core/lsp/lsp-legacy-alias.test.js.map +0 -1
  188. package/packages/pi-coding-agent/src/core/lsp/lsp-legacy-alias.test.ts +0 -70
  189. package/src/resources/extensions/gsd/tests/capability-router.test.ts +0 -347
  190. package/src/resources/extensions/gsd/tests/integration/state-machine-edge-cases.test.ts +0 -1188
  191. package/src/resources/extensions/gsd/tests/integration/state-machine-runtime-failures.test.ts +0 -841
  192. package/src/resources/extensions/gsd/tests/silent-catch-diagnostics.test.ts +0 -284
  193. package/src/resources/extensions/gsd/tests/workflow-logger-audit.test.ts +0 -120
  194. package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +0 -144
  195. /package/dist/web/standalone/.next/static/{ogyMN7M-3bGGuRY08L5HR → JVkoVYumy0cDhOQISEYdG}/_buildManifest.js +0 -0
  196. /package/dist/web/standalone/.next/static/{ogyMN7M-3bGGuRY08L5HR → JVkoVYumy0cDhOQISEYdG}/_ssgManifest.js +0 -0
@@ -16,7 +16,6 @@ export interface ClassificationResult {
16
16
  tier: ComplexityTier;
17
17
  reason: string;
18
18
  downgraded: boolean; // true if budget pressure lowered the tier
19
- taskMetadata?: TaskMetadata;
20
19
  }
21
20
 
22
21
  export interface TaskMetadata {
@@ -72,20 +71,17 @@ export function classifyUnitComplexity(
72
71
  ): ClassificationResult {
73
72
  // Hook units default to light
74
73
  if (unitType.startsWith("hook/")) {
75
- const result: ClassificationResult = { tier: "light", reason: "hook unit", downgraded: false, taskMetadata: undefined };
74
+ const result: ClassificationResult = { tier: "light", reason: "hook unit", downgraded: false };
76
75
  return applyBudgetPressure(result, budgetPct);
77
76
  }
78
77
 
79
78
  // Start with the default tier for this unit type
80
79
  let tier = UNIT_TYPE_TIERS[unitType] ?? "standard";
81
80
  let reason = `unit type: ${unitType}`;
82
- let taskMeta: TaskMetadata | undefined;
83
81
 
84
82
  // For execute-task, analyze task metadata for complexity signals
85
83
  if (unitType === "execute-task") {
86
- // Extract metadata once and reuse throughout to avoid double-extraction
87
- taskMeta = metadata ?? extractTaskMetadata(unitId, basePath);
88
- const taskAnalysis = analyzeTaskComplexity(unitId, basePath, taskMeta);
84
+ const taskAnalysis = analyzeTaskComplexity(unitId, basePath, metadata);
89
85
  tier = taskAnalysis.tier;
90
86
  reason = taskAnalysis.reason;
91
87
  }
@@ -100,15 +96,14 @@ export function classifyUnitComplexity(
100
96
  }
101
97
 
102
98
  // Adaptive learning: check if history suggests bumping the tier
103
- // Use already-extracted taskMeta.tags if available to avoid double-extraction
104
- const tags = taskMeta?.tags ?? metadata?.tags;
99
+ const tags = metadata?.tags ?? extractTaskMetadata(unitId, basePath).tags;
105
100
  const adaptiveAdjustment = getAdaptiveTierAdjustment(unitType, tier, tags);
106
101
  if (adaptiveAdjustment && tierOrdinal(adaptiveAdjustment) > tierOrdinal(tier)) {
107
102
  reason = `${reason} (adaptive: high failure rate at ${tier})`;
108
103
  tier = adaptiveAdjustment;
109
104
  }
110
105
 
111
- const result: ClassificationResult = { tier, reason, downgraded: false, taskMetadata: taskMeta };
106
+ const result: ClassificationResult = { tier, reason, downgraded: false };
112
107
  return applyBudgetPressure(result, budgetPct);
113
108
  }
114
109
 
@@ -17,7 +17,6 @@
17
17
  * - The frozen DEFINITION.yaml on disk is the single source of truth for step policies.
18
18
  */
19
19
 
20
- import { logWarning } from "./workflow-logger.js";
21
20
  import { readFileSync, existsSync, statSync } from "node:fs";
22
21
  import { join, resolve, sep } from "node:path";
23
22
  import { spawnSync } from "node:child_process";
@@ -131,8 +130,8 @@ function handleContentHeuristic(
131
130
  if (!new RegExp(verify.pattern).test(content)) {
132
131
  return "pause";
133
132
  }
134
- } catch (e) {
135
- logWarning("engine", `content-heuristic regex failed: ${(e as Error).message}`);
133
+ } catch {
134
+ // Invalid regex at runtime — treat as verification failure
136
135
  return "pause";
137
136
  }
138
137
  }
@@ -10,7 +10,7 @@ import { existsSync, copyFileSync, mkdirSync, realpathSync } from "node:fs";
10
10
  import { dirname } from "node:path";
11
11
  import type { Decision, Requirement, GateRow, GateId, GateScope, GateStatus, GateVerdict } from "./types.js";
12
12
  import { GSDError, GSD_STALE_STATE } from "./errors.js";
13
- import { logError, logWarning } from "./workflow-logger.js";
13
+ import { logError } from "./workflow-logger.js";
14
14
 
15
15
  const _require = createRequire(import.meta.url);
16
16
 
@@ -787,11 +787,11 @@ export function openDatabase(path: string): boolean {
787
787
  initSchema(adapter, fileBacked);
788
788
  process.stderr.write("gsd-db: recovered corrupt database via VACUUM\n");
789
789
  } catch (retryErr) {
790
- try { adapter.close(); } catch (e) { logWarning("db", `close after VACUUM failed: ${(e as Error).message}`); }
790
+ try { adapter.close(); } catch { /* swallow */ }
791
791
  throw retryErr;
792
792
  }
793
793
  } else {
794
- try { adapter.close(); } catch (e) { logWarning("db", `close after VACUUM failed: ${(e as Error).message}`); }
794
+ try { adapter.close(); } catch { /* swallow */ }
795
795
  throw err;
796
796
  }
797
797
  }
@@ -802,7 +802,7 @@ export function openDatabase(path: string): boolean {
802
802
 
803
803
  if (!_exitHandlerRegistered) {
804
804
  _exitHandlerRegistered = true;
805
- process.on("exit", () => { try { closeDatabase(); } catch (e) { logWarning("db", `exit handler close failed: ${(e as Error).message}`); } });
805
+ process.on("exit", () => { try { closeDatabase(); } catch {} });
806
806
  }
807
807
 
808
808
  return true;
@@ -812,14 +812,16 @@ export function closeDatabase(): void {
812
812
  if (currentDb) {
813
813
  try {
814
814
  currentDb.exec('PRAGMA wal_checkpoint(TRUNCATE)');
815
- } catch (e) { logWarning("db", `WAL checkpoint failed: ${(e as Error).message}`); }
815
+ } catch { /* non-fatal best effort before close */ }
816
816
  try {
817
817
  // Incremental vacuum to reclaim space without blocking
818
818
  currentDb.exec('PRAGMA incremental_vacuum(64)');
819
- } catch (e) { logWarning("db", `incremental vacuum failed: ${(e as Error).message}`); }
819
+ } catch { /* non-fatal */ }
820
820
  try {
821
821
  currentDb.close();
822
- } catch (e) { logWarning("db", `database close failed: ${(e as Error).message}`); }
822
+ } catch {
823
+ // swallow close errors
824
+ }
823
825
  currentDb = null;
824
826
  currentPath = null;
825
827
  currentPid = 0;
@@ -831,7 +833,7 @@ export function vacuumDatabase(): void {
831
833
  if (!currentDb) return;
832
834
  try {
833
835
  currentDb.exec('VACUUM');
834
- } catch (e) { logWarning("db", `VACUUM failed: ${(e as Error).message}`); }
836
+ } catch { /* non-fatal */ }
835
837
  }
836
838
 
837
839
  let _txDepth = 0;
@@ -1036,7 +1038,7 @@ export function upsertRequirement(r: Requirement): void {
1036
1038
 
1037
1039
  export function clearArtifacts(): void {
1038
1040
  if (!currentDb) return;
1039
- try { currentDb.exec("DELETE FROM artifacts"); } catch (e) { logWarning("db", `clearArtifacts failed: ${(e as Error).message}`); }
1041
+ try { currentDb.exec("DELETE FROM artifacts"); } catch { /* cache clear is best effort */ }
1040
1042
  }
1041
1043
 
1042
1044
  export function insertArtifact(a: {
@@ -1799,7 +1801,7 @@ export function reconcileWorktreeDb(
1799
1801
  // ATTACHing a WAL-mode DB to itself corrupts the WAL (#2823).
1800
1802
  try {
1801
1803
  if (realpathSync(mainDbPath) === realpathSync(worktreeDbPath)) return zero;
1802
- } catch (e) { logWarning("db", `realpathSync failed: ${(e as Error).message}`); }
1804
+ } catch { /* path resolution failed fall through to existing checks */ }
1803
1805
  // Sanitize path: reject any characters that could break ATTACH syntax.
1804
1806
  // ATTACH DATABASE doesn't support parameterized paths in all providers,
1805
1807
  // so we use strict allowlist validation instead.
@@ -1936,12 +1938,12 @@ export function reconcileWorktreeDb(
1936
1938
 
1937
1939
  adapter.exec("COMMIT");
1938
1940
  } catch (txErr) {
1939
- try { adapter.exec("ROLLBACK"); } catch (e) { logWarning("db", `rollback failed: ${(e as Error).message}`); }
1941
+ try { adapter.exec("ROLLBACK"); } catch { /* best effort */ }
1940
1942
  throw txErr;
1941
1943
  }
1942
1944
  return { ...merged, conflicts };
1943
1945
  } finally {
1944
- try { adapter.exec("DETACH DATABASE wt"); } catch (e) { logWarning("db", `detach worktree DB failed: ${(e as Error).message}`); }
1946
+ try { adapter.exec("DETACH DATABASE wt"); } catch { /* best effort */ }
1945
1947
  }
1946
1948
  } catch (err) {
1947
1949
  logError("db", "worktree DB reconciliation failed", { error: (err as Error).message });
@@ -52,7 +52,6 @@ export {
52
52
  buildExistingMilestonesContext,
53
53
  } from "./guided-flow-queue.js";
54
54
  import { getErrorMessage } from "./error-utils.js";
55
- import { logWarning } from "./workflow-logger.js";
56
55
 
57
56
  // ─── ID Generation with Reservation ─────────────────────────────────────────
58
57
 
@@ -181,7 +180,7 @@ export function checkAutoStartAfterDiscuss(): boolean {
181
180
  );
182
181
  }
183
182
  }
184
- } catch (e) { logWarning("guided", `PROJECT.md parsing failed: ${(e as Error).message}`); }
183
+ } catch { /* non-fatal — PROJECT.md parsing failure shouldn't block auto-start */ }
185
184
  }
186
185
 
187
186
  // Gate 4: Discussion manifest process verification (multi-milestone only)
@@ -213,7 +212,7 @@ export function checkAutoStartAfterDiscuss(): boolean {
213
212
  );
214
213
  }
215
214
  }
216
- } catch (e) { logWarning("guided", `discussion manifest verification failed: ${(e as Error).message}`); }
215
+ } catch { /* malformed manifest warn but don't block */ }
217
216
  }
218
217
 
219
218
  // Draft promotion cleanup: if a CONTEXT-DRAFT.md exists alongside the new
@@ -221,16 +220,16 @@ export function checkAutoStartAfterDiscuss(): boolean {
221
220
  try {
222
221
  const draftFile = resolveMilestoneFile(basePath, milestoneId, "CONTEXT-DRAFT");
223
222
  if (draftFile) unlinkSync(draftFile);
224
- } catch (e) { logWarning("guided", `CONTEXT-DRAFT.md unlink failed: ${(e as Error).message}`); }
223
+ } catch { /* non-fatal stale draft doesn't break anything, CONTEXT.md wins */ }
225
224
 
226
225
  // Cleanup: remove discussion manifest after auto-start (only needed during discussion)
227
- try { unlinkSync(manifestPath); } catch (e) { logWarning("guided", `manifest unlink failed: ${(e as Error).message}`); }
226
+ try { unlinkSync(manifestPath); } catch { /* may not exist for single-milestone */ }
228
227
 
229
228
  pendingAutoStartMap.delete(basePath);
230
229
  ctx.ui.notify(`Milestone ${milestoneId} ready.`, "info");
231
230
  startAuto(ctx, pi, basePath, false, { step }).catch((err) => {
232
231
  ctx.ui.notify(`Auto-start failed: ${getErrorMessage(err)}`, "error");
233
- logWarning("guided", `auto start error: ${getErrorMessage(err)}`);
232
+ if (process.env.GSD_DEBUG) console.error('[gsd] auto start error:', err);
234
233
  debugLog("auto-start-failed", { error: getErrorMessage(err) });
235
234
  });
236
235
  return true;
@@ -896,8 +895,8 @@ function selfHealRuntimeRecords(basePath: string, ctx: ExtensionContext): { clea
896
895
  ctx.ui.notify(`Self-heal: cleared ${cleared} stale runtime record(s) from a previous session.`, "info");
897
896
  }
898
897
  return { cleared };
899
- } catch (e) {
900
- logWarning("guided", `self-heal stale runtime records failed: ${(e as Error).message}`);
898
+ } catch {
899
+ // Non-fatal — self-heal should never block the wizard
901
900
  return { cleared: 0 };
902
901
  }
903
902
  }
@@ -1143,7 +1142,7 @@ export async function showSmartEntry(
1143
1142
  );
1144
1143
  return;
1145
1144
  }
1146
- } catch (e) { logWarning("guided", `directory read failed: ${(e as Error).message}`); }
1145
+ } catch { /* directory exists but unreadable fall through to normal flow */ }
1147
1146
  }
1148
1147
  }
1149
1148
 
@@ -16,7 +16,6 @@ import { gsdRoot } from "./paths.js";
16
16
  import { assertSafeDirectory } from "./validate-directory.js";
17
17
  import type { ProjectDetection, ProjectSignals } from "./detection.js";
18
18
  import { runSkillInstallStep } from "./skill-catalog.js";
19
- import { generateCodebaseMap, writeCodebaseMap } from "./codebase-generator.js";
20
19
 
21
20
  // ─── Types ──────────────────────────────────────────────────────────────────────
22
21
 
@@ -239,17 +238,6 @@ export async function showProjectInit(
239
238
  ensureGitignore(basePath);
240
239
  untrackRuntimeFiles(basePath);
241
240
 
242
- // Auto-generate codebase map for instant agent orientation
243
- try {
244
- const result = generateCodebaseMap(basePath);
245
- if (result.fileCount > 0) {
246
- writeCodebaseMap(basePath, result.content);
247
- ctx.ui.notify(`Codebase map generated: ${result.fileCount} files`, "info");
248
- }
249
- } catch {
250
- // Non-fatal — codebase map generation failure should never block project init
251
- }
252
-
253
241
  ctx.ui.notify("GSD initialized. Starting your first milestone...", "info");
254
242
 
255
243
  return { completed: true, bootstrapped: true };
@@ -9,7 +9,6 @@
9
9
  // parseRoadmap(), parsePlan(), parseSummary() in files.ts.
10
10
 
11
11
  import { readFileSync, existsSync, mkdirSync } from "node:fs";
12
- import { logWarning } from "./workflow-logger.js";
13
12
  import { isClosedStatus } from "./status-guards.js";
14
13
  import { join, relative } from "node:path";
15
14
  import { createRequire } from "node:module";
@@ -94,7 +93,9 @@ function loadArtifactContent(
94
93
  try {
95
94
  content = readFileSync(absPath, "utf-8");
96
95
  } catch {
97
- logWarning("renderer", `cannot read file from disk: ${absPath}`);
96
+ process.stderr.write(
97
+ `markdown-renderer: cannot read file from disk: ${absPath}\n`,
98
+ );
98
99
  return null;
99
100
  }
100
101
 
@@ -110,7 +111,9 @@ function loadArtifactContent(
110
111
  });
111
112
  } catch {
112
113
  // Non-fatal: we have the content, DB storage is best-effort
113
- logWarning("renderer", `failed to store disk fallback in DB: ${artifactPath}`);
114
+ process.stderr.write(
115
+ `markdown-renderer: warning — failed to store disk fallback in DB: ${artifactPath}\n`,
116
+ );
114
117
  }
115
118
 
116
119
  return content;
@@ -143,7 +146,9 @@ async function writeAndStore(
143
146
  });
144
147
  } catch {
145
148
  // Non-fatal: file is on disk, DB is best-effort
146
- logWarning("renderer", `failed to update artifact in DB: ${artifactPath}`);
149
+ process.stderr.write(
150
+ `markdown-renderer: warning — failed to update artifact in DB: ${artifactPath}\n`,
151
+ );
147
152
  }
148
153
 
149
154
  invalidateCaches();
@@ -801,8 +806,7 @@ export function detectStaleRenders(basePath: string): StaleEntry[] {
801
806
  try {
802
807
  const m = _require("./parsers-legacy.ts");
803
808
  parseRoadmap = m.parseRoadmap; parsePlan = m.parsePlan;
804
- } catch (e) {
805
- logWarning("renderer", `parsers-legacy.ts require failed, falling back to .js: ${(e as Error).message}`);
809
+ } catch {
806
810
  const m = _require("./parsers-legacy.js");
807
811
  parseRoadmap = m.parseRoadmap; parsePlan = m.parsePlan;
808
812
  }
@@ -837,8 +841,8 @@ export function detectStaleRenders(basePath: string): StaleEntry[] {
837
841
  });
838
842
  }
839
843
  }
840
- } catch (e) {
841
- logWarning("renderer", `roadmap parse failed: ${(e as Error).message}`);
844
+ } catch {
845
+ // Can't parse roadmap skip silently
842
846
  }
843
847
  }
844
848
 
@@ -870,8 +874,8 @@ export function detectStaleRenders(basePath: string): StaleEntry[] {
870
874
  });
871
875
  }
872
876
  }
873
- } catch (e) {
874
- logWarning("renderer", `plan parse failed: ${(e as Error).message}`);
877
+ } catch {
878
+ // Can't parse plan skip silently
875
879
  }
876
880
  }
877
881
 
@@ -1021,7 +1025,9 @@ export async function repairStaleRenders(basePath: string): Promise<number> {
1021
1025
  }
1022
1026
  }
1023
1027
  } catch (err) {
1024
- logWarning("renderer", `repair failed for ${entry.path}: ${(err as Error).message}`);
1028
+ process.stderr.write(
1029
+ `markdown-renderer: repair failed for ${entry.path}: ${(err as Error).message}\n`,
1030
+ );
1025
1031
  }
1026
1032
  }
1027
1033
 
@@ -31,7 +31,6 @@ import {
31
31
  import { findMilestoneIds } from './guided-flow.js';
32
32
  import { parseRoadmap, parsePlan } from './parsers-legacy.js';
33
33
  import { parseContextDependsOn } from './files.js';
34
- import { logWarning } from './workflow-logger.js';
35
34
 
36
35
  // ─── DECISIONS.md Parser ───────────────────────────────────────────────────
37
36
 
@@ -713,25 +712,25 @@ export function migrateFromMarkdown(gsdDir: string): {
713
712
  try {
714
713
  decisions = importDecisions(gsdDir);
715
714
  } catch (err) {
716
- logWarning("migration", `skipping decisions import: ${(err as Error).message}`);
715
+ process.stderr.write(`gsd-migrate: skipping decisions import: ${(err as Error).message}\n`);
717
716
  }
718
717
 
719
718
  try {
720
719
  requirements = importRequirements(gsdDir);
721
720
  } catch (err) {
722
- logWarning("migration", `skipping requirements import: ${(err as Error).message}`);
721
+ process.stderr.write(`gsd-migrate: skipping requirements import: ${(err as Error).message}\n`);
723
722
  }
724
723
 
725
724
  try {
726
725
  artifacts = importHierarchyArtifacts(gsdDir);
727
726
  } catch (err) {
728
- logWarning("migration", `skipping artifacts import: ${(err as Error).message}`);
727
+ process.stderr.write(`gsd-migrate: skipping artifacts import: ${(err as Error).message}\n`);
729
728
  }
730
729
 
731
730
  try {
732
731
  hierarchy = migrateHierarchyToDb(gsdDir);
733
732
  } catch (err) {
734
- logWarning("migration", `skipping hierarchy migration: ${(err as Error).message}`);
733
+ process.stderr.write(`gsd-migrate: skipping hierarchy migration: ${(err as Error).message}\n`);
735
734
  }
736
735
  });
737
736
 
@@ -21,7 +21,6 @@ import {
21
21
  import { invalidateAllCaches } from "./cache.js";
22
22
  import { loadQueueOrder, saveQueueOrder } from "./queue-order.js";
23
23
  import { isDbAvailable, updateMilestoneStatus } from "./gsd-db.js";
24
- import { logWarning } from "./workflow-logger.js";
25
24
 
26
25
  // ─── Park ──────────────────────────────────────────────────────────────────
27
26
 
@@ -59,7 +58,7 @@ export function parkMilestone(basePath: string, milestoneId: string, reason: str
59
58
  try {
60
59
  updateMilestoneStatus(milestoneId, "parked");
61
60
  } catch (err) {
62
- logWarning("engine", `parkMilestone DB sync failed for ${milestoneId}: ${(err as Error).message}`);
61
+ process.stderr.write(`gsd: parkMilestone DB sync failed for ${milestoneId}: ${(err as Error).message}\n`);
63
62
  }
64
63
  }
65
64
  invalidateAllCaches();
@@ -85,7 +84,7 @@ export function unparkMilestone(basePath: string, milestoneId: string): boolean
85
84
  try {
86
85
  updateMilestoneStatus(milestoneId, "active");
87
86
  } catch (err) {
88
- logWarning("engine", `unparkMilestone DB sync failed for ${milestoneId}: ${(err as Error).message}`);
87
+ process.stderr.write(`gsd: unparkMilestone DB sync failed for ${milestoneId}: ${(err as Error).message}\n`);
89
88
  }
90
89
  }
91
90
  invalidateAllCaches();
@@ -6,7 +6,6 @@
6
6
  */
7
7
 
8
8
  import { randomInt } from "node:crypto";
9
- import { logWarning } from "./workflow-logger.js";
10
9
  import { readdirSync, existsSync } from "node:fs";
11
10
  import { milestonesDir } from "./paths.js";
12
11
  import { loadQueueOrder, sortByQueueOrder } from "./queue-order.js";
@@ -129,7 +128,7 @@ export function findMilestoneIds(basePath: string): string[] {
129
128
  } catch (err) {
130
129
  // Log why milestone scanning failed — silent [] here causes infinite loops (#456)
131
130
  if (existsSync(dir)) {
132
- logWarning("engine", `findMilestoneIds: .gsd/milestones/ exists but readdirSync failed — ${getErrorMessage(err)}`);
131
+ console.error(`[gsd] findMilestoneIds: .gsd/milestones/ exists but readdirSync failed — ${getErrorMessage(err)}`);
133
132
  }
134
133
  return [];
135
134
  }