* chore(#191): migrate gsd-sdk query call sites to gsd-tools query Retiring the gsd-sdk shim. gsd-tools.cjs already accepts `query` as a meta-prefix (gsd-tools query <command>), so this is a behavior-preserving 1:1 swap across the runtime reference prompts, the graphify hook's commit-detection gate, and two bin/lib comment/message references. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * chore(#191): remove vestigial gsd-sdk shim code from installer + projection The gsd-sdk shim was already not wired up (no gsd-sdk bin in package.json; buildWindowsShimTriple had zero call sites). Remove the dead code: - shell-command-projection.cjs: buildWindowsShimTriple + formatSdkPathDiagnostic (+ their now-unused PACKAGE_NAME import) and exports - install.js: the re-export wrappers + imports, the #3406 stale-standalone-sdk detection (detectStaleStandaloneSdk/formatStaleStandaloneSdkWarning + its global-install call site), and the exports Preserved (retained, not gsd-sdk): buildCodexHookWindowsShimIR (#3426) — only its comments referenced the gsd-sdk pattern; reworded. Also kept the homePathCoveredByRc 'reopen your shell' branch in maybeSuggestPathExport — its logic is bin-dir-agnostic, only the message mentioned gsd-sdk; reworded to use the actual bin dir. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * test(#191): update tests for retired gsd-sdk shim - bug-3441/bug-3442: drop the formatSdkPathDiagnostic / buildWindowsShimTriple assertions (functions removed); retained PATH-action + drift-guard tests stay - bug-505: remove the 'still exported' assertions for detectStaleStandaloneSdk / formatStaleStandaloneSdkWarning / the shim contract surface (#505 kept them; #191 removes them) - graphify-auto-update: migrate the hook-dispatch inputs gsd-sdk query commit -> gsd-tools query commit to match the migrated commit hook Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * docs(#191): point active docs at gsd-tools query (gsd-sdk shim retired) Update the user/agent-facing docs (AGENTS, COMMANDS, CONFIGURATION, USER-GUIDE, ship-pr-body-sections) that presented gsd-sdk query as a current command to gsd-tools query. Historical docs (ADRs, PRDs, release notes) left untouched. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * docs(#191): correct state.load vs state.json description for gsd-tools query Adversarial-review (codex) finding: the migrated USER-GUIDE line claimed both 'gsd-tools query state.json' and 'state.load' resolve to the frontmatter-rebuild handler. Verified they don't — state.load returns the CJS load shape (config + state_raw + flags), state.json returns the frontmatter shape. Both are available via gsd-tools query; corrected the text to say so. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * chore(#191): add changeset for gsd-sdk shim retirement Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -32,23 +32,8 @@ describe('bug #3441: PATH guidance is projected from typed shell action IR', ()
|
||||
assert.equal(typeof projection.projectPathActionProjection, 'function');
|
||||
});
|
||||
|
||||
test('formatSdkPathDiagnostic exposes structured shellActions alongside rendered actionLines', () => {
|
||||
const ir = install.formatSdkPathDiagnostic({
|
||||
shimDir: 'C:\\Users\\me\\AppData\\Roaming\\npm',
|
||||
platform: 'win32',
|
||||
runDir: 'C:\\some\\path',
|
||||
});
|
||||
|
||||
assert.ok(Array.isArray(ir.shellActions), 'shellActions must be an array');
|
||||
assert.ok(ir.shellActions.length >= 3, `expected 3+ shell actions, got ${ir.shellActions.length}`);
|
||||
assert.equal(ir.shellActions[0].label, 'PowerShell');
|
||||
assert.equal(typeof ir.shellActions[0].command, 'string');
|
||||
assert.equal(
|
||||
ir.actionLines.some((line) => line.startsWith('PowerShell:')),
|
||||
true,
|
||||
`rendered action lines should include shell labels: ${JSON.stringify(ir.actionLines)}`,
|
||||
);
|
||||
});
|
||||
// (formatSdkPathDiagnostic removed with the gsd-sdk shim, #191 — the PATH
|
||||
// action projection it wrapped is still covered by the tests below.)
|
||||
|
||||
test('persistent PATH export guidance is projected via the same seam', () => {
|
||||
const posix = projection.projectPathActionProjection({
|
||||
|
||||
@@ -10,8 +10,6 @@ const path = require('node:path');
|
||||
const { spawnSync } = require('node:child_process');
|
||||
|
||||
const ROOT = path.resolve(__dirname, '..');
|
||||
const INSTALL = require(path.join(ROOT, 'bin', 'install.js'));
|
||||
const PROJECTION = require(path.join(ROOT, 'get-shit-done', 'bin', 'lib', 'shell-command-projection.cjs'));
|
||||
const DRIFT_LINT = path.join(ROOT, 'scripts', 'lint-shell-command-projection-drift.cjs');
|
||||
|
||||
function runLint(targetFile) {
|
||||
@@ -21,19 +19,8 @@ function runLint(targetFile) {
|
||||
});
|
||||
}
|
||||
|
||||
describe('bug #3442: shim/wrapper projection seam', () => {
|
||||
test('buildWindowsShimTriple matches shared projection output', () => {
|
||||
const shimSrc = path.join(ROOT, 'bin', 'gsd-sdk.js');
|
||||
const fromInstall = INSTALL.buildWindowsShimTriple(shimSrc);
|
||||
const fromProjection = PROJECTION.buildWindowsShimTriple(shimSrc);
|
||||
assert.deepEqual(fromInstall.invocation, fromProjection.invocation);
|
||||
assert.deepEqual(fromInstall.eol, fromProjection.eol);
|
||||
assert.deepEqual(fromInstall.fileNames, fromProjection.fileNames);
|
||||
assert.equal(fromInstall.render.cmd(), fromProjection.render.cmd());
|
||||
assert.equal(fromInstall.render.ps1(), fromProjection.render.ps1());
|
||||
assert.equal(fromInstall.render.sh(), fromProjection.render.sh());
|
||||
});
|
||||
});
|
||||
// (The buildWindowsShimTriple parity test was removed with the gsd-sdk shim,
|
||||
// #191. The serialized-command drift guard below is retained and unaffected.)
|
||||
|
||||
describe('bug #3442: shim/wrapper serialized-command drift guard', () => {
|
||||
test('drift guard passes for current install.js', () => {
|
||||
|
||||
@@ -54,33 +54,10 @@ describe('bug #505: dead SDK verification subsystem removed from bin/install.js'
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
// Live symbols — MUST still be exported as functions
|
||||
// The stale-standalone-SDK helpers (detectStaleStandaloneSdk,
|
||||
// formatStaleStandaloneSdkWarning) and the gsd-sdk shim contract surface
|
||||
// (buildWindowsShimTriple, formatSdkPathDiagnostic) that #505 kept were
|
||||
// removed when the gsd-sdk shim itself was retired (#191). Their absence is
|
||||
// covered by the dead-symbol assertions above.
|
||||
// ----------------------------------------------------------------
|
||||
test('live function detectStaleStandaloneSdk is still exported', () => {
|
||||
assert.equal(
|
||||
typeof inst.detectStaleStandaloneSdk,
|
||||
'function',
|
||||
'detectStaleStandaloneSdk handles real stale-SDK condition (#3406) and must not be removed',
|
||||
);
|
||||
});
|
||||
|
||||
test('live function formatStaleStandaloneSdkWarning is still exported', () => {
|
||||
assert.equal(
|
||||
typeof inst.formatStaleStandaloneSdkWarning,
|
||||
'function',
|
||||
'formatStaleStandaloneSdkWarning handles real stale-SDK condition (#3406) and must not be removed',
|
||||
);
|
||||
});
|
||||
|
||||
// buildWindowsShimTriple / formatSdkPathDiagnostic have no production caller
|
||||
// after this removal, but they are the install.js side of a projection-contract
|
||||
// drift guard (tests/bug-3441, tests/bug-3442) that assert install.js delegates
|
||||
// to shell-command-projection.cjs. They are deliberately kept exported.
|
||||
test('contract surface buildWindowsShimTriple is still exported', () => {
|
||||
assert.equal(typeof inst.buildWindowsShimTriple, 'function');
|
||||
});
|
||||
|
||||
test('contract surface formatSdkPathDiagnostic is still exported', () => {
|
||||
assert.equal(typeof inst.formatSdkPathDiagnostic, 'function');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -571,11 +571,11 @@ describe('auto-update', () => {
|
||||
'git pull --ff-only',
|
||||
'git rebase --continue',
|
||||
'git cherry-pick abc123',
|
||||
// #3653 — `gsd-sdk query commit` invokes git via spawnSync('git', [...]),
|
||||
// #3653 — `gsd-tools query commit` invokes git via spawnSync('git', [...]),
|
||||
// so the substring "git commit" never appears in tool_input.command.
|
||||
// The hook must match the user-facing SDK invocation directly.
|
||||
'gsd-sdk query commit "docs: probe" --files .planning/STATE.md',
|
||||
'npx gsd-sdk query commit "docs: probe" --files .planning/STATE.md',
|
||||
'gsd-tools query commit "docs: probe" --files .planning/STATE.md',
|
||||
'npx gsd-tools query commit "docs: probe" --files .planning/STATE.md',
|
||||
]) {
|
||||
test(`dispatches on: ${cmd}`, (t) => {
|
||||
const tmpDir = createTempGitRepo({
|
||||
@@ -610,7 +610,7 @@ describe('auto-update', () => {
|
||||
{
|
||||
tool_name: 'Bash',
|
||||
tool_input: {
|
||||
command: 'gsd-sdk query commit-to-subrepo "msg" --files packages/foo',
|
||||
command: 'gsd-tools query commit-to-subrepo "msg" --files packages/foo',
|
||||
},
|
||||
},
|
||||
{ pathPrepend: mockBin },
|
||||
@@ -623,13 +623,13 @@ describe('auto-update', () => {
|
||||
});
|
||||
|
||||
// #3653 — only the SDK `commit` verb invokes git internally. Other
|
||||
// `gsd-sdk query` verbs (phase.complete, roadmap.update-plan-progress,
|
||||
// `gsd-tools query` verbs (phase.complete, roadmap.update-plan-progress,
|
||||
// state.begin-phase) mutate .md files but do NOT advance HEAD; matching
|
||||
// them would cause a spurious rebuild per state mutation.
|
||||
for (const cmd of [
|
||||
'gsd-sdk query phase.complete 109',
|
||||
'gsd-sdk query roadmap.update-plan-progress 109 W001',
|
||||
'gsd-sdk query state.begin-phase 110',
|
||||
'gsd-tools query phase.complete 109',
|
||||
'gsd-tools query roadmap.update-plan-progress 109 W001',
|
||||
'gsd-tools query state.begin-phase 110',
|
||||
]) {
|
||||
test(`does NOT dispatch on non-HEAD-advancing SDK verb: ${cmd}`, (t) => {
|
||||
const tmpDir = createTempGitRepo({
|
||||
|
||||
Reference in New Issue
Block a user