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
@@ -44,7 +44,7 @@ import {
44
44
  } from "./worktree.js";
45
45
  import { MergeConflictError, readIntegrationBranch, RUNTIME_EXCLUSION_PATHS } from "./git-service.js";
46
46
  import { debugLog } from "./debug-logger.js";
47
- import { logWarning, logError } from "./workflow-logger.js";
47
+ import { logWarning } from "./workflow-logger.js";
48
48
  import { loadEffectiveGSDPreferences } from "./preferences.js";
49
49
  import {
50
50
  nativeGetCurrentBranch,
@@ -100,8 +100,7 @@ const ROOT_STATE_FILES = [
100
100
  function isSamePath(a: string, b: string): boolean {
101
101
  try {
102
102
  return realpathSync(a) === realpathSync(b);
103
- } catch (e) {
104
- logWarning("worktree", `isSamePath failed: ${(e as Error).message}`);
103
+ } catch {
105
104
  return false;
106
105
  }
107
106
  }
@@ -154,19 +153,16 @@ function forceOverwriteAssessmentsWithVerdict(
154
153
  // Source has a verdict — force-copy into worktree
155
154
  mkdirSync(dstSliceDir, { recursive: true });
156
155
  safeCopy(srcFile, join(dstSliceDir, fileEntry.name), { force: true });
157
- } catch (err) {
156
+ } catch {
158
157
  /* non-fatal per file */
159
- logWarning("worktree", `assessment force-copy failed: ${err instanceof Error ? err.message : String(err)}`);
160
158
  }
161
159
  }
162
- } catch (err) {
160
+ } catch {
163
161
  /* non-fatal per slice */
164
- logWarning("worktree", `assessment slice scan failed: ${err instanceof Error ? err.message : String(err)}`);
165
162
  }
166
163
  }
167
- } catch (err) {
164
+ } catch {
168
165
  /* non-fatal */
169
- logWarning("worktree", `assessment sync failed: ${err instanceof Error ? err.message : String(err)}`);
170
166
  }
171
167
  }
172
168
 
@@ -186,9 +182,8 @@ function clearProjectRootStateFiles(basePath: string, milestoneId: string): void
186
182
  for (const file of transientFiles) {
187
183
  try {
188
184
  unlinkSync(file);
189
- } catch (err) {
185
+ } catch {
190
186
  /* non-fatal — file may not exist */
191
- logWarning("worktree", `file unlink failed: ${err instanceof Error ? err.message : String(err)}`);
192
187
  }
193
188
  }
194
189
 
@@ -216,16 +211,14 @@ function clearProjectRootStateFiles(basePath: string, milestoneId: string): void
216
211
  for (const f of untrackedOutput.split("\n").filter(Boolean)) {
217
212
  try {
218
213
  unlinkSync(join(basePath, f));
219
- } catch (err) {
214
+ } catch {
220
215
  /* non-fatal */
221
- logWarning("worktree", `untracked file unlink failed: ${err instanceof Error ? err.message : String(err)}`);
222
216
  }
223
217
  }
224
218
  }
225
219
  }
226
- } catch (err) {
220
+ } catch {
227
221
  /* non-fatal — git command may fail if not in repo */
228
- logWarning("worktree", `untracked file cleanup failed: ${err instanceof Error ? err.message : String(err)}`);
229
222
  }
230
223
  }
231
224
  }
@@ -320,9 +313,8 @@ export function syncProjectRootToWorktree(
320
313
  unlinkSync(wtDb);
321
314
  }
322
315
  }
323
- } catch (err) {
316
+ } catch {
324
317
  /* non-fatal */
325
- logWarning("worktree", `worktree DB cleanup failed: ${err instanceof Error ? err.message : String(err)}`);
326
318
  }
327
319
  }
328
320
 
@@ -391,8 +383,7 @@ export function readResourceVersion(): string | null {
391
383
  return typeof manifest?.gsdVersion === "string"
392
384
  ? manifest.gsdVersion
393
385
  : null;
394
- } catch (e) {
395
- logWarning("worktree", `readResourceVersion failed: ${(e as Error).message}`);
386
+ } catch {
396
387
  return null;
397
388
  }
398
389
  }
@@ -458,9 +449,8 @@ export function escapeStaleWorktree(base: string): string {
458
449
 
459
450
  try {
460
451
  process.chdir(projectRoot);
461
- } catch (e) {
452
+ } catch {
462
453
  // If chdir fails, return the original — caller will handle errors downstream
463
- logWarning("worktree", `escapeStaleWorktree chdir failed: ${(e as Error).message}`);
464
454
  return base;
465
455
  }
466
456
  return projectRoot;
@@ -490,15 +480,13 @@ export function cleanStaleRuntimeUnits(
490
480
  try {
491
481
  unlinkSync(join(runtimeUnitsDir, file));
492
482
  cleaned++;
493
- } catch (err) {
483
+ } catch {
494
484
  /* non-fatal */
495
- logWarning("worktree", `stale runtime unit unlink failed (${file}): ${err instanceof Error ? err.message : String(err)}`);
496
485
  }
497
486
  }
498
487
  }
499
- } catch (err) {
488
+ } catch {
500
489
  /* non-fatal */
501
- logWarning("worktree", `stale runtime unit cleanup failed: ${err instanceof Error ? err.message : String(err)}`);
502
490
  }
503
491
  return cleaned;
504
492
  }
@@ -540,9 +528,8 @@ export function syncGsdStateToWorktree(
540
528
  try {
541
529
  cpSync(src, dst);
542
530
  synced.push(f);
543
- } catch (err) {
531
+ } catch {
544
532
  /* non-fatal */
545
- logWarning("worktree", `file copy failed (${f}): ${err instanceof Error ? err.message : String(err)}`);
546
533
  }
547
534
  }
548
535
  }
@@ -561,9 +548,8 @@ export function syncGsdStateToWorktree(
561
548
  try {
562
549
  cpSync(src, dst);
563
550
  synced.push(file);
564
- } catch (err) {
551
+ } catch {
565
552
  /* non-fatal */
566
- logWarning("worktree", `preferences copy failed (${file}): ${err instanceof Error ? err.message : String(err)}`);
567
553
  }
568
554
  break;
569
555
  }
@@ -592,9 +578,8 @@ export function syncGsdStateToWorktree(
592
578
  try {
593
579
  cpSync(srcDir, dstDir, { recursive: true });
594
580
  synced.push(`milestones/${mid}/`);
595
- } catch (err) {
581
+ } catch {
596
582
  /* non-fatal */
597
- logWarning("worktree", `milestone copy failed (${mid}): ${err instanceof Error ? err.message : String(err)}`);
598
583
  }
599
584
  } else {
600
585
  // Milestone directory exists but may be missing files (stale snapshot).
@@ -613,9 +598,8 @@ export function syncGsdStateToWorktree(
613
598
  cpSync(srcFile, dstFile);
614
599
  synced.push(`milestones/${mid}/${f}`);
615
600
  }
616
- } catch (err) {
601
+ } catch {
617
602
  /* non-fatal */
618
- logWarning("worktree", `milestone file copy failed (${mid}/${f}): ${err instanceof Error ? err.message : String(err)}`);
619
603
  }
620
604
  }
621
605
  }
@@ -627,9 +611,8 @@ export function syncGsdStateToWorktree(
627
611
  try {
628
612
  cpSync(srcSlicesDir, dstSlicesDir, { recursive: true });
629
613
  synced.push(`milestones/${mid}/slices/`);
630
- } catch (err) {
614
+ } catch {
631
615
  /* non-fatal */
632
- logWarning("worktree", `slices copy failed (${mid}): ${err instanceof Error ? err.message : String(err)}`);
633
616
  }
634
617
  } else if (existsSync(srcSlicesDir) && existsSync(dstSlicesDir)) {
635
618
  // Both exist — sync missing slice directories
@@ -645,22 +628,19 @@ export function syncGsdStateToWorktree(
645
628
  try {
646
629
  cpSync(srcSlice, dstSlice, { recursive: true });
647
630
  synced.push(`milestones/${mid}/slices/${sid}/`);
648
- } catch (err) {
631
+ } catch {
649
632
  /* non-fatal */
650
- logWarning("worktree", `slice copy failed (${mid}/${sid}): ${err instanceof Error ? err.message : String(err)}`);
651
633
  }
652
634
  }
653
635
  }
654
636
  }
655
- } catch (err) {
637
+ } catch {
656
638
  /* non-fatal */
657
- logWarning("worktree", `milestone file sync failed: ${err instanceof Error ? err.message : String(err)}`);
658
639
  }
659
640
  }
660
641
  }
661
- } catch (err) {
642
+ } catch {
662
643
  /* non-fatal */
663
- logWarning("worktree", `milestone directory sync failed: ${err instanceof Error ? err.message : String(err)}`);
664
644
  }
665
645
  }
666
646
 
@@ -712,9 +692,8 @@ export function syncWorktreeStateBack(
712
692
  try {
713
693
  reconcileWorktreeDb(mainDb, wtLocalDb);
714
694
  synced.push("gsd.db (pre-upgrade reconcile)");
715
- } catch (err) {
695
+ } catch {
716
696
  // Non-fatal — file sync below is the fallback
717
- logError("worktree", `DB reconciliation failed: ${err instanceof Error ? err.message : String(err)}`);
718
697
  }
719
698
  }
720
699
 
@@ -731,9 +710,8 @@ export function syncWorktreeStateBack(
731
710
  try {
732
711
  cpSync(src, dst, { force: true });
733
712
  synced.push(f);
734
- } catch (err) {
713
+ } catch {
735
714
  /* non-fatal */
736
- logWarning("worktree", `state file copy-back failed (${f}): ${err instanceof Error ? err.message : String(err)}`);
737
715
  }
738
716
  }
739
717
  }
@@ -753,9 +731,8 @@ export function syncWorktreeStateBack(
753
731
  for (const mid of wtMilestones) {
754
732
  syncMilestoneDir(wtGsd, mainGsd, mid, synced);
755
733
  }
756
- } catch (err) {
734
+ } catch {
757
735
  /* non-fatal */
758
- logWarning("worktree", `milestone sync-back failed: ${err instanceof Error ? err.message : String(err)}`);
759
736
  }
760
737
 
761
738
  return { synced };
@@ -779,14 +756,12 @@ function syncDirFiles(
779
756
  try {
780
757
  cpSync(join(srcDir, entry.name), join(dstDir, entry.name), { force: true });
781
758
  synced.push(`${prefix}${entry.name}`);
782
- } catch (err) {
759
+ } catch {
783
760
  /* non-fatal */
784
- logWarning("worktree", `file copy failed (${prefix}${entry.name}): ${err instanceof Error ? err.message : String(err)}`);
785
761
  }
786
762
  }
787
- } catch (err) {
763
+ } catch {
788
764
  /* non-fatal — srcDir may not be readable */
789
- logWarning("worktree", `directory read failed: ${err instanceof Error ? err.message : String(err)}`);
790
765
  }
791
766
  }
792
767
 
@@ -829,9 +804,8 @@ function syncMilestoneDir(
829
804
  syncDirFiles(wtTasksDir, mainTasksDir, isMd, synced, `milestones/${mid}/slices/${sid}/tasks/`);
830
805
  }
831
806
  }
832
- } catch (err) {
807
+ } catch {
833
808
  /* non-fatal */
834
- logWarning("worktree", `milestone slice sync failed (${mid}): ${err instanceof Error ? err.message : String(err)}`);
835
809
  }
836
810
  }
837
811
  // ─── Worktree Post-Create Hook (#597) ────────────────────────────────────────
@@ -863,9 +837,7 @@ export function runWorktreePostCreateHook(
863
837
  return `Worktree post-create hook not found: ${resolved}`;
864
838
  }
865
839
  if (process.platform === "win32") {
866
- try { resolved = realpathSync.native(resolved); } catch (err) { /* keep original */
867
- logWarning("worktree", `realpath failed: ${err instanceof Error ? err.message : String(err)}`);
868
- }
840
+ try { resolved = realpathSync.native(resolved); } catch { /* keep original */ }
869
841
  }
870
842
 
871
843
  try {
@@ -949,9 +921,8 @@ function reconcilePlanCheckboxes(
949
921
  results.push(full);
950
922
  }
951
923
  }
952
- } catch (err) {
924
+ } catch {
953
925
  /* non-fatal */
954
- logWarning("worktree", `walkMd directory read failed: ${err instanceof Error ? err.message : String(err)}`);
955
926
  }
956
927
  return results;
957
928
  }
@@ -966,8 +937,7 @@ function reconcilePlanCheckboxes(
966
937
  try {
967
938
  srcContent = readFileSync(srcFile, "utf-8");
968
939
  dstContent = readFileSync(dstFile, "utf-8");
969
- } catch (e) {
970
- logWarning("worktree", `reconcilePlanCheckboxes read failed: ${(e as Error).message}`);
940
+ } catch {
971
941
  continue;
972
942
  }
973
943
 
@@ -1002,9 +972,8 @@ function reconcilePlanCheckboxes(
1002
972
  if (changed) {
1003
973
  try {
1004
974
  atomicWriteSync(dstFile, updated, "utf-8");
1005
- } catch (err) {
975
+ } catch {
1006
976
  /* non-fatal */
1007
- logWarning("worktree", `plan checkbox reconcile write failed: ${err instanceof Error ? err.message : String(err)}`);
1008
977
  }
1009
978
  }
1010
979
  }
@@ -1189,9 +1158,8 @@ export function teardownAutoWorktree(
1189
1158
  // Attempt a direct filesystem removal as a fallback
1190
1159
  try {
1191
1160
  rmSync(wtDir, { recursive: true, force: true });
1192
- } catch (err) {
1161
+ } catch {
1193
1162
  // Non-fatal — the warning above tells the user how to clean up
1194
- logWarning("worktree", `worktree directory removal failed: ${err instanceof Error ? err.message : String(err)}`);
1195
1163
  }
1196
1164
  }
1197
1165
  }
@@ -1232,8 +1200,7 @@ export function getAutoWorktreePath(
1232
1200
  try {
1233
1201
  const content = readFileSync(gitPath, "utf8").trim();
1234
1202
  if (!content.startsWith("gitdir: ")) return null;
1235
- } catch (e) {
1236
- logWarning("worktree", `getAutoWorktreePath .git read failed: ${(e as Error).message}`);
1203
+ } catch {
1237
1204
  return null;
1238
1205
  }
1239
1206
 
@@ -1392,9 +1359,8 @@ export function mergeMilestoneToMain(
1392
1359
  if (!isSamePath(worktreeDbPath, mainDbPath)) {
1393
1360
  reconcileWorktreeDb(mainDbPath, worktreeDbPath);
1394
1361
  }
1395
- } catch (err) {
1362
+ } catch {
1396
1363
  /* non-fatal */
1397
- logError("worktree", `DB reconciliation failed: ${err instanceof Error ? err.message : String(err)}`);
1398
1364
  }
1399
1365
  }
1400
1366
 
@@ -1549,10 +1515,9 @@ export function mergeMilestoneToMain(
1549
1515
  );
1550
1516
  stashed = true;
1551
1517
  }
1552
- } catch (err) {
1518
+ } catch {
1553
1519
  // Stash failure is non-fatal — proceed without stash and let the merge
1554
1520
  // report the dirty tree if it fails.
1555
- logWarning("worktree", `git stash failed: ${err instanceof Error ? err.message : String(err)}`);
1556
1521
  }
1557
1522
 
1558
1523
  // 7a. Shelter queued milestone directories before the squash merge (#2505).
@@ -1573,13 +1538,9 @@ export function mergeMilestoneToMain(
1573
1538
  try {
1574
1539
  mkdirSync(milestonesDir, { recursive: true });
1575
1540
  cpSync(join(shelterDir, dirName), join(milestonesDir, dirName), { recursive: true, force: true });
1576
- } catch (err) { /* best-effort */
1577
- logError("worktree", `shelter restore failed: ${err instanceof Error ? err.message : String(err)}`);
1578
- }
1579
- }
1580
- try { rmSync(shelterDir, { recursive: true, force: true }); } catch (err) { /* best-effort */
1581
- logWarning("worktree", `shelter cleanup failed: ${err instanceof Error ? err.message : String(err)}`);
1541
+ } catch { /* best-effort */ }
1582
1542
  }
1543
+ try { rmSync(shelterDir, { recursive: true, force: true }); } catch { /* best-effort */ }
1583
1544
  };
1584
1545
 
1585
1546
  try {
@@ -1596,15 +1557,13 @@ export function mergeMilestoneToMain(
1596
1557
  cpSync(srcDir, dstDir, { recursive: true, force: true });
1597
1558
  rmSync(srcDir, { recursive: true, force: true });
1598
1559
  shelteredDirs.push(entry.name);
1599
- } catch (err) {
1560
+ } catch {
1600
1561
  // Non-fatal — if shelter fails, the merge may still succeed
1601
- logWarning("worktree", `milestone shelter failed (${entry.name}): ${err instanceof Error ? err.message : String(err)}`);
1602
1562
  }
1603
1563
  }
1604
1564
  }
1605
- } catch (err) {
1565
+ } catch {
1606
1566
  // Non-fatal — proceed with merge; untracked files may block it
1607
- logWarning("worktree", `milestone shelter operation failed: ${err instanceof Error ? err.message : String(err)}`);
1608
1567
  }
1609
1568
 
1610
1569
  // 7b. Clean up stale merge state before attempting squash merge (#2912).
@@ -1618,9 +1577,7 @@ export function mergeMilestoneToMain(
1618
1577
  const p = join(gitDir_, f);
1619
1578
  if (existsSync(p)) unlinkSync(p);
1620
1579
  }
1621
- } catch (err) { /* best-effort */
1622
- logError("worktree", `merge state cleanup failed: ${err instanceof Error ? err.message : String(err)}`);
1623
- }
1580
+ } catch { /* best-effort */ }
1624
1581
 
1625
1582
  // 8. Squash merge — auto-resolve .gsd/ state file conflicts (#530)
1626
1583
  const mergeResult = nativeMergeSquash(originalBasePath_, milestoneBranch);
@@ -1638,9 +1595,7 @@ export function mergeMilestoneToMain(
1638
1595
  const p = join(gitDir_, f);
1639
1596
  if (existsSync(p)) unlinkSync(p);
1640
1597
  }
1641
- } catch (err) { /* best-effort */
1642
- logError("worktree", `merge state cleanup failed: ${err instanceof Error ? err.message : String(err)}`);
1643
- }
1598
+ } catch { /* best-effort */ }
1644
1599
 
1645
1600
  // Pop stash before throwing so local work is not lost.
1646
1601
  if (stashed) {
@@ -1650,9 +1605,7 @@ export function mergeMilestoneToMain(
1650
1605
  stdio: ["ignore", "pipe", "pipe"],
1651
1606
  encoding: "utf-8",
1652
1607
  });
1653
- } catch (err) { /* stash pop conflict is non-fatal */
1654
- logWarning("worktree", `git stash pop failed: ${err instanceof Error ? err.message : String(err)}`);
1655
- }
1608
+ } catch { /* stash pop conflict is non-fatal */ }
1656
1609
  }
1657
1610
  restoreShelter();
1658
1611
  // Restore cwd so the caller is not stranded on the integration branch
@@ -1691,10 +1644,9 @@ export function mergeMilestoneToMain(
1691
1644
  try {
1692
1645
  nativeCheckoutTheirs(originalBasePath_, [safeFile]);
1693
1646
  nativeAddPaths(originalBasePath_, [safeFile]);
1694
- } catch (e) {
1647
+ } catch {
1695
1648
  // If checkout --theirs fails, try removing the file from the merge
1696
1649
  // (it's a runtime file that shouldn't be committed anyway)
1697
- logWarning("worktree", `checkout --theirs failed for ${safeFile}, removing: ${(e as Error).message}`);
1698
1650
  nativeRmForce(originalBasePath_, [safeFile]);
1699
1651
  }
1700
1652
  }
@@ -1705,18 +1657,14 @@ export function mergeMilestoneToMain(
1705
1657
  // Abort merge state so MERGE_HEAD is not left on disk (#2912).
1706
1658
  // libgit2's merge creates MERGE_HEAD even for squash merges; if left
1707
1659
  // dangling, subsequent merges fail and doctor reports corrupt state.
1708
- try { nativeMergeAbort(originalBasePath_); } catch (err) { /* best-effort */
1709
- logError("worktree", `git merge-abort failed: ${err instanceof Error ? err.message : String(err)}`);
1710
- }
1660
+ try { nativeMergeAbort(originalBasePath_); } catch { /* best-effort */ }
1711
1661
  try {
1712
1662
  const gitDir_ = resolveGitDir(originalBasePath_);
1713
1663
  for (const f of ["SQUASH_MSG", "MERGE_MSG", "MERGE_HEAD"]) {
1714
1664
  const p = join(gitDir_, f);
1715
1665
  if (existsSync(p)) unlinkSync(p);
1716
1666
  }
1717
- } catch (err) { /* best-effort */
1718
- logError("worktree", `merge state file cleanup failed: ${err instanceof Error ? err.message : String(err)}`);
1719
- }
1667
+ } catch { /* best-effort */ }
1720
1668
 
1721
1669
  // Pop stash before throwing so local work is not lost (#2151).
1722
1670
  if (stashed) {
@@ -1726,9 +1674,7 @@ export function mergeMilestoneToMain(
1726
1674
  stdio: ["ignore", "pipe", "pipe"],
1727
1675
  encoding: "utf-8",
1728
1676
  });
1729
- } catch (err) { /* stash pop conflict is non-fatal */
1730
- logWarning("worktree", `git stash pop failed: ${err instanceof Error ? err.message : String(err)}`);
1731
- }
1677
+ } catch { /* stash pop conflict is non-fatal */ }
1732
1678
  }
1733
1679
  restoreShelter();
1734
1680
  throw new MergeConflictError(
@@ -1758,9 +1704,7 @@ export function mergeMilestoneToMain(
1758
1704
  const p = join(gitDir_, f);
1759
1705
  if (existsSync(p)) unlinkSync(p);
1760
1706
  }
1761
- } catch (err) { /* best-effort */
1762
- logError("worktree", `post-commit merge state cleanup failed: ${err instanceof Error ? err.message : String(err)}`);
1763
- }
1707
+ } catch { /* best-effort */ }
1764
1708
 
1765
1709
  // 9a-ii. Restore stashed files now that the merge+commit is complete (#2151).
1766
1710
  // Pop after commit so stashed changes do not interfere with the squash merge
@@ -1773,8 +1717,7 @@ export function mergeMilestoneToMain(
1773
1717
  stdio: ["ignore", "pipe", "pipe"],
1774
1718
  encoding: "utf-8",
1775
1719
  });
1776
- } catch (e) {
1777
- logWarning("worktree", `git stash pop failed, attempting conflict resolution: ${(e as Error).message}`);
1720
+ } catch {
1778
1721
  // Stash pop after squash merge can conflict on .gsd/ state files that
1779
1722
  // diverged between branches. Left unresolved, these UU entries block
1780
1723
  // every subsequent merge. Auto-resolve them the same way we handle
@@ -1794,9 +1737,8 @@ export function mergeMilestoneToMain(
1794
1737
  encoding: "utf-8",
1795
1738
  });
1796
1739
  nativeAddPaths(originalBasePath_, [f]);
1797
- } catch (e) {
1740
+ } catch {
1798
1741
  // Last resort: remove the conflicted state file
1799
- logWarning("worktree", `checkout HEAD failed for ${f}, removing: ${(e as Error).message}`);
1800
1742
  nativeRmForce(originalBasePath_, [f]);
1801
1743
  }
1802
1744
  }
@@ -1810,9 +1752,7 @@ export function mergeMilestoneToMain(
1810
1752
  stdio: ["ignore", "pipe", "pipe"],
1811
1753
  encoding: "utf-8",
1812
1754
  });
1813
- } catch (err) { /* stash may already be consumed */
1814
- logWarning("worktree", `git stash drop failed: ${err instanceof Error ? err.message : String(err)}`);
1815
- }
1755
+ } catch { /* stash may already be consumed */ }
1816
1756
  } else {
1817
1757
  // Non-.gsd conflicts remain — leave stash for manual resolution
1818
1758
  logWarning("reconcile", "Stash pop conflict on non-.gsd files after merge", {
@@ -1865,9 +1805,8 @@ export function mergeMilestoneToMain(
1865
1805
  codeFilesChanged = mergedFiles.some(
1866
1806
  (entry) => !entry.path.startsWith(".gsd/"),
1867
1807
  );
1868
- } catch (e) {
1808
+ } catch {
1869
1809
  // If HEAD~1 doesn't exist (first commit), assume code was changed
1870
- logWarning("worktree", `diff numstat failed (assuming code changed): ${(e as Error).message}`);
1871
1810
  codeFilesChanged = true;
1872
1811
  }
1873
1812
  }
@@ -1883,9 +1822,8 @@ export function mergeMilestoneToMain(
1883
1822
  encoding: "utf-8",
1884
1823
  });
1885
1824
  pushed = true;
1886
- } catch (err) {
1825
+ } catch {
1887
1826
  // Push failure is non-fatal
1888
- logWarning("worktree", `git push failed: ${err instanceof Error ? err.message : String(err)}`);
1889
1827
  }
1890
1828
  }
1891
1829
 
@@ -1914,9 +1852,8 @@ export function mergeMilestoneToMain(
1914
1852
  encoding: "utf-8",
1915
1853
  });
1916
1854
  prCreated = true;
1917
- } catch (err) {
1855
+ } catch {
1918
1856
  // PR creation failure is non-fatal — gh may not be installed or authenticated
1919
- logWarning("worktree", `PR creation failed: ${err instanceof Error ? err.message : String(err)}`);
1920
1857
  }
1921
1858
  }
1922
1859
 
@@ -1954,17 +1891,15 @@ export function mergeMilestoneToMain(
1954
1891
  branch: null as unknown as string,
1955
1892
  deleteBranch: false,
1956
1893
  });
1957
- } catch (err) {
1894
+ } catch {
1958
1895
  // Best-effort -- worktree dir may already be gone
1959
- logWarning("worktree", `worktree removal failed: ${err instanceof Error ? err.message : String(err)}`);
1960
1896
  }
1961
1897
 
1962
1898
  // 13. Delete milestone branch (after worktree removal so ref is unlocked)
1963
1899
  try {
1964
1900
  nativeBranchDelete(originalBasePath_, milestoneBranch);
1965
- } catch (err) {
1901
+ } catch {
1966
1902
  // Best-effort
1967
- logWarning("worktree", `git branch-delete failed: ${err instanceof Error ? err.message : String(err)}`);
1968
1903
  }
1969
1904
 
1970
1905
  // 14. Clear module state
@@ -1973,4 +1908,3 @@ export function mergeMilestoneToMain(
1973
1908
 
1974
1909
  return { commitMessage, pushed, prCreated, codeFilesChanged };
1975
1910
  }
1976
-