chore: rebrand to GSD-redux/get-shit-done-redux
Mirror of code, issues, and PRs from the upstream gsd-build/get-shit-done, which appears compromised or abandoned (maintainer unreachable since 2026-04-01; $GSD token linked to rug-pull). - Adds rebrand notice block at top of English README - Removes $GSD token badge and @gsd_foundation X badge (keeps Discord) - Renames npm packages: get-shit-done-cc -> get-shit-done-redux, @gsd-build/sdk -> @gsd-redux/sdk - Updates all repo URLs across docs, workflows, package.json, bin/ - Updates ci@gsd-build -> ci@gsd-redux in workflow git identities - Leaves CHANGELOG and .changeset/* alone (historical, time-stamped)
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
* Validates that all agent .md files use the standardized <required_reading>
|
||||
* pattern and that no legacy <files_to_read> blocks remain.
|
||||
*
|
||||
* See: https://github.com/gsd-build/get-shit-done/issues/2168
|
||||
* See: https://github.com/GSD-redux/get-shit-done-redux/issues/2168
|
||||
*/
|
||||
|
||||
const { test, describe } = require('node:test');
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
* rationale in the PR, and make sure the bloat is not duplicated content
|
||||
* that belongs in `get-shit-done/references/`.
|
||||
*
|
||||
* See: https://github.com/gsd-build/get-shit-done/issues/2361
|
||||
* See: https://github.com/GSD-redux/get-shit-done-redux/issues/2361
|
||||
*/
|
||||
|
||||
const { test, describe } = require('node:test');
|
||||
|
||||
@@ -56,10 +56,10 @@ describe('bug #2334: quick workflow gsd-sdk pre-flight check', () => {
|
||||
const firstSdkCall = content.indexOf('gsd-sdk query init.quick', step2Start);
|
||||
const step2Section = content.slice(step2Start, firstSdkCall);
|
||||
|
||||
const hasInstallHint = step2Section.includes('get-shit-done-cc') || step2Section.includes('gsd-update') || step2Section.includes('/gsd-update');
|
||||
const hasInstallHint = step2Section.includes('get-shit-done-redux') || step2Section.includes('gsd-update') || step2Section.includes('/gsd-update');
|
||||
assert.ok(
|
||||
hasInstallHint,
|
||||
'Pre-flight error must include a hint on how to install query-capable gsd-sdk (npm install -g get-shit-done-cc or /gsd-update)'
|
||||
'Pre-flight error must include a hint on how to install query-capable gsd-sdk (npm install -g get-shit-done-redux or /gsd-update)'
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Regression test for #2519: @gsd-build/sdk tarball shipped without dist/
|
||||
* Regression test for #2519: @gsd-redux/sdk tarball shipped without dist/
|
||||
*
|
||||
* The published 0.1.0 tarball lacked a `files` whitelist including `dist/` and
|
||||
* a `prepublishOnly` hook to build `dist/` before publish. As a result the
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Regression guard for #2636 — `gsd-sdk query agent-skills <slug>` calls in
|
||||
* workflows must NOT silently swallow failures via a bare `2>/dev/null`.
|
||||
*
|
||||
* Root cause of #2636: when the installed npm `@gsd-build/sdk` was stale and
|
||||
* Root cause of #2636: when the installed npm `@gsd-redux/sdk` was stale and
|
||||
* the `agent-skills` handler was missing, every workflow line of the form
|
||||
* AGENT_SKILLS_X=$(gsd-sdk query agent-skills <slug> 2>/dev/null)
|
||||
* resolved to empty string, and the `agent_skills.<slug>` config was never
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
/**
|
||||
* Regression test for bug #2647 (also partial fix for #2649).
|
||||
*
|
||||
* v1.38.3 of get-shit-done-cc shipped with:
|
||||
* v1.38.3 of get-shit-done-redux shipped with:
|
||||
* - `files` array missing `sdk/dist`
|
||||
* - `prepublishOnly` only running `build:hooks`, not `build:sdk`
|
||||
*
|
||||
* Result: the published tarball had no `sdk/dist/cli.js`. The `gsd-sdk`
|
||||
* bin shim in `bin/gsd-sdk.js` resolves `<pkg>/sdk/dist/cli.js`, which
|
||||
* didn't exist, so PATH fell through to the separately installed
|
||||
* `@gsd-build/sdk@0.1.0` (predates the `query` subcommand).
|
||||
* `@gsd-redux/sdk@0.1.0` (predates the `query` subcommand).
|
||||
*
|
||||
* Every `gsd-sdk query <noun>` call in workflow docs thus failed on
|
||||
* fresh installs of 1.38.3.
|
||||
*
|
||||
* This test guards the OUTER package.json (get-shit-done-cc) so future
|
||||
* This test guards the OUTER package.json (get-shit-done-redux) so future
|
||||
* edits cannot silently drop either safeguard. A sibling test at
|
||||
* tests/bug-2519-sdk-tarball-dist.test.cjs guards the inner sdk package.
|
||||
*
|
||||
|
||||
@@ -35,7 +35,7 @@ function loadInstaller() {
|
||||
function makeTempSdk({ npxCache = false } = {}) {
|
||||
let root;
|
||||
if (npxCache) {
|
||||
root = path.join(os.tmpdir(), `gsd-npx-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`, 'npm-cache', '_npx', 'deadbeefcafe0001', 'node_modules', 'get-shit-done-cc');
|
||||
root = path.join(os.tmpdir(), `gsd-npx-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`, 'npm-cache', '_npx', 'deadbeefcafe0001', 'node_modules', 'get-shit-done-redux');
|
||||
fs.mkdirSync(root, { recursive: true });
|
||||
} else {
|
||||
root = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-clone-'));
|
||||
@@ -155,7 +155,7 @@ describe('installer SDK dist-missing fail-fast (#2649)', () => {
|
||||
assert.strictEqual(ir.reason, 'sdk_fail_fast');
|
||||
assert.strictEqual(ir.context, 'npx-cache');
|
||||
assert.strictEqual(ir.missing_artifact, 'sdk/dist');
|
||||
assert.strictEqual(ir.fix_command, 'npm install -g get-shit-done-cc@latest');
|
||||
assert.strictEqual(ir.fix_command, 'npm install -g get-shit-done-redux@latest');
|
||||
assert.strictEqual(ir.attempted_nested_install, false,
|
||||
'IR contract: nested-install must always be false (this is a hard invariant)');
|
||||
} finally {
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/**
|
||||
* Regression test for bug #2775
|
||||
*
|
||||
* `npx get-shit-done-cc@latest --global` runs the installer, which prints
|
||||
* `npx get-shit-done-redux@latest --global` runs the installer, which prints
|
||||
* `✓ GSD SDK ready` even though the secondary `gsd-sdk` bin is not on the
|
||||
* user's PATH. Root cause: `npx` only links the package's primary bin into
|
||||
* the ephemeral cache; secondary bins are not symlinked. The installer's
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Regression test for #2829: `command not found: gsd-sdk` with local-mode install.
|
||||
*
|
||||
* Repro: a fresh `npx get-shit-done-cc@latest` install with the runtime set
|
||||
* Repro: a fresh `npx get-shit-done-redux@latest` install with the runtime set
|
||||
* to local mode left every `gsd-sdk query …` call site unable to resolve the
|
||||
* binary because the installer's previous behavior was to skip SDK linking
|
||||
* entirely for local installs (#2678 over-corrected). The published tarball
|
||||
|
||||
@@ -31,7 +31,7 @@ const fs = require('node:fs');
|
||||
|
||||
const REPO_ROOT = path.join(__dirname, '..');
|
||||
const pkg = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, 'package.json'), 'utf-8'));
|
||||
const installPath = path.resolve(REPO_ROOT, pkg.bin['get-shit-done-cc']);
|
||||
const installPath = path.resolve(REPO_ROOT, pkg.bin['get-shit-done-redux']);
|
||||
const { stripStaleGsdHookBlocks } = require(installPath);
|
||||
|
||||
/**
|
||||
|
||||
@@ -27,7 +27,7 @@ const fs = require('node:fs');
|
||||
|
||||
const REPO_ROOT = path.join(__dirname, '..');
|
||||
const pkg = JSON.parse(fs.readFileSync(path.join(REPO_ROOT, 'package.json'), 'utf-8'));
|
||||
const installPath = path.resolve(REPO_ROOT, pkg.bin['get-shit-done-cc']);
|
||||
const installPath = path.resolve(REPO_ROOT, pkg.bin['get-shit-done-redux']);
|
||||
const install = require(installPath);
|
||||
|
||||
// Build a minimal Claude command source whose description starts with the
|
||||
|
||||
@@ -17,8 +17,8 @@ const { checkLatestVersion, CHECK_REASON, PACKAGE_NAME } = require(
|
||||
// Tests use a pluggable spawn so no real npm process is invoked.
|
||||
|
||||
describe('Bug #2992: deterministic latest-version check', () => {
|
||||
test('PACKAGE_NAME is the constant get-shit-done-cc (no callers can override)', () => {
|
||||
assert.equal(PACKAGE_NAME, 'get-shit-done-cc');
|
||||
test('PACKAGE_NAME is the constant get-shit-done-redux (no callers can override)', () => {
|
||||
assert.equal(PACKAGE_NAME, 'get-shit-done-redux');
|
||||
});
|
||||
|
||||
test('CHECK_REASON enum exposes the documented codes', () => {
|
||||
|
||||
@@ -5,7 +5,7 @@ process.env.GSD_TEST_MODE = '1';
|
||||
/**
|
||||
* Regression test for #3011: SDK not found.
|
||||
*
|
||||
* Reporter (Windows / PowerShell 7) ran `npx get-shit-done-cc@latest`,
|
||||
* Reporter (Windows / PowerShell 7) ran `npx get-shit-done-redux@latest`,
|
||||
* upgrade reported success, but `gsd-sdk` could not be resolved by Claude
|
||||
* Code, Git Bash, PowerShell, or WSL. The previous diagnostic was a
|
||||
* generic "not on your PATH" with no actionable info; the user couldn't
|
||||
@@ -28,7 +28,7 @@ describe('Bug #3011: formatSdkPathDiagnostic — Windows shim location and PATH
|
||||
const ir = formatSdkPathDiagnostic({
|
||||
shimDir: 'C:\\Users\\me\\AppData\\Roaming\\npm',
|
||||
platform: 'win32',
|
||||
runDir: 'C:\\Users\\me\\AppData\\Roaming\\npm\\node_modules\\get-shit-done-cc\\bin',
|
||||
runDir: 'C:\\Users\\me\\AppData\\Roaming\\npm\\node_modules\\get-shit-done-redux\\bin',
|
||||
});
|
||||
assert.equal(ir.shimLocationLine,
|
||||
'Shim written to: C:\\Users\\me\\AppData\\Roaming\\npm');
|
||||
@@ -104,7 +104,7 @@ describe('Bug #3011: formatSdkPathDiagnostic — POSIX action lines', () => {
|
||||
const ir = formatSdkPathDiagnostic({
|
||||
shimDir: '/home/me/.local/bin',
|
||||
platform: 'linux',
|
||||
runDir: '/home/me/.local/lib/node_modules/get-shit-done-cc/bin',
|
||||
runDir: '/home/me/.local/lib/node_modules/get-shit-done-redux/bin',
|
||||
});
|
||||
const exports_ = ir.actionLines.filter(l => l.startsWith('export PATH='));
|
||||
assert.equal(exports_.length, 1, `expected 1 export line, got: ${JSON.stringify(ir.actionLines)}`);
|
||||
@@ -115,7 +115,7 @@ describe('Bug #3011: formatSdkPathDiagnostic — POSIX action lines', () => {
|
||||
const ir = formatSdkPathDiagnostic({
|
||||
shimDir: '/usr/local/bin',
|
||||
platform: 'darwin',
|
||||
runDir: '/usr/local/lib/node_modules/get-shit-done-cc/bin',
|
||||
runDir: '/usr/local/lib/node_modules/get-shit-done-redux/bin',
|
||||
});
|
||||
assert.ok(ir.actionLines.some(l => l === 'export PATH="/usr/local/bin:$PATH"'));
|
||||
});
|
||||
@@ -137,7 +137,7 @@ describe('Bug #3011: formatSdkPathDiagnostic — fallback when shimDir is null',
|
||||
platform: 'win32',
|
||||
runDir: 'C:\\some\\path',
|
||||
});
|
||||
assert.ok(ir.actionLines.some(l => l.includes('npm install -g get-shit-done-cc')));
|
||||
assert.ok(ir.actionLines.some(l => l.includes('npm install -g get-shit-done-redux')));
|
||||
});
|
||||
});
|
||||
|
||||
@@ -146,7 +146,7 @@ describe('Bug #3011: formatSdkPathDiagnostic — npx-cache detection', () => {
|
||||
const ir = formatSdkPathDiagnostic({
|
||||
shimDir: '/home/me/.local/bin',
|
||||
platform: 'linux',
|
||||
runDir: '/home/me/.npm/_npx/abc123/node_modules/get-shit-done-cc/bin',
|
||||
runDir: '/home/me/.npm/_npx/abc123/node_modules/get-shit-done-redux/bin',
|
||||
});
|
||||
assert.equal(ir.isNpx, true);
|
||||
assert.ok(ir.npxNoteLines.length >= 2,
|
||||
@@ -159,7 +159,7 @@ describe('Bug #3011: formatSdkPathDiagnostic — npx-cache detection', () => {
|
||||
const ir = formatSdkPathDiagnostic({
|
||||
shimDir: 'C:\\Users\\me\\AppData\\Roaming\\npm',
|
||||
platform: 'win32',
|
||||
runDir: 'C:\\Users\\me\\AppData\\Local\\npm-cache\\_npx\\abc123\\node_modules\\get-shit-done-cc\\bin',
|
||||
runDir: 'C:\\Users\\me\\AppData\\Local\\npm-cache\\_npx\\abc123\\node_modules\\get-shit-done-redux\\bin',
|
||||
});
|
||||
assert.equal(ir.isNpx, true);
|
||||
});
|
||||
@@ -168,7 +168,7 @@ describe('Bug #3011: formatSdkPathDiagnostic — npx-cache detection', () => {
|
||||
const ir = formatSdkPathDiagnostic({
|
||||
shimDir: 'C:\\Users\\me\\AppData\\Roaming\\npm',
|
||||
platform: 'win32',
|
||||
runDir: 'C:\\Users\\me\\AppData\\Roaming\\npm\\node_modules\\get-shit-done-cc\\bin',
|
||||
runDir: 'C:\\Users\\me\\AppData\\Roaming\\npm\\node_modules\\get-shit-done-redux\\bin',
|
||||
});
|
||||
assert.equal(ir.isNpx, false);
|
||||
assert.deepEqual(ir.npxNoteLines, []);
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Regression test for #3033: --sdk flag parsed but never used.
|
||||
*
|
||||
* `hasSdk` was set in bin/install.js but never passed to `installSdkIfNeeded`,
|
||||
* so `npx get-shit-done-cc@latest --sdk` produced a misleading "✓ GSD SDK ready"
|
||||
* so `npx get-shit-done-redux@latest --sdk` produced a misleading "✓ GSD SDK ready"
|
||||
* message while still silently skipping SDK deployment for local installs.
|
||||
*
|
||||
* Fix: `installSdkIfNeeded` now accepts `opts.forceSdk`. When true, the
|
||||
|
||||
@@ -12,13 +12,13 @@ function read(rel) {
|
||||
}
|
||||
|
||||
describe('bug #3091: sdk install guidance and agent fallbacks use query-capable CLI', () => {
|
||||
test('quick workflow install hint references get-shit-done-cc (not @gsd-build/sdk)', () => {
|
||||
test('quick workflow install hint references get-shit-done-redux (not @gsd-redux/sdk)', () => {
|
||||
const content = read('get-shit-done/workflows/quick.md');
|
||||
assert.ok(content.includes('npm install -g get-shit-done-cc'));
|
||||
assert.ok(!content.includes('npm install -g @gsd-build/sdk'));
|
||||
assert.ok(content.includes('npm install -g get-shit-done-redux'));
|
||||
assert.ok(!content.includes('npm install -g @gsd-redux/sdk'));
|
||||
});
|
||||
|
||||
test('agent docs no longer reference node_modules/@gsd-build/sdk/dist/cli.js query fallback', () => {
|
||||
test('agent docs no longer reference node_modules/@gsd-redux/sdk/dist/cli.js query fallback', () => {
|
||||
const files = [
|
||||
'agents/gsd-planner.md',
|
||||
'agents/gsd-executor.md',
|
||||
@@ -26,7 +26,7 @@ describe('bug #3091: sdk install guidance and agent fallbacks use query-capable
|
||||
'agents/gsd-roadmapper.md',
|
||||
];
|
||||
|
||||
const offenders = files.filter((f) => read(f).includes('@gsd-build/sdk/dist/cli.js query'));
|
||||
assert.deepStrictEqual(offenders, [], `stale @gsd-build/sdk query fallback references: ${offenders.join(', ')}`);
|
||||
const offenders = files.filter((f) => read(f).includes('@gsd-redux/sdk/dist/cli.js query'));
|
||||
assert.deepStrictEqual(offenders, [], `stale @gsd-redux/sdk query fallback references: ${offenders.join(', ')}`);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -4,14 +4,14 @@
|
||||
// Regression guard for bug #3130.
|
||||
//
|
||||
// Two failure modes were observed with the pre-fix npx invocation form:
|
||||
// 1. Cache-stale: bare `npx -y get-shit-done-cc@latest` hits npx's local
|
||||
// 1. Cache-stale: bare `npx -y get-shit-done-redux@latest` hits npx's local
|
||||
// cache and may pull an older version instead of @latest.
|
||||
// 2. Token-routing: Bash-tool wrappers misroute the `@` token in
|
||||
// `get-shit-done-cc@latest`, causing npm to error with
|
||||
// "Unknown command: get-shit-done-cc@latest".
|
||||
// `get-shit-done-redux@latest`, causing npm to error with
|
||||
// "Unknown command: get-shit-done-redux@latest".
|
||||
//
|
||||
// The robust form is:
|
||||
// npx -y --package=get-shit-done-cc@latest -- get-shit-done-cc $ARGS
|
||||
// npx -y --package=get-shit-done-redux@latest -- get-shit-done-redux $ARGS
|
||||
//
|
||||
// `--package=` forces a fresh registry fetch, bypassing the npx cache.
|
||||
// `--` clearly delineates npx flags from the run-command, preventing
|
||||
@@ -28,9 +28,9 @@ const UPDATE_WF = path.join(ROOT, 'get-shit-done', 'workflows', 'update.md');
|
||||
const src = fs.readFileSync(UPDATE_WF, 'utf8');
|
||||
|
||||
test('bug #3130: update.md contains no bare npx invocations (cache-stale form)', () => {
|
||||
// Any occurrence of `npx -y get-shit-done-cc@latest` without `--package=`
|
||||
// Any occurrence of `npx -y get-shit-done-redux@latest` without `--package=`
|
||||
// is the stale form that triggers the two failure modes.
|
||||
const stale = (src.match(/npx -y get-shit-done-cc@latest[^\n]*/g) || []);
|
||||
const stale = (src.match(/npx -y get-shit-done-redux@latest[^\n]*/g) || []);
|
||||
assert.deepEqual(
|
||||
stale,
|
||||
[],
|
||||
@@ -40,7 +40,7 @@ test('bug #3130: update.md contains no bare npx invocations (cache-stale form)',
|
||||
|
||||
test('bug #3130: update.md has >=3 robust npx invocations (--package= + -- separator)', () => {
|
||||
// Three sibling invocations: local, global, and unknown/fallback.
|
||||
const robust = (src.match(/npx -y --package=get-shit-done-cc@latest -- get-shit-done-cc/g) || []);
|
||||
const robust = (src.match(/npx -y --package=get-shit-done-redux@latest -- get-shit-done-redux/g) || []);
|
||||
assert.ok(
|
||||
robust.length >= 3,
|
||||
`Expected >=3 robust npx invocations in update.md, found ${robust.length}`,
|
||||
|
||||
@@ -6,7 +6,7 @@ process.env.GSD_TEST_MODE = '1';
|
||||
* Regression tests for bug #3211.
|
||||
*
|
||||
* Windows 11 + PowerShell 7 + Node v22.22.1, fresh
|
||||
* `npx get-shit-done-cc@latest --global --claude`:
|
||||
* `npx get-shit-done-redux@latest --global --claude`:
|
||||
* gsd-sdk: The term 'gsd-sdk' is not recognized
|
||||
*
|
||||
* Root causes (Windows sibling of #3231):
|
||||
@@ -380,7 +380,7 @@ describe('bug #3211-E: isLegacyGsdSdkShim detects legacy marker in .cmd files',
|
||||
[
|
||||
'@ECHO OFF',
|
||||
'@SETLOCAL',
|
||||
'@node "C:\\path\\to\\get-shit-done-cc\\bin\\gsd-sdk.js" %*',
|
||||
'@node "C:\\path\\to\\get-shit-done-redux\\bin\\gsd-sdk.js" %*',
|
||||
'',
|
||||
].join('\r\n'),
|
||||
);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Regression tests for bug #3231.
|
||||
*
|
||||
* `npx get-shit-done-cc@latest` prints `✓ GSD SDK ready (sdk/dist/cli.js)` on
|
||||
* `npx get-shit-done-redux@latest` prints `✓ GSD SDK ready (sdk/dist/cli.js)` on
|
||||
* Linux but no persistent `gsd-sdk` shim is created. Two sub-bugs:
|
||||
*
|
||||
* 1. Transient npx PATH + null login-shell PATH → false success
|
||||
@@ -244,7 +244,7 @@ describe('bug #3231: stale legacy symlink to deprecated gsd-tools.cjs',
|
||||
modernFile,
|
||||
[
|
||||
'#!/usr/bin/env node',
|
||||
"require('/usr/local/lib/node_modules/get-shit-done-cc/bin/gsd-sdk.js');",
|
||||
"require('/usr/local/lib/node_modules/get-shit-done-redux/bin/gsd-sdk.js');",
|
||||
'',
|
||||
].join('\n'),
|
||||
);
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
* ignored by Steps 2-6 on non-GSD projects. The block was dead-but-noisy.
|
||||
*
|
||||
* Fix: gate the runtime bash detection on a positive "is-this-the-framework-
|
||||
* repo" check (package.json name === "get-shit-done-cc") so it runs ONLY when
|
||||
* repo" check (package.json name === "get-shit-done-redux") so it runs ONLY when
|
||||
* analysing the GSD framework's own repo, OR remove the block entirely if no
|
||||
* downstream consumers exist.
|
||||
*
|
||||
@@ -88,7 +88,7 @@ describe('bug #3290 — Group A: layout-detection block must be gated or absent'
|
||||
// A valid gate checks package.json name or an equivalent positive signal
|
||||
// that the current project IS the GSD framework's own repo.
|
||||
const hasFrameworkGate =
|
||||
content.includes('get-shit-done-cc') ||
|
||||
content.includes('get-shit-done-redux') ||
|
||||
content.includes('is-this-the-framework') ||
|
||||
content.includes('framework repo') ||
|
||||
content.includes('Only run') ||
|
||||
@@ -102,7 +102,7 @@ describe('bug #3290 — Group A: layout-detection block must be gated or absent'
|
||||
'bash block (`ls -d .kilo ... || echo unknown`) with no surrounding ' +
|
||||
'framework-repo gate (#3290). ' +
|
||||
'Either remove the block entirely, or wrap it in a check like:\n' +
|
||||
' if [[ "$(jq -r \'.name // ""\' package.json 2>/dev/null)" == "get-shit-done-cc" ]]; then\n' +
|
||||
' if [[ "$(jq -r \'.name // ""\' package.json 2>/dev/null)" == "get-shit-done-redux" ]]; then\n' +
|
||||
' # ... detection block ...\n' +
|
||||
' fi'
|
||||
);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Regression test for bug #3359.
|
||||
*
|
||||
* `npx get-shit-done-cc@latest` can refresh runtime files while an older
|
||||
* `npx get-shit-done-redux@latest` can refresh runtime files while an older
|
||||
* global `gsd-sdk` earlier on PATH remains the executable workflows call.
|
||||
* The installer must not report SDK readiness when the resolved `gsd-sdk`
|
||||
* version differs from the package/runtime version being installed.
|
||||
@@ -91,7 +91,7 @@ describe('bug #3359: installer detects stale gsd-sdk earlier on PATH',
|
||||
`warning must include detected and installer versions. Output:\n${combined}`,
|
||||
);
|
||||
assert.ok(
|
||||
/npm install -g get-shit-done-cc@latest/.test(combined),
|
||||
/npm install -g get-shit-done-redux@latest/.test(combined),
|
||||
`warning must include global update remediation. Output:\n${combined}`,
|
||||
);
|
||||
assert.ok(
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
'use strict';
|
||||
|
||||
/**
|
||||
* Regression tests for #3406 — stale globally-installed `@gsd-build/sdk@0.1.0`
|
||||
* shadows the `gsd-sdk` shim that `get-shit-done-cc` installs. The standalone
|
||||
* Regression tests for #3406 — stale globally-installed `@gsd-redux/sdk@0.1.0`
|
||||
* shadows the `gsd-sdk` shim that `get-shit-done-redux` installs. The standalone
|
||||
* 0.1.0 binary only knows `run | auto | init` (no `query` subcommand), so
|
||||
* every workflow that calls `gsd-sdk query <command>` fails until the user
|
||||
* runs `npm uninstall -g @gsd-build/sdk`.
|
||||
* runs `npm uninstall -g @gsd-redux/sdk`.
|
||||
*
|
||||
* Maintainer decision (per triage): option 2 — detect-and-warn during
|
||||
* install. This test pins the pure detection helper so the install-time
|
||||
@@ -13,7 +13,7 @@
|
||||
*
|
||||
* Test surface is the exported helper `detectStaleStandaloneSdk(runNpmLs)`.
|
||||
* `runNpmLs` is an injected executor: in production it spawns
|
||||
* `npm ls -g @gsd-build/sdk --json --depth=0`; in tests we hand it a stub
|
||||
* `npm ls -g @gsd-redux/sdk --json --depth=0`; in tests we hand it a stub
|
||||
* that returns canned stdout / throws, so the test never touches the host
|
||||
* npm state.
|
||||
*/
|
||||
@@ -35,7 +35,7 @@ describe('#3406: detectStaleStandaloneSdk', () => {
|
||||
});
|
||||
|
||||
test('returns { stale: false } when npm ls reports the package is not installed', () => {
|
||||
// `npm ls -g @gsd-build/sdk --json --depth=0` exit code 1 with this
|
||||
// `npm ls -g @gsd-redux/sdk --json --depth=0` exit code 1 with this
|
||||
// JSON shape is the standard "not present" signal.
|
||||
const stub = () => JSON.stringify({
|
||||
name: 'lib',
|
||||
@@ -45,13 +45,13 @@ describe('#3406: detectStaleStandaloneSdk', () => {
|
||||
assert.deepStrictEqual(result, { stale: false });
|
||||
});
|
||||
|
||||
test('returns { stale: true, version, path? } when @gsd-build/sdk is present', () => {
|
||||
test('returns { stale: true, version, path? } when @gsd-redux/sdk is present', () => {
|
||||
const stub = () => JSON.stringify({
|
||||
name: 'lib',
|
||||
dependencies: {
|
||||
'@gsd-build/sdk': {
|
||||
'@gsd-redux/sdk': {
|
||||
version: '0.1.0',
|
||||
resolved: 'file:/Users/REDACTED/.nvm/versions/node/v24.15.0/lib/node_modules/@gsd-build/sdk',
|
||||
resolved: 'file:/Users/REDACTED/.nvm/versions/node/v24.15.0/lib/node_modules/@gsd-redux/sdk',
|
||||
},
|
||||
},
|
||||
});
|
||||
@@ -90,8 +90,8 @@ describe('#3406: detectStaleStandaloneSdk', () => {
|
||||
// version is an intentional install (or a future republish) and must
|
||||
// NOT be flagged. Without this gate, every maintainer with a local-link
|
||||
// or any future publish would trigger a misleading warning on install.
|
||||
const stubNewer = () => JSON.stringify({ dependencies: { '@gsd-build/sdk': { version: '1.50.0-canary.0' } } });
|
||||
const stubFuture = () => JSON.stringify({ dependencies: { '@gsd-build/sdk': { version: '2.0.0' } } });
|
||||
const stubNewer = () => JSON.stringify({ dependencies: { '@gsd-redux/sdk': { version: '1.50.0-canary.0' } } });
|
||||
const stubFuture = () => JSON.stringify({ dependencies: { '@gsd-redux/sdk': { version: '2.0.0' } } });
|
||||
assert.deepStrictEqual(detectStaleStandaloneSdk(stubNewer), { stale: false });
|
||||
assert.deepStrictEqual(detectStaleStandaloneSdk(stubFuture), { stale: false });
|
||||
});
|
||||
@@ -100,7 +100,7 @@ describe('#3406: detectStaleStandaloneSdk', () => {
|
||||
describe('#3406: install-time wiring stays silent when no stale package is found', () => {
|
||||
// We can't easily stub npm inside a spawned install subprocess without
|
||||
// shelling around it, so the install-side coverage here verifies the
|
||||
// negative case: when @gsd-build/sdk is NOT installed globally (the npm
|
||||
// negative case: when @gsd-redux/sdk is NOT installed globally (the npm
|
||||
// dependency tree on CI is irrelevant — we use a doctored PATH that points
|
||||
// npm at an empty prefix), the install run prints NO #3406 warning. The
|
||||
// positive case is exhaustively covered by detectStaleStandaloneSdk above.
|
||||
@@ -131,8 +131,8 @@ describe('#3406: install-time wiring stays silent when no stale package is found
|
||||
}
|
||||
);
|
||||
assert.ok(
|
||||
!stdout.includes('@gsd-build/sdk'),
|
||||
'install output must not mention @gsd-build/sdk when the package is absent'
|
||||
!stdout.includes('@gsd-redux/sdk'),
|
||||
'install output must not mention @gsd-redux/sdk when the package is absent'
|
||||
);
|
||||
assert.ok(
|
||||
!stdout.includes('#3406'),
|
||||
@@ -158,10 +158,10 @@ describe('#3406: formatStaleStandaloneSdkWarning', () => {
|
||||
|
||||
test('message names the stale package, the version, and the uninstall command', () => {
|
||||
const out = formatStaleStandaloneSdkWarning({ stale: true, version: '0.1.0' });
|
||||
assert.ok(out.includes('@gsd-build/sdk'), 'must name the shadowing package');
|
||||
assert.ok(out.includes('@gsd-redux/sdk'), 'must name the shadowing package');
|
||||
assert.ok(out.includes('0.1.0'), 'must show the stale version');
|
||||
assert.ok(
|
||||
out.includes('npm uninstall -g @gsd-build/sdk'),
|
||||
out.includes('npm uninstall -g @gsd-redux/sdk'),
|
||||
'must include the remediation command verbatim'
|
||||
);
|
||||
assert.ok(out.includes('#3406'), 'must reference the issue for traceability');
|
||||
|
||||
@@ -11,7 +11,7 @@ process.env.GSD_TEST_MODE = '1';
|
||||
* commands from skills/<name>/SKILL.md. Prior installer logic ("Codex now
|
||||
* discovers official skills from .agents/skills") was based on an assumption
|
||||
* that does not match the shipping Codex CLI behavior, leaving users with
|
||||
* workflows on disk and no $gsd-* entrypoints after `npx get-shit-done-cc
|
||||
* workflows on disk and no $gsd-* entrypoints after `npx get-shit-done-redux
|
||||
* --codex --global`.
|
||||
*
|
||||
* Fix: re-wire copyCommandsAsCodexSkills() back into the install dispatch path
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Regression test for #3610: fresh `npx get-shit-done-cc@latest --codex`
|
||||
* Regression test for #3610: fresh `npx get-shit-done-redux@latest --codex`
|
||||
* hard-aborts when the target ~/.codex/hooks/ contains the bundled GSD
|
||||
* hook files (`gsd-check-update-worker.js`, `gsd-prompt-guard.js`, …)
|
||||
* left over from a previous version. The installer-migration report
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
* truly un-reclaimable lock, must still throw with a useful message naming
|
||||
* the holder PID. (This guards against over-reclamation.)
|
||||
*
|
||||
* @see https://github.com/gsd-build/get-shit-done/issues/3670
|
||||
* @see https://github.com/GSD-redux/get-shit-done-redux/issues/3670
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
@@ -50,7 +50,7 @@ describe('#1656: community .sh hooks must be present in hooks/dist', () => {
|
||||
// ─── #1657 ───────────────────────────────────────────────────────────────────
|
||||
//
|
||||
// Historical context: #1657 originally guarded against a broken `promptSdk()`
|
||||
// flow that shipped when `@gsd-build/sdk` did not yet exist on npm. The
|
||||
// flow that shipped when `@gsd-redux/sdk` did not yet exist on npm. The
|
||||
// package was published at v0.1.0 and is now a hard runtime requirement for
|
||||
// every /gsd-* command (they all shell out to `gsd-sdk query …`).
|
||||
//
|
||||
|
||||
@@ -109,7 +109,7 @@ describe('changeset github release notes: tag-range renderer (#3382)', () => {
|
||||
fromRef: 'v1.0.0',
|
||||
toRef: 'v1.0.1',
|
||||
repoSlug: 'example/project',
|
||||
installCommand: 'npx get-shit-done-cc@latest',
|
||||
installCommand: 'npx get-shit-done-redux@latest',
|
||||
});
|
||||
assert.equal(fs.readFileSync(output, 'utf8'), generated.body);
|
||||
});
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Integration test for `get-shit-done/bin/lib/cjs-sdk-bridge.cjs` — locks the
|
||||
* load-success invariant that Phase 5/6 silently violated before this PR.
|
||||
*
|
||||
* Original bug: the bridge used `require('@gsd-build/sdk')` to load the
|
||||
* Original bug: the bridge used `require('@gsd-redux/sdk')` to load the
|
||||
* runtime-bridge module. That package name is not resolvable from the root
|
||||
* `node_modules` (the SDK lives at `./sdk/` as a sibling, not a dependency),
|
||||
* and even if it were, the public entry didn't expose `executeForCjs` or
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
* Regression tests for bug #1991
|
||||
*
|
||||
* Cline is listed in GSD documentation as a supported runtime but was
|
||||
* completely absent from bin/install.js. Running `npx get-shit-done-cc`
|
||||
* completely absent from bin/install.js. Running `npx get-shit-done-redux`
|
||||
* did not show Cline as an option in the interactive menu.
|
||||
*
|
||||
* Fixed: Cline is now a first-class runtime that:
|
||||
|
||||
@@ -105,9 +105,9 @@ const INTERNAL_COMPONENT_SLUGS = new Set([
|
||||
// a real command token.
|
||||
'init-',
|
||||
|
||||
// gsd-build — GitHub organization name: "github.com/gsd-build/get-shit-done".
|
||||
// gsd-build — GitHub organization name: "github.com/GSD-redux/get-shit-done-redux".
|
||||
// Every occurrence of "/gsd-build" in docs is the path component of a GitHub URL
|
||||
// (e.g., "[#2792](https://github.com/gsd-build/get-shit-done/issues/2792)").
|
||||
// (e.g., "[#2792](https://github.com/GSD-redux/get-shit-done-redux/issues/2792)").
|
||||
// The regex captures "/gsd-build" from the URL path. Not a slash command.
|
||||
'build',
|
||||
|
||||
|
||||
@@ -143,7 +143,7 @@ describe('forensics workflow', () => {
|
||||
);
|
||||
});
|
||||
|
||||
test('workflow submits issues to gsd-build/get-shit-done, not the current repo', () => {
|
||||
test('workflow submits issues to GSD-redux/get-shit-done-redux, not the current repo', () => {
|
||||
const content = fs.readFileSync(workflowPath, 'utf-8');
|
||||
// Scope check to the gh issue create invocation — a whole-file search would
|
||||
// pass even if gh issue create lacked --repo, because gh label list also
|
||||
@@ -151,17 +151,17 @@ describe('forensics workflow', () => {
|
||||
assert.match(
|
||||
content,
|
||||
/gh issue create[\s\S]{0,250}--repo\s+gsd-build\/get-shit-done/,
|
||||
'gh issue create must use --repo gsd-build/get-shit-done to avoid submitting to the user\'s current project repo'
|
||||
'gh issue create must use --repo GSD-redux/get-shit-done-redux to avoid submitting to the user\'s current project repo'
|
||||
);
|
||||
});
|
||||
|
||||
test('workflow checks bug label in gsd-build/get-shit-done, not the current repo', () => {
|
||||
test('workflow checks bug label in GSD-redux/get-shit-done-redux, not the current repo', () => {
|
||||
const content = fs.readFileSync(workflowPath, 'utf-8');
|
||||
// Regex is more robust than a fixed-length slice to formatting changes
|
||||
assert.match(
|
||||
content,
|
||||
/gh label list[\s\S]{0,250}--repo\s+gsd-build\/get-shit-done/,
|
||||
'gh label list must target gsd-build/get-shit-done'
|
||||
'gh label list must target GSD-redux/get-shit-done-redux'
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
@@ -85,7 +85,7 @@ describe('release-tarball-smoke', () => {
|
||||
// ── Test C — happy lifecycle ───────────────────────────────────────────────
|
||||
// Verifies that the installed package has all expected command .md files and
|
||||
// that each command resolves a workflow .md file that also exists.
|
||||
// Also verifies that `get-shit-done-cc --local --claude` (init) succeeds in
|
||||
// Also verifies that `get-shit-done-redux --local --claude` (init) succeeds in
|
||||
// the fixtureDir and creates the expected .claude/ directories.
|
||||
test('C: happy lifecycle — command + workflow files resolve OK', () => {
|
||||
const result = runSmoke({
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
* 4. findProjectRoot detects .git at same level as .planning/
|
||||
* 5. @file: handoff present in all workflows that call init
|
||||
*
|
||||
* Regression tests for: https://github.com/gsd-build/get-shit-done/issues/1343
|
||||
* Regression tests for: https://github.com/GSD-redux/get-shit-done-redux/issues/1343
|
||||
*/
|
||||
|
||||
const { test, describe } = require('node:test');
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
* pattern introduced by #2551).
|
||||
*
|
||||
* See:
|
||||
* - https://github.com/gsd-build/get-shit-done/issues/2551 (this test)
|
||||
* - https://github.com/gsd-build/get-shit-done/issues/2361 (agent budget)
|
||||
* - https://github.com/GSD-redux/get-shit-done-redux/issues/2551 (this test)
|
||||
* - https://github.com/GSD-redux/get-shit-done-redux/issues/2361 (agent budget)
|
||||
*/
|
||||
|
||||
const { test, describe } = require('node:test');
|
||||
|
||||
Reference in New Issue
Block a user