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.
- package/dist/resources/extensions/ask-user-questions.js +4 -7
- package/dist/resources/extensions/gsd/auto/phases.js +7 -15
- package/dist/resources/extensions/gsd/auto-dashboard.js +8 -21
- package/dist/resources/extensions/gsd/auto-dispatch.js +3 -6
- package/dist/resources/extensions/gsd/auto-model-selection.js +9 -58
- package/dist/resources/extensions/gsd/auto-post-unit.js +2 -3
- package/dist/resources/extensions/gsd/auto-prompts.js +20 -36
- package/dist/resources/extensions/gsd/auto-recovery.js +18 -37
- package/dist/resources/extensions/gsd/auto-start.js +5 -9
- package/dist/resources/extensions/gsd/auto-timers.js +5 -11
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +3 -5
- package/dist/resources/extensions/gsd/auto-verification.js +2 -3
- package/dist/resources/extensions/gsd/auto-worktree.js +55 -120
- package/dist/resources/extensions/gsd/auto.js +17 -39
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +3 -6
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +2 -2
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +10 -4
- package/dist/resources/extensions/gsd/bootstrap/journal-tools.js +1 -2
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +0 -7
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +10 -11
- package/dist/resources/extensions/gsd/commands/catalog.js +0 -2
- package/dist/resources/extensions/gsd/commands-codebase.js +21 -48
- package/dist/resources/extensions/gsd/commands-inspect.js +1 -2
- package/dist/resources/extensions/gsd/commands-maintenance.js +19 -32
- package/dist/resources/extensions/gsd/complexity-classifier.js +4 -8
- package/dist/resources/extensions/gsd/custom-verification.js +2 -3
- package/dist/resources/extensions/gsd/gsd-db.js +13 -33
- package/dist/resources/extensions/gsd/guided-flow.js +9 -19
- package/dist/resources/extensions/gsd/init-wizard.js +0 -12
- package/dist/resources/extensions/gsd/markdown-renderer.js +9 -11
- package/dist/resources/extensions/gsd/md-importer.js +4 -5
- package/dist/resources/extensions/gsd/milestone-actions.js +2 -3
- package/dist/resources/extensions/gsd/milestone-ids.js +1 -2
- package/dist/resources/extensions/gsd/model-router.js +121 -156
- package/dist/resources/extensions/gsd/parallel-merge.js +3 -5
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +14 -26
- package/dist/resources/extensions/gsd/preferences-types.js +0 -1
- package/dist/resources/extensions/gsd/preferences-validation.js +0 -45
- package/dist/resources/extensions/gsd/preferences.js +3 -15
- package/dist/resources/extensions/gsd/prompt-loader.js +2 -3
- package/dist/resources/extensions/gsd/prompts/rethink.md +1 -1
- package/dist/resources/extensions/gsd/rule-registry.js +6 -7
- package/dist/resources/extensions/gsd/safe-fs.js +8 -6
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +2 -3
- package/dist/resources/extensions/gsd/tools/complete-slice.js +2 -3
- package/dist/resources/extensions/gsd/tools/complete-task.js +2 -3
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +2 -3
- package/dist/resources/extensions/gsd/tools/plan-slice.js +2 -3
- package/dist/resources/extensions/gsd/tools/plan-task.js +1 -2
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +4 -4
- package/dist/resources/extensions/gsd/tools/reopen-slice.js +1 -2
- package/dist/resources/extensions/gsd/tools/reopen-task.js +1 -2
- package/dist/resources/extensions/gsd/tools/replan-slice.js +1 -2
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +1 -2
- package/dist/resources/extensions/gsd/triage-resolution.js +4 -11
- package/dist/resources/extensions/gsd/workflow-events.js +1 -2
- package/dist/resources/extensions/gsd/workflow-logger.js +4 -37
- package/dist/resources/extensions/gsd/workflow-migration.js +12 -14
- package/dist/resources/extensions/gsd/workflow-projections.js +2 -2
- package/dist/resources/extensions/gsd/workflow-reconcile.js +2 -2
- package/dist/resources/extensions/gsd/worktree-manager.js +14 -26
- package/dist/resources/extensions/shared/interview-ui.js +1 -3
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +19 -19
- package/dist/web/standalone/.next/build-manifest.json +2 -2
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +19 -19
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +2 -2
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +0 -5
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +1 -2
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +0 -16
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +0 -26
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/config.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/config.js +1 -6
- package/packages/pi-coding-agent/dist/core/lsp/config.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/defaults.json +2 -2
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +0 -6
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +0 -19
- package/packages/pi-coding-agent/src/core/extensions/types.ts +0 -26
- package/packages/pi-coding-agent/src/core/lsp/config.ts +1 -7
- package/packages/pi-coding-agent/src/core/lsp/defaults.json +2 -2
- package/src/resources/extensions/ask-user-questions.ts +3 -7
- package/src/resources/extensions/gsd/auto/phases.ts +7 -17
- package/src/resources/extensions/gsd/auto-dashboard.ts +8 -22
- package/src/resources/extensions/gsd/auto-dispatch.ts +3 -7
- package/src/resources/extensions/gsd/auto-model-selection.ts +15 -77
- package/src/resources/extensions/gsd/auto-post-unit.ts +4 -4
- package/src/resources/extensions/gsd/auto-prompts.ts +20 -37
- package/src/resources/extensions/gsd/auto-recovery.ts +18 -38
- package/src/resources/extensions/gsd/auto-start.ts +9 -10
- package/src/resources/extensions/gsd/auto-timers.ts +5 -12
- package/src/resources/extensions/gsd/auto-unit-closeout.ts +2 -6
- package/src/resources/extensions/gsd/auto-verification.ts +6 -3
- package/src/resources/extensions/gsd/auto-worktree.ts +55 -121
- package/src/resources/extensions/gsd/auto.ts +17 -40
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +3 -4
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +2 -2
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +16 -4
- package/src/resources/extensions/gsd/bootstrap/journal-tools.ts +1 -2
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +0 -8
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +10 -11
- package/src/resources/extensions/gsd/commands/catalog.ts +0 -2
- package/src/resources/extensions/gsd/commands-codebase.ts +20 -52
- package/src/resources/extensions/gsd/commands-inspect.ts +1 -2
- package/src/resources/extensions/gsd/commands-maintenance.ts +19 -28
- package/src/resources/extensions/gsd/complexity-classifier.ts +4 -9
- package/src/resources/extensions/gsd/custom-verification.ts +2 -3
- package/src/resources/extensions/gsd/gsd-db.ts +14 -12
- package/src/resources/extensions/gsd/guided-flow.ts +8 -9
- package/src/resources/extensions/gsd/init-wizard.ts +0 -12
- package/src/resources/extensions/gsd/markdown-renderer.ts +17 -11
- package/src/resources/extensions/gsd/md-importer.ts +4 -5
- package/src/resources/extensions/gsd/milestone-actions.ts +2 -3
- package/src/resources/extensions/gsd/milestone-ids.ts +1 -2
- package/src/resources/extensions/gsd/model-router.ts +173 -199
- package/src/resources/extensions/gsd/parallel-merge.ts +3 -5
- package/src/resources/extensions/gsd/parallel-orchestrator.ts +14 -18
- package/src/resources/extensions/gsd/preferences-types.ts +0 -13
- package/src/resources/extensions/gsd/preferences-validation.ts +0 -45
- package/src/resources/extensions/gsd/preferences.ts +3 -16
- package/src/resources/extensions/gsd/prompt-loader.ts +2 -3
- package/src/resources/extensions/gsd/prompts/rethink.md +1 -1
- package/src/resources/extensions/gsd/rule-registry.ts +6 -7
- package/src/resources/extensions/gsd/safe-fs.ts +5 -6
- package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +0 -63
- package/src/resources/extensions/gsd/tests/complexity-classifier.test.ts +2 -27
- package/src/resources/extensions/gsd/tests/db-path-worktree-symlink.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/model-router.test.ts +3 -403
- package/src/resources/extensions/gsd/tests/preferences.test.ts +0 -62
- package/src/resources/extensions/gsd/tests/remote-questions.test.ts +0 -21
- package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +6 -6
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +6 -3
- package/src/resources/extensions/gsd/tools/complete-slice.ts +6 -3
- package/src/resources/extensions/gsd/tools/complete-task.ts +6 -3
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +6 -3
- package/src/resources/extensions/gsd/tools/plan-slice.ts +6 -3
- package/src/resources/extensions/gsd/tools/plan-task.ts +3 -2
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +6 -4
- package/src/resources/extensions/gsd/tools/reopen-slice.ts +3 -2
- package/src/resources/extensions/gsd/tools/reopen-task.ts +3 -2
- package/src/resources/extensions/gsd/tools/replan-slice.ts +3 -2
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +3 -2
- package/src/resources/extensions/gsd/triage-resolution.ts +4 -11
- package/src/resources/extensions/gsd/types.ts +0 -1
- package/src/resources/extensions/gsd/workflow-events.ts +1 -2
- package/src/resources/extensions/gsd/workflow-logger.ts +5 -52
- package/src/resources/extensions/gsd/workflow-migration.ts +12 -14
- package/src/resources/extensions/gsd/workflow-projections.ts +2 -2
- package/src/resources/extensions/gsd/workflow-reconcile.ts +2 -2
- package/src/resources/extensions/gsd/worktree-manager.ts +14 -16
- package/src/resources/extensions/shared/interview-ui.ts +1 -3
- package/packages/pi-coding-agent/dist/core/lsp/lsp-legacy-alias.test.d.ts +0 -2
- package/packages/pi-coding-agent/dist/core/lsp/lsp-legacy-alias.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/lsp/lsp-legacy-alias.test.js +0 -47
- package/packages/pi-coding-agent/dist/core/lsp/lsp-legacy-alias.test.js.map +0 -1
- package/packages/pi-coding-agent/src/core/lsp/lsp-legacy-alias.test.ts +0 -70
- package/src/resources/extensions/gsd/tests/capability-router.test.ts +0 -347
- package/src/resources/extensions/gsd/tests/integration/state-machine-edge-cases.test.ts +0 -1188
- package/src/resources/extensions/gsd/tests/integration/state-machine-runtime-failures.test.ts +0 -841
- package/src/resources/extensions/gsd/tests/silent-catch-diagnostics.test.ts +0 -284
- package/src/resources/extensions/gsd/tests/workflow-logger-audit.test.ts +0 -120
- package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +0 -144
- /package/dist/web/standalone/.next/static/{ogyMN7M-3bGGuRY08L5HR → JVkoVYumy0cDhOQISEYdG}/_buildManifest.js +0 -0
- /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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|