* fix(#3010): post-install message and docs use /gsd-update --reapply PR #2824 consolidated 86 skills into ~58, removing the standalone /gsd-reapply-patches command and folding it into a flag on /gsd-update (/gsd-update --reapply). The 1.39.1 hotfix (#2954) updated help.md but missed three other surfaces that still recommended the dead form: 1. bin/install.js reportLocalPatches() — runtime emitter shown after every install with backed-up patches. All branches updated: - claude/opencode/kilo/copilot: /gsd-update --reapply - gemini: /gsd:update --reapply - codex: $gsd-update --reapply - cursor: gsd-update --reapply (mention the skill name) 2. get-shit-done/workflows/update.md — Step 4 prose and the check_local_patches block both referenced /gsd-reapply-patches. Replaced with /gsd-update --reapply (with backticks around the command per CR feedback for copy/paste UX). 3. Localized docs (en/ja-JP/ko-KR/zh-CN) — 14 files across ARCHITECTURE.md / COMMANDS.md / FEATURES.md / INVENTORY.md / USER-GUIDE.md / manual-update.md still listed the removed command. Tests: - bug-3010-reapply-patches-references.test.cjs (4 tests): scans bin/install.js's reportLocalPatches body, every workflow file, and every doc (excluding CHANGELOG history and help.md's deprecation notice) for the removed command form, and verifies each runtime branch emits the consolidated form via captured console output. - tests/copilot-install.test.cjs:1081-1115 — stale assertions that hard-coded the removed string updated to assert /gsd-update --reapply. Verification: 115/115 pass across both files. Co-authored-by: Patrick Clery <patrick@patrickclery.com> Closes #3010 * test(#3010): broaden dead-command scan + tighten runtime exact-match CodeRabbit follow-up findings on #3012: 1. Workflow + docs scans only matched "/gsd-reapply-patches", missing the gemini ("/gsd:reapply-patches") and codex ("$gsd-reapply-patches") spellings. A regression that re-introduced either form in localized docs would have passed silently. Extracted a DEAD_COMMAND_PATTERNS array + findDeadCommands() helper used by both scans, so all three removed forms are checked uniformly. Match output also reports which spellings hit, for faster diagnosis. 2. reportLocalPatches runtime test asserted output.includes('update --reapply'), which is too loose — a malformed prefix like '/gsd:update --reapply' on the claude branch would have passed. Replaced with an exact {runtime → expected token} map covering all 7 branches: claude/opencode/kilo/copilot → /gsd-update --reapply gemini → /gsd:update --reapply codex → $gsd-update --reapply cursor → gsd-update --reapply Negative assertion also runs DEAD_COMMAND_PATTERNS against output for every runtime, so dead forms can't slip in regardless of branch. Verification: 4/4 pass on bug-3010-reapply-patches-references.test.cjs. * test(#3010): add prefix-absence guard for cursor runtime (CR follow-up) CodeRabbit (Minor): the cursor expected token "gsd-update --reapply" is a substring of every prefixed form ("/gsd-update --reapply" for claude/ opencode/kilo/copilot, "\$gsd-update --reapply" for codex). The positive output.includes(expectedToken) check therefore can't distinguish correct cursor output from a regression where the installer emits a prefixed form for cursor — both pass the substring check. Add an explicit prefix-absence assertion for cursor that fails if any of /, \$, or : appears immediately before "gsd-update --reapply" in output. The gemini form ("/gsd:update --reapply") doesn't share the substring (gsd:update vs gsd-update) so it's already caught by the positive includes failing on cursor's expected bare token. Verification: 4/4 pass. --------- Co-authored-by: Patrick Clery <patrick@patrickclery.com>
63 lines
1.8 KiB
Markdown
63 lines
1.8 KiB
Markdown
# Manual Update (Non-npm Install)
|
|
|
|
Use this procedure when `npx get-shit-done-cc@latest` is unavailable — e.g. during a publish outage or if you are working directly from the source repo.
|
|
|
|
## Prerequisites
|
|
|
|
- Node.js installed
|
|
- This repo cloned locally (`git clone https://github.com/gsd-build/get-shit-done`)
|
|
|
|
## Steps
|
|
|
|
```bash
|
|
# 1. Pull latest code
|
|
git pull --rebase origin main
|
|
|
|
# 2. Build the hooks dist (required — hooks/dist/ is generated, not checked in as source)
|
|
node scripts/build-hooks.js
|
|
|
|
# 3. Run the installer directly
|
|
node bin/install.js --claude --global
|
|
|
|
# 4. Clear the update cache so the statusline indicator resets
|
|
rm -f ~/.cache/gsd/gsd-update-check.json
|
|
```
|
|
|
|
**Step 5 — Restart your runtime** to pick up the new commands and agents.
|
|
|
|
## Runtime flags
|
|
|
|
Replace `--claude` with the flag for your runtime:
|
|
|
|
| Runtime | Flag |
|
|
|---|---|
|
|
| Claude Code | `--claude` |
|
|
| Gemini CLI | `--gemini` |
|
|
| OpenCode | `--opencode` |
|
|
| Kilo | `--kilo` |
|
|
| Codex | `--codex` |
|
|
| Copilot | `--copilot` |
|
|
| Cursor | `--cursor` |
|
|
| Windsurf | `--windsurf` |
|
|
| Augment | `--augment` |
|
|
| All runtimes | `--all` |
|
|
|
|
Use `--local` instead of `--global` for a project-scoped install.
|
|
|
|
## What the installer replaces
|
|
|
|
The installer performs a clean wipe-and-replace of GSD-managed directories only:
|
|
|
|
- `~/.claude/get-shit-done/` — workflows, references, templates
|
|
- `~/.claude/commands/gsd/` — slash commands
|
|
- `~/.claude/agents/gsd-*.md` — GSD agents
|
|
- `~/.claude/hooks/dist/` — compiled hooks
|
|
|
|
**What is preserved:**
|
|
- Custom agents not prefixed with `gsd-`
|
|
- Custom commands outside `commands/gsd/`
|
|
- Your `CLAUDE.md` files
|
|
- Custom hooks
|
|
|
|
Locally modified GSD files are automatically backed up to `gsd-local-patches/` before the install. Run `/gsd-update --reapply` after updating to merge your modifications back in.
|