singularity-forge/scripts
Jeremy McSpadden 74b97bdcdb fix(worktree): detect default branch instead of hardcoding "main" on milestone merge (#1668) (#1669)
* fix(worktree): detect default branch instead of hardcoding "main" on milestone merge (#1668)

Repos using `master` (or any non-`main` default branch) without a GSD
preferences file and without a milestone META.json would have
`mergeMilestoneToMain` fall back to the hardcoded string `"main"`, causing
`git checkout main` to fail. The worktree and milestone branch were left in
an indeterminate state with only a terse error message.

Two targeted fixes:

1. **auto-worktree.ts** — Replace `?? "main"` fallback with
   `?? nativeDetectMainBranch(originalBasePath_)`. This function already
   exists and is used in 9 other locations; it probes origin/HEAD, then
   checks for `main`, `master`, and finally falls back to the current
   branch. The resolution order is unchanged for the common case
   (integration branch → prefs.main_branch → detected).

2. **worktree-resolver.ts** — Improve the merge-failure warning from a bare
   "Milestone merge failed: <reason>" to an actionable message that
   explicitly tells the user their worktree and milestone branch are
   preserved, and what to do next (retry /complete-milestone or merge
   manually). This prevents the panic of "is my code gone?" described in
   the issue.

Tests added:
- `auto-worktree-milestone-merge.test.ts`: Test 7 creates a real git repo
  with `master` as the default branch, no META.json, and no prefs, then
  verifies the squash-merge succeeds and lands on `master`.
- `worktree-resolver.test.ts`: Asserts the failure message includes the
  original error, the word "preserved", and a recovery suggestion.

* fix(recovery): add recover-gsd-1668 script for orphaned milestone commits

Users who hit the #1668 bug (milestone branch deleted before merge
succeeded) can use this script to recover their code from git's object
store before git gc prunes the orphaned commits (default: 14–90 days).

The script has two search strategies:

1. Git reflog — checks .git/logs/refs/heads/milestone/<ID> first.
   Reflogs survive branch deletion for up to 90 days. This is the
   fastest path and requires zero scanning.

2. Git fsck fallback — runs git fsck --unreachable --no-reflogs to
   find all orphaned commit objects, then scores them in a single
   git log --no-walk batch call (not per-commit git show, which would
   be O(n) process launches). Scores by:
     - Milestone ID match in subject (+100)
     - GSD conventional commit pattern feat(M<id>...) (+50)
     - Milestone-related keywords in subject (+20)
     - Committed within last 7 days (+10)

Once a commit is selected (interactively or via --auto), the script
creates recovery/<1668>/<milestone-id> branch and prints the exact
commands to inspect, merge, and clean up.

Supports: --milestone <ID>, --dry-run, --auto
Platforms: bash (Linux/macOS) and PowerShell (Windows)
2026-03-21 08:34:55 -06:00
..
bump-version.mjs feat(ci): automate prod-release with version bump, changelog, and tag push (#1194) 2026-03-18 11:17:43 -06:00
check-skill-references.mjs fix: remove broken SwiftUI skill and add CI reference check (#1476) (#1520) 2026-03-19 18:04:37 -06:00
ci_monitor.cjs feat: add GitHub Workflows skill with CI workflow and ci_monitor tool (#294) 2026-03-13 22:31:17 -06:00
ci_monitor.md feat: add GitHub Workflows skill with CI workflow and ci_monitor tool (#294) 2026-03-13 22:31:17 -06:00
copy-export-html.cjs refactor: extract inline build scripts from package.json to files 2026-03-16 13:34:05 -05:00
copy-resources.cjs fix: apply pi manifest opt-out to extension-discovery.ts (#1545) 2026-03-20 08:11:51 -06:00
copy-themes.cjs refactor: extract inline build scripts from package.json to files 2026-03-16 13:34:05 -05:00
dev.js refactor: deduplicate help text, cross-platform validate-pack, fix dev.js 2026-03-16 13:29:31 -05:00
generate-changelog.mjs feat(ci): automate prod-release with version bump, changelog, and tag push (#1194) 2026-03-18 11:17:43 -06:00
install-hooks.sh feat: add pre-commit secret scanner and CI secret detection (#1148) 2026-03-18 08:33:17 -06:00
install-pi-global.js Add pi global install scripts (#57) 2026-03-11 14:34:03 -06:00
link-workspace-packages.cjs fix: detect broken install and add Windows symlink fallback (#890) 2026-03-17 09:35:57 -06:00
postinstall.js fix: strip clack UI from postinstall, keep silent Playwright download (#783) 2026-03-16 21:35:04 -06:00
preview-dashboard.ts feat(dashboard): two-column layout with redesigned widget (#1530) 2026-03-19 20:07:18 -06:00
recover-gsd-1364.ps1 fix: recover + prevent #1364 .gsd/ data-loss (v2.30.0–v2.38.0) (#1635) 2026-03-20 13:26:09 -06:00
recover-gsd-1364.sh fix: recover + prevent #1364 .gsd/ data-loss (v2.30.0–v2.38.0) (#1635) 2026-03-20 13:26:09 -06:00
recover-gsd-1668.ps1 fix(worktree): detect default branch instead of hardcoding "main" on milestone merge (#1668) (#1669) 2026-03-21 08:34:55 -06:00
recover-gsd-1668.sh fix(worktree): detect default branch instead of hardcoding "main" on milestone merge (#1668) (#1669) 2026-03-21 08:34:55 -06:00
secret-scan.sh feat: add pre-commit secret scanner and CI secret detection (#1148) 2026-03-18 08:33:17 -06:00
sync-pkg-version.cjs feat: vendor Pi source into workspace monorepo 2026-03-12 21:55:17 -06:00
uninstall-pi-global.js Add pi global install scripts (#57) 2026-03-11 14:34:03 -06:00
update-changelog.mjs feat(ci): automate prod-release with version bump, changelog, and tag push (#1194) 2026-03-18 11:17:43 -06:00
validate-pack.js fix: detect broken install and add Windows symlink fallback (#890) 2026-03-17 09:35:57 -06:00
validate-pack.sh fix: broken npm install — remove bundleDependencies, use postinstall symlinks (#369) 2026-03-14 10:04:12 -06:00
verify-s03.sh feat(wizard): add BRAVE_ANSWERS_KEY support 2026-03-10 22:44:28 -06:00
verify-s04.sh Replace remaining 'get stuff done' instances in verify script 2026-03-11 08:11:11 -06:00
version-stamp.mjs feat(ci): implement three-stage promotion pipeline (Dev → Test → Prod) (#1098) 2026-03-18 00:40:06 -06:00
watch-resources.js fix: read resources from dist/ to prevent branch-drift in npm-link setups (#314) 2026-03-14 11:47:03 -06:00