chore(npm): rebrand packages to @opengsd scope (#127)

* chore(npm): rebrand packages to @opengsd scope

Rename:
- get-shit-done-redux → @opengsd/get-shit-done-redux
- @gsd-redux/sdk → @opengsd/gsd-sdk

Add publishConfig.access=public for first-time scoped publish.
CLI binary names (get-shit-done-redux, gsd-sdk, gsd-tools) unchanged.

Sweeps install commands, npx invocations, CI publish/version-check
workflows, tests, docs, READMEs (all translations), and the
PACKAGE_NAME constant in check-latest-version.

Bumps qs 6.15.1 → 6.15.2 to clear a moderate advisory surfaced by
the audit-clean test (GHSA-q8mj-m7cp-5q26).

Closes #126

* chore: pin 2.0.0 release + remove canary workflow

- Bump both packages 1.50.0-canary.0 → 2.0.0 for first @opengsd publish
- Remove .github/workflows/canary.yml and canary dist-tag handling in
  release.yml / release-sdk.yml
- Drop canary section from VERSIONING.md

Refs #126

* chore: address review findings + harden tarball-smoke timeout

- .changeset/opengsd-org-rename.md: match project's custom
  parse.cjs frontmatter (type: Changed / pr: 127); the scoped
  @changesets/cli keys were silently rejected.
- CONTEXT.md: drop two canary-stream policy lines and a dangling
  DEFECT.CANARY-VERSION-LEAK.cross-ref now that canary.yml is gone.
- tests/release-tarball-smoke.install.test.cjs: pass
  timeout: 600_000 for npm pack + global install; the 3-minute
  runNpm default was timing out on slower Docker hosts (cartographer).

Refs #126

* fix(sdk): add missing type/runtime devDependencies for build

prepublishOnly invokes tsc which couldn't resolve @types/node,
@types/ws, or synckit. They had been hoisted from root but were
not declared in sdk/'s own package.json — first publish from a
clean SDK tree failed.

Refs #126

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(ci): use npm pack stdout instead of glob to find tarball

`npm pack --silent` for a scoped package (@opengsd/get-shit-done-redux)
produces `opengsd-get-shit-done-redux-*.tgz`, not `get-shit-done-redux-*.tgz`.
Capture the filename from stdout instead of a hardcoded glob so the step
works regardless of package name format.

Fixes smoke (ubuntu-latest, 22, false) CI failure.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* ci: treat workflow-file changes as test-skip eligible

`.github/workflows/install-smoke.yml` (and other workflow files)
were in neither `test.yml` paths nor `test-skip.yml` paths-ignore,
so neither workflow ran on a workflow-only commit — leaving the
required test-skip check perpetually missing.

Refs #126

* chore: reset version to 1.0.0 for first @opengsd publish

Nothing has been published yet under the @opengsd scope, so the
inaugural release uses 1.0.0 rather than 2.0.0. The "major bump"
in the changeset reflects the breaking install-command change for
users migrating from the prior unscoped `get-shit-done-redux`, not
a numeric continuation from a 1.x line under the new identity.

Refs #126

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:
Tom Boucher
2026-05-22 16:22:41 -04:00
committed by GitHub
parent 76dd22deed
commit 334a64168e
95 changed files with 551 additions and 694 deletions

View File

@@ -66,10 +66,10 @@ describe('bug #2334: quick workflow gsd-sdk pre-flight check', () => {
}
const step2Section = content.slice(step2Start, firstSdkCall);
const hasInstallHint = step2Section.includes('get-shit-done-redux') || step2Section.includes('gsd-update') || step2Section.includes('/gsd-update');
const hasInstallHint = step2Section.includes('@opengsd/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-redux or /gsd-update)'
'Pre-flight error must include a hint on how to install query-capable gsd-sdk (npm install -g @opengsd/get-shit-done-redux or /gsd-update)'
);
});
});

View File

@@ -1,5 +1,5 @@
/**
* Regression test for #2519: @gsd-redux/sdk tarball shipped without dist/
* Regression test for #2519: @opengsd/gsd-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

View File

@@ -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-redux/sdk` was stale and
* Root cause of #2636: when the installed npm `@opengsd/gsd-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

View File

@@ -8,7 +8,7 @@
* 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-redux/sdk@0.1.0` (predates the `query` subcommand).
* `@opengsd/gsd-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.

View File

@@ -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-redux@latest');
assert.strictEqual(ir.fix_command, 'npm install -g @opengsd/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 {

View File

@@ -6,7 +6,7 @@
/**
* Regression test for bug #2775
*
* `npx get-shit-done-redux@latest --global` runs the installer, which prints
* `npx @opengsd/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

View File

@@ -1,7 +1,7 @@
/**
* Regression test for #2829: `command not found: gsd-sdk` with local-mode install.
*
* Repro: a fresh `npx get-shit-done-redux@latest` install with the runtime set
* Repro: a fresh `npx @opengsd/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

View File

@@ -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-redux (no callers can override)', () => {
assert.equal(PACKAGE_NAME, 'get-shit-done-redux');
test('PACKAGE_NAME is the constant @opengsd/get-shit-done-redux (no callers can override)', () => {
assert.equal(PACKAGE_NAME, '@opengsd/get-shit-done-redux');
});
test('CHECK_REASON enum exposes the documented codes', () => {

View File

@@ -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-redux@latest`,
* Reporter (Windows / PowerShell 7) ran `npx @opengsd/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
@@ -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-redux')));
assert.ok(ir.actionLines.some(l => l.includes('npm install -g @opengsd/get-shit-done-redux')));
});
});

View File

@@ -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-redux@latest --sdk` produced a misleading "✓ GSD SDK ready"
* so `npx @opengsd/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

View File

@@ -12,18 +12,20 @@ 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-redux (not @gsd-redux/sdk)', () => {
test('quick workflow install hint references @opengsd/get-shit-done-redux (not @opengsd/gsd-sdk)', () => {
const content = read('get-shit-done/workflows/quick.md');
// After #3668: quick.md uses local-first preflight which may reference
// get-shit-done-redux via npx or npm install -g. Either form is acceptable.
const referencesGsdRedux = content.includes('npm install -g get-shit-done-redux') ||
content.includes('npx get-shit-done-redux');
assert.ok(referencesGsdRedux, 'quick.md install hint must reference get-shit-done-redux');
assert.ok(!content.includes('npm install -g @gsd-redux/sdk'));
assert.ok(!content.includes('npm install -g @gsd-build/sdk'));
// After #3668: quick.md uses local-first preflight which references
// @opengsd/get-shit-done-redux via npx for the --local fallback.
const referencesGsdRedux = content.includes('npm install -g @opengsd/get-shit-done-redux') ||
content.includes('npx @opengsd/get-shit-done-redux');
assert.ok(referencesGsdRedux, 'quick.md install hint must reference @opengsd/get-shit-done-redux');
assert.ok(!content.includes('@gsd-redux/sdk'));
assert.ok(!content.includes('@gsd-build/sdk'));
assert.ok(!content.includes('npm install -g get-shit-done-redux'));
assert.ok(!content.includes('npx get-shit-done-redux@'));
});
test('agent docs no longer reference node_modules/@gsd-redux/sdk/dist/cli.js query fallback', () => {
test('agent docs no longer reference node_modules/@opengsd/gsd-sdk/dist/cli.js query fallback', () => {
const files = [
'agents/gsd-planner.md',
'agents/gsd-executor.md',
@@ -31,7 +33,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-redux/sdk/dist/cli.js query'));
assert.deepStrictEqual(offenders, [], `stale @gsd-redux/sdk query fallback references: ${offenders.join(', ')}`);
const offenders = files.filter((f) => read(f).includes('@opengsd/gsd-sdk/dist/cli.js query'));
assert.deepStrictEqual(offenders, [], `stale @opengsd/gsd-sdk query fallback references: ${offenders.join(', ')}`);
});
});

View File

@@ -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-redux@latest` hits npx's local
// 1. Cache-stale: bare `npx -y @opengsd/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-redux@latest`, causing npm to error with
// "Unknown command: get-shit-done-redux@latest".
// `@opengsd/get-shit-done-redux@latest`, causing npm to error with
// "Unknown command: @opengsd/get-shit-done-redux@latest".
//
// The robust form is:
// npx -y --package=get-shit-done-redux@latest -- get-shit-done-redux $ARGS
// npx -y --package=@opengsd/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-redux@latest` without `--package=`
// Any occurrence of `npx -y @opengsd/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-redux@latest[^\n]*/g) || []);
const stale = (src.match(/npx -y @opengsd\/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-redux@latest -- get-shit-done-redux/g) || []);
const robust = (src.match(/npx -y --package=@opengsd\/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}`,

View File

@@ -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-redux@latest --global --claude`:
* `npx @opengsd/get-shit-done-redux@latest --global --claude`:
* gsd-sdk: The term 'gsd-sdk' is not recognized
*
* Root causes (Windows sibling of #3231):

View File

@@ -1,7 +1,7 @@
/**
* Regression tests for bug #3231.
*
* `npx get-shit-done-redux@latest` prints `✓ GSD SDK ready (sdk/dist/cli.js)` on
* `npx @opengsd/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-redux/bin/gsd-sdk.js');",
"require('/usr/local/lib/node_modules/@opengsd/get-shit-done-redux/bin/gsd-sdk.js');",
'',
].join('\n'),
);

View File

@@ -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-redux") so it runs ONLY when
* repo" check (package.json name === "@opengsd/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-redux') ||
content.includes('@opengsd/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-redux" ]]; then\n' +
' if [[ "$(jq -r \'.name // ""\' package.json 2>/dev/null)" == "@opengsd/get-shit-done-redux" ]]; then\n' +
' # ... detection block ...\n' +
' fi'
);

View File

@@ -1,7 +1,7 @@
/**
* Regression test for bug #3359.
*
* `npx get-shit-done-redux@latest` can refresh runtime files while an older
* `npx @opengsd/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-redux@latest/.test(combined),
/npm install -g @opengsd\/get-shit-done-redux@latest/.test(combined),
`warning must include global update remediation. Output:\n${combined}`,
);
assert.ok(

View File

@@ -1,11 +1,11 @@
'use strict';
/**
* Regression tests for #3406 — stale globally-installed `@gsd-redux/sdk@0.1.0`
* Regression tests for #3406 — stale globally-installed `@opengsd/gsd-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-redux/sdk`.
* runs `npm uninstall -g @opengsd/gsd-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-redux/sdk --json --depth=0`; in tests we hand it a stub
* `npm ls -g @opengsd/gsd-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-redux/sdk --json --depth=0` exit code 1 with this
// `npm ls -g @opengsd/gsd-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-redux/sdk is present', () => {
test('returns { stale: true, version, path? } when @opengsd/gsd-sdk is present', () => {
const stub = () => JSON.stringify({
name: 'lib',
dependencies: {
'@gsd-redux/sdk': {
'@opengsd/gsd-sdk': {
version: '0.1.0',
resolved: 'file:/Users/REDACTED/.nvm/versions/node/v24.15.0/lib/node_modules/@gsd-redux/sdk',
resolved: 'file:/Users/REDACTED/.nvm/versions/node/v24.15.0/lib/node_modules/@opengsd/gsd-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-redux/sdk': { version: '1.50.0-canary.0' } } });
const stubFuture = () => JSON.stringify({ dependencies: { '@gsd-redux/sdk': { version: '2.0.0' } } });
const stubNewer = () => JSON.stringify({ dependencies: { '@opengsd/gsd-sdk': { version: '1.50.0-canary.0' } } });
const stubFuture = () => JSON.stringify({ dependencies: { '@opengsd/gsd-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-redux/sdk is NOT installed globally (the npm
// negative case: when @opengsd/gsd-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-redux/sdk'),
'install output must not mention @gsd-redux/sdk when the package is absent'
!stdout.includes('@opengsd/gsd-sdk'),
'install output must not mention @opengsd/gsd-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-redux/sdk'), 'must name the shadowing package');
assert.ok(out.includes('@opengsd/gsd-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-redux/sdk'),
out.includes('npm uninstall -g @opengsd/gsd-sdk'),
'must include the remediation command verbatim'
);
assert.ok(out.includes('#3406'), 'must reference the issue for traceability');

View File

@@ -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-redux
* workflows on disk and no $gsd-* entrypoints after `npx @opengsd/get-shit-done-redux
* --codex --global`.
*
* Fix: re-wire copyCommandsAsCodexSkills() back into the install dispatch path

View File

@@ -1,5 +1,5 @@
/**
* Regression test for #3610: fresh `npx get-shit-done-redux@latest --codex`
* Regression test for #3610: fresh `npx @opengsd/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

View File

@@ -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-redux/sdk` did not yet exist on npm. The
// flow that shipped when `@opengsd/gsd-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 …`).
//

View File

@@ -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-redux@latest',
installCommand: 'npx @opengsd/get-shit-done-redux@latest',
});
assert.equal(fs.readFileSync(output, 'utf8'), generated.body);
});

View File

@@ -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-redux/sdk')` to load the
* Original bug: the bridge used `require('@opengsd/gsd-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

View File

@@ -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-redux`
* completely absent from bin/install.js. Running `npx @opengsd/get-shit-done-redux`
* did not show Cline as an option in the interactive menu.
*
* Fixed: Cline is now a first-class runtime that:

View File

@@ -128,6 +128,12 @@ const INTERNAL_COMPONENT_SLUGS = new Set([
// the URL path. Not a user-typable slash command in this product.
'opencode',
// gsd-sdk — the @opengsd/gsd-sdk npm package and `gsd-sdk query` CLI binary.
// Docs reference it as a package name (e.g. `@opengsd/gsd-sdk`) and CLI tool
// (e.g. `gsd-sdk query init phase-op 12`). The regex captures "/gsd-sdk" from
// the npm scope path separator in `@opengsd/gsd-sdk`. Not a user-typable slash command.
'sdk',
// Smoke-test directory path — locale docs reference "/tmp/gsd-smoke-$(date +%s)"
// as a temporary directory path in bash code-block examples. The regex captures
// "/gsd-smoke-" from the filesystem path. Not a slash command.

View File

@@ -32,9 +32,16 @@ describe('release-tarball-smoke', () => {
installPrefix = createTempDir('gsd-smoke-prefix-');
fixtureDir = createTempDir('gsd-smoke-fixture-');
// npm pack + npm install -g on a large tarball (1499 files, ~10 MB) can take
// 3–6 minutes on slow Docker hosts (cold disk, constrained CPU). The runNpm
// default timeout of 180 s is sufficient on fast machines but insufficient on
// cartographer-class hosts. 600 s (10 min) gives a safe ceiling without
// masking genuine hangs.
const SLOW_HOST_TIMEOUT = 600_000;
const packOutput = runNpm(
['pack', '--pack-destination', packDir],
{ cwd: path.join(__dirname, '..') },
{ cwd: path.join(__dirname, '..'), timeout: SLOW_HOST_TIMEOUT },
);
// npm pack prints the filename as the last line of stdout.
@@ -48,7 +55,7 @@ describe('release-tarball-smoke', () => {
}
// Install once into installPrefix. All tests share this install.
runNpm(['install', '-g', '--prefix', installPrefix, tarballPath]);
runNpm(['install', '-g', '--prefix', installPrefix, tarballPath], { timeout: SLOW_HOST_TIMEOUT });
});
after(() => {