mirror of
https://github.com/glittercowboy/get-shit-done
synced 2026-04-25 17:25:23 +02:00
* fix(install): remove bare ~/.claude reference in update.md (closes #2470) The installer's copyWithPathReplacement() replaces ~/\.claude\/ (with trailing slash) but not ~/\.claude (bare, no trailing slash). A comment on line 398 of update.md used the bare form, which scanForLeakedPaths() correctly flagged for every non-Claude runtime install. Replaced the example in the comment with a non-Claude runtime path so the file passes the scanner for all runtimes. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(test): align regex with installer's word-boundary semantics (CodeRabbit #2482) Replace negative lookahead (?!\/) with \b word boundary to match the installer's scanForLeakedPaths() pattern. The lookahead would incorrectly flag ~/.claude_suffix whereas \b correctly excludes it. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(test): revert \b regex — (?!\/) was intentionally scoped to bare refs The installer's scanForLeakedPaths uses \b but the test is specifically checking for bare ~/.claude without trailing slash that the replacer misses. ~/.claude/ (with slash) at line 359 of update.md is expected and handled. \b would flag it as a false positive. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(inventory): update workflow count to 81 (graduation.md added in #2490) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -173,7 +173,7 @@ Full roster at `commands/gsd/*.md`. The groupings below mirror `docs/COMMANDS.md
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Workflows (80 shipped)
|
## Workflows (81 shipped)
|
||||||
|
|
||||||
Full roster at `get-shit-done/workflows/*.md`. Workflows are thin orchestrators that commands reference internally; most are not read directly by end users. Rows below map each workflow file to its role (derived from the `<purpose>` block) and, where applicable, to the command that invokes it.
|
Full roster at `get-shit-done/workflows/*.md`. Workflows are thin orchestrators that commands reference internally; most are not read directly by end users. Rows below map each workflow file to its role (derived from the `<purpose>` block) and, where applicable, to the command that invokes it.
|
||||||
|
|
||||||
|
|||||||
@@ -396,7 +396,7 @@ First, resolve the config directory (`RUNTIME_DIR`) from the install scope
|
|||||||
detected in `get_installed_version`:
|
detected in `get_installed_version`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# RUNTIME_DIR is the resolved config directory (e.g. ~/.claude, ~/.config/opencode)
|
# RUNTIME_DIR is the resolved config directory (e.g. ~/.config/opencode, ~/.gemini)
|
||||||
# It should already be set from get_installed_version as GLOBAL_DIR or LOCAL_DIR.
|
# It should already be set from get_installed_version as GLOBAL_DIR or LOCAL_DIR.
|
||||||
# Use the appropriate variable based on INSTALL_SCOPE.
|
# Use the appropriate variable based on INSTALL_SCOPE.
|
||||||
if [ "$INSTALL_SCOPE" = "LOCAL" ]; then
|
if [ "$INSTALL_SCOPE" = "LOCAL" ]; then
|
||||||
|
|||||||
36
tests/bug-2470-update-md-claude-path.test.cjs
Normal file
36
tests/bug-2470-update-md-claude-path.test.cjs
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Regression test for #2470.
|
||||||
|
*
|
||||||
|
* update.md is installed into every runtime directory including .gemini, .codex,
|
||||||
|
* .opencode, etc. The installer's scanForLeakedPaths() uses the regex
|
||||||
|
* /(?:~|\$HOME)\/\.claude\b/g to detect unresolved .claude path references after
|
||||||
|
* copyWithPathReplacement() runs. The replacer handles "~/.claude/" (trailing slash)
|
||||||
|
* but not "~/.claude" (bare, no trailing slash) — so any bare reference in
|
||||||
|
* update.md would slip through and trigger the installer warning for non-Claude runtimes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const { test, describe } = require('node:test');
|
||||||
|
const assert = require('node:assert/strict');
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
const UPDATE_MD = path.join(__dirname, '..', 'get-shit-done', 'workflows', 'update.md');
|
||||||
|
|
||||||
|
describe('update.md — no bare ~.claude path references (#2470)', () => {
|
||||||
|
const content = fs.readFileSync(UPDATE_MD, 'utf-8');
|
||||||
|
|
||||||
|
test('update.md does not contain bare ~/\\.claude (without trailing slash)', () => {
|
||||||
|
// This is the exact pattern from the installer's scanForLeakedPaths():
|
||||||
|
// /(?:~|\$HOME)\/\.claude\b/g
|
||||||
|
// The replacer handles ~/\.claude\/ (with trailing slash) but misses bare ~/\.claude
|
||||||
|
// so we must not have bare references in the source file.
|
||||||
|
const matches = content.match(/(?:~|\$HOME)\/\.claude(?!\/)/g);
|
||||||
|
assert.strictEqual(
|
||||||
|
matches,
|
||||||
|
null,
|
||||||
|
`update.md must not contain bare ~/\.claude (without trailing slash) — installer scanner flags these as unresolved path refs: ${JSON.stringify(matches)}`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user