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:
5
.changeset/opengsd-org-rename.md
Normal file
5
.changeset/opengsd-org-rename.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
type: Changed
|
||||||
|
pr: 127
|
||||||
|
---
|
||||||
|
**Rebrand: rename npm packages to the new @opengsd scope** — `get-shit-done-redux` is now `@opengsd/get-shit-done-redux` and `@gsd-redux/sdk` is now `@opengsd/gsd-sdk`; both packages publish at version **1.0.0** (major bump). CLI binary names (`get-shit-done-redux`, `gsd-sdk`, `gsd-tools`) are unchanged. Update install commands from `npm install -g get-shit-done-redux` to `npm install -g @opengsd/get-shit-done-redux`.
|
||||||
10
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
10
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -17,7 +17,7 @@ body:
|
|||||||
id: version
|
id: version
|
||||||
attributes:
|
attributes:
|
||||||
label: GSD Version
|
label: GSD Version
|
||||||
description: "Run: `npm list -g get-shit-done-redux` or check `npx get-shit-done-redux --version`"
|
description: "Run: `npm list -g @opengsd/get-shit-done-redux` or check `npx @opengsd/get-shit-done-redux --version`"
|
||||||
placeholder: "e.g., 1.18.0"
|
placeholder: "e.g., 1.18.0"
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
@@ -78,8 +78,8 @@ body:
|
|||||||
attributes:
|
attributes:
|
||||||
label: Installation Method
|
label: Installation Method
|
||||||
options:
|
options:
|
||||||
- npx get-shit-done-redux@latest (fresh run)
|
- npx @opengsd/get-shit-done-redux@latest (fresh run)
|
||||||
- npm install -g get-shit-done-redux
|
- npm install -g @opengsd/get-shit-done-redux
|
||||||
- Updated from a previous version
|
- Updated from a previous version
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
@@ -109,7 +109,7 @@ body:
|
|||||||
description: |
|
description: |
|
||||||
Exact steps to reproduce the issue. Include the GSD command used.
|
Exact steps to reproduce the issue. Include the GSD command used.
|
||||||
placeholder: |
|
placeholder: |
|
||||||
1. Install GSD with `npx get-shit-done-redux@latest`
|
1. Install GSD with `npx @opengsd/get-shit-done-redux@latest`
|
||||||
2. Select runtime: Claude Code
|
2. Select runtime: Claude Code
|
||||||
3. Run `/gsd-init` with a new project
|
3. Run `/gsd-init` with a new project
|
||||||
4. Run `/gsd-plan`
|
4. Run `/gsd-plan`
|
||||||
@@ -215,7 +215,7 @@ body:
|
|||||||
Anything else — screenshots, screen recordings, related issues, or links.
|
Anything else — screenshots, screen recordings, related issues, or links.
|
||||||
|
|
||||||
**Useful diagnostics to include (if applicable):**
|
**Useful diagnostics to include (if applicable):**
|
||||||
- `npm list -g get-shit-done-redux` — confirms installed version
|
- `npm list -g @opengsd/get-shit-done-redux` — confirms installed version
|
||||||
- `ls -la ~/.claude/get-shit-done/` — confirms installation files (Claude Code)
|
- `ls -la ~/.claude/get-shit-done/` — confirms installation files (Claude Code)
|
||||||
- `cat ~/.claude/get-shit-done/gsd-file-manifest.json` — file manifest for debugging install issues
|
- `cat ~/.claude/get-shit-done/gsd-file-manifest.json` — file manifest for debugging install issues
|
||||||
- `ls -la .planning/` — confirms planning directory state
|
- `ls -la .planning/` — confirms planning directory state
|
||||||
|
|||||||
157
.github/workflows/canary.yml
vendored
157
.github/workflows/canary.yml
vendored
@@ -1,157 +0,0 @@
|
|||||||
# Release stream policy:
|
|
||||||
# dev → @canary (this workflow — preview builds for the long-lived integration branch)
|
|
||||||
# main → @next (RC train, see release.yml)
|
|
||||||
# main → @latest (stable cuts, see release.yml)
|
|
||||||
#
|
|
||||||
# Streams do not mix. The publish/tag steps below gate on `refs/heads/dev` so a
|
|
||||||
# workflow_dispatch run on any other branch (including main) completes the
|
|
||||||
# build/test/dry-run validation but does not publish or tag.
|
|
||||||
|
|
||||||
name: Canary
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
dry_run:
|
|
||||||
description: 'Dry run (skip npm publish, tagging, and push)'
|
|
||||||
required: false
|
|
||||||
type: boolean
|
|
||||||
default: false
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: canary
|
|
||||||
cancel-in-progress: false
|
|
||||||
|
|
||||||
env:
|
|
||||||
NODE_VERSION: 24
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
canary:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
timeout-minutes: 10
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
id-token: write
|
|
||||||
environment: npm-publish
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0
|
|
||||||
with:
|
|
||||||
node-version: ${{ env.NODE_VERSION }}
|
|
||||||
registry-url: 'https://registry.npmjs.org'
|
|
||||||
cache: 'npm'
|
|
||||||
|
|
||||||
- name: Determine canary version
|
|
||||||
id: canary
|
|
||||||
run: |
|
|
||||||
# Strip any pre-release suffix from package.json version to get base (e.g. 1.39.0-rc.4 → 1.39.0)
|
|
||||||
RAW=$(node -p "require('./package.json').version")
|
|
||||||
BASE=$(echo "$RAW" | sed 's/-.*//')
|
|
||||||
# Find next sequential canary number from existing tags
|
|
||||||
N=1
|
|
||||||
while git tag -l "v${BASE}-canary.${N}" | grep -q .; do
|
|
||||||
N=$((N + 1))
|
|
||||||
done
|
|
||||||
CANARY_VERSION="${BASE}-canary.${N}"
|
|
||||||
echo "canary_version=$CANARY_VERSION" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
- name: Configure git identity
|
|
||||||
run: |
|
|
||||||
git config user.name "github-actions[bot]"
|
|
||||||
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
||||||
|
|
||||||
- name: Bump to canary version
|
|
||||||
env:
|
|
||||||
CANARY_VERSION: ${{ steps.canary.outputs.canary_version }}
|
|
||||||
run: |
|
|
||||||
npm version "$CANARY_VERSION" --no-git-tag-version
|
|
||||||
cd sdk && npm version "$CANARY_VERSION" --no-git-tag-version && cd ..
|
|
||||||
|
|
||||||
- name: Install and test
|
|
||||||
run: |
|
|
||||||
npm ci
|
|
||||||
npm test
|
|
||||||
|
|
||||||
- name: Build SDK dist for tarball
|
|
||||||
run: npm run build:sdk
|
|
||||||
|
|
||||||
- name: Verify tarball ships sdk/dist/cli.js (bug #2647)
|
|
||||||
run: bash scripts/verify-tarball-sdk-dist.sh
|
|
||||||
|
|
||||||
- name: Dry-run publish validation
|
|
||||||
run: |
|
|
||||||
npm publish --dry-run --tag canary
|
|
||||||
cd sdk && npm publish --dry-run --tag canary
|
|
||||||
env:
|
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
||||||
|
|
||||||
- name: Tag and push
|
|
||||||
if: ${{ github.ref == 'refs/heads/dev' && !inputs.dry_run }}
|
|
||||||
env:
|
|
||||||
CANARY_VERSION: ${{ steps.canary.outputs.canary_version }}
|
|
||||||
run: |
|
|
||||||
git tag "v${CANARY_VERSION}"
|
|
||||||
git push origin "v${CANARY_VERSION}"
|
|
||||||
|
|
||||||
- name: Publish to npm (canary)
|
|
||||||
if: ${{ github.ref == 'refs/heads/dev' && !inputs.dry_run }}
|
|
||||||
run: npm publish --provenance --access public --tag canary
|
|
||||||
env:
|
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
||||||
|
|
||||||
- name: Publish SDK to npm (canary)
|
|
||||||
if: ${{ github.ref == 'refs/heads/dev' && !inputs.dry_run }}
|
|
||||||
run: cd sdk && npm publish --provenance --access public --tag canary
|
|
||||||
env:
|
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
||||||
|
|
||||||
- name: Verify publish
|
|
||||||
if: ${{ github.ref == 'refs/heads/dev' && !inputs.dry_run }}
|
|
||||||
env:
|
|
||||||
CANARY_VERSION: ${{ steps.canary.outputs.canary_version }}
|
|
||||||
run: |
|
|
||||||
PUBLISHED="NOT_FOUND"
|
|
||||||
SDK_PUBLISHED="NOT_FOUND"
|
|
||||||
for delay in 5 10 20 30 45; do
|
|
||||||
PUBLISHED=$(npm view get-shit-done-redux@"$CANARY_VERSION" version 2>/dev/null || echo "NOT_FOUND")
|
|
||||||
SDK_PUBLISHED=$(npm view @gsd-redux/sdk@"$CANARY_VERSION" version 2>/dev/null || echo "NOT_FOUND")
|
|
||||||
if [ "$PUBLISHED" = "$CANARY_VERSION" ] && [ "$SDK_PUBLISHED" = "$CANARY_VERSION" ]; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
echo "Not yet live (sleeping ${delay}s)..."
|
|
||||||
sleep "$delay"
|
|
||||||
done
|
|
||||||
if [ "$PUBLISHED" != "$CANARY_VERSION" ]; then
|
|
||||||
echo "::error::Published version verification failed. Expected $CANARY_VERSION, got $PUBLISHED"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "Verified: get-shit-done-redux@$CANARY_VERSION is live on npm"
|
|
||||||
if [ "$SDK_PUBLISHED" != "$CANARY_VERSION" ]; then
|
|
||||||
echo "::error::SDK version verification failed. Expected $CANARY_VERSION, got $SDK_PUBLISHED"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "Verified: @gsd-redux/sdk@$CANARY_VERSION is live on npm"
|
|
||||||
CANARY_TAG=$(npm dist-tag ls get-shit-done-redux 2>/dev/null | grep "canary:" | awk '{print $2}')
|
|
||||||
echo "canary dist-tag points to: $CANARY_TAG"
|
|
||||||
|
|
||||||
- name: Summary
|
|
||||||
env:
|
|
||||||
CANARY_VERSION: ${{ steps.canary.outputs.canary_version }}
|
|
||||||
DRY_RUN: ${{ inputs.dry_run }}
|
|
||||||
PUBLISH_ELIGIBLE: ${{ github.ref == 'refs/heads/dev' && !inputs.dry_run }}
|
|
||||||
BRANCH_REF: ${{ github.ref }}
|
|
||||||
run: |
|
|
||||||
echo "## Canary v${CANARY_VERSION}" >> "$GITHUB_STEP_SUMMARY"
|
|
||||||
if [ "$DRY_RUN" = "true" ]; then
|
|
||||||
echo "**DRY RUN** — npm publish, tagging, and push skipped" >> "$GITHUB_STEP_SUMMARY"
|
|
||||||
elif [ "$PUBLISH_ELIGIBLE" != "true" ]; then
|
|
||||||
echo "**VALIDATION ONLY** — publish/tag skipped for \`${BRANCH_REF}\`; canary publish is gated to \`refs/heads/dev\`." >> "$GITHUB_STEP_SUMMARY"
|
|
||||||
else
|
|
||||||
echo "- Published to npm as \`canary\`" >> "$GITHUB_STEP_SUMMARY"
|
|
||||||
echo "- SDK also published: \`@gsd-redux/sdk@${CANARY_VERSION}\` on \`canary\`" >> "$GITHUB_STEP_SUMMARY"
|
|
||||||
echo "- Tagged \`v${CANARY_VERSION}\`" >> "$GITHUB_STEP_SUMMARY"
|
|
||||||
echo "- Install: \`npx get-shit-done-redux@canary\`" >> "$GITHUB_STEP_SUMMARY"
|
|
||||||
fi
|
|
||||||
4
.github/workflows/install-smoke.yml
vendored
4
.github/workflows/install-smoke.yml
vendored
@@ -147,8 +147,8 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
npm pack --silent
|
TARBALL=$(npm pack --silent)
|
||||||
TARBALL=$(ls get-shit-done-redux-*.tgz | head -1)
|
# npm pack --silent prints the filename on stdout; no glob needed.
|
||||||
echo "tarball=$TARBALL" >> "$GITHUB_OUTPUT"
|
echo "tarball=$TARBALL" >> "$GITHUB_OUTPUT"
|
||||||
echo "Packed: $TARBALL"
|
echo "Packed: $TARBALL"
|
||||||
|
|
||||||
|
|||||||
32
.github/workflows/release-sdk.yml
vendored
32
.github/workflows/release-sdk.yml
vendored
@@ -1,23 +1,17 @@
|
|||||||
# Release SDK Bundle
|
# Release SDK Bundle
|
||||||
#
|
#
|
||||||
# Stopgap workflow_dispatch publish path: builds get-shit-done-redux with the
|
# workflow_dispatch publish path: builds get-shit-done-redux with the
|
||||||
# compiled SDK and the SDK .tgz bundled inside the CC tarball, then
|
# compiled SDK and the SDK .tgz bundled inside the CC tarball, then
|
||||||
# publishes the CC package to ONE chosen dist-tag (dev | next | latest)
|
# publishes the CC package to ONE chosen dist-tag (dev | next | latest)
|
||||||
# per run.
|
# per run.
|
||||||
#
|
#
|
||||||
# Why this exists: @gsd-redux/sdk publishes from canary.yml and release.yml
|
# CC users do not consume @opengsd/gsd-sdk directly — bin/gsd-sdk.js resolves
|
||||||
# fail because the @open-gsd npm token is currently unavailable. CC users
|
|
||||||
# do not consume @gsd-redux/sdk directly — bin/gsd-sdk.js resolves
|
|
||||||
# sdk/dist/cli.js from inside the installed CC package, so the bundled
|
# sdk/dist/cli.js from inside the installed CC package, so the bundled
|
||||||
# copy is sufficient for full functionality. This workflow ships CC alone
|
# copy is sufficient for full functionality. This workflow ships CC alone
|
||||||
# (no separate @gsd-redux/sdk publish attempt) and additionally bakes a
|
# (no separate @opengsd/gsd-sdk publish attempt) and additionally bakes a
|
||||||
# bundled gsd-sdk-<version>.tgz at sdk-bundle/gsd-sdk.tgz inside the CC
|
# bundled gsd-sdk-<version>.tgz at sdk-bundle/gsd-sdk.tgz inside the CC
|
||||||
# tarball as a recoverable npm-installable artifact.
|
# tarball as a recoverable npm-installable artifact.
|
||||||
#
|
#
|
||||||
# Existing canary.yml and release.yml are intentionally untouched. They
|
|
||||||
# remain the canonical two-package publish path; restore them to primary
|
|
||||||
# use once @gsd-redux/sdk ownership is recovered.
|
|
||||||
#
|
|
||||||
# Tracking issues: #2925 (initial workflow), #2929 (CI-gate parity with release.yml)
|
# Tracking issues: #2925 (initial workflow), #2929 (CI-gate parity with release.yml)
|
||||||
|
|
||||||
name: Release SDK Bundle
|
name: Release SDK Bundle
|
||||||
@@ -519,9 +513,9 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
VERSION: ${{ steps.ver.outputs.version }}
|
VERSION: ${{ steps.ver.outputs.version }}
|
||||||
run: |
|
run: |
|
||||||
EXISTING=$(npm view get-shit-done-redux@"$VERSION" version 2>/dev/null || true)
|
EXISTING=$(npm view @opengsd/get-shit-done-redux@"$VERSION" version 2>/dev/null || true)
|
||||||
if [ -n "$EXISTING" ]; then
|
if [ -n "$EXISTING" ]; then
|
||||||
echo "::warning::get-shit-done-redux@${VERSION} is already on the registry — entering reconciliation mode (skip publish, continue with tag/release/PR/dist-tag)."
|
echo "::warning::@opengsd/get-shit-done-redux@${VERSION} is already on the registry — entering reconciliation mode (skip publish, continue with tag/release/PR/dist-tag)."
|
||||||
echo "skip_publish=true" >> "$GITHUB_OUTPUT"
|
echo "skip_publish=true" >> "$GITHUB_OUTPUT"
|
||||||
else
|
else
|
||||||
echo "skip_publish=false" >> "$GITHUB_OUTPUT"
|
echo "skip_publish=false" >> "$GITHUB_OUTPUT"
|
||||||
@@ -579,8 +573,8 @@ jobs:
|
|||||||
set -e
|
set -e
|
||||||
cd sdk
|
cd sdk
|
||||||
npm pack
|
npm pack
|
||||||
# npm pack emits open-gsd-sdk-<version>.tgz in the cwd
|
# npm pack emits opengsd-gsd-sdk-<version>.tgz in the cwd
|
||||||
TARBALL="open-gsd-sdk-${VERSION}.tgz"
|
TARBALL="opengsd-gsd-sdk-${VERSION}.tgz"
|
||||||
if [ ! -f "$TARBALL" ]; then
|
if [ ! -f "$TARBALL" ]; then
|
||||||
echo "::error::Expected $TARBALL but npm pack did not produce it. Listing sdk/:"
|
echo "::error::Expected $TARBALL but npm pack did not produce it. Listing sdk/:"
|
||||||
ls -la
|
ls -la
|
||||||
@@ -670,7 +664,7 @@ jobs:
|
|||||||
VERSION: ${{ steps.ver.outputs.version }}
|
VERSION: ${{ steps.ver.outputs.version }}
|
||||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||||
run: |
|
run: |
|
||||||
npm dist-tag add "get-shit-done-redux@${VERSION}" next
|
npm dist-tag add "@opengsd/get-shit-done-redux@${VERSION}" next
|
||||||
echo "✅ next dist-tag re-pointed to v${VERSION} (matches latest)"
|
echo "✅ next dist-tag re-pointed to v${VERSION} (matches latest)"
|
||||||
|
|
||||||
- name: Create GitHub Release (idempotent)
|
- name: Create GitHub Release (idempotent)
|
||||||
@@ -728,7 +722,7 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
PUBLISHED="NOT_FOUND"
|
PUBLISHED="NOT_FOUND"
|
||||||
for delay in 5 10 20 30 45; do
|
for delay in 5 10 20 30 45; do
|
||||||
PUBLISHED=$(npm view get-shit-done-redux@"$VERSION" version 2>/dev/null || echo "NOT_FOUND")
|
PUBLISHED=$(npm view @opengsd/get-shit-done-redux@"$VERSION" version 2>/dev/null || echo "NOT_FOUND")
|
||||||
if [ "$PUBLISHED" = "$VERSION" ]; then
|
if [ "$PUBLISHED" = "$VERSION" ]; then
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
@@ -739,12 +733,12 @@ jobs:
|
|||||||
echo "::error::Version $VERSION did not appear on the registry within timeout"
|
echo "::error::Version $VERSION did not appear on the registry within timeout"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
TAG_VERSION=$(npm view get-shit-done-redux dist-tags."$TAG" 2>/dev/null || echo "NOT_FOUND")
|
TAG_VERSION=$(npm view @opengsd/get-shit-done-redux dist-tags."$TAG" 2>/dev/null || echo "NOT_FOUND")
|
||||||
if [ "$TAG_VERSION" != "$VERSION" ]; then
|
if [ "$TAG_VERSION" != "$VERSION" ]; then
|
||||||
echo "::error::dist-tag '$TAG' resolves to '$TAG_VERSION', expected '$VERSION'"
|
echo "::error::dist-tag '$TAG' resolves to '$TAG_VERSION', expected '$VERSION'"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "✅ get-shit-done-redux@${VERSION} live on dist-tag '${TAG}'"
|
echo "✅ @opengsd/get-shit-done-redux@${VERSION} live on dist-tag '${TAG}'"
|
||||||
|
|
||||||
- name: Summary
|
- name: Summary
|
||||||
env:
|
env:
|
||||||
@@ -768,7 +762,7 @@ jobs:
|
|||||||
if [ "$DRY_RUN" = "true" ]; then
|
if [ "$DRY_RUN" = "true" ]; then
|
||||||
echo "**DRY RUN** — npm publish, git tag, push, and GitHub Release were skipped."
|
echo "**DRY RUN** — npm publish, git tag, push, and GitHub Release were skipped."
|
||||||
else
|
else
|
||||||
echo "- Published \`get-shit-done-redux@${VERSION}\` to dist-tag \`${TAG}\`"
|
echo "- Published \`@opengsd/get-shit-done-redux@${VERSION}\` to dist-tag \`${TAG}\`"
|
||||||
echo "- SDK bundled inside the CC tarball at:"
|
echo "- SDK bundled inside the CC tarball at:"
|
||||||
echo " - \`sdk/dist/cli.js\` (loose tree, consumed by \`bin/gsd-sdk.js\` shim)"
|
echo " - \`sdk/dist/cli.js\` (loose tree, consumed by \`bin/gsd-sdk.js\` shim)"
|
||||||
echo " - \`sdk-bundle/gsd-sdk.tgz\` (npm-installable artifact)"
|
echo " - \`sdk-bundle/gsd-sdk.tgz\` (npm-installable artifact)"
|
||||||
@@ -785,6 +779,6 @@ jobs:
|
|||||||
# that was never opened.
|
# that was never opened.
|
||||||
echo "- No merge-back PR (auto-picked commits are already on main)"
|
echo "- No merge-back PR (auto-picked commits are already on main)"
|
||||||
fi
|
fi
|
||||||
echo "- Install: \`npm install -g get-shit-done-redux@${TAG}\`"
|
echo "- Install: \`npm install -g @opengsd/get-shit-done-redux@${TAG}\`"
|
||||||
fi
|
fi
|
||||||
} >> "$GITHUB_STEP_SUMMARY"
|
} >> "$GITHUB_STEP_SUMMARY"
|
||||||
|
|||||||
32
.github/workflows/release.yml
vendored
32
.github/workflows/release.yml
vendored
@@ -250,20 +250,20 @@ jobs:
|
|||||||
PRE_VERSION: ${{ steps.prerelease.outputs.pre_version }}
|
PRE_VERSION: ${{ steps.prerelease.outputs.pre_version }}
|
||||||
run: |
|
run: |
|
||||||
sleep 10
|
sleep 10
|
||||||
PUBLISHED=$(npm view get-shit-done-redux@"$PRE_VERSION" version 2>/dev/null || echo "NOT_FOUND")
|
PUBLISHED=$(npm view @opengsd/get-shit-done-redux@"$PRE_VERSION" version 2>/dev/null || echo "NOT_FOUND")
|
||||||
if [ "$PUBLISHED" != "$PRE_VERSION" ]; then
|
if [ "$PUBLISHED" != "$PRE_VERSION" ]; then
|
||||||
echo "::error::Published version verification failed. Expected $PRE_VERSION, got $PUBLISHED"
|
echo "::error::Published version verification failed. Expected $PRE_VERSION, got $PUBLISHED"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "✓ Verified: get-shit-done-redux@$PRE_VERSION is live on npm"
|
echo "✓ Verified: @opengsd/get-shit-done-redux@$PRE_VERSION is live on npm"
|
||||||
SDK_PUBLISHED=$(npm view @gsd-redux/sdk@"$PRE_VERSION" version 2>/dev/null || echo "NOT_FOUND")
|
SDK_PUBLISHED=$(npm view @opengsd/gsd-sdk@"$PRE_VERSION" version 2>/dev/null || echo "NOT_FOUND")
|
||||||
if [ "$SDK_PUBLISHED" != "$PRE_VERSION" ]; then
|
if [ "$SDK_PUBLISHED" != "$PRE_VERSION" ]; then
|
||||||
echo "::error::SDK version verification failed. Expected $PRE_VERSION, got $SDK_PUBLISHED"
|
echo "::error::SDK version verification failed. Expected $PRE_VERSION, got $SDK_PUBLISHED"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "✓ Verified: @gsd-redux/sdk@$PRE_VERSION is live on npm"
|
echo "✓ Verified: @opengsd/gsd-sdk@$PRE_VERSION is live on npm"
|
||||||
# Also verify dist-tag
|
# Also verify dist-tag
|
||||||
NEXT_TAG=$(npm dist-tag ls get-shit-done-redux 2>/dev/null | grep "next:" | awk '{print $2}')
|
NEXT_TAG=$(npm dist-tag ls @opengsd/get-shit-done-redux 2>/dev/null | grep "next:" | awk '{print $2}')
|
||||||
echo "✓ next tag points to: $NEXT_TAG"
|
echo "✓ next tag points to: $NEXT_TAG"
|
||||||
|
|
||||||
- name: Summary
|
- name: Summary
|
||||||
@@ -276,8 +276,8 @@ jobs:
|
|||||||
echo "**DRY RUN** — npm publish, tagging, and push skipped" >> "$GITHUB_STEP_SUMMARY"
|
echo "**DRY RUN** — npm publish, tagging, and push skipped" >> "$GITHUB_STEP_SUMMARY"
|
||||||
else
|
else
|
||||||
echo "- Published to npm as \`next\`" >> "$GITHUB_STEP_SUMMARY"
|
echo "- Published to npm as \`next\`" >> "$GITHUB_STEP_SUMMARY"
|
||||||
echo "- SDK also published: \`@gsd-redux/sdk@${PRE_VERSION}\` on \`next\`" >> "$GITHUB_STEP_SUMMARY"
|
echo "- SDK also published: \`@opengsd/gsd-sdk@${PRE_VERSION}\` on \`next\`" >> "$GITHUB_STEP_SUMMARY"
|
||||||
echo "- Install: \`npx get-shit-done-redux@next\`" >> "$GITHUB_STEP_SUMMARY"
|
echo "- Install: \`npx @opengsd/get-shit-done-redux@next\`" >> "$GITHUB_STEP_SUMMARY"
|
||||||
fi
|
fi
|
||||||
echo "" >> "$GITHUB_STEP_SUMMARY"
|
echo "" >> "$GITHUB_STEP_SUMMARY"
|
||||||
echo "To publish another pre-release: run \`rc\` again" >> "$GITHUB_STEP_SUMMARY"
|
echo "To publish another pre-release: run \`rc\` again" >> "$GITHUB_STEP_SUMMARY"
|
||||||
@@ -426,8 +426,8 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
# Point next to the stable release so @next never returns something
|
# Point next to the stable release so @next never returns something
|
||||||
# older than @latest. This prevents stale pre-release installs.
|
# older than @latest. This prevents stale pre-release installs.
|
||||||
npm dist-tag add "get-shit-done-redux@${VERSION}" next 2>/dev/null || true
|
npm dist-tag add "@opengsd/get-shit-done-redux@${VERSION}" next 2>/dev/null || true
|
||||||
npm dist-tag add "@gsd-redux/sdk@${VERSION}" next 2>/dev/null || true
|
npm dist-tag add "@opengsd/gsd-sdk@${VERSION}" next 2>/dev/null || true
|
||||||
echo "✓ next dist-tag updated to v${VERSION}"
|
echo "✓ next dist-tag updated to v${VERSION}"
|
||||||
|
|
||||||
- name: Verify publish
|
- name: Verify publish
|
||||||
@@ -436,20 +436,20 @@ jobs:
|
|||||||
VERSION: ${{ inputs.version }}
|
VERSION: ${{ inputs.version }}
|
||||||
run: |
|
run: |
|
||||||
sleep 10
|
sleep 10
|
||||||
PUBLISHED=$(npm view get-shit-done-redux@"$VERSION" version 2>/dev/null || echo "NOT_FOUND")
|
PUBLISHED=$(npm view @opengsd/get-shit-done-redux@"$VERSION" version 2>/dev/null || echo "NOT_FOUND")
|
||||||
if [ "$PUBLISHED" != "$VERSION" ]; then
|
if [ "$PUBLISHED" != "$VERSION" ]; then
|
||||||
echo "::error::Published version verification failed. Expected $VERSION, got $PUBLISHED"
|
echo "::error::Published version verification failed. Expected $VERSION, got $PUBLISHED"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "✓ Verified: get-shit-done-redux@$VERSION is live on npm"
|
echo "✓ Verified: @opengsd/get-shit-done-redux@$VERSION is live on npm"
|
||||||
SDK_PUBLISHED=$(npm view @gsd-redux/sdk@"$VERSION" version 2>/dev/null || echo "NOT_FOUND")
|
SDK_PUBLISHED=$(npm view @opengsd/gsd-sdk@"$VERSION" version 2>/dev/null || echo "NOT_FOUND")
|
||||||
if [ "$SDK_PUBLISHED" != "$VERSION" ]; then
|
if [ "$SDK_PUBLISHED" != "$VERSION" ]; then
|
||||||
echo "::error::SDK version verification failed. Expected $VERSION, got $SDK_PUBLISHED"
|
echo "::error::SDK version verification failed. Expected $VERSION, got $SDK_PUBLISHED"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "✓ Verified: @gsd-redux/sdk@$VERSION is live on npm"
|
echo "✓ Verified: @opengsd/gsd-sdk@$VERSION is live on npm"
|
||||||
# Verify latest tag
|
# Verify latest tag
|
||||||
LATEST_TAG=$(npm dist-tag ls get-shit-done-redux 2>/dev/null | grep "latest:" | awk '{print $2}')
|
LATEST_TAG=$(npm dist-tag ls @opengsd/get-shit-done-redux 2>/dev/null | grep "latest:" | awk '{print $2}')
|
||||||
echo "✓ latest tag points to: $LATEST_TAG"
|
echo "✓ latest tag points to: $LATEST_TAG"
|
||||||
|
|
||||||
- name: Summary
|
- name: Summary
|
||||||
@@ -462,8 +462,8 @@ jobs:
|
|||||||
echo "**DRY RUN** — npm publish, tagging, and push skipped" >> "$GITHUB_STEP_SUMMARY"
|
echo "**DRY RUN** — npm publish, tagging, and push skipped" >> "$GITHUB_STEP_SUMMARY"
|
||||||
else
|
else
|
||||||
echo "- Published to npm as \`latest\`" >> "$GITHUB_STEP_SUMMARY"
|
echo "- Published to npm as \`latest\`" >> "$GITHUB_STEP_SUMMARY"
|
||||||
echo "- SDK also published: \`@gsd-redux/sdk@${VERSION}\` as \`latest\`" >> "$GITHUB_STEP_SUMMARY"
|
echo "- SDK also published: \`@opengsd/gsd-sdk@${VERSION}\` as \`latest\`" >> "$GITHUB_STEP_SUMMARY"
|
||||||
echo "- Tagged \`v${VERSION}\`" >> "$GITHUB_STEP_SUMMARY"
|
echo "- Tagged \`v${VERSION}\`" >> "$GITHUB_STEP_SUMMARY"
|
||||||
echo "- PR created to merge back to main" >> "$GITHUB_STEP_SUMMARY"
|
echo "- PR created to merge back to main" >> "$GITHUB_STEP_SUMMARY"
|
||||||
echo "- Install: \`npx get-shit-done-redux@latest\`" >> "$GITHUB_STEP_SUMMARY"
|
echo "- Install: \`npx @opengsd/get-shit-done-redux@latest\`" >> "$GITHUB_STEP_SUMMARY"
|
||||||
fi
|
fi
|
||||||
|
|||||||
3
.github/workflows/test-skip.yml
vendored
3
.github/workflows/test-skip.yml
vendored
@@ -23,8 +23,7 @@ on:
|
|||||||
- 'package.json'
|
- 'package.json'
|
||||||
- 'package-lock.json'
|
- 'package-lock.json'
|
||||||
- 'tsconfig*.json'
|
- 'tsconfig*.json'
|
||||||
- '.github/workflows/test.yml'
|
- '.github/workflows/**'
|
||||||
- '.github/workflows/test-skip.yml'
|
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||||
|
|||||||
3
.github/workflows/test.yml
vendored
3
.github/workflows/test.yml
vendored
@@ -21,8 +21,7 @@ on:
|
|||||||
- 'package.json'
|
- 'package.json'
|
||||||
- 'package-lock.json'
|
- 'package-lock.json'
|
||||||
- 'tsconfig*.json'
|
- 'tsconfig*.json'
|
||||||
- '.github/workflows/test.yml'
|
- '.github/workflows/**'
|
||||||
- '.github/workflows/test-skip.yml'
|
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
|
|||||||
16
CONTEXT.md
16
CONTEXT.md
@@ -253,9 +253,8 @@ Five-axis story decomposition discipline (**S**pike, **P**aths, **I**nterfaces,
|
|||||||
`RELEASE-NOTES.STANDARD.heading-level=## for category, ### for subgroup (area), - for bullet`
|
`RELEASE-NOTES.STANDARD.heading-level=## for category, ### for subgroup (area), - for bullet`
|
||||||
`RELEASE-NOTES.STANDARD.bullet-shape=**Bold user-visible change** — explanation of what was broken or what's new, leading with symptom not implementation. Trailing (#NNN) PR ref.`
|
`RELEASE-NOTES.STANDARD.bullet-shape=**Bold user-visible change** — explanation of what was broken or what's new, leading with symptom not implementation. Trailing (#NNN) PR ref.`
|
||||||
`RELEASE-NOTES.STANDARD.subgroups=phase-planning-state | workstream | query-dispatch-cli | code-review | install | capture | docs | architecture | security`
|
`RELEASE-NOTES.STANDARD.subgroups=phase-planning-state | workstream | query-dispatch-cli | code-review | install | capture | docs | architecture | security`
|
||||||
`RELEASE-NOTES.STANDARD.footer.hotfix=Install/upgrade: \`npx get-shit-done-redux@latest\``
|
`RELEASE-NOTES.STANDARD.footer.hotfix=Install/upgrade: \`npx @opengsd/get-shit-done-redux@latest\``
|
||||||
`RELEASE-NOTES.STANDARD.footer.rc=Install for testing: \`npx get-shit-done-redux@next\` (per branch->dist-tag policy)`
|
`RELEASE-NOTES.STANDARD.footer.rc=Install for testing: \`npx @opengsd/get-shit-done-redux@next\` (per branch->dist-tag policy)`
|
||||||
`RELEASE-NOTES.STANDARD.footer.canary=Install: \`npx get-shit-done-redux@canary\``
|
|
||||||
`RELEASE-NOTES.STANDARD.footer.full-changelog=**Full Changelog**: https://github.com/open-gsd/get-shit-done-redux/compare/<prev>...<this>`
|
`RELEASE-NOTES.STANDARD.footer.full-changelog=**Full Changelog**: https://github.com/open-gsd/get-shit-done-redux/compare/<prev>...<this>`
|
||||||
`RELEASE-NOTES.STANDARD.intro=optional one-paragraph framing for RC/feature releases; omit for pure-fix hotfixes`
|
`RELEASE-NOTES.STANDARD.intro=optional one-paragraph framing for RC/feature releases; omit for pure-fix hotfixes`
|
||||||
|
|
||||||
@@ -277,12 +276,11 @@ Five-axis story decomposition discipline (**S**pike, **P**aths, **I**nterfaces,
|
|||||||
`RELEASE-NOTES.EXAMPLE.rc=v1.42.0-rc1 (https://github.com/open-gsd/get-shit-done-redux/releases/tag/v1.42.0-rc1) - intro + Added/Changed/Fixed/Documentation taxonomy`
|
`RELEASE-NOTES.EXAMPLE.rc=v1.42.0-rc1 (https://github.com/open-gsd/get-shit-done-redux/releases/tag/v1.42.0-rc1) - intro + Added/Changed/Fixed/Documentation taxonomy`
|
||||||
`RELEASE-NOTES.EXAMPLE.minor-auto-acceptable=v1.41.0 - kept auto-generated body; many small fixes with clean conventional-commit titles`
|
`RELEASE-NOTES.EXAMPLE.minor-auto-acceptable=v1.41.0 - kept auto-generated body; many small fixes with clean conventional-commit titles`
|
||||||
|
|
||||||
`RELEASE-NOTES.TEMPLATE.hotfix=## Fixed\n\n### <subgroup>\n- **<bold change>** — <explanation>. (#<PR>)\n\n---\n\nInstall/upgrade: \`npx get-shit-done-redux@latest\`\n\n**Full Changelog**: <compare-url>`
|
`RELEASE-NOTES.TEMPLATE.hotfix=## Fixed\n\n### <subgroup>\n- **<bold change>** — <explanation>. (#<PR>)\n\n---\n\nInstall/upgrade: \`npx @opengsd/get-shit-done-redux@latest\`\n\n**Full Changelog**: <compare-url>`
|
||||||
`RELEASE-NOTES.TEMPLATE.rc=<one-paragraph intro>\n\n## Added\n### <subgroup>\n- **<change>** — <explanation>. (#<PR>)\n\n## Changed\n### Architecture\n- **<refactor>** — <user-visible benefit>. (#<PR>)\n\n## Fixed\n### <subgroup>\n- **<fix>** — <explanation>. (#<PR>)\n\n## Documentation\n- **<docs change>** — <reason>. (#<PR>)\n\n---\n\nThis is a release candidate. Install for testing:\n\`\`\`bash\nnpx get-shit-done-redux@next\n\`\`\`\n\n**Full Changelog**: <compare-url>`
|
`RELEASE-NOTES.TEMPLATE.rc=<one-paragraph intro>\n\n## Added\n### <subgroup>\n- **<change>** — <explanation>. (#<PR>)\n\n## Changed\n### Architecture\n- **<refactor>** — <user-visible benefit>. (#<PR>)\n\n## Fixed\n### <subgroup>\n- **<fix>** — <explanation>. (#<PR>)\n\n## Documentation\n- **<docs change>** — <reason>. (#<PR>)\n\n---\n\nThis is a release candidate. Install for testing:\n\`\`\`bash\nnpx @opengsd/get-shit-done-redux@next\n\`\`\`\n\n**Full Changelog**: <compare-url>`
|
||||||
|
|
||||||
`RELEASE-NOTES.RELEASE-STREAM.dev-branch=canary dist-tag (only); install via @canary`
|
|
||||||
`RELEASE-NOTES.RELEASE-STREAM.main-branch=next (RCs) + latest (stable); install via @next or @latest`
|
`RELEASE-NOTES.RELEASE-STREAM.main-branch=next (RCs) + latest (stable); install via @next or @latest`
|
||||||
`RELEASE-NOTES.RELEASE-STREAM.rule=streams do not mix; do not document @canary install in RC notes or @next in canary notes`
|
`RELEASE-NOTES.RELEASE-STREAM.rule=streams do not mix; do not document @next in hotfix/stable notes`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -553,11 +551,9 @@ Migration plan: Phase 1 (#3465) seam additions complete; Phase 2 (#3466) targets
|
|||||||
`DEFECT.STACKED-PR-CANNOT-STAND-ALONE.anti-pattern=blindly running git rebase --onto origin/main on the patch branch — produces "conflicts" that are really "the scaffolding doesn't exist yet"; resolving them means reinventing the upstream PR's contribution, which duplicates work and creates merge hazards. Recognize the shape early via cat-file probe before rebasing`
|
`DEFECT.STACKED-PR-CANNOT-STAND-ALONE.anti-pattern=blindly running git rebase --onto origin/main on the patch branch — produces "conflicts" that are really "the scaffolding doesn't exist yet"; resolving them means reinventing the upstream PR's contribution, which duplicates work and creates merge hazards. Recognize the shape early via cat-file probe before rebasing`
|
||||||
|
|
||||||
`DEFECT.CANARY-VERSION-LEAK.symptom=package.json version on main carries a -canary.<N> suffix that per release policy belongs to the dev branch only; nothing publishable depends on the version string at runtime, but every consumer of the version metadata (release flow, install banners, statusline) sees the dev-channel label`
|
`DEFECT.CANARY-VERSION-LEAK.symptom=package.json version on main carries a -canary.<N> suffix that per release policy belongs to the dev branch only; nothing publishable depends on the version string at runtime, but every consumer of the version metadata (release flow, install banners, statusline) sees the dev-channel label`
|
||||||
`DEFECT.CANARY-VERSION-LEAK.examples=2026-05-16 audit found origin/main + origin/feat/3575-enforcement-hardening both at "version": "1.50.0-canary.0" in sdk/package.json AND root package.json; npm view @gsd-redux/sdk versions returned ["0.1.0"] only, dist-tag latest=0.1.0, @1.50.0-canary.0 404 — confirms the string is metadata-only, never published. git log -S '"version": "1.50.0-canary.0"' origin/main blamed commit 2d32ad82 fix(plan-phase)... (#3206), a fix PR that accidentally carried the version bump from a dev-branch base`
|
`DEFECT.CANARY-VERSION-LEAK.examples=2026-05-16 audit found origin/main + origin/feat/3575-enforcement-hardening both at "version": "1.50.0-canary.0" in sdk/package.json AND root package.json; npm view @opengsd/gsd-sdk versions returned ["0.1.0"] only, dist-tag latest=0.1.0, @1.50.0-canary.0 404 — confirms the string is metadata-only, never published. git log -S '"version": "1.50.0-canary.0"' origin/main blamed commit 2d32ad82 fix(plan-phase)... (#3206), a fix PR that accidentally carried the version bump from a dev-branch base`
|
||||||
`DEFECT.CANARY-VERSION-LEAK.detect=jq -r .version package.json sdk/package.json on origin/main shows a -canary suffix; OR npm view <pkg> dist-tags shows latest != main's version`
|
`DEFECT.CANARY-VERSION-LEAK.detect=jq -r .version package.json sdk/package.json on origin/main shows a -canary suffix; OR npm view <pkg> dist-tags shows latest != main's version`
|
||||||
`DEFECT.CANARY-VERSION-LEAK.fix-forward=open a chore/* PR against main that resets the version strings to the canonical pre-canary stable; rebase open PRs to pick it up; gate at PR open with a CI check that rejects -canary versions on PRs targeting main`
|
`DEFECT.CANARY-VERSION-LEAK.fix-forward=open a chore/* PR against main that resets the version strings to the canonical pre-canary stable; rebase open PRs to pick it up; gate at PR open with a CI check that rejects -canary versions on PRs targeting main`
|
||||||
`DEFECT.CANARY-VERSION-LEAK.cross-ref=RELEASE-NOTES.RELEASE-STREAM.dev-branch=canary dist-tag (only); this defect is the live counter-example to that rule`
|
|
||||||
|
|
||||||
`DEFECT.GSD-TEST-HOST-MID-RUN-DEATH.symptom=pick_host succeeds at probe time (ssh -o ConnectTimeout=3 -o BatchMode=yes "$h" true); subsequent ssh "$h" 'docker run ...' hangs indefinitely because the chosen host went unreachable between probe and exec; gsd-test-summary buffers stderr until the wrapper exits, so the operator sees no progress at all`
|
`DEFECT.GSD-TEST-HOST-MID-RUN-DEATH.symptom=pick_host succeeds at probe time (ssh -o ConnectTimeout=3 -o BatchMode=yes "$h" true); subsequent ssh "$h" 'docker run ...' hangs indefinitely because the chosen host went unreachable between probe and exec; gsd-test-summary buffers stderr until the wrapper exits, so the operator sees no progress at all`
|
||||||
`DEFECT.GSD-TEST-HOST-MID-RUN-DEATH.examples=2026-05-16 redshirt probed up at 12:48 UTC, gsd-test-summary picked it, docker container spawned, then redshirt's ssh daemon stopped responding — banner-exchange timeout. Test stalled 20+ minutes with the wrapper's output file at 0 bytes`
|
`DEFECT.GSD-TEST-HOST-MID-RUN-DEATH.examples=2026-05-16 redshirt probed up at 12:48 UTC, gsd-test-summary picked it, docker container spawned, then redshirt's ssh daemon stopped responding — banner-exchange timeout. Test stalled 20+ minutes with the wrapper's output file at 0 bytes`
|
||||||
`DEFECT.GSD-TEST-HOST-MID-RUN-DEATH.detect=gsd-test-summary's task output file at /private/tmp/claude-*/tasks/<id>.output stays 0 bytes for >5 min after launch; ps shows the test still alive; ssh -o ConnectTimeout=5 <probed-host> true now times out`
|
`DEFECT.GSD-TEST-HOST-MID-RUN-DEATH.detect=gsd-test-summary's task output file at /private/tmp/claude-*/tasks/<id>.output stays 0 bytes for >5 min after launch; ps shows the test still alive; ssh -o ConnectTimeout=5 <probed-host> true now times out`
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ All six issues carry the `confirmed-bug` label, meaning the bug has been verifie
|
|||||||
| 3 | [#3496](https://github.com/open-gsd/get-shit-done-redux/issues/3496) | `/gsd:update` changelog extraction skips intermediate versions | Workflow / Update logic | `/gsd-quick` or lightweight plan | Medium-small | Not started | Needs deterministic version-range helper. |
|
| 3 | [#3496](https://github.com/open-gsd/get-shit-done-redux/issues/3496) | `/gsd:update` changelog extraction skips intermediate versions | Workflow / Update logic | `/gsd-quick` or lightweight plan | Medium-small | Not started | Needs deterministic version-range helper. |
|
||||||
| 4 | [#3588](https://github.com/open-gsd/get-shit-done-redux/issues/3588) | Production `npm audit` has 1 high + 5 moderate advisories | Security / Dependencies | Direct + careful review | Medium | Not started | Transitive via `@anthropic-ai/claude-agent-sdk`. May need overrides. |
|
| 4 | [#3588](https://github.com/open-gsd/get-shit-done-redux/issues/3588) | Production `npm audit` has 1 high + 5 moderate advisories | Security / Dependencies | Direct + careful review | Medium | Not started | Transitive via `@anthropic-ai/claude-agent-sdk`. May need overrides. |
|
||||||
| 5 | [#3584](https://github.com/open-gsd/get-shit-done-redux/issues/3584) | Runtime `bin/lib/*.cjs` still emit `/gsd:<cmd>` (larger piece deferred from #3583) | Runtime output / Slash formatter | Short plan first, then execute | Medium-Large | Not started | 16+ files. Design a centralized runtime-aware formatter. Do after #3583. |
|
| 5 | [#3584](https://github.com/open-gsd/get-shit-done-redux/issues/3584) | Runtime `bin/lib/*.cjs` still emit `/gsd:<cmd>` (larger piece deferred from #3583) | Runtime output / Slash formatter | Short plan first, then execute | Medium-Large | Not started | 16+ files. Design a centralized runtime-aware formatter. Do after #3583. |
|
||||||
| 6 | [#3340](https://github.com/open-gsd/get-shit-done-redux/issues/3340) | SDK publish lag — agent dir fix never shipped in `@gsd-redux/sdk@0.1.0` | Release / SDK publishing | Plan + coordination | Medium (release-focused) | Not started | Oldest. Mostly a publishing/versioning task. |
|
| 6 | [#3340](https://github.com/open-gsd/get-shit-done-redux/issues/3340) | SDK publish lag — agent dir fix never shipped in `@opengsd/gsd-sdk@0.1.0` | Release / SDK publishing | Plan + coordination | Medium (release-focused) | Not started | Oldest. Mostly a publishing/versioning task. |
|
||||||
|
|
||||||
## Execution Rules for This Batch
|
## Execution Rules for This Batch
|
||||||
|
|
||||||
|
|||||||
@@ -10,8 +10,8 @@
|
|||||||
|
|
||||||
**コンテキストロット(Claudeがコンテキストウィンドウを消費するにつれ品質が劣化する現象)を解決します。**
|
**コンテキストロット(Claudeがコンテキストウィンドウを消費するにつれ品質が劣化する現象)を解決します。**
|
||||||
|
|
||||||
[](https://www.npmjs.com/package/get-shit-done-redux)
|
[](https://www.npmjs.com/package/@opengsd/get-shit-done-redux)
|
||||||
[](https://www.npmjs.com/package/get-shit-done-redux)
|
[](https://www.npmjs.com/package/@opengsd/get-shit-done-redux)
|
||||||
[](https://github.com/open-gsd/get-shit-done-redux/actions/workflows/test.yml)
|
[](https://github.com/open-gsd/get-shit-done-redux/actions/workflows/test.yml)
|
||||||
[](https://discord.gg/mYgfVNfA2r)
|
[](https://discord.gg/mYgfVNfA2r)
|
||||||
[](https://github.com/open-gsd/get-shit-done-redux)
|
[](https://github.com/open-gsd/get-shit-done-redux)
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
<br>
|
<br>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
**Mac、Windows、Linuxで動作します。**
|
**Mac、Windows、Linuxで動作します。**
|
||||||
@@ -84,7 +84,7 @@ GSDはそれを解決します。Claude Codeを信頼性の高いものにする
|
|||||||
- **マージ後ビルド & テストゲート** — `execute-phase` のステップ 5.6 が `workflow.build_command` の設定を自動検出し、無ければ Xcode(`.xcodeproj`)、Makefile、Justfile、Cargo、Go、Python、npm の順にフォールバック。Xcode/iOS プロジェクトでは `xcodebuild build` と `xcodebuild test` を自動実行。並列・直列両モードで動作。
|
- **マージ後ビルド & テストゲート** — `execute-phase` のステップ 5.6 が `workflow.build_command` の設定を自動検出し、無ければ Xcode(`.xcodeproj`)、Makefile、Justfile、Cargo、Go、Python、npm の順にフォールバック。Xcode/iOS プロジェクトでは `xcodebuild build` と `xcodebuild test` を自動実行。並列・直列両モードで動作。
|
||||||
- **ランタイム別レビューモデル選択** — `review.models.<cli>` で各外部レビュー CLI(codex、gemini など)が使うモデルをプランナー/実行プロファイルとは独立に指定可能。
|
- **ランタイム別レビューモデル選択** — `review.models.<cli>` で各外部レビュー CLI(codex、gemini など)が使うモデルをプランナー/実行プロファイルとは独立に指定可能。
|
||||||
- **ワークストリーム設定の継承** — `GSD_WORKSTREAM` が設定されている場合、ルートの `.planning/config.json` を先に読み込み、ワークストリーム設定をディープマージ(衝突時はワークストリーム側が優先)。ワークストリーム設定で明示的に `null` を指定するとルート値を上書き可能。
|
- **ワークストリーム設定の継承** — `GSD_WORKSTREAM` が設定されている場合、ルートの `.planning/config.json` を先に読み込み、ワークストリーム設定をディープマージ(衝突時はワークストリーム側が優先)。ワークストリーム設定で明示的に `null` を指定するとルート値を上書き可能。
|
||||||
- **手動カナリアリリースワークフロー** — `.github/workflows/canary.yml` が `workflow_dispatch` 経由で `dev` ブランチから `{base}-canary.{N}` ビルドを `@canary` dist-tag に手動公開(`get-shit-done-redux` と `@gsd-redux/sdk`)。
|
- **手動カナリアリリースワークフロー** — `.github/workflows/canary.yml` が `workflow_dispatch` 経由で `dev` ブランチから `{base}-canary.{N}` ビルドを `@canary` dist-tag に手動公開(`@opengsd/get-shit-done-redux` と `@opengsd/gsd-sdk`)。
|
||||||
- **スキルの統合:86 → 59** — 4つの新しいグループ化スキル(`capture`、`phase`、`config`、`workspace`)が31のマイクロスキルを吸収。既存の親スキル6つはラップアップやサブ操作をフラグ化:`update --sync/--reapply`、`sketch --wrap-up`、`spike --wrap-up`、`map-codebase --fast/--query`、`code-review --fix`、`progress --do/--next`。機能の欠損なし。
|
- **スキルの統合:86 → 59** — 4つの新しいグループ化スキル(`capture`、`phase`、`config`、`workspace`)が31のマイクロスキルを吸収。既存の親スキル6つはラップアップやサブ操作をフラグ化:`update --sync/--reapply`、`sketch --wrap-up`、`spike --wrap-up`、`map-codebase --fast/--query`、`code-review --fix`、`progress --do/--next`。機能の欠損なし。
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -92,7 +92,7 @@ GSDはそれを解決します。Claude Codeを信頼性の高いものにする
|
|||||||
## はじめに
|
## はじめに
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
インストーラーが以下の選択を求めます:
|
インストーラーが以下の選択を求めます:
|
||||||
@@ -116,7 +116,7 @@ npx get-shit-done-redux@latest
|
|||||||
GSDは急速に進化しています。定期的にアップデートしてください:
|
GSDは急速に進化しています。定期的にアップデートしてください:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
@@ -124,49 +124,49 @@ npx get-shit-done-redux@latest
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Claude Code
|
# Claude Code
|
||||||
npx get-shit-done-redux --claude --global # ~/.claude/ にインストール
|
npx @opengsd/get-shit-done-redux --claude --global # ~/.claude/ にインストール
|
||||||
npx get-shit-done-redux --claude --local # ./.claude/ にインストール
|
npx @opengsd/get-shit-done-redux --claude --local # ./.claude/ にインストール
|
||||||
|
|
||||||
# OpenCode
|
# OpenCode
|
||||||
npx get-shit-done-redux --opencode --global # ~/.config/opencode/ にインストール
|
npx @opengsd/get-shit-done-redux --opencode --global # ~/.config/opencode/ にインストール
|
||||||
|
|
||||||
# Gemini CLI
|
# Gemini CLI
|
||||||
npx get-shit-done-redux --gemini --global # ~/.gemini/ にインストール
|
npx @opengsd/get-shit-done-redux --gemini --global # ~/.gemini/ にインストール
|
||||||
|
|
||||||
# Kilo
|
# Kilo
|
||||||
npx get-shit-done-redux --kilo --global # ~/.config/kilo/ にインストール
|
npx @opengsd/get-shit-done-redux --kilo --global # ~/.config/kilo/ にインストール
|
||||||
npx get-shit-done-redux --kilo --local # ./.kilo/ にインストール
|
npx @opengsd/get-shit-done-redux --kilo --local # ./.kilo/ にインストール
|
||||||
|
|
||||||
# Codex
|
# Codex
|
||||||
npx get-shit-done-redux --codex --global # ~/.codex/ にインストール
|
npx @opengsd/get-shit-done-redux --codex --global # ~/.codex/ にインストール
|
||||||
npx get-shit-done-redux --codex --local # ./.codex/ にインストール
|
npx @opengsd/get-shit-done-redux --codex --local # ./.codex/ にインストール
|
||||||
|
|
||||||
# Copilot
|
# Copilot
|
||||||
npx get-shit-done-redux --copilot --global # ~/.github/ にインストール
|
npx @opengsd/get-shit-done-redux --copilot --global # ~/.github/ にインストール
|
||||||
npx get-shit-done-redux --copilot --local # ./.github/ にインストール
|
npx @opengsd/get-shit-done-redux --copilot --local # ./.github/ にインストール
|
||||||
|
|
||||||
# Cursor CLI
|
# Cursor CLI
|
||||||
npx get-shit-done-redux --cursor --global # ~/.cursor/ にインストール
|
npx @opengsd/get-shit-done-redux --cursor --global # ~/.cursor/ にインストール
|
||||||
npx get-shit-done-redux --cursor --local # ./.cursor/ にインストール
|
npx @opengsd/get-shit-done-redux --cursor --local # ./.cursor/ にインストール
|
||||||
|
|
||||||
# Antigravity
|
# Antigravity
|
||||||
npx get-shit-done-redux --antigravity --global # ~/.gemini/antigravity/ にインストール
|
npx @opengsd/get-shit-done-redux --antigravity --global # ~/.gemini/antigravity/ にインストール
|
||||||
npx get-shit-done-redux --antigravity --local # ./.agent/ にインストール
|
npx @opengsd/get-shit-done-redux --antigravity --local # ./.agent/ にインストール
|
||||||
|
|
||||||
# Augment
|
# Augment
|
||||||
npx get-shit-done-redux --augment --global # ~/.augment/ にインストール
|
npx @opengsd/get-shit-done-redux --augment --global # ~/.augment/ にインストール
|
||||||
npx get-shit-done-redux --augment --local # ./.augment/ にインストール
|
npx @opengsd/get-shit-done-redux --augment --local # ./.augment/ にインストール
|
||||||
|
|
||||||
# Trae
|
# Trae
|
||||||
npx get-shit-done-redux --trae --global # ~/.trae/ にインストール
|
npx @opengsd/get-shit-done-redux --trae --global # ~/.trae/ にインストール
|
||||||
npx get-shit-done-redux --trae --local # ./.trae/ にインストール
|
npx @opengsd/get-shit-done-redux --trae --local # ./.trae/ にインストール
|
||||||
|
|
||||||
# Cline
|
# Cline
|
||||||
npx get-shit-done-redux --cline --global # ~/.cline/ にインストール
|
npx @opengsd/get-shit-done-redux --cline --global # ~/.cline/ にインストール
|
||||||
npx get-shit-done-redux --cline --local # ./.clinerules にインストール
|
npx @opengsd/get-shit-done-redux --cline --local # ./.clinerules にインストール
|
||||||
|
|
||||||
# 全ランタイム
|
# 全ランタイム
|
||||||
npx get-shit-done-redux --all --global # すべてのディレクトリにインストール
|
npx @opengsd/get-shit-done-redux --all --global # すべてのディレクトリにインストール
|
||||||
```
|
```
|
||||||
|
|
||||||
`--global`(`-g`)または `--local`(`-l`)でインストール先の質問をスキップできます。
|
`--global`(`-g`)または `--local`(`-l`)でインストール先の質問をスキップできます。
|
||||||
@@ -785,18 +785,18 @@ GSDのコードベースマッピングおよび分析コマンドは、プロ
|
|||||||
|
|
||||||
**コマンドが期待通りに動作しない?**
|
**コマンドが期待通りに動作しない?**
|
||||||
- `/gsd-help` を実行してインストールを確認してください
|
- `/gsd-help` を実行してインストールを確認してください
|
||||||
- `npx get-shit-done-redux` を再実行して再インストールしてください
|
- `npx @opengsd/get-shit-done-redux` を再実行して再インストールしてください
|
||||||
|
|
||||||
**最新バージョンへのアップデート?**
|
**最新バージョンへのアップデート?**
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
**Dockerまたはコンテナ化環境を使用している?**
|
**Dockerまたはコンテナ化環境を使用している?**
|
||||||
|
|
||||||
チルダパス(`~/.claude/...`)でファイル読み取りが失敗する場合、インストール前に `CLAUDE_CONFIG_DIR` を設定してください:
|
チルダパス(`~/.claude/...`)でファイル読み取りが失敗する場合、インストール前に `CLAUDE_CONFIG_DIR` を設定してください:
|
||||||
```bash
|
```bash
|
||||||
CLAUDE_CONFIG_DIR=/home/youruser/.claude npx get-shit-done-redux --global
|
CLAUDE_CONFIG_DIR=/home/youruser/.claude npx @opengsd/get-shit-done-redux --global
|
||||||
```
|
```
|
||||||
これにより、コンテナ内で正しく展開されない可能性がある `~` の代わりに絶対パスが使用されます。
|
これにより、コンテナ内で正しく展開されない可能性がある `~` の代わりに絶対パスが使用されます。
|
||||||
|
|
||||||
@@ -806,26 +806,26 @@ GSDを完全に削除するには:
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# グローバルインストール
|
# グローバルインストール
|
||||||
npx get-shit-done-redux --claude --global --uninstall
|
npx @opengsd/get-shit-done-redux --claude --global --uninstall
|
||||||
npx get-shit-done-redux --opencode --global --uninstall
|
npx @opengsd/get-shit-done-redux --opencode --global --uninstall
|
||||||
npx get-shit-done-redux --gemini --global --uninstall
|
npx @opengsd/get-shit-done-redux --gemini --global --uninstall
|
||||||
npx get-shit-done-redux --kilo --global --uninstall
|
npx @opengsd/get-shit-done-redux --kilo --global --uninstall
|
||||||
npx get-shit-done-redux --codex --global --uninstall
|
npx @opengsd/get-shit-done-redux --codex --global --uninstall
|
||||||
npx get-shit-done-redux --copilot --global --uninstall
|
npx @opengsd/get-shit-done-redux --copilot --global --uninstall
|
||||||
npx get-shit-done-redux --cursor --global --uninstall
|
npx @opengsd/get-shit-done-redux --cursor --global --uninstall
|
||||||
npx get-shit-done-redux --antigravity --global --uninstall
|
npx @opengsd/get-shit-done-redux --antigravity --global --uninstall
|
||||||
npx get-shit-done-redux --trae --global --uninstall
|
npx @opengsd/get-shit-done-redux --trae --global --uninstall
|
||||||
|
|
||||||
# ローカルインストール(現在のプロジェクト)
|
# ローカルインストール(現在のプロジェクト)
|
||||||
npx get-shit-done-redux --claude --local --uninstall
|
npx @opengsd/get-shit-done-redux --claude --local --uninstall
|
||||||
npx get-shit-done-redux --opencode --local --uninstall
|
npx @opengsd/get-shit-done-redux --opencode --local --uninstall
|
||||||
npx get-shit-done-redux --gemini --local --uninstall
|
npx @opengsd/get-shit-done-redux --gemini --local --uninstall
|
||||||
npx get-shit-done-redux --kilo --local --uninstall
|
npx @opengsd/get-shit-done-redux --kilo --local --uninstall
|
||||||
npx get-shit-done-redux --codex --local --uninstall
|
npx @opengsd/get-shit-done-redux --codex --local --uninstall
|
||||||
npx get-shit-done-redux --copilot --local --uninstall
|
npx @opengsd/get-shit-done-redux --copilot --local --uninstall
|
||||||
npx get-shit-done-redux --cursor --local --uninstall
|
npx @opengsd/get-shit-done-redux --cursor --local --uninstall
|
||||||
npx get-shit-done-redux --antigravity --local --uninstall
|
npx @opengsd/get-shit-done-redux --antigravity --local --uninstall
|
||||||
npx get-shit-done-redux --trae --local --uninstall
|
npx @opengsd/get-shit-done-redux --trae --local --uninstall
|
||||||
```
|
```
|
||||||
|
|
||||||
これにより、他の設定を保持しながら、すべてのGSDコマンド、エージェント、フック、設定が削除されます。
|
これにより、他の設定を保持しながら、すべてのGSDコマンド、エージェント、フック、設定が削除されます。
|
||||||
@@ -834,7 +834,7 @@ npx get-shit-done-redux --trae --local --uninstall
|
|||||||
|
|
||||||
## コミュニティポート
|
## コミュニティポート
|
||||||
|
|
||||||
OpenCode、Gemini CLI、Kilo、Codexは `npx get-shit-done-redux` でネイティブサポートされています。
|
OpenCode、Gemini CLI、Kilo、Codexは `npx @opengsd/get-shit-done-redux` でネイティブサポートされています。
|
||||||
|
|
||||||
以下のコミュニティポートがマルチランタイムサポートの先駆けとなりました:
|
以下のコミュニティポートがマルチランタイムサポートの先駆けとなりました:
|
||||||
|
|
||||||
|
|||||||
@@ -10,8 +10,8 @@
|
|||||||
|
|
||||||
**컨텍스트 rot를 해결합니다 — Claude의 컨텍스트 창이 채워질수록 품질이 저하되는 문제.**
|
**컨텍스트 rot를 해결합니다 — Claude의 컨텍스트 창이 채워질수록 품질이 저하되는 문제.**
|
||||||
|
|
||||||
[](https://www.npmjs.com/package/get-shit-done-redux)
|
[](https://www.npmjs.com/package/@opengsd/get-shit-done-redux)
|
||||||
[](https://www.npmjs.com/package/get-shit-done-redux)
|
[](https://www.npmjs.com/package/@opengsd/get-shit-done-redux)
|
||||||
[](https://github.com/open-gsd/get-shit-done-redux/actions/workflows/test.yml)
|
[](https://github.com/open-gsd/get-shit-done-redux/actions/workflows/test.yml)
|
||||||
[](https://discord.gg/mYgfVNfA2r)
|
[](https://discord.gg/mYgfVNfA2r)
|
||||||
[](https://github.com/open-gsd/get-shit-done-redux)
|
[](https://github.com/open-gsd/get-shit-done-redux)
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
<br>
|
<br>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
**Mac, Windows, Linux 모두 지원.**
|
**Mac, Windows, Linux 모두 지원.**
|
||||||
@@ -84,7 +84,7 @@ GSD가 그걸 고칩니다. Claude Code를 신뢰할 수 있게 만드는 컨텍
|
|||||||
- **머지 후 빌드 & 테스트 게이트** — `execute-phase` 5.6 단계가 `workflow.build_command` 설정을 우선 자동 감지하고, 없으면 Xcode(`.xcodeproj`), Makefile, Justfile, Cargo, Go, Python, npm 순으로 폴백. Xcode/iOS 프로젝트는 `xcodebuild build` 및 `xcodebuild test`를 자동 실행. 병렬·직렬 모드 모두에서 동작.
|
- **머지 후 빌드 & 테스트 게이트** — `execute-phase` 5.6 단계가 `workflow.build_command` 설정을 우선 자동 감지하고, 없으면 Xcode(`.xcodeproj`), Makefile, Justfile, Cargo, Go, Python, npm 순으로 폴백. Xcode/iOS 프로젝트는 `xcodebuild build` 및 `xcodebuild test`를 자동 실행. 병렬·직렬 모드 모두에서 동작.
|
||||||
- **런타임별 리뷰 모델 선택** — `review.models.<cli>`로 각 외부 리뷰 CLI(codex, gemini 등)가 플래너/실행 프로파일과 독립적으로 자체 모델을 선택할 수 있음.
|
- **런타임별 리뷰 모델 선택** — `review.models.<cli>`로 각 외부 리뷰 CLI(codex, gemini 등)가 플래너/실행 프로파일과 독립적으로 자체 모델을 선택할 수 있음.
|
||||||
- **워크스트림 설정 상속** — `GSD_WORKSTREAM`이 설정되면 루트 `.planning/config.json`을 먼저 로드한 뒤 워크스트림 설정을 딥 머지(충돌 시 워크스트림 우선). 워크스트림 설정에서 명시적 `null`은 루트 값을 덮어씀.
|
- **워크스트림 설정 상속** — `GSD_WORKSTREAM`이 설정되면 루트 `.planning/config.json`을 먼저 로드한 뒤 워크스트림 설정을 딥 머지(충돌 시 워크스트림 우선). 워크스트림 설정에서 명시적 `null`은 루트 값을 덮어씀.
|
||||||
- **수동 카나리 릴리스 워크플로** — `.github/workflows/canary.yml`이 `workflow_dispatch`로 `dev` 브랜치에서 `{base}-canary.{N}` 빌드를 `@canary` dist-tag로 수동 게시(`get-shit-done-redux`와 `@gsd-redux/sdk`).
|
- **수동 카나리 릴리스 워크플로** — `.github/workflows/canary.yml`이 `workflow_dispatch`로 `dev` 브랜치에서 `{base}-canary.{N}` 빌드를 `@canary` dist-tag로 수동 게시(`@opengsd/get-shit-done-redux`와 `@opengsd/gsd-sdk`).
|
||||||
- **스킬 통합: 86 → 59** — 4개의 새로운 그룹 스킬(`capture`, `phase`, `config`, `workspace`)이 31개의 마이크로 스킬을 흡수. 기존 6개의 부모 스킬은 래퍼업/하위 동작을 플래그로 흡수: `update --sync/--reapply`, `sketch --wrap-up`, `spike --wrap-up`, `map-codebase --fast/--query`, `code-review --fix`, `progress --do/--next`. 기능 손실 없음.
|
- **스킬 통합: 86 → 59** — 4개의 새로운 그룹 스킬(`capture`, `phase`, `config`, `workspace`)이 31개의 마이크로 스킬을 흡수. 기존 6개의 부모 스킬은 래퍼업/하위 동작을 플래그로 흡수: `update --sync/--reapply`, `sketch --wrap-up`, `spike --wrap-up`, `map-codebase --fast/--query`, `code-review --fix`, `progress --do/--next`. 기능 손실 없음.
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -92,7 +92,7 @@ GSD가 그걸 고칩니다. Claude Code를 신뢰할 수 있게 만드는 컨텍
|
|||||||
## 시작하기
|
## 시작하기
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
설치 중에 다음을 선택합니다:
|
설치 중에 다음을 선택합니다:
|
||||||
@@ -116,7 +116,7 @@ npx get-shit-done-redux@latest
|
|||||||
GSD는 빠르게 발전합니다. 주기적으로 업데이트하세요:
|
GSD는 빠르게 발전합니다. 주기적으로 업데이트하세요:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
@@ -124,49 +124,49 @@ npx get-shit-done-redux@latest
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Claude Code
|
# Claude Code
|
||||||
npx get-shit-done-redux --claude --global # ~/.claude/에 설치
|
npx @opengsd/get-shit-done-redux --claude --global # ~/.claude/에 설치
|
||||||
npx get-shit-done-redux --claude --local # ./.claude/에 설치
|
npx @opengsd/get-shit-done-redux --claude --local # ./.claude/에 설치
|
||||||
|
|
||||||
# OpenCode
|
# OpenCode
|
||||||
npx get-shit-done-redux --opencode --global # ~/.config/opencode/에 설치
|
npx @opengsd/get-shit-done-redux --opencode --global # ~/.config/opencode/에 설치
|
||||||
|
|
||||||
# Gemini CLI
|
# Gemini CLI
|
||||||
npx get-shit-done-redux --gemini --global # ~/.gemini/에 설치
|
npx @opengsd/get-shit-done-redux --gemini --global # ~/.gemini/에 설치
|
||||||
|
|
||||||
# Kilo
|
# Kilo
|
||||||
npx get-shit-done-redux --kilo --global # ~/.config/kilo/에 설치
|
npx @opengsd/get-shit-done-redux --kilo --global # ~/.config/kilo/에 설치
|
||||||
npx get-shit-done-redux --kilo --local # ./.kilo/에 설치
|
npx @opengsd/get-shit-done-redux --kilo --local # ./.kilo/에 설치
|
||||||
|
|
||||||
# Codex
|
# Codex
|
||||||
npx get-shit-done-redux --codex --global # ~/.codex/에 설치
|
npx @opengsd/get-shit-done-redux --codex --global # ~/.codex/에 설치
|
||||||
npx get-shit-done-redux --codex --local # ./.codex/에 설치
|
npx @opengsd/get-shit-done-redux --codex --local # ./.codex/에 설치
|
||||||
|
|
||||||
# Copilot
|
# Copilot
|
||||||
npx get-shit-done-redux --copilot --global # ~/.github/에 설치
|
npx @opengsd/get-shit-done-redux --copilot --global # ~/.github/에 설치
|
||||||
npx get-shit-done-redux --copilot --local # ./.github/에 설치
|
npx @opengsd/get-shit-done-redux --copilot --local # ./.github/에 설치
|
||||||
|
|
||||||
# Cursor CLI
|
# Cursor CLI
|
||||||
npx get-shit-done-redux --cursor --global # ~/.cursor/에 설치
|
npx @opengsd/get-shit-done-redux --cursor --global # ~/.cursor/에 설치
|
||||||
npx get-shit-done-redux --cursor --local # ./.cursor/에 설치
|
npx @opengsd/get-shit-done-redux --cursor --local # ./.cursor/에 설치
|
||||||
|
|
||||||
# Antigravity
|
# Antigravity
|
||||||
npx get-shit-done-redux --antigravity --global # ~/.gemini/antigravity/에 설치
|
npx @opengsd/get-shit-done-redux --antigravity --global # ~/.gemini/antigravity/에 설치
|
||||||
npx get-shit-done-redux --antigravity --local # ./.agent/에 설치
|
npx @opengsd/get-shit-done-redux --antigravity --local # ./.agent/에 설치
|
||||||
|
|
||||||
# Augment
|
# Augment
|
||||||
npx get-shit-done-redux --augment --global # ~/.augment/에 설치
|
npx @opengsd/get-shit-done-redux --augment --global # ~/.augment/에 설치
|
||||||
npx get-shit-done-redux --augment --local # ./.augment/에 설치
|
npx @opengsd/get-shit-done-redux --augment --local # ./.augment/에 설치
|
||||||
|
|
||||||
# Trae
|
# Trae
|
||||||
npx get-shit-done-redux --trae --global # ~/.trae/에 설치
|
npx @opengsd/get-shit-done-redux --trae --global # ~/.trae/에 설치
|
||||||
npx get-shit-done-redux --trae --local # ./.trae/에 설치
|
npx @opengsd/get-shit-done-redux --trae --local # ./.trae/에 설치
|
||||||
|
|
||||||
# Cline
|
# Cline
|
||||||
npx get-shit-done-redux --cline --global # ~/.cline/에 설치
|
npx @opengsd/get-shit-done-redux --cline --global # ~/.cline/에 설치
|
||||||
npx get-shit-done-redux --cline --local # ./.clinerules에 설치
|
npx @opengsd/get-shit-done-redux --cline --local # ./.clinerules에 설치
|
||||||
|
|
||||||
# 전체 런타임
|
# 전체 런타임
|
||||||
npx get-shit-done-redux --all --global # 모든 디렉터리에 설치
|
npx @opengsd/get-shit-done-redux --all --global # 모든 디렉터리에 설치
|
||||||
```
|
```
|
||||||
|
|
||||||
위치 프롬프트 건너뛰기: `--global` (`-g`) 또는 `--local` (`-l`).
|
위치 프롬프트 건너뛰기: `--global` (`-g`) 또는 `--local` (`-l`).
|
||||||
@@ -776,18 +776,18 @@ GSD의 코드베이스 매핑 및 분석 명령어는 프로젝트를 이해하
|
|||||||
|
|
||||||
**명령어가 예상대로 작동하지 않나요?**
|
**명령어가 예상대로 작동하지 않나요?**
|
||||||
- `/gsd-help`를 실행해 설치 확인
|
- `/gsd-help`를 실행해 설치 확인
|
||||||
- `npx get-shit-done-redux`를 다시 실행해 재설치
|
- `npx @opengsd/get-shit-done-redux`를 다시 실행해 재설치
|
||||||
|
|
||||||
**최신 버전으로 업데이트하나요?**
|
**최신 버전으로 업데이트하나요?**
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
**Docker 또는 컨테이너 환경을 사용하나요?**
|
**Docker 또는 컨테이너 환경을 사용하나요?**
|
||||||
|
|
||||||
파일 읽기가 틸드 경로(`~/.claude/...`)로 실패하면 설치 전에 `CLAUDE_CONFIG_DIR`를 설정하세요:
|
파일 읽기가 틸드 경로(`~/.claude/...`)로 실패하면 설치 전에 `CLAUDE_CONFIG_DIR`를 설정하세요:
|
||||||
```bash
|
```bash
|
||||||
CLAUDE_CONFIG_DIR=/home/youruser/.claude npx get-shit-done-redux --global
|
CLAUDE_CONFIG_DIR=/home/youruser/.claude npx @opengsd/get-shit-done-redux --global
|
||||||
```
|
```
|
||||||
컨테이너에서 올바르게 확장되지 않을 수 있는 `~` 대신 절대 경로가 사용됩니다.
|
컨테이너에서 올바르게 확장되지 않을 수 있는 `~` 대신 절대 경로가 사용됩니다.
|
||||||
|
|
||||||
@@ -797,26 +797,26 @@ GSD를 완전히 제거하려면:
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 전역 설치
|
# 전역 설치
|
||||||
npx get-shit-done-redux --claude --global --uninstall
|
npx @opengsd/get-shit-done-redux --claude --global --uninstall
|
||||||
npx get-shit-done-redux --opencode --global --uninstall
|
npx @opengsd/get-shit-done-redux --opencode --global --uninstall
|
||||||
npx get-shit-done-redux --gemini --global --uninstall
|
npx @opengsd/get-shit-done-redux --gemini --global --uninstall
|
||||||
npx get-shit-done-redux --kilo --global --uninstall
|
npx @opengsd/get-shit-done-redux --kilo --global --uninstall
|
||||||
npx get-shit-done-redux --codex --global --uninstall
|
npx @opengsd/get-shit-done-redux --codex --global --uninstall
|
||||||
npx get-shit-done-redux --copilot --global --uninstall
|
npx @opengsd/get-shit-done-redux --copilot --global --uninstall
|
||||||
npx get-shit-done-redux --cursor --global --uninstall
|
npx @opengsd/get-shit-done-redux --cursor --global --uninstall
|
||||||
npx get-shit-done-redux --antigravity --global --uninstall
|
npx @opengsd/get-shit-done-redux --antigravity --global --uninstall
|
||||||
npx get-shit-done-redux --trae --global --uninstall
|
npx @opengsd/get-shit-done-redux --trae --global --uninstall
|
||||||
|
|
||||||
# 로컬 설치 (현재 프로젝트)
|
# 로컬 설치 (현재 프로젝트)
|
||||||
npx get-shit-done-redux --claude --local --uninstall
|
npx @opengsd/get-shit-done-redux --claude --local --uninstall
|
||||||
npx get-shit-done-redux --opencode --local --uninstall
|
npx @opengsd/get-shit-done-redux --opencode --local --uninstall
|
||||||
npx get-shit-done-redux --gemini --local --uninstall
|
npx @opengsd/get-shit-done-redux --gemini --local --uninstall
|
||||||
npx get-shit-done-redux --kilo --local --uninstall
|
npx @opengsd/get-shit-done-redux --kilo --local --uninstall
|
||||||
npx get-shit-done-redux --codex --local --uninstall
|
npx @opengsd/get-shit-done-redux --codex --local --uninstall
|
||||||
npx get-shit-done-redux --copilot --local --uninstall
|
npx @opengsd/get-shit-done-redux --copilot --local --uninstall
|
||||||
npx get-shit-done-redux --cursor --local --uninstall
|
npx @opengsd/get-shit-done-redux --cursor --local --uninstall
|
||||||
npx get-shit-done-redux --antigravity --local --uninstall
|
npx @opengsd/get-shit-done-redux --antigravity --local --uninstall
|
||||||
npx get-shit-done-redux --trae --local --uninstall
|
npx @opengsd/get-shit-done-redux --trae --local --uninstall
|
||||||
```
|
```
|
||||||
|
|
||||||
다른 설정은 그대로 유지하면서 GSD의 모든 명령어, 에이전트, 훅, 설정을 제거합니다.
|
다른 설정은 그대로 유지하면서 GSD의 모든 명령어, 에이전트, 훅, 설정을 제거합니다.
|
||||||
@@ -825,7 +825,7 @@ npx get-shit-done-redux --trae --local --uninstall
|
|||||||
|
|
||||||
## 커뮤니티 포트
|
## 커뮤니티 포트
|
||||||
|
|
||||||
OpenCode, Gemini CLI, Kilo, Codex는 이제 `npx get-shit-done-redux`를 통해 기본 지원됩니다.
|
OpenCode, Gemini CLI, Kilo, Codex는 이제 `npx @opengsd/get-shit-done-redux`를 통해 기본 지원됩니다.
|
||||||
|
|
||||||
이 커뮤니티 포트들이 멀티 런타임 지원의 선구자였습니다:
|
이 커뮤니티 포트들이 멀티 런타임 지원의 선구자였습니다:
|
||||||
|
|
||||||
|
|||||||
18
README.md
18
README.md
@@ -17,9 +17,9 @@
|
|||||||
>
|
>
|
||||||
> | | Before | After |
|
> | | Before | After |
|
||||||
> |---|---|---|
|
> |---|---|---|
|
||||||
> | GitHub | `gsd-build/get-shit-done` | `GSD-redux/get-shit-done-redux` |
|
> | GitHub | `gsd-build/get-shit-done` | `open-gsd/get-shit-done-redux` |
|
||||||
> | npm (main) | `get-shit-done-cc` | `get-shit-done-redux` |
|
> | npm (main) | `get-shit-done-cc` → `get-shit-done-redux` | `@opengsd/get-shit-done-redux` |
|
||||||
> | npm (sdk) | `@gsd-build/sdk` | `@gsd-redux/sdk` |
|
> | npm (sdk) | `@gsd-build/sdk` → `@gsd-redux/sdk` | `@opengsd/gsd-sdk` |
|
||||||
> | Issue numbers | per source | renumbered; original is in body as `[from gsd-build/get-shit-done#N]` |
|
> | Issue numbers | per source | renumbered; original is in body as `[from gsd-build/get-shit-done#N]` |
|
||||||
>
|
>
|
||||||
> If you can reach the original maintainer, please open an issue here and CC them. If you have technical evidence that materially changes the picture above, please share it in an issue.
|
> If you can reach the original maintainer, please open an issue here and CC them. If you have technical evidence that materially changes the picture above, please share it in an issue.
|
||||||
@@ -38,8 +38,8 @@
|
|||||||
|
|
||||||
**Solves context rot — the quality degradation that happens as your AI fills its context window.**
|
**Solves context rot — the quality degradation that happens as your AI fills its context window.**
|
||||||
|
|
||||||
[](https://www.npmjs.com/package/get-shit-done-redux)
|
[](https://www.npmjs.com/package/@opengsd/get-shit-done-redux)
|
||||||
[](https://www.npmjs.com/package/get-shit-done-redux)
|
[](https://www.npmjs.com/package/@opengsd/get-shit-done-redux)
|
||||||
[](https://github.com/open-gsd/get-shit-done-redux/actions/workflows/test.yml)
|
[](https://github.com/open-gsd/get-shit-done-redux/actions/workflows/test.yml)
|
||||||
[](https://discord.gg/mYgfVNfA2r)
|
[](https://discord.gg/mYgfVNfA2r)
|
||||||
[](https://github.com/open-gsd/get-shit-done-redux)
|
[](https://github.com/open-gsd/get-shit-done-redux)
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
<br>
|
<br>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
**Works on Mac, Windows, and Linux.**
|
**Works on Mac, Windows, and Linux.**
|
||||||
@@ -159,7 +159,7 @@ Loop discuss → plan → execute → verify → ship until the milestone is don
|
|||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
The installer prompts for your runtime (Claude Code, OpenCode, Gemini CLI, Kilo, Codex, Copilot, Cursor, Windsurf, and more) and whether to install globally or locally.
|
The installer prompts for your runtime (Claude Code, OpenCode, Gemini CLI, Kilo, Codex, Copilot, Cursor, Windsurf, and more) and whether to install globally or locally.
|
||||||
@@ -254,12 +254,12 @@ For the full configuration reference — all settings, git branching strategies,
|
|||||||
|
|
||||||
**Something broken?** Re-run the installer — it's idempotent:
|
**Something broken?** Re-run the installer — it's idempotent:
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
**Containers or Docker?** Set `CLAUDE_CONFIG_DIR` before installing to avoid tilde-expansion issues:
|
**Containers or Docker?** Set `CLAUDE_CONFIG_DIR` before installing to avoid tilde-expansion issues:
|
||||||
```bash
|
```bash
|
||||||
CLAUDE_CONFIG_DIR=/home/youruser/.claude npx get-shit-done-redux --global
|
CLAUDE_CONFIG_DIR=/home/youruser/.claude npx @opengsd/get-shit-done-redux --global
|
||||||
```
|
```
|
||||||
|
|
||||||
Full troubleshooting and uninstall instructions in **[docs/USER-GUIDE.md](docs/USER-GUIDE.md#troubleshooting)**.
|
Full troubleshooting and uninstall instructions in **[docs/USER-GUIDE.md](docs/USER-GUIDE.md#troubleshooting)**.
|
||||||
|
|||||||
104
README.pt-BR.md
104
README.pt-BR.md
@@ -10,8 +10,8 @@
|
|||||||
|
|
||||||
**Resolve context rot — a degradação de qualidade que acontece conforme o Claude enche a janela de contexto.**
|
**Resolve context rot — a degradação de qualidade que acontece conforme o Claude enche a janela de contexto.**
|
||||||
|
|
||||||
[](https://www.npmjs.com/package/get-shit-done-redux)
|
[](https://www.npmjs.com/package/@opengsd/get-shit-done-redux)
|
||||||
[](https://www.npmjs.com/package/get-shit-done-redux)
|
[](https://www.npmjs.com/package/@opengsd/get-shit-done-redux)
|
||||||
[](https://github.com/open-gsd/get-shit-done-redux/actions/workflows/test.yml)
|
[](https://github.com/open-gsd/get-shit-done-redux/actions/workflows/test.yml)
|
||||||
[](https://discord.gg/mYgfVNfA2r)
|
[](https://discord.gg/mYgfVNfA2r)
|
||||||
[](https://github.com/open-gsd/get-shit-done-redux)
|
[](https://github.com/open-gsd/get-shit-done-redux)
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
<br>
|
<br>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
**Funciona em Mac, Windows e Linux.**
|
**Funciona em Mac, Windows e Linux.**
|
||||||
@@ -82,7 +82,7 @@ Lista completa nas [notas de release v1.39.0](https://github.com/open-gsd/get-sh
|
|||||||
- **Build & test gate pós-merge** — o passo 5.6 de `execute-phase` agora detecta automaticamente o comando de build em `workflow.build_command`, com fallback para Xcode (`.xcodeproj`), Makefile, Justfile, Cargo, Go, Python ou npm. Projetos Xcode/iOS rodam `xcodebuild build` e `xcodebuild test` automaticamente. Funciona em modo paralelo e serial.
|
- **Build & test gate pós-merge** — o passo 5.6 de `execute-phase` agora detecta automaticamente o comando de build em `workflow.build_command`, com fallback para Xcode (`.xcodeproj`), Makefile, Justfile, Cargo, Go, Python ou npm. Projetos Xcode/iOS rodam `xcodebuild build` e `xcodebuild test` automaticamente. Funciona em modo paralelo e serial.
|
||||||
- **Modelo de review por runtime** — `review.models.<cli>` permite que cada CLI externa de review (codex, gemini, etc.) escolha seu próprio modelo, independente do perfil de planner/executor.
|
- **Modelo de review por runtime** — `review.models.<cli>` permite que cada CLI externa de review (codex, gemini, etc.) escolha seu próprio modelo, independente do perfil de planner/executor.
|
||||||
- **Herança de configuração de workstream** — quando `GSD_WORKSTREAM` está definido, o `.planning/config.json` raiz é carregado primeiro e merge-deep com o config da workstream (workstream vence em conflito). Um `null` explícito no config da workstream sobrescreve corretamente o valor raiz.
|
- **Herança de configuração de workstream** — quando `GSD_WORKSTREAM` está definido, o `.planning/config.json` raiz é carregado primeiro e merge-deep com o config da workstream (workstream vence em conflito). Um `null` explícito no config da workstream sobrescreve corretamente o valor raiz.
|
||||||
- **Workflow manual de canary release** — `.github/workflows/canary.yml` publica builds `{base}-canary.{N}` de `get-shit-done-redux` e `@gsd-redux/sdk` na dist-tag `@canary` a partir de `dev`, sob demanda via `workflow_dispatch`.
|
- **Workflow manual de canary release** — `.github/workflows/canary.yml` publica builds `{base}-canary.{N}` de `@opengsd/get-shit-done-redux` e `@opengsd/gsd-sdk` na dist-tag `@canary` a partir de `dev`, sob demanda via `workflow_dispatch`.
|
||||||
- **Consolidação de skills: 86 → 59** — 4 novos skills agrupados (`capture`, `phase`, `config`, `workspace`) absorvem 31 micro-skills. 6 skills pais existentes absorvem wrap-up e sub-operações como flags: `update --sync/--reapply`, `sketch --wrap-up`, `spike --wrap-up`, `map-codebase --fast/--query`, `code-review --fix`, `progress --do/--next`. Sem perda funcional.
|
- **Consolidação de skills: 86 → 59** — 4 novos skills agrupados (`capture`, `phase`, `config`, `workspace`) absorvem 31 micro-skills. 6 skills pais existentes absorvem wrap-up e sub-operações como flags: `update --sync/--reapply`, `sketch --wrap-up`, `spike --wrap-up`, `map-codebase --fast/--query`, `code-review --fix`, `progress --do/--next`. Sem perda funcional.
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -90,7 +90,7 @@ Lista completa nas [notas de release v1.39.0](https://github.com/open-gsd/get-sh
|
|||||||
## Primeiros passos
|
## Primeiros passos
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
O instalador pede:
|
O instalador pede:
|
||||||
@@ -112,7 +112,7 @@ Verifique com:
|
|||||||
### Mantendo atualizado
|
### Mantendo atualizado
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
@@ -120,49 +120,49 @@ npx get-shit-done-redux@latest
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Claude Code
|
# Claude Code
|
||||||
npx get-shit-done-redux --claude --global
|
npx @opengsd/get-shit-done-redux --claude --global
|
||||||
npx get-shit-done-redux --claude --local
|
npx @opengsd/get-shit-done-redux --claude --local
|
||||||
|
|
||||||
# OpenCode
|
# OpenCode
|
||||||
npx get-shit-done-redux --opencode --global
|
npx @opengsd/get-shit-done-redux --opencode --global
|
||||||
|
|
||||||
# Gemini CLI
|
# Gemini CLI
|
||||||
npx get-shit-done-redux --gemini --global
|
npx @opengsd/get-shit-done-redux --gemini --global
|
||||||
|
|
||||||
# Kilo
|
# Kilo
|
||||||
npx get-shit-done-redux --kilo --global
|
npx @opengsd/get-shit-done-redux --kilo --global
|
||||||
npx get-shit-done-redux --kilo --local
|
npx @opengsd/get-shit-done-redux --kilo --local
|
||||||
|
|
||||||
# Codex
|
# Codex
|
||||||
npx get-shit-done-redux --codex --global
|
npx @opengsd/get-shit-done-redux --codex --global
|
||||||
npx get-shit-done-redux --codex --local
|
npx @opengsd/get-shit-done-redux --codex --local
|
||||||
|
|
||||||
# Copilot
|
# Copilot
|
||||||
npx get-shit-done-redux --copilot --global
|
npx @opengsd/get-shit-done-redux --copilot --global
|
||||||
npx get-shit-done-redux --copilot --local
|
npx @opengsd/get-shit-done-redux --copilot --local
|
||||||
|
|
||||||
# Cursor
|
# Cursor
|
||||||
npx get-shit-done-redux --cursor --global
|
npx @opengsd/get-shit-done-redux --cursor --global
|
||||||
npx get-shit-done-redux --cursor --local
|
npx @opengsd/get-shit-done-redux --cursor --local
|
||||||
|
|
||||||
# Antigravity
|
# Antigravity
|
||||||
npx get-shit-done-redux --antigravity --global
|
npx @opengsd/get-shit-done-redux --antigravity --global
|
||||||
npx get-shit-done-redux --antigravity --local
|
npx @opengsd/get-shit-done-redux --antigravity --local
|
||||||
|
|
||||||
# Augment
|
# Augment
|
||||||
npx get-shit-done-redux --augment --global # Install to ~/.augment/
|
npx @opengsd/get-shit-done-redux --augment --global # Install to ~/.augment/
|
||||||
npx get-shit-done-redux --augment --local # Install to ./.augment/
|
npx @opengsd/get-shit-done-redux --augment --local # Install to ./.augment/
|
||||||
|
|
||||||
# Trae
|
# Trae
|
||||||
npx get-shit-done-redux --trae --global # Install to ~/.trae/
|
npx @opengsd/get-shit-done-redux --trae --global # Install to ~/.trae/
|
||||||
npx get-shit-done-redux --trae --local # Install to ./.trae/
|
npx @opengsd/get-shit-done-redux --trae --local # Install to ./.trae/
|
||||||
|
|
||||||
# Cline
|
# Cline
|
||||||
npx get-shit-done-redux --cline --global # Install to ~/.cline/
|
npx @opengsd/get-shit-done-redux --cline --global # Install to ~/.cline/
|
||||||
npx get-shit-done-redux --cline --local # Install to ./.clinerules
|
npx @opengsd/get-shit-done-redux --cline --local # Install to ./.clinerules
|
||||||
|
|
||||||
# Todos
|
# Todos
|
||||||
npx get-shit-done-redux --all --global
|
npx @opengsd/get-shit-done-redux --all --global
|
||||||
```
|
```
|
||||||
|
|
||||||
Use `--global` (`-g`) ou `--local` (`-l`) para pular a pergunta de local.
|
Use `--global` (`-g`) ou `--local` (`-l`) para pular a pergunta de local.
|
||||||
@@ -415,50 +415,50 @@ Adicione padrões sensíveis ao deny list do Claude Code:
|
|||||||
|
|
||||||
**Comandos não funcionam como esperado?**
|
**Comandos não funcionam como esperado?**
|
||||||
- Rode `/gsd-help`
|
- Rode `/gsd-help`
|
||||||
- Reinstale com `npx get-shit-done-redux@latest`
|
- Reinstale com `npx @opengsd/get-shit-done-redux@latest`
|
||||||
|
|
||||||
**Em Docker/container?**
|
**Em Docker/container?**
|
||||||
- Defina `CLAUDE_CONFIG_DIR` antes da instalação:
|
- Defina `CLAUDE_CONFIG_DIR` antes da instalação:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
CLAUDE_CONFIG_DIR=/home/youruser/.claude npx get-shit-done-redux --global
|
CLAUDE_CONFIG_DIR=/home/youruser/.claude npx @opengsd/get-shit-done-redux --global
|
||||||
```
|
```
|
||||||
|
|
||||||
### Desinstalar
|
### Desinstalar
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Instalações globais
|
# Instalações globais
|
||||||
npx get-shit-done-redux --claude --global --uninstall
|
npx @opengsd/get-shit-done-redux --claude --global --uninstall
|
||||||
npx get-shit-done-redux --opencode --global --uninstall
|
npx @opengsd/get-shit-done-redux --opencode --global --uninstall
|
||||||
npx get-shit-done-redux --gemini --global --uninstall
|
npx @opengsd/get-shit-done-redux --gemini --global --uninstall
|
||||||
npx get-shit-done-redux --kilo --global --uninstall
|
npx @opengsd/get-shit-done-redux --kilo --global --uninstall
|
||||||
npx get-shit-done-redux --codex --global --uninstall
|
npx @opengsd/get-shit-done-redux --codex --global --uninstall
|
||||||
npx get-shit-done-redux --copilot --global --uninstall
|
npx @opengsd/get-shit-done-redux --copilot --global --uninstall
|
||||||
npx get-shit-done-redux --cursor --global --uninstall
|
npx @opengsd/get-shit-done-redux --cursor --global --uninstall
|
||||||
npx get-shit-done-redux --antigravity --global --uninstall
|
npx @opengsd/get-shit-done-redux --antigravity --global --uninstall
|
||||||
npx get-shit-done-redux --augment --global --uninstall
|
npx @opengsd/get-shit-done-redux --augment --global --uninstall
|
||||||
npx get-shit-done-redux --trae --global --uninstall
|
npx @opengsd/get-shit-done-redux --trae --global --uninstall
|
||||||
npx get-shit-done-redux --cline --global --uninstall
|
npx @opengsd/get-shit-done-redux --cline --global --uninstall
|
||||||
|
|
||||||
# Instalações locais (projeto atual)
|
# Instalações locais (projeto atual)
|
||||||
npx get-shit-done-redux --claude --local --uninstall
|
npx @opengsd/get-shit-done-redux --claude --local --uninstall
|
||||||
npx get-shit-done-redux --opencode --local --uninstall
|
npx @opengsd/get-shit-done-redux --opencode --local --uninstall
|
||||||
npx get-shit-done-redux --gemini --local --uninstall
|
npx @opengsd/get-shit-done-redux --gemini --local --uninstall
|
||||||
npx get-shit-done-redux --kilo --local --uninstall
|
npx @opengsd/get-shit-done-redux --kilo --local --uninstall
|
||||||
npx get-shit-done-redux --codex --local --uninstall
|
npx @opengsd/get-shit-done-redux --codex --local --uninstall
|
||||||
npx get-shit-done-redux --copilot --local --uninstall
|
npx @opengsd/get-shit-done-redux --copilot --local --uninstall
|
||||||
npx get-shit-done-redux --cursor --local --uninstall
|
npx @opengsd/get-shit-done-redux --cursor --local --uninstall
|
||||||
npx get-shit-done-redux --antigravity --local --uninstall
|
npx @opengsd/get-shit-done-redux --antigravity --local --uninstall
|
||||||
npx get-shit-done-redux --augment --local --uninstall
|
npx @opengsd/get-shit-done-redux --augment --local --uninstall
|
||||||
npx get-shit-done-redux --trae --local --uninstall
|
npx @opengsd/get-shit-done-redux --trae --local --uninstall
|
||||||
npx get-shit-done-redux --cline --local --uninstall
|
npx @opengsd/get-shit-done-redux --cline --local --uninstall
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Community Ports
|
## Community Ports
|
||||||
|
|
||||||
OpenCode, Gemini CLI, Kilo e Codex agora são suportados nativamente via `npx get-shit-done-redux`.
|
OpenCode, Gemini CLI, Kilo e Codex agora são suportados nativamente via `npx @opengsd/get-shit-done-redux`.
|
||||||
|
|
||||||
| Projeto | Plataforma | Descrição |
|
| Projeto | Plataforma | Descrição |
|
||||||
|---------|------------|-----------|
|
|---------|------------|-----------|
|
||||||
|
|||||||
110
README.zh-CN.md
110
README.zh-CN.md
@@ -10,8 +10,8 @@
|
|||||||
|
|
||||||
**它解决的是 context rot:随着 Claude 的上下文窗口被填满,输出质量逐步劣化的问题。**
|
**它解决的是 context rot:随着 Claude 的上下文窗口被填满,输出质量逐步劣化的问题。**
|
||||||
|
|
||||||
[](https://www.npmjs.com/package/get-shit-done-redux)
|
[](https://www.npmjs.com/package/@opengsd/get-shit-done-redux)
|
||||||
[](https://www.npmjs.com/package/get-shit-done-redux)
|
[](https://www.npmjs.com/package/@opengsd/get-shit-done-redux)
|
||||||
[](https://github.com/open-gsd/get-shit-done-redux/actions/workflows/test.yml)
|
[](https://github.com/open-gsd/get-shit-done-redux/actions/workflows/test.yml)
|
||||||
[](https://discord.gg/mYgfVNfA2r)
|
[](https://discord.gg/mYgfVNfA2r)
|
||||||
[](https://github.com/open-gsd/get-shit-done-redux)
|
[](https://github.com/open-gsd/get-shit-done-redux)
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
<br>
|
<br>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
**支持 Mac、Windows 和 Linux。**
|
**支持 Mac、Windows 和 Linux。**
|
||||||
@@ -82,7 +82,7 @@ GSD 解决的就是这个问题。它是让 Claude Code 变得可靠的上下文
|
|||||||
- **合并后构建与测试门** — `execute-phase` 步骤 5.6 优先自动检测 `workflow.build_command` 配置,否则按 Xcode(`.xcodeproj`)、Makefile、Justfile、Cargo、Go、Python、npm 顺序回退。Xcode/iOS 项目自动运行 `xcodebuild build` 和 `xcodebuild test`。在并行与串行模式下均生效。
|
- **合并后构建与测试门** — `execute-phase` 步骤 5.6 优先自动检测 `workflow.build_command` 配置,否则按 Xcode(`.xcodeproj`)、Makefile、Justfile、Cargo、Go、Python、npm 顺序回退。Xcode/iOS 项目自动运行 `xcodebuild build` 和 `xcodebuild test`。在并行与串行模式下均生效。
|
||||||
- **每运行时评审模型选择** — `review.models.<cli>` 让每个外部评审 CLI(codex、gemini 等)独立于规划/执行档选择自己的模型。
|
- **每运行时评审模型选择** — `review.models.<cli>` 让每个外部评审 CLI(codex、gemini 等)独立于规划/执行档选择自己的模型。
|
||||||
- **工作流设置继承** — 设置 `GSD_WORKSTREAM` 后,先加载根 `.planning/config.json`,再与该工作流的配置进行深合并(冲突时工作流优先)。工作流配置中显式 `null` 会覆盖根值。
|
- **工作流设置继承** — 设置 `GSD_WORKSTREAM` 后,先加载根 `.planning/config.json`,再与该工作流的配置进行深合并(冲突时工作流优先)。工作流配置中显式 `null` 会覆盖根值。
|
||||||
- **手动 canary 发布工作流** — `.github/workflows/canary.yml` 通过 `workflow_dispatch` 从 `dev` 分支按需将 `{base}-canary.{N}` 构建(`get-shit-done-redux` 与 `@gsd-redux/sdk`)发布到 `@canary` dist-tag。
|
- **手动 canary 发布工作流** — `.github/workflows/canary.yml` 通过 `workflow_dispatch` 从 `dev` 分支按需将 `{base}-canary.{N}` 构建(`@opengsd/get-shit-done-redux` 与 `@opengsd/gsd-sdk`)发布到 `@canary` dist-tag。
|
||||||
- **技能整合:86 → 59** — 4 个新分组技能(`capture`、`phase`、`config`、`workspace`)吸收了 31 个微技能。6 个已有父技能将收尾与子操作合并为标志:`update --sync/--reapply`、`sketch --wrap-up`、`spike --wrap-up`、`map-codebase --fast/--query`、`code-review --fix`、`progress --do/--next`。功能无损失。
|
- **技能整合:86 → 59** — 4 个新分组技能(`capture`、`phase`、`config`、`workspace`)吸收了 31 个微技能。6 个已有父技能将收尾与子操作合并为标志:`update --sync/--reapply`、`sketch --wrap-up`、`spike --wrap-up`、`map-codebase --fast/--query`、`code-review --fix`、`progress --do/--next`。功能无损失。
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -90,7 +90,7 @@ GSD 解决的就是这个问题。它是让 Claude Code 变得可靠的上下文
|
|||||||
## 快速开始
|
## 快速开始
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
安装器会提示你选择:
|
安装器会提示你选择:
|
||||||
@@ -114,7 +114,7 @@ npx get-shit-done-redux@latest
|
|||||||
GSD 迭代很快,建议定期更新:
|
GSD 迭代很快,建议定期更新:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
@@ -122,53 +122,53 @@ npx get-shit-done-redux@latest
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Claude Code
|
# Claude Code
|
||||||
npx get-shit-done-redux --claude --global # 安装到 ~/.claude/
|
npx @opengsd/get-shit-done-redux --claude --global # 安装到 ~/.claude/
|
||||||
npx get-shit-done-redux --claude --local # 安装到 ./.claude/
|
npx @opengsd/get-shit-done-redux --claude --local # 安装到 ./.claude/
|
||||||
|
|
||||||
# OpenCode
|
# OpenCode
|
||||||
npx get-shit-done-redux --opencode --global # 安装到 ~/.config/opencode/
|
npx @opengsd/get-shit-done-redux --opencode --global # 安装到 ~/.config/opencode/
|
||||||
|
|
||||||
# Gemini CLI
|
# Gemini CLI
|
||||||
npx get-shit-done-redux --gemini --global # 安装到 ~/.gemini/
|
npx @opengsd/get-shit-done-redux --gemini --global # 安装到 ~/.gemini/
|
||||||
|
|
||||||
# Kilo
|
# Kilo
|
||||||
npx get-shit-done-redux --kilo --global # 安装到 ~/.config/kilo/
|
npx @opengsd/get-shit-done-redux --kilo --global # 安装到 ~/.config/kilo/
|
||||||
npx get-shit-done-redux --kilo --local # 安装到 ./.kilo/
|
npx @opengsd/get-shit-done-redux --kilo --local # 安装到 ./.kilo/
|
||||||
|
|
||||||
# Codex
|
# Codex
|
||||||
npx get-shit-done-redux --codex --global # 安装到 ~/.codex/
|
npx @opengsd/get-shit-done-redux --codex --global # 安装到 ~/.codex/
|
||||||
npx get-shit-done-redux --codex --local # 安装到 ./.codex/
|
npx @opengsd/get-shit-done-redux --codex --local # 安装到 ./.codex/
|
||||||
|
|
||||||
# Copilot
|
# Copilot
|
||||||
npx get-shit-done-redux --copilot --global # 安装到 ~/.github/
|
npx @opengsd/get-shit-done-redux --copilot --global # 安装到 ~/.github/
|
||||||
npx get-shit-done-redux --copilot --local # 安装到 ./.github/
|
npx @opengsd/get-shit-done-redux --copilot --local # 安装到 ./.github/
|
||||||
|
|
||||||
# Cursor CLI
|
# Cursor CLI
|
||||||
npx get-shit-done-redux --cursor --global # 安装到 ~/.cursor/
|
npx @opengsd/get-shit-done-redux --cursor --global # 安装到 ~/.cursor/
|
||||||
npx get-shit-done-redux --cursor --local # 安装到 ./.cursor/
|
npx @opengsd/get-shit-done-redux --cursor --local # 安装到 ./.cursor/
|
||||||
|
|
||||||
# Antigravity
|
# Antigravity
|
||||||
npx get-shit-done-redux --antigravity --global # 安装到 ~/.gemini/antigravity/
|
npx @opengsd/get-shit-done-redux --antigravity --global # 安装到 ~/.gemini/antigravity/
|
||||||
npx get-shit-done-redux --antigravity --local # 安装到 ./.agent/
|
npx @opengsd/get-shit-done-redux --antigravity --local # 安装到 ./.agent/
|
||||||
|
|
||||||
# Augment
|
# Augment
|
||||||
npx get-shit-done-redux --augment --global # 安装到 ~/.augment/
|
npx @opengsd/get-shit-done-redux --augment --global # 安装到 ~/.augment/
|
||||||
npx get-shit-done-redux --augment --local # 安装到 ./.augment/
|
npx @opengsd/get-shit-done-redux --augment --local # 安装到 ./.augment/
|
||||||
|
|
||||||
# Trae
|
# Trae
|
||||||
npx get-shit-done-redux --trae --global # 安装到 ~/.trae/
|
npx @opengsd/get-shit-done-redux --trae --global # 安装到 ~/.trae/
|
||||||
npx get-shit-done-redux --trae --local # 安装到 ./.trae/
|
npx @opengsd/get-shit-done-redux --trae --local # 安装到 ./.trae/
|
||||||
|
|
||||||
# CodeBuddy
|
# CodeBuddy
|
||||||
npx get-shit-done-redux --codebuddy --global # 安装到 ~/.codebuddy/
|
npx @opengsd/get-shit-done-redux --codebuddy --global # 安装到 ~/.codebuddy/
|
||||||
npx get-shit-done-redux --codebuddy --local # 安装到 ./.codebuddy/
|
npx @opengsd/get-shit-done-redux --codebuddy --local # 安装到 ./.codebuddy/
|
||||||
|
|
||||||
# Cline
|
# Cline
|
||||||
npx get-shit-done-redux --cline --global # 安装到 ~/.cline/
|
npx @opengsd/get-shit-done-redux --cline --global # 安装到 ~/.cline/
|
||||||
npx get-shit-done-redux --cline --local # 安装到 ./.clinerules
|
npx @opengsd/get-shit-done-redux --cline --local # 安装到 ./.clinerules
|
||||||
|
|
||||||
# 所有运行时
|
# 所有运行时
|
||||||
npx get-shit-done-redux --all --global # 安装到所有目录
|
npx @opengsd/get-shit-done-redux --all --global # 安装到所有目录
|
||||||
```
|
```
|
||||||
|
|
||||||
使用 `--global`(`-g`)或 `--local`(`-l`)可以跳过安装位置提示。
|
使用 `--global`(`-g`)或 `--local`(`-l`)可以跳过安装位置提示。
|
||||||
@@ -753,18 +753,18 @@ GSD 的代码库映射和分析命令会读取文件来理解你的项目。**
|
|||||||
|
|
||||||
**命令行为不符合预期?**
|
**命令行为不符合预期?**
|
||||||
- 运行 `/gsd-help` 确认安装成功
|
- 运行 `/gsd-help` 确认安装成功
|
||||||
- 重新执行 `npx get-shit-done-redux` 进行重装
|
- 重新执行 `npx @opengsd/get-shit-done-redux` 进行重装
|
||||||
|
|
||||||
**想更新到最新版本?**
|
**想更新到最新版本?**
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
**在 Docker 或容器环境中使用?**
|
**在 Docker 或容器环境中使用?**
|
||||||
|
|
||||||
如果使用波浪线路径(`~/.claude/...`)时读取失败,请在安装前设置 `CLAUDE_CONFIG_DIR`:
|
如果使用波浪线路径(`~/.claude/...`)时读取失败,请在安装前设置 `CLAUDE_CONFIG_DIR`:
|
||||||
```bash
|
```bash
|
||||||
CLAUDE_CONFIG_DIR=/home/youruser/.claude npx get-shit-done-redux --global
|
CLAUDE_CONFIG_DIR=/home/youruser/.claude npx @opengsd/get-shit-done-redux --global
|
||||||
```
|
```
|
||||||
这样可以确保使用绝对路径,而不是在容器里可能无法正确展开的 `~`。
|
这样可以确保使用绝对路径,而不是在容器里可能无法正确展开的 `~`。
|
||||||
|
|
||||||
@@ -774,30 +774,30 @@ CLAUDE_CONFIG_DIR=/home/youruser/.claude npx get-shit-done-redux --global
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 全局安装
|
# 全局安装
|
||||||
npx get-shit-done-redux --claude --global --uninstall
|
npx @opengsd/get-shit-done-redux --claude --global --uninstall
|
||||||
npx get-shit-done-redux --opencode --global --uninstall
|
npx @opengsd/get-shit-done-redux --opencode --global --uninstall
|
||||||
npx get-shit-done-redux --gemini --global --uninstall
|
npx @opengsd/get-shit-done-redux --gemini --global --uninstall
|
||||||
npx get-shit-done-redux --kilo --global --uninstall
|
npx @opengsd/get-shit-done-redux --kilo --global --uninstall
|
||||||
npx get-shit-done-redux --codex --global --uninstall
|
npx @opengsd/get-shit-done-redux --codex --global --uninstall
|
||||||
npx get-shit-done-redux --copilot --global --uninstall
|
npx @opengsd/get-shit-done-redux --copilot --global --uninstall
|
||||||
npx get-shit-done-redux --cursor --global --uninstall
|
npx @opengsd/get-shit-done-redux --cursor --global --uninstall
|
||||||
npx get-shit-done-redux --antigravity --global --uninstall
|
npx @opengsd/get-shit-done-redux --antigravity --global --uninstall
|
||||||
npx get-shit-done-redux --augment --global --uninstall
|
npx @opengsd/get-shit-done-redux --augment --global --uninstall
|
||||||
npx get-shit-done-redux --trae --global --uninstall
|
npx @opengsd/get-shit-done-redux --trae --global --uninstall
|
||||||
npx get-shit-done-redux --cline --global --uninstall
|
npx @opengsd/get-shit-done-redux --cline --global --uninstall
|
||||||
|
|
||||||
# 本地安装(当前项目)
|
# 本地安装(当前项目)
|
||||||
npx get-shit-done-redux --claude --local --uninstall
|
npx @opengsd/get-shit-done-redux --claude --local --uninstall
|
||||||
npx get-shit-done-redux --opencode --local --uninstall
|
npx @opengsd/get-shit-done-redux --opencode --local --uninstall
|
||||||
npx get-shit-done-redux --gemini --local --uninstall
|
npx @opengsd/get-shit-done-redux --gemini --local --uninstall
|
||||||
npx get-shit-done-redux --kilo --local --uninstall
|
npx @opengsd/get-shit-done-redux --kilo --local --uninstall
|
||||||
npx get-shit-done-redux --codex --local --uninstall
|
npx @opengsd/get-shit-done-redux --codex --local --uninstall
|
||||||
npx get-shit-done-redux --copilot --local --uninstall
|
npx @opengsd/get-shit-done-redux --copilot --local --uninstall
|
||||||
npx get-shit-done-redux --cursor --local --uninstall
|
npx @opengsd/get-shit-done-redux --cursor --local --uninstall
|
||||||
npx get-shit-done-redux --antigravity --local --uninstall
|
npx @opengsd/get-shit-done-redux --antigravity --local --uninstall
|
||||||
npx get-shit-done-redux --augment --local --uninstall
|
npx @opengsd/get-shit-done-redux --augment --local --uninstall
|
||||||
npx get-shit-done-redux --trae --local --uninstall
|
npx @opengsd/get-shit-done-redux --trae --local --uninstall
|
||||||
npx get-shit-done-redux --cline --local --uninstall
|
npx @opengsd/get-shit-done-redux --cline --local --uninstall
|
||||||
```
|
```
|
||||||
|
|
||||||
这会移除所有 GSD 命令、代理、hooks 和设置,但会保留你其他配置。
|
这会移除所有 GSD 命令、代理、hooks 和设置,但会保留你其他配置。
|
||||||
@@ -806,7 +806,7 @@ npx get-shit-done-redux --cline --local --uninstall
|
|||||||
|
|
||||||
## 社区移植版本
|
## 社区移植版本
|
||||||
|
|
||||||
OpenCode、Gemini CLI、Kilo 和 Codex 现在都已经通过 `npx get-shit-done-redux` 获得原生支持。
|
OpenCode、Gemini CLI、Kilo 和 Codex 现在都已经通过 `npx @opengsd/get-shit-done-redux` 获得原生支持。
|
||||||
|
|
||||||
这些社区移植版本曾率先探索多运行时支持:
|
这些社区移植版本曾率先探索多运行时支持:
|
||||||
|
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ GSD follows [Semantic Versioning 2.0.0](https://semver.org/) with three release
|
|||||||
|
|
||||||
| Tier | What ships | Version format | npm tag | Branch | Install |
|
| Tier | What ships | Version format | npm tag | Branch | Install |
|
||||||
|------|-----------|---------------|---------|--------|---------|
|
|------|-----------|---------------|---------|--------|---------|
|
||||||
| **Patch** | Bug fixes only | `1.27.1` | `latest` | `hotfix/1.27.1` | `npx get-shit-done-redux@latest` |
|
| **Patch** | Bug fixes only | `1.27.1` | `latest` | `hotfix/1.27.1` | `npx @opengsd/get-shit-done-redux@latest` |
|
||||||
| **Minor** | Fixes + enhancements | `1.28.0` | `latest` (after RC) | `release/1.28.0` | `npx get-shit-done-redux@next` (RC) |
|
| **Minor** | Fixes + enhancements | `1.28.0` | `latest` (after RC) | `release/1.28.0` | `npx @opengsd/get-shit-done-redux@next` (RC) |
|
||||||
| **Major** | Fixes + enhancements + features | `2.0.0` | `latest` (after beta) | `release/2.0.0` | `npx get-shit-done-redux@next` (beta) |
|
| **Major** | Fixes + enhancements + features | `2.0.0` | `latest` (after beta) | `release/2.0.0` | `npx @opengsd/get-shit-done-redux@next` (beta) |
|
||||||
|
|
||||||
## npm Dist-Tags
|
## npm Dist-Tags
|
||||||
|
|
||||||
@@ -16,8 +16,8 @@ Only two tags, following Angular/Next.js convention:
|
|||||||
|
|
||||||
| Tag | Meaning | Installed by |
|
| Tag | Meaning | Installed by |
|
||||||
|-----|---------|-------------|
|
|-----|---------|-------------|
|
||||||
| `latest` | Stable production release | `npm install get-shit-done-redux` (default) |
|
| `latest` | Stable production release | `npm install @opengsd/get-shit-done-redux` (default) |
|
||||||
| `next` | Pre-release (RC or beta) | `npm install get-shit-done-redux@next` (opt-in) |
|
| `next` | Pre-release (RC or beta) | `npm install @opengsd/get-shit-done-redux@next` (opt-in) |
|
||||||
|
|
||||||
The version string (`-rc.1` vs `-beta.1`) communicates stability level. Users never get pre-releases unless they explicitly opt in.
|
The version string (`-rc.1` vs `-beta.1`) communicates stability level. Users never get pre-releases unless they explicitly opt in.
|
||||||
|
|
||||||
@@ -91,7 +91,7 @@ A hotfix `vX.YY.Z` cumulatively includes everything in `vX.YY.{Z-1}` plus every
|
|||||||
|
|
||||||
**Path B — `release-sdk.yml` (stopgap, one-shot):**
|
**Path B — `release-sdk.yml` (stopgap, one-shot):**
|
||||||
|
|
||||||
Active while the `@gsd-redux/sdk` npm token is unavailable; bundles the SDK inside the CC tarball.
|
Active while the `@opengsd/gsd-sdk` npm token is unavailable; bundles the SDK inside the CC tarball.
|
||||||
|
|
||||||
1. Trigger `release-sdk.yml` with `action=hotfix`, `version=1.27.1`, `auto_cherry_pick=true`.
|
1. Trigger `release-sdk.yml` with `action=hotfix`, `version=1.27.1`, `auto_cherry_pick=true`.
|
||||||
- The `prepare` job creates the branch and cherry-picks (same logic as Path A).
|
- The `prepare` job creates the branch and cherry-picks (same logic as Path A).
|
||||||
@@ -107,7 +107,7 @@ For accumulated fixes and enhancements.
|
|||||||
1. Trigger `release.yml` with action `create` and version (e.g., `1.28.0`)
|
1. Trigger `release.yml` with action `create` and version (e.g., `1.28.0`)
|
||||||
2. Workflow creates `release/1.28.0` branch from main, bumps package.json
|
2. Workflow creates `release/1.28.0` branch from main, bumps package.json
|
||||||
3. Trigger `release.yml` with action `rc` to publish `1.28.0-rc.1` to `next`
|
3. Trigger `release.yml` with action `rc` to publish `1.28.0-rc.1` to `next`
|
||||||
4. Test the RC: `npx get-shit-done-redux@next`
|
4. Test the RC: `npx @opengsd/get-shit-done-redux@next`
|
||||||
5. If issues found: fix on release branch, publish `rc.2`, `rc.3`, etc.
|
5. If issues found: fix on release branch, publish `rc.2`, `rc.3`, etc.
|
||||||
6. Trigger `release.yml` with action `finalize` — publishes `1.28.0` to `latest`
|
6. Trigger `release.yml` with action `finalize` — publishes `1.28.0` to `latest`
|
||||||
7. Merge release branch to main
|
7. Merge release branch to main
|
||||||
@@ -145,5 +145,5 @@ npm publish
|
|||||||
npm publish --tag next
|
npm publish --tag next
|
||||||
|
|
||||||
# Verify what latest and next point to
|
# Verify what latest and next point to
|
||||||
npm dist-tag ls get-shit-done-redux
|
npm dist-tag ls @opengsd/get-shit-done-redux
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
<!-- Prompt line -->
|
<!-- Prompt line -->
|
||||||
<text class="text prompt" font-size="15" y="0">~</text>
|
<text class="text prompt" font-size="15" y="0">~</text>
|
||||||
<text class="text dim" font-size="15" x="16" y="0">$</text>
|
<text class="text dim" font-size="15" x="16" y="0">$</text>
|
||||||
<text class="text command" font-size="15" x="36" y="0">npx get-shit-done-redux</text>
|
<text class="text command" font-size="15" x="36" y="0">npx @opengsd/get-shit-done-redux</text>
|
||||||
|
|
||||||
<!-- Banner -->
|
<!-- Banner -->
|
||||||
<text class="text cyan" font-size="14" y="48" xml:space="preserve"> ██████╗ ███████╗██████╗</text>
|
<text class="text cyan" font-size="14" y="48" xml:space="preserve"> ██████╗ ███████╗██████╗</text>
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
@@ -2,12 +2,12 @@
|
|||||||
/**
|
/**
|
||||||
* bin/gsd-sdk.js — back-compat shim for external callers of `gsd-sdk`.
|
* bin/gsd-sdk.js — back-compat shim for external callers of `gsd-sdk`.
|
||||||
*
|
*
|
||||||
* When the parent package is installed globally (`npm install -g get-shit-done-redux`)
|
* When the parent package is installed globally (`npm install -g @opengsd/get-shit-done-redux`)
|
||||||
* npm creates a `gsd-sdk` symlink in the global bin directory pointing at this
|
* npm creates a `gsd-sdk` symlink in the global bin directory pointing at this
|
||||||
* file. npm correctly chmods bin entries from a tarball, so the execute-bit
|
* file. npm correctly chmods bin entries from a tarball, so the execute-bit
|
||||||
* problem that afflicted the sub-install approach (issue #2453) cannot occur here.
|
* problem that afflicted the sub-install approach (issue #2453) cannot occur here.
|
||||||
*
|
*
|
||||||
* NOTE (#2775): `npx get-shit-done-redux` does NOT link this shim — npx only
|
* NOTE (#2775): `npx @opengsd/get-shit-done-redux` does NOT link this shim — npx only
|
||||||
* exposes the package's primary bin (`get-shit-done-redux`). For npx-based usage,
|
* exposes the package's primary bin (`get-shit-done-redux`). For npx-based usage,
|
||||||
* the installer (`bin/install.js#installSdkIfNeeded`) self-symlinks `gsd-sdk`
|
* the installer (`bin/install.js#installSdkIfNeeded`) self-symlinks `gsd-sdk`
|
||||||
* into `~/.local/bin` when needed and verifies PATH callability before
|
* into `~/.local/bin` when needed and verifies PATH callability before
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
*
|
*
|
||||||
* Call sites (slash commands, agent prompts, hook scripts) continue to work without
|
* Call sites (slash commands, agent prompts, hook scripts) continue to work without
|
||||||
* changes because `gsd-sdk` still resolves on PATH — it just comes from this shim
|
* changes because `gsd-sdk` still resolves on PATH — it just comes from this shim
|
||||||
* in the parent package rather than from a separately installed @gsd-redux/sdk.
|
* in the parent package rather than from a separately installed @opengsd/gsd-sdk.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -20,13 +20,13 @@ A canary build NEVER becomes a `next` build directly, and a `next` build NEVER b
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# One-off invocation (npx)
|
# One-off invocation (npx)
|
||||||
npx get-shit-done-redux@canary
|
npx @opengsd/get-shit-done-redux@canary
|
||||||
|
|
||||||
# Pin to the canary dist-tag globally
|
# Pin to the canary dist-tag globally
|
||||||
npm install -g get-shit-done-redux@canary
|
npm install -g @opengsd/get-shit-done-redux@canary
|
||||||
|
|
||||||
# Pin to an exact canary version
|
# Pin to an exact canary version
|
||||||
npm install -g get-shit-done-redux@1.50.0-canary.1
|
npm install -g @opengsd/get-shit-done-redux@1.50.0-canary.1
|
||||||
```
|
```
|
||||||
|
|
||||||
The CC installer's defensive purge rewrites stale config blocks left by older GSD versions, so reinstalling on top of an existing project is safe.
|
The CC installer's defensive purge rewrites stale config blocks left by older GSD versions, so reinstalling on top of an existing project is safe.
|
||||||
@@ -47,10 +47,10 @@ The CC installer's defensive purge rewrites stale config blocks left by older GS
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Back to the current stable
|
# Back to the current stable
|
||||||
npm install -g get-shit-done-redux@latest
|
npm install -g @opengsd/get-shit-done-redux@latest
|
||||||
|
|
||||||
# Or to the next/RC train
|
# Or to the next/RC train
|
||||||
npm install -g get-shit-done-redux@next
|
npm install -g @opengsd/get-shit-done-redux@next
|
||||||
```
|
```
|
||||||
|
|
||||||
If you have a local project that interacted with canary-only features (for instance, an MVP-mode phase planned by 1.50.0-canary), the planner artifacts in `.planning/` remain valid — older GSD versions will just ignore the `**Mode:** mvp` field on phases.
|
If you have a local project that interacted with canary-only features (for instance, an MVP-mode phase planned by 1.50.0-canary), the planner artifacts in `.planning/` remain valid — older GSD versions will just ignore the `**Mode:** mvp` field on phases.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# GSD CLI Tools Reference
|
# GSD CLI Tools Reference
|
||||||
|
|
||||||
> Surface-area reference for `get-shit-done/bin/gsd-tools.cjs` (legacy Node CLI). Workflows and agents should prefer `gsd-sdk query` or `@gsd-redux/sdk` where a handler exists — see [SDK and programmatic access](#sdk-and-programmatic-access). For slash commands and user flows, see [Command Reference](COMMANDS.md).
|
> Surface-area reference for `get-shit-done/bin/gsd-tools.cjs` (legacy Node CLI). Workflows and agents should prefer `gsd-sdk query` or `@opengsd/gsd-sdk` where a handler exists — see [SDK and programmatic access](#sdk-and-programmatic-access). For slash commands and user flows, see [Command Reference](COMMANDS.md).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -43,7 +43,7 @@ Use this when authoring workflows, not when you only need the command list below
|
|||||||
- Resolves argv with the same **longest-prefix** rules as the typed registry (`resolveQueryArgv` in `sdk/src/query/registry.ts`). Unregistered commands **fail fast** — use `node …/gsd-tools.cjs` only for handlers not in the registry.
|
- Resolves argv with the same **longest-prefix** rules as the typed registry (`resolveQueryArgv` in `sdk/src/query/registry.ts`). Unregistered commands **fail fast** — use `node …/gsd-tools.cjs` only for handlers not in the registry.
|
||||||
- Full matrix (CJS command → registry key, CLI-only tools, aliases, golden tiers): [sdk/src/query/QUERY-HANDLERS.md](../sdk/src/query/QUERY-HANDLERS.md).
|
- Full matrix (CJS command → registry key, CLI-only tools, aliases, golden tiers): [sdk/src/query/QUERY-HANDLERS.md](../sdk/src/query/QUERY-HANDLERS.md).
|
||||||
|
|
||||||
**2. TypeScript — `@gsd-redux/sdk` (`GSDTools`, `createRegistry`)**
|
**2. TypeScript — `@opengsd/gsd-sdk` (`GSDTools`, `createRegistry`)**
|
||||||
|
|
||||||
- `GSDTools` now routes through the **SDK Runtime Bridge Module** (`sdk/src/query-runtime-bridge.ts`). Native registry dispatch is preferred; subprocess fallback is explicit policy (`allowFallbackToSubprocess`) and can be disabled for strict SDK-only execution.
|
- `GSDTools` now routes through the **SDK Runtime Bridge Module** (`sdk/src/query-runtime-bridge.ts`). Native registry dispatch is preferred; subprocess fallback is explicit policy (`allowFallbackToSubprocess`) and can be disabled for strict SDK-only execution.
|
||||||
- `strictSdk` mode fails fast when a command has no native adapter, making SDK publish/readiness checks deterministic.
|
- `strictSdk` mode fails fast when a command has no native adapter, making SDK publish/readiness checks deterministic.
|
||||||
|
|||||||
@@ -1054,7 +1054,7 @@ When the user declines (or keeps a non-GSD) statusline, the installer offers a S
|
|||||||
GSD update available: 1.39.0 → 1.40.0. Run /gsd-update.
|
GSD update available: 1.39.0 → 1.40.0. Run /gsd-update.
|
||||||
```
|
```
|
||||||
|
|
||||||
The banner is silent when up-to-date and rate-limits "check failed" diagnostics to once per 24 hours. Removed cleanly by `npx get-shit-done-redux --uninstall` or by deleting the SessionStart entry that references `gsd-update-banner.js`.
|
The banner is silent when up-to-date and rate-limits "check failed" diagnostics to once per 24 hours. Removed cleanly by `npx @opengsd/get-shit-done-redux --uninstall` or by deleting the SessionStart entry that references `gsd-update-banner.js`.
|
||||||
|
|
||||||
### 38. Developer Profiling
|
### 38. Developer Profiling
|
||||||
|
|
||||||
@@ -1436,7 +1436,7 @@ Test suite that scans all agent, workflow, and command files for embedded inject
|
|||||||
|
|
||||||
### 55. Multi-Runtime Installer Selection
|
### 55. Multi-Runtime Installer Selection
|
||||||
|
|
||||||
**Part of:** `npx get-shit-done-redux`
|
**Part of:** `npx @opengsd/get-shit-done-redux`
|
||||||
|
|
||||||
**Purpose:** Select multiple runtimes in a single interactive install session.
|
**Purpose:** Select multiple runtimes in a single interactive install session.
|
||||||
|
|
||||||
@@ -1455,7 +1455,7 @@ Test suite that scans all agent, workflow, and command files for embedded inject
|
|||||||
|
|
||||||
### 56. Windsurf Runtime Support
|
### 56. Windsurf Runtime Support
|
||||||
|
|
||||||
**Part of:** `npx get-shit-done-redux`
|
**Part of:** `npx @opengsd/get-shit-done-redux`
|
||||||
|
|
||||||
**Purpose:** Add Windsurf as a supported AI CLI runtime for GSD installation and execution.
|
**Purpose:** Add Windsurf as a supported AI CLI runtime for GSD installation and execution.
|
||||||
|
|
||||||
@@ -1695,7 +1695,7 @@ Test suite that scans all agent, workflow, and command files for embedded inject
|
|||||||
|
|
||||||
### 68. Claude Code Skills Migration
|
### 68. Claude Code Skills Migration
|
||||||
|
|
||||||
**Part of:** `npx get-shit-done-redux`
|
**Part of:** `npx @opengsd/get-shit-done-redux`
|
||||||
|
|
||||||
**Purpose:** Migrate GSD commands to Claude Code 2.1.88+ skills format with backward compatibility.
|
**Purpose:** Migrate GSD commands to Claude Code 2.1.88+ skills format with backward compatibility.
|
||||||
|
|
||||||
@@ -1959,7 +1959,7 @@ Test suite that scans all agent, workflow, and command files for embedded inject
|
|||||||
|
|
||||||
### 85. New Runtime Support (Trae, Cline, Augment Code)
|
### 85. New Runtime Support (Trae, Cline, Augment Code)
|
||||||
|
|
||||||
**Part of:** `npx get-shit-done-redux`
|
**Part of:** `npx @opengsd/get-shit-done-redux`
|
||||||
|
|
||||||
**Purpose:** Extend GSD installation to Trae IDE, Cline, and Augment Code runtimes.
|
**Purpose:** Extend GSD installation to Trae IDE, Cline, and Augment Code runtimes.
|
||||||
|
|
||||||
@@ -2301,7 +2301,7 @@ Test suite that scans all agent, workflow, and command files for embedded inject
|
|||||||
|
|
||||||
### 104. New Runtime Support (Cline, CodeBuddy, Qwen Code)
|
### 104. New Runtime Support (Cline, CodeBuddy, Qwen Code)
|
||||||
|
|
||||||
**Part of:** `npx get-shit-done-redux`
|
**Part of:** `npx @opengsd/get-shit-done-redux`
|
||||||
|
|
||||||
**Purpose:** Extend GSD installation to Cline, CodeBuddy, and Qwen Code runtimes.
|
**Purpose:** Extend GSD installation to Cline, CodeBuddy, and Qwen Code runtimes.
|
||||||
|
|
||||||
@@ -2778,7 +2778,7 @@ Users who run a memory / knowledge-base MCP server (for example, ExoCortex-style
|
|||||||
- The hook reads the existing `~/.cache/gsd/gsd-update-check.json` cache — the same cache used by the statusline — and prints a banner only when an update is available.
|
- The hook reads the existing `~/.cache/gsd/gsd-update-check.json` cache — the same cache used by the statusline — and prints a banner only when an update is available.
|
||||||
- Silent when up-to-date.
|
- Silent when up-to-date.
|
||||||
- Failure diagnostics rate-limited to once per 24 h.
|
- Failure diagnostics rate-limited to once per 24 h.
|
||||||
- Cleanly removed by `npx get-shit-done-redux --uninstall`.
|
- Cleanly removed by `npx @opengsd/get-shit-done-redux --uninstall`.
|
||||||
|
|
||||||
**Requirements:**
|
**Requirements:**
|
||||||
- REQ-BANNER-01: Banner does not install without explicit opt-in.
|
- REQ-BANNER-01: Banner does not install without explicit opt-in.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
Pre-release candidate. Published to npm under the `next` tag.
|
Pre-release candidate. Published to npm under the `next` tag.
|
||||||
|
|
||||||
```
|
```
|
||||||
npx get-shit-done-redux@next
|
npx @opengsd/get-shit-done-redux@next
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -62,16 +62,16 @@ The installer now:
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# npm
|
# npm
|
||||||
npm install -g get-shit-done-redux@next
|
npm install -g @opengsd/get-shit-done-redux@next
|
||||||
|
|
||||||
# npx (one-shot)
|
# npx (one-shot)
|
||||||
npx get-shit-done-redux@next
|
npx @opengsd/get-shit-done-redux@next
|
||||||
```
|
```
|
||||||
|
|
||||||
To pin to this exact RC:
|
To pin to this exact RC:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm install -g get-shit-done-redux@1.39.0-rc.4
|
npm install -g @opengsd/get-shit-done-redux@1.39.0-rc.4
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
Pre-release candidate. Published to npm under the `next` tag.
|
Pre-release candidate. Published to npm under the `next` tag.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@next
|
npx @opengsd/get-shit-done-redux@next
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -77,16 +77,16 @@ The installer now:
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# npm
|
# npm
|
||||||
npm install -g get-shit-done-redux@next
|
npm install -g @opengsd/get-shit-done-redux@next
|
||||||
|
|
||||||
# npx (one-shot)
|
# npx (one-shot)
|
||||||
npx get-shit-done-redux@next
|
npx @opengsd/get-shit-done-redux@next
|
||||||
```
|
```
|
||||||
|
|
||||||
To pin to this exact RC:
|
To pin to this exact RC:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm install -g get-shit-done-redux@1.39.0-rc.5
|
npm install -g @opengsd/get-shit-done-redux@1.39.0-rc.5
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
Pre-release candidate. Published to npm under the `next` tag.
|
Pre-release candidate. Published to npm under the `next` tag.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@next
|
npx @opengsd/get-shit-done-redux@next
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -93,16 +93,16 @@ The installer now:
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# npm
|
# npm
|
||||||
npm install -g get-shit-done-redux@next
|
npm install -g @opengsd/get-shit-done-redux@next
|
||||||
|
|
||||||
# npx (one-shot)
|
# npx (one-shot)
|
||||||
npx get-shit-done-redux@next
|
npx @opengsd/get-shit-done-redux@next
|
||||||
```
|
```
|
||||||
|
|
||||||
To pin to this exact RC:
|
To pin to this exact RC:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm install -g get-shit-done-redux@1.39.0-rc.6
|
npm install -g @opengsd/get-shit-done-redux@1.39.0-rc.6
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
Pre-release candidate. Published to npm under the `next` tag.
|
Pre-release candidate. Published to npm under the `next` tag.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@next
|
npx @opengsd/get-shit-done-redux@next
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -19,7 +19,7 @@ reaches the registry.
|
|||||||
### Added
|
### Added
|
||||||
|
|
||||||
- **Manual canary release workflow** — `.github/workflows/canary.yml` publishes
|
- **Manual canary release workflow** — `.github/workflows/canary.yml` publishes
|
||||||
`{base}-canary.{N}` builds of `get-shit-done-redux` under the `canary` dist-tag on
|
`{base}-canary.{N}` builds of `@opengsd/get-shit-done-redux` under the `canary` dist-tag on
|
||||||
demand via `workflow_dispatch` (manual trigger only). Optional `dry_run` boolean.
|
demand via `workflow_dispatch` (manual trigger only). Optional `dry_run` boolean.
|
||||||
([#2828](https://github.com/GSD-redux/get-shit-done-redux/issues/2828))
|
([#2828](https://github.com/GSD-redux/get-shit-done-redux/issues/2828))
|
||||||
|
|
||||||
@@ -39,7 +39,7 @@ reaches the registry.
|
|||||||
`argument-hint:`, `Triggers:` keyword-stuffing lists, and numbered enumeration. New
|
`argument-hint:`, `Triggers:` keyword-stuffing lists, and numbered enumeration. New
|
||||||
CI lint gate `npm run lint:descriptions` fails if any description exceeds 100
|
CI lint gate `npm run lint:descriptions` fails if any description exceeds 100
|
||||||
chars. ([#2789](https://github.com/GSD-redux/get-shit-done-redux/issues/2789))
|
chars. ([#2789](https://github.com/GSD-redux/get-shit-done-redux/issues/2789))
|
||||||
- **`gsd-sdk` binary collision with `@gsd-redux/sdk` resolved** — workstream-aware
|
- **`gsd-sdk` binary collision with `@opengsd/gsd-sdk` resolved** — workstream-aware
|
||||||
query registry now respects the `GSD_WORKSTREAM` env var; `gsd-tools` bin alias
|
query registry now respects the `GSD_WORKSTREAM` env var; `gsd-tools` bin alias
|
||||||
added. ([#2791](https://github.com/GSD-redux/get-shit-done-redux/issues/2791))
|
added. ([#2791](https://github.com/GSD-redux/get-shit-done-redux/issues/2791))
|
||||||
- **`OpenCode` agents embed `model_profile_overrides.opencode.<tier>`** — per-tier
|
- **`OpenCode` agents embed `model_profile_overrides.opencode.<tier>`** — per-tier
|
||||||
@@ -165,16 +165,16 @@ with a strict TOML parser.
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# npm
|
# npm
|
||||||
npm install -g get-shit-done-redux@next
|
npm install -g @opengsd/get-shit-done-redux@next
|
||||||
|
|
||||||
# npx (one-shot)
|
# npx (one-shot)
|
||||||
npx get-shit-done-redux@next
|
npx @opengsd/get-shit-done-redux@next
|
||||||
```
|
```
|
||||||
|
|
||||||
To pin to this exact RC:
|
To pin to this exact RC:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm install -g get-shit-done-redux@1.39.0-rc.7
|
npm install -g @opengsd/get-shit-done-redux@1.39.0-rc.7
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
Pre-release candidate. Published to npm under the `next` tag.
|
Pre-release candidate. Published to npm under the `next` tag.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@next
|
npx @opengsd/get-shit-done-redux@next
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -112,16 +112,16 @@ and nine additional correctness fixes across OpenCode, Codex, and Gemini runtime
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# npm
|
# npm
|
||||||
npm install -g get-shit-done-redux@next
|
npm install -g @opengsd/get-shit-done-redux@next
|
||||||
|
|
||||||
# npx (one-shot)
|
# npx (one-shot)
|
||||||
npx get-shit-done-redux@next
|
npx @opengsd/get-shit-done-redux@next
|
||||||
```
|
```
|
||||||
|
|
||||||
To pin to this exact RC:
|
To pin to this exact RC:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm install -g get-shit-done-redux@1.40.0-rc.1
|
npm install -g @opengsd/get-shit-done-redux@1.40.0-rc.1
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
Stable release. Published to npm under the `latest` tag.
|
Stable release. Published to npm under the `latest` tag.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -186,13 +186,13 @@ colon-form slash-command conversion.
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# npm (global)
|
# npm (global)
|
||||||
npm install -g get-shit-done-redux@latest
|
npm install -g @opengsd/get-shit-done-redux@latest
|
||||||
|
|
||||||
# npx (one-shot)
|
# npx (one-shot)
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
|
|
||||||
# Pin to this exact version
|
# Pin to this exact version
|
||||||
npm install -g get-shit-done-redux@1.41.0
|
npm install -g @opengsd/get-shit-done-redux@1.41.0
|
||||||
```
|
```
|
||||||
|
|
||||||
The installer is idempotent — re-running on an existing install updates in-place,
|
The installer is idempotent — re-running on an existing install updates in-place,
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
First release candidate for the **1.42.0** train. Published to npm under the `next` dist-tag.
|
First release candidate for the **1.42.0** train. Published to npm under the `next` dist-tag.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@next
|
npx @opengsd/get-shit-done-redux@next
|
||||||
# or pin exact:
|
# or pin exact:
|
||||||
npm install -g get-shit-done-redux@1.42.0-rc1
|
npm install -g @opengsd/get-shit-done-redux@1.42.0-rc1
|
||||||
```
|
```
|
||||||
|
|
||||||
> **Release-candidate stream caveat.** RCs come from `main` and are the staging stream for the next stable `latest`. They are stable enough for everyday use but may carry bake items resolved before the matching `vX.Y.0` is published. See [CANARY.md](CANARY.md) for the stream policy.
|
> **Release-candidate stream caveat.** RCs come from `main` and are the staging stream for the next stable `latest`. They are stable enough for everyday use but may carry bake items resolved before the matching `vX.Y.0` is published. See [CANARY.md](CANARY.md) for the stream policy.
|
||||||
@@ -82,13 +82,13 @@ Closes [#3270](https://github.com/GSD-redux/get-shit-done-redux/issues/3270).
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# npm (global, RC channel)
|
# npm (global, RC channel)
|
||||||
npm install -g get-shit-done-redux@next
|
npm install -g @opengsd/get-shit-done-redux@next
|
||||||
|
|
||||||
# npx (one-shot)
|
# npx (one-shot)
|
||||||
npx get-shit-done-redux@next
|
npx @opengsd/get-shit-done-redux@next
|
||||||
|
|
||||||
# Pin to this exact RC
|
# Pin to this exact RC
|
||||||
npm install -g get-shit-done-redux@1.42.0-rc1
|
npm install -g @opengsd/get-shit-done-redux@1.42.0-rc1
|
||||||
```
|
```
|
||||||
|
|
||||||
The installer is idempotent — re-running on an existing install updates in-place, preserving your `.planning/` directory and local patches.
|
The installer is idempotent — re-running on an existing install updates in-place, preserving your `.planning/` directory and local patches.
|
||||||
@@ -96,5 +96,5 @@ The installer is idempotent — re-running on an existing install updates in-pla
|
|||||||
To roll back to the latest stable, install with `@latest`:
|
To roll back to the latest stable, install with `@latest`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
Stable release. Published to npm under the `latest` tag.
|
Stable release. Published to npm under the `latest` tag.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -165,13 +165,13 @@ secure-phase audits, cross-runtime installs, and statusline parsing.
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# npm (global)
|
# npm (global)
|
||||||
npm install -g get-shit-done-redux@latest
|
npm install -g @opengsd/get-shit-done-redux@latest
|
||||||
|
|
||||||
# npx (one-shot)
|
# npx (one-shot)
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
|
|
||||||
# Pin to this exact version
|
# Pin to this exact version
|
||||||
npm install -g get-shit-done-redux@1.42.1
|
npm install -g @opengsd/get-shit-done-redux@1.42.1
|
||||||
```
|
```
|
||||||
|
|
||||||
The installer is idempotent — re-running on an existing install updates in-place,
|
The installer is idempotent — re-running on an existing install updates in-place,
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
Hotfix release. Published to npm under the `latest` tag.
|
Hotfix release. Published to npm under the `latest` tag.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -11,7 +11,7 @@ npx get-shit-done-redux@latest
|
|||||||
## What's in this release
|
## What's in this release
|
||||||
|
|
||||||
1.42.3 is a stability hotfix on top of 1.42.2. The headline is **Codex
|
1.42.3 is a stability hotfix on top of 1.42.2. The headline is **Codex
|
||||||
CLI 0.130.0 install routability** — after `npx get-shit-done-redux@latest
|
CLI 0.130.0 install routability** — after `npx @opengsd/get-shit-done-redux@latest
|
||||||
--codex`, `$gsd-*` skills now resolve correctly under Codex 0.130.0 and
|
--codex`, `$gsd-*` skills now resolve correctly under Codex 0.130.0 and
|
||||||
later, where the previous build left users with zero routable
|
later, where the previous build left users with zero routable
|
||||||
entrypoints. The release also ships **runtime-aware slash formatting**
|
entrypoints. The release also ships **runtime-aware slash formatting**
|
||||||
@@ -136,13 +136,13 @@ SDK install readiness, and decimal-phase dependencies.
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# npm (global)
|
# npm (global)
|
||||||
npm install -g get-shit-done-redux@latest
|
npm install -g @opengsd/get-shit-done-redux@latest
|
||||||
|
|
||||||
# npx (one-shot)
|
# npx (one-shot)
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
|
|
||||||
# Pin to this exact version
|
# Pin to this exact version
|
||||||
npm install -g get-shit-done-redux@1.42.3
|
npm install -g @opengsd/get-shit-done-redux@1.42.3
|
||||||
```
|
```
|
||||||
|
|
||||||
The installer is idempotent — re-running on an existing install
|
The installer is idempotent — re-running on an existing install
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
First canary cut for the **1.50.0** train. Published to npm under the `canary` dist-tag.
|
First canary cut for the **1.50.0** train. Published to npm under the `canary` dist-tag.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@canary
|
npx @opengsd/get-shit-done-redux@canary
|
||||||
# or pin exact:
|
# or pin exact:
|
||||||
npm install -g get-shit-done-redux@1.50.0-canary.1
|
npm install -g @opengsd/get-shit-done-redux@1.50.0-canary.1
|
||||||
```
|
```
|
||||||
|
|
||||||
> **Canary stream caveat.** Canary builds come from the long-lived `dev` integration branch and may carry rough edges that the `next` (RC) and `latest` (stable) channels never see. Use canary when you want to exercise in-flight features early and report findings; do NOT pin production projects to it. See [CANARY.md](CANARY.md) for the stream policy and rollback path.
|
> **Canary stream caveat.** Canary builds come from the long-lived `dev` integration branch and may carry rough edges that the `next` (RC) and `latest` (stable) channels never see. Use canary when you want to exercise in-flight features early and report findings; do NOT pin production projects to it. See [CANARY.md](CANARY.md) for the stream policy and rollback path.
|
||||||
@@ -72,10 +72,10 @@ The MVP slice closes out with read-side surfaces:
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Try the canary
|
# Try the canary
|
||||||
npx get-shit-done-redux@canary
|
npx @opengsd/get-shit-done-redux@canary
|
||||||
|
|
||||||
# Or pin exact
|
# Or pin exact
|
||||||
npm install -g get-shit-done-redux@1.50.0-canary.1
|
npm install -g @opengsd/get-shit-done-redux@1.50.0-canary.1
|
||||||
```
|
```
|
||||||
|
|
||||||
The installer's defensive purge will rewrite stale config blocks left by older GSD versions on first run. No manual cleanup needed.
|
The installer's defensive purge will rewrite stale config blocks left by older GSD versions on first run. No manual cleanup needed.
|
||||||
|
|||||||
@@ -1263,10 +1263,10 @@ Cline uses a rules-based integration — GSD installs as `.clinerules` rather th
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Global install (applies to all projects)
|
# Global install (applies to all projects)
|
||||||
npx get-shit-done-redux --cline --global
|
npx @opengsd/get-shit-done-redux --cline --global
|
||||||
|
|
||||||
# Local install (this project only)
|
# Local install (this project only)
|
||||||
npx get-shit-done-redux --cline --local
|
npx @opengsd/get-shit-done-redux --cline --local
|
||||||
```
|
```
|
||||||
|
|
||||||
Global installs write to `~/.cline/`. Local installs write to `./.cline/`. No custom slash commands are registered — GSD rules are loaded automatically by Cline from the rules file.
|
Global installs write to `~/.cline/`. Local installs write to `./.cline/`. No custom slash commands are registered — GSD rules are loaded automatically by Cline from the rules file.
|
||||||
@@ -1276,7 +1276,7 @@ Global installs write to `~/.cline/`. Local installs write to `./.cline/`. No cu
|
|||||||
CodeBuddy uses a skills-based integration.
|
CodeBuddy uses a skills-based integration.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux --codebuddy --global
|
npx @opengsd/get-shit-done-redux --codebuddy --global
|
||||||
```
|
```
|
||||||
|
|
||||||
Skills are installed to `~/.codebuddy/skills/gsd-*/SKILL.md`.
|
Skills are installed to `~/.codebuddy/skills/gsd-*/SKILL.md`.
|
||||||
@@ -1286,7 +1286,7 @@ Skills are installed to `~/.codebuddy/skills/gsd-*/SKILL.md`.
|
|||||||
Qwen Code uses the same open skills standard as Claude Code 2.1.88+.
|
Qwen Code uses the same open skills standard as Claude Code 2.1.88+.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux --qwen --global
|
npx @opengsd/get-shit-done-redux --qwen --global
|
||||||
```
|
```
|
||||||
|
|
||||||
Skills are installed to `~/.qwen/skills/gsd-*/SKILL.md`. Use the `QWEN_CONFIG_DIR` environment variable to override the default install path.
|
Skills are installed to `~/.qwen/skills/gsd-*/SKILL.md`. Use the `QWEN_CONFIG_DIR` environment variable to override the default install path.
|
||||||
@@ -1300,7 +1300,7 @@ GSD does not enumerate prerelease editions as separate named runtimes. They are
|
|||||||
**Pattern.** Set the runtime's `*_CONFIG_DIR` env var to the prerelease directory before running the installer:
|
**Pattern.** Set the runtime's `*_CONFIG_DIR` env var to the prerelease directory before running the installer:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
WINDSURF_CONFIG_DIR=~/.codeium/windsurf-next npx get-shit-done-redux@latest --windsurf --global
|
WINDSURF_CONFIG_DIR=~/.codeium/windsurf-next npx @opengsd/get-shit-done-redux@latest --windsurf --global
|
||||||
```
|
```
|
||||||
|
|
||||||
Select the corresponding stable runtime in the installer prompt. Skills land in the prerelease directory; commands appear in the prerelease editor.
|
Select the corresponding stable runtime in the installer prompt. Skills land in the prerelease directory; commands appear in the prerelease editor.
|
||||||
@@ -1340,7 +1340,7 @@ Since v1.17, the installer backs up locally modified files to `gsd-local-patches
|
|||||||
|
|
||||||
### Cannot Update via npm
|
### Cannot Update via npm
|
||||||
|
|
||||||
If `npx get-shit-done-redux` fails due to npm outages or network restrictions, see [docs/manual-update.md](manual-update.md) for a step-by-step manual update procedure that works without npm access.
|
If `npx @opengsd/get-shit-done-redux` fails due to npm outages or network restrictions, see [docs/manual-update.md](manual-update.md) for a step-by-step manual update procedure that works without npm access.
|
||||||
|
|
||||||
### Surface GSD Update Notifications Without GSD's Statusline
|
### Surface GSD Update Notifications Without GSD's Statusline
|
||||||
|
|
||||||
@@ -1362,7 +1362,7 @@ GSD update available: 1.39.0 → 1.40.0. Run /gsd-update.
|
|||||||
|
|
||||||
The banner is silent when no update is available. If the cache file is corrupt, GSD emits one diagnostic line (`GSD update check failed.`) and stays silent for 24 hours so a broken cache does not nag every session.
|
The banner is silent when no update is available. If the cache file is corrupt, GSD emits one diagnostic line (`GSD update check failed.`) and stays silent for 24 hours so a broken cache does not nag every session.
|
||||||
|
|
||||||
**Opt-out / removal:** delete the SessionStart hook entry that references `gsd-update-banner.js` from your runtime's `settings.json` (Claude Code: `~/.claude/settings.json`; Gemini: `~/.gemini/settings.json`). `npx get-shit-done-redux --uninstall` removes both the script and the registration in one pass.
|
**Opt-out / removal:** delete the SessionStart hook entry that references `gsd-update-banner.js` from your runtime's `settings.json` (Claude Code: `~/.claude/settings.json`; Gemini: `~/.gemini/settings.json`). `npx @opengsd/get-shit-done-redux --uninstall` removes both the script and the registration in one pass.
|
||||||
|
|
||||||
The banner is not offered when GSD's statusline is installed — that channel already surfaces update info, so re-prompting would be noise.
|
The banner is not offered when GSD's statusline is installed — that channel already surfaces update info, so re-prompting would be noise.
|
||||||
|
|
||||||
|
|||||||
@@ -30,8 +30,8 @@ The catalog owns:
|
|||||||
- agent → dynamic-routing default tier mapping
|
- agent → dynamic-routing default tier mapping
|
||||||
|
|
||||||
The canonical file lives in a location both packages ship:
|
The canonical file lives in a location both packages ship:
|
||||||
- repo root package (`get-shit-done-redux`) includes it
|
- repo root package (`@opengsd/get-shit-done-redux`) includes it
|
||||||
- standalone SDK package (`@gsd-redux/sdk`) includes it
|
- standalone SDK package (`@opengsd/gsd-sdk`) includes it
|
||||||
|
|
||||||
Both CJS and SDK load this exact file. Neither package keeps its own independent list.
|
Both CJS and SDK load this exact file. Neither package keeps its own independent list.
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
- **Status:** Accepted
|
- **Status:** Accepted
|
||||||
- **Date:** 2026-05-07
|
- **Date:** 2026-05-07
|
||||||
|
|
||||||
We decided to define one explicit SDK Package Seam Module for the `@gsd-redux/sdk` → `get-shit-done-redux` transition. During this transition, install-layout probing, legacy `gsd-tools.cjs` discovery, legacy `core.cjs` discovery, and compatibility-only missing-asset diagnostics must live behind one seam instead of leaking across SDK Modules. This keeps callers thin, raises leverage for standalone-SDK testing, and improves locality by making package-readiness bugs land in one place. First tracer-bullet slice: add one compatibility Adapter Module at this seam and migrate current legacy asset callers onto it before broader native replacement work.
|
We decided to define one explicit SDK Package Seam Module for the `@opengsd/gsd-sdk` → `@opengsd/get-shit-done-redux` transition. During this transition, install-layout probing, legacy `gsd-tools.cjs` discovery, legacy `core.cjs` discovery, and compatibility-only missing-asset diagnostics must live behind one seam instead of leaking across SDK Modules. This keeps callers thin, raises leverage for standalone-SDK testing, and improves locality by making package-readiness bugs land in one place. First tracer-bullet slice: add one compatibility Adapter Module at this seam and migrate current legacy asset callers onto it before broader native replacement work.
|
||||||
|
|
||||||
Runtime-global skills directory resolution is explicitly out of scope for this seam. That policy varies by runtime (`claude`, `codex`, `cline`, etc.) rather than by legacy package/install layout, so it now lives in a separate Runtime-Global Skills Policy Module consumed by `agent-skills` and `skill-manifest`.
|
Runtime-global skills directory resolution is explicitly out of scope for this seam. That policy varies by runtime (`claude`, `codex`, `cline`, etc.) rather than by legacy package/install layout, so it now lives in a separate Runtime-Global Skills Policy Module consumed by `agent-skills` and `skill-manifest`.
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ GSD's `/gsd-pause-work` command saves execution state. The WARNING message sugge
|
|||||||
|
|
||||||
## Setup
|
## Setup
|
||||||
|
|
||||||
Both hooks are automatically registered during `npx get-shit-done-redux` installation:
|
Both hooks are automatically registered during `npx @opengsd/get-shit-done-redux` installation:
|
||||||
|
|
||||||
- **Statusline** (writes bridge file): Registered as `statusLine` in settings.json
|
- **Statusline** (writes bridge file): Registered as `statusLine` in settings.json
|
||||||
- **Context Monitor** (reads bridge file): Registered as `PostToolUse` hook in settings.json (`AfterTool` for Gemini)
|
- **Context Monitor** (reads bridge file): Registered as `PostToolUse` hook in settings.json (`AfterTool` for Gemini)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ Copy-paste friendly for Discord and GitHub comments.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**@gsd-redux/sdk** replaces the untyped, monolithic `gsd-tools.cjs` subprocess with a typed, tested, registry-based query system and **`gsd-sdk query`**, giving GSD structured results, classified errors (`GSDError` with `ErrorClassification`), and golden-verified parity with the old CLI. That gives the framework one stable contract instead of a fragile, very large CLI that every workflow had to spawn and parse by hand.
|
**@opengsd/gsd-sdk** replaces the untyped, monolithic `gsd-tools.cjs` subprocess with a typed, tested, registry-based query system and **`gsd-sdk query`**, giving GSD structured results, classified errors (`GSDError` with `ErrorClassification`), and golden-verified parity with the old CLI. That gives the framework one stable contract instead of a fragile, very large CLI that every workflow had to spawn and parse by hand.
|
||||||
|
|
||||||
**What users can expect**
|
**What users can expect**
|
||||||
|
|
||||||
|
|||||||
@@ -1308,7 +1308,7 @@ Claude が GSD ワークフローコンテキスト外でファイル編集を
|
|||||||
|
|
||||||
### 55. マルチランタイムインストーラー選択
|
### 55. マルチランタイムインストーラー選択
|
||||||
|
|
||||||
**対象:** `npx get-shit-done-redux`
|
**対象:** `npx @opengsd/get-shit-done-redux`
|
||||||
|
|
||||||
**目的:** 1回のインタラクティブなインストールセッションで複数のランタイムを選択します。
|
**目的:** 1回のインタラクティブなインストールセッションで複数のランタイムを選択します。
|
||||||
|
|
||||||
@@ -1327,7 +1327,7 @@ Claude が GSD ワークフローコンテキスト外でファイル編集を
|
|||||||
|
|
||||||
### 56. Windsurf ランタイムサポート
|
### 56. Windsurf ランタイムサポート
|
||||||
|
|
||||||
**対象:** `npx get-shit-done-redux`
|
**対象:** `npx @opengsd/get-shit-done-redux`
|
||||||
|
|
||||||
**目的:** Windsurf AI IDE のサポートを追加します。
|
**目的:** Windsurf AI IDE のサポートを追加します。
|
||||||
|
|
||||||
@@ -1568,7 +1568,7 @@ Claude が GSD ワークフローコンテキスト外でファイル編集を
|
|||||||
|
|
||||||
### 68. Claude Code スキルマイグレーション
|
### 68. Claude Code スキルマイグレーション
|
||||||
|
|
||||||
**対象:** `npx get-shit-done-redux`
|
**対象:** `npx @opengsd/get-shit-done-redux`
|
||||||
|
|
||||||
**目的:** GSD コマンドを Claude Code 2.1.88+ のスキル形式に後方互換性を維持してマイグレーションします。
|
**目的:** GSD コマンドを Claude Code 2.1.88+ のスキル形式に後方互換性を維持してマイグレーションします。
|
||||||
|
|
||||||
@@ -1831,7 +1831,7 @@ Claude が GSD ワークフローコンテキスト外でファイル編集を
|
|||||||
|
|
||||||
### 85. 新規ランタイムサポート (Trae, Cline, Augment Code)
|
### 85. 新規ランタイムサポート (Trae, Cline, Augment Code)
|
||||||
|
|
||||||
**対象:** `npx get-shit-done-redux`
|
**対象:** `npx @opengsd/get-shit-done-redux`
|
||||||
|
|
||||||
**目的:** Trae IDE、Cline、Augment Code ランタイムへの GSD インストールを拡張します。
|
**目的:** Trae IDE、Cline、Augment Code ランタイムへの GSD インストールを拡張します。
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ GSD の `/gsd-pause-work` コマンドは実行状態を保存します。WARNIN
|
|||||||
|
|
||||||
## セットアップ
|
## セットアップ
|
||||||
|
|
||||||
両フックは `npx get-shit-done-redux` のインストール時に自動的に登録されます:
|
両フックは `npx @opengsd/get-shit-done-redux` のインストール時に自動的に登録されます:
|
||||||
|
|
||||||
- **ステータスライン**(ブリッジファイルの書き込み): settings.json の `statusLine` として登録
|
- **ステータスライン**(ブリッジファイルの書き込み): settings.json の `statusLine` として登録
|
||||||
- **コンテキストモニター**(ブリッジファイルの読み取り): settings.json の `PostToolUse` フックとして登録(Gemini では `AfterTool`)
|
- **コンテキストモニター**(ブリッジファイルの読み取り): settings.json の `PostToolUse` フックとして登録(Gemini では `AfterTool`)
|
||||||
|
|||||||
@@ -1308,7 +1308,7 @@ Claude가 GSD 워크플로우 컨텍스트 밖에서 파일 편집을 시도하
|
|||||||
|
|
||||||
### 55. Multi-Runtime Installer Selection
|
### 55. Multi-Runtime Installer Selection
|
||||||
|
|
||||||
**일부:** `npx get-shit-done-redux`
|
**일부:** `npx @opengsd/get-shit-done-redux`
|
||||||
|
|
||||||
**목적:** 단일 대화형 설치 세션에서 여러 런타임을 선택합니다.
|
**목적:** 단일 대화형 설치 세션에서 여러 런타임을 선택합니다.
|
||||||
|
|
||||||
@@ -1327,7 +1327,7 @@ Claude가 GSD 워크플로우 컨텍스트 밖에서 파일 편집을 시도하
|
|||||||
|
|
||||||
### 56. Windsurf 런타임 지원
|
### 56. Windsurf 런타임 지원
|
||||||
|
|
||||||
**대상:** `npx get-shit-done-redux`
|
**대상:** `npx @opengsd/get-shit-done-redux`
|
||||||
|
|
||||||
**목적:** Windsurf AI IDE 지원을 추가합니다.
|
**목적:** Windsurf AI IDE 지원을 추가합니다.
|
||||||
|
|
||||||
@@ -1568,7 +1568,7 @@ Claude가 GSD 워크플로우 컨텍스트 밖에서 파일 편집을 시도하
|
|||||||
|
|
||||||
### 68. Claude Code 스킬 마이그레이션
|
### 68. Claude Code 스킬 마이그레이션
|
||||||
|
|
||||||
**대상:** `npx get-shit-done-redux`
|
**대상:** `npx @opengsd/get-shit-done-redux`
|
||||||
|
|
||||||
**목적:** GSD 명령어를 하위 호환성을 유지하면서 Claude Code 2.1.88+ 스킬 형식으로 마이그레이션합니다.
|
**목적:** GSD 명령어를 하위 호환성을 유지하면서 Claude Code 2.1.88+ 스킬 형식으로 마이그레이션합니다.
|
||||||
|
|
||||||
@@ -1831,7 +1831,7 @@ Claude가 GSD 워크플로우 컨텍스트 밖에서 파일 편집을 시도하
|
|||||||
|
|
||||||
### 85. 신규 런타임 지원 (Trae, Cline, Augment Code)
|
### 85. 신규 런타임 지원 (Trae, Cline, Augment Code)
|
||||||
|
|
||||||
**대상:** `npx get-shit-done-redux`
|
**대상:** `npx @opengsd/get-shit-done-redux`
|
||||||
|
|
||||||
**목적:** Trae IDE, Cline, Augment Code 런타임으로 GSD 설치를 확장합니다.
|
**목적:** Trae IDE, Cline, Augment Code 런타임으로 GSD 설치를 확장합니다.
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ GSD의 `/gsd-pause-work` 명령어는 실행 상태를 저장합니다. WARNING
|
|||||||
|
|
||||||
## 설정
|
## 설정
|
||||||
|
|
||||||
두 훅 모두 `npx get-shit-done-redux` 설치 중에 자동으로 등록됩니다.
|
두 훅 모두 `npx @opengsd/get-shit-done-redux` 설치 중에 자동으로 등록됩니다.
|
||||||
|
|
||||||
- **Statusline** (브리지 파일 기록): settings.json에 `statusLine`으로 등록
|
- **Statusline** (브리지 파일 기록): settings.json에 `statusLine`으로 등록
|
||||||
- **Context Monitor** (브리지 파일 읽기): settings.json에 `PostToolUse` 훅으로 등록 (Gemini의 경우 `AfterTool`)
|
- **Context Monitor** (브리지 파일 읽기): settings.json에 `PostToolUse` 훅으로 등록 (Gemini의 경우 `AfterTool`)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Manual Update (Non-npm Install)
|
# Manual Update (Non-npm Install)
|
||||||
|
|
||||||
Use this procedure when `npx get-shit-done-redux@latest` is unavailable — e.g. during a publish outage or if you are working directly from the source repo.
|
Use this procedure when `npx @opengsd/get-shit-done-redux@latest` is unavailable — e.g. during a publish outage or if you are working directly from the source repo.
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
|
|||||||
@@ -209,7 +209,7 @@ Phase 5 specifically preserves the in-process model: `QueryRuntimeBridge.execute
|
|||||||
### Build/install pipeline impact
|
### Build/install pipeline impact
|
||||||
|
|
||||||
- Each generator runs at build time on the developer machine (and in CI for the freshness check). No runtime generator execution.
|
- Each generator runs at build time on the developer machine (and in CI for the freshness check). No runtime generator execution.
|
||||||
- The published `get-shit-done-redux` package already includes both `get-shit-done/bin/` and `sdk/dist/`. The generated `.cjs` files are committed to the repo (like `command-aliases.generated.cjs` today), so the install flow is unchanged — no on-install code generation.
|
- The published `@opengsd/get-shit-done-redux` package already includes both `get-shit-done/bin/` and `sdk/dist/`. The generated `.cjs` files are committed to the repo (like `command-aliases.generated.cjs` today), so the install flow is unchanged — no on-install code generation.
|
||||||
- `npm run build:sdk` continues to do what it does. Generators are invoked via `npm run gen:<module>` per the existing precedent.
|
- `npm run build:sdk` continues to do what it does. Generators are invoked via `npm run gen:<module>` per the existing precedent.
|
||||||
|
|
||||||
### Risks
|
### Risks
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Referência de Ferramentas CLI
|
# Referência de Ferramentas CLI
|
||||||
|
|
||||||
Resumo em Português das ferramentas CLI do GSD.
|
Resumo em Português das ferramentas CLI do GSD.
|
||||||
Para API completa (assinaturas, argumentos e comportamento detalhado), consulte [CLI-TOOLS.md em inglês](../CLI-TOOLS.md) — inclui a secção **SDK and programmatic access** (`gsd-sdk query`, `@gsd-redux/sdk`).
|
Para API completa (assinaturas, argumentos e comportamento detalhado), consulte [CLI-TOOLS.md em inglês](../CLI-TOOLS.md) — inclui a secção **SDK and programmatic access** (`gsd-sdk query`, `@opengsd/gsd-sdk`).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
|
|
||||||
**解决上下文衰减 —— 即 Claude 填充上下文窗口时发生的质量退化问题。**
|
**解决上下文衰减 —— 即 Claude 填充上下文窗口时发生的质量退化问题。**
|
||||||
|
|
||||||
[](https://www.npmjs.com/package/get-shit-done-redux)
|
[](https://www.npmjs.com/package/@opengsd/get-shit-done-redux)
|
||||||
[](https://www.npmjs.com/package/get-shit-done-redux)
|
[](https://www.npmjs.com/package/@opengsd/get-shit-done-redux)
|
||||||
[](https://github.com/GSD-redux/get-shit-done-redux/actions/workflows/test.yml)
|
[](https://github.com/GSD-redux/get-shit-done-redux/actions/workflows/test.yml)
|
||||||
[](https://discord.gg/mYgfVNfA2r)
|
[](https://discord.gg/mYgfVNfA2r)
|
||||||
[](https://x.com/gsd_foundation)
|
[](https://x.com/gsd_foundation)
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
<br>
|
<br>
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
**支持 Mac、Windows 和 Linux。**
|
**支持 Mac、Windows 和 Linux。**
|
||||||
@@ -78,7 +78,7 @@ GSD 解决了这个问题。它是让 Claude Code 变得可靠的上下文工程
|
|||||||
## 快速开始
|
## 快速开始
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
安装程序会提示你选择:
|
安装程序会提示你选择:
|
||||||
@@ -99,7 +99,7 @@ npx get-shit-done-redux@latest
|
|||||||
GSD 快速迭代。定期更新:
|
GSD 快速迭代。定期更新:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
@@ -107,25 +107,25 @@ npx get-shit-done-redux@latest
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Claude Code
|
# Claude Code
|
||||||
npx get-shit-done-redux --claude --global # 安装到 ~/.claude/
|
npx @opengsd/get-shit-done-redux --claude --global # 安装到 ~/.claude/
|
||||||
npx get-shit-done-redux --claude --local # 安装到 ./.claude/
|
npx @opengsd/get-shit-done-redux --claude --local # 安装到 ./.claude/
|
||||||
|
|
||||||
# OpenCode
|
# OpenCode
|
||||||
npx get-shit-done-redux --opencode --global # 安装到 ~/.config/opencode/
|
npx @opengsd/get-shit-done-redux --opencode --global # 安装到 ~/.config/opencode/
|
||||||
|
|
||||||
# Gemini CLI
|
# Gemini CLI
|
||||||
npx get-shit-done-redux --gemini --global # 安装到 ~/.gemini/
|
npx @opengsd/get-shit-done-redux --gemini --global # 安装到 ~/.gemini/
|
||||||
|
|
||||||
# Kilo
|
# Kilo
|
||||||
npx get-shit-done-redux --kilo --global # 安装到 ~/.config/kilo/
|
npx @opengsd/get-shit-done-redux --kilo --global # 安装到 ~/.config/kilo/
|
||||||
npx get-shit-done-redux --kilo --local # 安装到 ./.kilo/
|
npx @opengsd/get-shit-done-redux --kilo --local # 安装到 ./.kilo/
|
||||||
|
|
||||||
# Codex
|
# Codex
|
||||||
npx get-shit-done-redux --codex --global # 安装到 ~/.codex/
|
npx @opengsd/get-shit-done-redux --codex --global # 安装到 ~/.codex/
|
||||||
npx get-shit-done-redux --codex --local # 安装到 ./.codex/
|
npx @opengsd/get-shit-done-redux --codex --local # 安装到 ./.codex/
|
||||||
|
|
||||||
# 所有运行时
|
# 所有运行时
|
||||||
npx get-shit-done-redux --all --global # 安装到所有目录
|
npx @opengsd/get-shit-done-redux --all --global # 安装到所有目录
|
||||||
```
|
```
|
||||||
|
|
||||||
使用 `--global`(`-g`)或 `--local`(`-l`)跳过位置提示。
|
使用 `--global`(`-g`)或 `--local`(`-l`)跳过位置提示。
|
||||||
@@ -652,18 +652,18 @@ GSD 的代码库映射和分析命令读取文件以了解你的项目。**保
|
|||||||
|
|
||||||
**命令没有按预期工作?**
|
**命令没有按预期工作?**
|
||||||
- 运行 `/gsd-help` 验证安装
|
- 运行 `/gsd-help` 验证安装
|
||||||
- 重新运行 `npx get-shit-done-redux` 重新安装
|
- 重新运行 `npx @opengsd/get-shit-done-redux` 重新安装
|
||||||
|
|
||||||
**更新到最新版本?**
|
**更新到最新版本?**
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
**使用 Docker 或容器化环境?**
|
**使用 Docker 或容器化环境?**
|
||||||
|
|
||||||
如果用波浪号路径(`~/.claude/...`)读取文件失败,在安装前设置 `CLAUDE_CONFIG_DIR`:
|
如果用波浪号路径(`~/.claude/...`)读取文件失败,在安装前设置 `CLAUDE_CONFIG_DIR`:
|
||||||
```bash
|
```bash
|
||||||
CLAUDE_CONFIG_DIR=/home/youruser/.claude npx get-shit-done-redux --global
|
CLAUDE_CONFIG_DIR=/home/youruser/.claude npx @opengsd/get-shit-done-redux --global
|
||||||
```
|
```
|
||||||
这确保使用绝对路径而不是 `~`,后者在容器中可能无法正确展开。
|
这确保使用绝对路径而不是 `~`,后者在容器中可能无法正确展开。
|
||||||
|
|
||||||
@@ -673,16 +673,16 @@ CLAUDE_CONFIG_DIR=/home/youruser/.claude npx get-shit-done-redux --global
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# 全局安装
|
# 全局安装
|
||||||
npx get-shit-done-redux --claude --global --uninstall
|
npx @opengsd/get-shit-done-redux --claude --global --uninstall
|
||||||
npx get-shit-done-redux --opencode --global --uninstall
|
npx @opengsd/get-shit-done-redux --opencode --global --uninstall
|
||||||
npx get-shit-done-redux --kilo --global --uninstall
|
npx @opengsd/get-shit-done-redux --kilo --global --uninstall
|
||||||
npx get-shit-done-redux --codex --global --uninstall
|
npx @opengsd/get-shit-done-redux --codex --global --uninstall
|
||||||
|
|
||||||
# 本地安装(当前项目)
|
# 本地安装(当前项目)
|
||||||
npx get-shit-done-redux --claude --local --uninstall
|
npx @opengsd/get-shit-done-redux --claude --local --uninstall
|
||||||
npx get-shit-done-redux --opencode --local --uninstall
|
npx @opengsd/get-shit-done-redux --opencode --local --uninstall
|
||||||
npx get-shit-done-redux --kilo --local --uninstall
|
npx @opengsd/get-shit-done-redux --kilo --local --uninstall
|
||||||
npx get-shit-done-redux --codex --local --uninstall
|
npx @opengsd/get-shit-done-redux --codex --local --uninstall
|
||||||
```
|
```
|
||||||
|
|
||||||
这删除所有 GSD 命令、代理、钩子和设置,同时保留你的其他配置。
|
这删除所有 GSD 命令、代理、钩子和设置,同时保留你的其他配置。
|
||||||
@@ -691,7 +691,7 @@ npx get-shit-done-redux --codex --local --uninstall
|
|||||||
|
|
||||||
## 社区移植
|
## 社区移植
|
||||||
|
|
||||||
OpenCode、Gemini CLI、Kilo 和 Codex 现在通过 `npx get-shit-done-redux` 原生支持。
|
OpenCode、Gemini CLI、Kilo 和 Codex 现在通过 `npx @opengsd/get-shit-done-redux` 原生支持。
|
||||||
|
|
||||||
这些社区移植开创了多运行时支持:
|
这些社区移植开创了多运行时支持:
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ const { execNpm } = require('./lib/shell-command-projection.cjs');
|
|||||||
|
|
||||||
// Hardcoded. Do not parameterise — the whole point of this script is that
|
// Hardcoded. Do not parameterise — the whole point of this script is that
|
||||||
// the package name is not a runtime choice for the caller.
|
// the package name is not a runtime choice for the caller.
|
||||||
const PACKAGE_NAME = 'get-shit-done-redux';
|
const PACKAGE_NAME = '@opengsd/get-shit-done-redux';
|
||||||
|
|
||||||
const CHECK_REASON = Object.freeze({
|
const CHECK_REASON = Object.freeze({
|
||||||
OK: 'ok',
|
OK: 'ok',
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated The supported programmatic surface is `gsd-sdk query` (SDK query registry)
|
* @deprecated The supported programmatic surface is `gsd-sdk query` (SDK query registry)
|
||||||
* and the `@gsd-redux/sdk` package. This Node CLI remains the compatibility implementation
|
* and the `@opengsd/gsd-sdk` package. This Node CLI remains the compatibility implementation
|
||||||
* for shell scripts and older workflows; prefer calling the SDK from agents and automation.
|
* for shell scripts and older workflows; prefer calling the SDK from agents and automation.
|
||||||
*
|
*
|
||||||
* GSD Tools — CLI utility for GSD workflow operations
|
* GSD Tools — CLI utility for GSD workflow operations
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
* stop, applied to the SDK-load logic itself).
|
* stop, applied to the SDK-load logic itself).
|
||||||
*
|
*
|
||||||
* Load path policy: the bridge resolves the bundled SDK by package-relative
|
* Load path policy: the bridge resolves the bundled SDK by package-relative
|
||||||
* filesystem path, NOT by the `@gsd-redux/sdk` package name. The package name
|
* filesystem path, NOT by the `@opengsd/gsd-sdk` package name. The package name
|
||||||
* is not installed in the root `node_modules` (it lives as a sibling workspace
|
* is not installed in the root `node_modules` (it lives as a sibling workspace
|
||||||
* package, not a dependency), and the SDK's public entry doesn't re-export
|
* package, not a dependency), and the SDK's public entry doesn't re-export
|
||||||
* `executeForCjs` or `formatStateLoadRawStdout` anyway. Using the relative
|
* `executeForCjs` or `formatStateLoadRawStdout` anyway. Using the relative
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
* `package.json` keeps `sdk/dist` at the same path inside the published
|
* `package.json` keeps `sdk/dist` at the same path inside the published
|
||||||
* tarball.
|
* tarball.
|
||||||
*
|
*
|
||||||
* The previous implementation used `require('@gsd-redux/sdk')`, which always
|
* The previous implementation used `require('@opengsd/gsd-sdk')`, which always
|
||||||
* failed because the package was unresolvable from the consumer location.
|
* failed because the package was unresolvable from the consumer location.
|
||||||
* That cached `_loadFailed = true` for the lifetime of the process and made
|
* That cached `_loadFailed = true` for the lifetime of the process and made
|
||||||
* every router silently fall through to CJS — defeating Phase 5/6's entire
|
* every router silently fall through to CJS — defeating Phase 5/6's entire
|
||||||
|
|||||||
@@ -350,12 +350,12 @@ function formatSdkPathDiagnostic({ shimDir, platform, runDir }) {
|
|||||||
} else {
|
} else {
|
||||||
actionLines.push('Could not locate a writable PATH directory to install the shim.');
|
actionLines.push('Could not locate a writable PATH directory to install the shim.');
|
||||||
actionLines.push('Install globally to materialize the bin symlink:');
|
actionLines.push('Install globally to materialize the bin symlink:');
|
||||||
actionLines.push('npm install -g get-shit-done-redux');
|
actionLines.push('npm install -g @opengsd/get-shit-done-redux');
|
||||||
}
|
}
|
||||||
const npxNoteLines = isNpx
|
const npxNoteLines = isNpx
|
||||||
? [
|
? [
|
||||||
"Note: you're running via npx. For a persistent shim,",
|
"Note: you're running via npx. For a persistent shim,",
|
||||||
'install globally instead: npm install -g get-shit-done-redux',
|
'install globally instead: npm install -g @opengsd/get-shit-done-redux',
|
||||||
]
|
]
|
||||||
: [];
|
: [];
|
||||||
return { shimLocationLine, actionLines, shellActions, npxNoteLines, isNpx, isWin32 };
|
return { shimLocationLine, actionLines, shellActions, npxNoteLines, isNpx, isWin32 };
|
||||||
|
|||||||
@@ -837,11 +837,11 @@ function cmdValidateHealth(cwd, options, raw) {
|
|||||||
if (agentStatus.installed_agents.length === 0) {
|
if (agentStatus.installed_agents.length === 0) {
|
||||||
addIssue('warning', 'W010',
|
addIssue('warning', 'W010',
|
||||||
`No GSD agents found in ${agentStatus.agents_dir} — Task(subagent_type="gsd-*") will fall back to general-purpose`,
|
`No GSD agents found in ${agentStatus.agents_dir} — Task(subagent_type="gsd-*") will fall back to general-purpose`,
|
||||||
'Run the GSD installer: npx get-shit-done-redux@latest');
|
'Run the GSD installer: npx @opengsd/get-shit-done-redux@latest');
|
||||||
} else {
|
} else {
|
||||||
addIssue('warning', 'W010',
|
addIssue('warning', 'W010',
|
||||||
`Missing ${agentStatus.missing_agents.length} GSD agents: ${agentStatus.missing_agents.join(', ')} — affected workflows will fall back to general-purpose`,
|
`Missing ${agentStatus.missing_agents.length} GSD agents: ${agentStatus.missing_agents.join(', ')} — affected workflows will fall back to general-purpose`,
|
||||||
'Run the GSD installer: npx get-shit-done-redux@latest');
|
'Run the GSD installer: npx @opengsd/get-shit-done-redux@latest');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch { /* intentionally empty — agent check is non-blocking */ }
|
} catch { /* intentionally empty — agent check is non-blocking */ }
|
||||||
|
|||||||
@@ -45,6 +45,6 @@ Topics: `workflow` · `planning` · `execute` · `quick` · `debug` · `capture`
|
|||||||
## Update GSD
|
## Update GSD
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
</reference>
|
</reference>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ Display the complete GSD command reference. Output ONLY the reference content. D
|
|||||||
GSD evolves fast. Update periodically:
|
GSD evolves fast. Update periodically:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npx get-shit-done-redux@latest
|
npx @opengsd/get-shit-done-redux@latest
|
||||||
```
|
```
|
||||||
|
|
||||||
## Core Workflow
|
## Core Workflow
|
||||||
|
|||||||
@@ -246,7 +246,7 @@ Extract from init JSON: `researcher_model`, `synthesizer_model`, `roadmapper_mod
|
|||||||
Subagent spawns (gsd-project-researcher, gsd-research-synthesizer, gsd-roadmapper) will fail
|
Subagent spawns (gsd-project-researcher, gsd-research-synthesizer, gsd-roadmapper) will fail
|
||||||
with "agent type not found". Run the installer with --global to make agents available:
|
with "agent type not found". Run the installer with --global to make agents available:
|
||||||
|
|
||||||
npx get-shit-done-redux@latest --global
|
npx @opengsd/get-shit-done-redux@latest --global
|
||||||
|
|
||||||
Proceeding without research subagents — roadmap will be generated inline.
|
Proceeding without research subagents — roadmap will be generated inline.
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ definitions to be installed for this runtime.
|
|||||||
Subagent spawns (gsd-project-researcher, gsd-research-synthesizer, gsd-roadmapper) will fail
|
Subagent spawns (gsd-project-researcher, gsd-research-synthesizer, gsd-roadmapper) will fail
|
||||||
with "agent type not found" if `required_agents_installed` is false. Run the installer with --global to make agents available:
|
with "agent type not found" if `required_agents_installed` is false. Run the installer with --global to make agents available:
|
||||||
|
|
||||||
npx get-shit-done-redux@latest --global
|
npx @opengsd/get-shit-done-redux@latest --global
|
||||||
|
|
||||||
Proceeding without research subagents — roadmap will be generated inline.
|
Proceeding without research subagents — roadmap will be generated inline.
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ elif command -v gsd-sdk >/dev/null 2>&1; then
|
|||||||
GSD_SDK="gsd-sdk"
|
GSD_SDK="gsd-sdk"
|
||||||
else
|
else
|
||||||
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
|
echo "ERROR: gsd-sdk not found on PATH and $GSD_TOOLS does not exist." >&2
|
||||||
echo "Run: npx get-shit-done-redux@latest --claude --local" >&2
|
echo "Run: npx @opengsd/get-shit-done-redux@latest --claude --local" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
INIT=$($GSD_SDK query init.quick "$DESCRIPTION")
|
INIT=$($GSD_SDK query init.quick "$DESCRIPTION")
|
||||||
|
|||||||
@@ -326,7 +326,7 @@ fi
|
|||||||
```text
|
```text
|
||||||
Couldn't check for updates (reason: {LATEST_REASON}, exit: {LATEST_STATUS}).
|
Couldn't check for updates (reason: {LATEST_REASON}, exit: {LATEST_STATUS}).
|
||||||
|
|
||||||
To update manually: `npx -y --package=get-shit-done-redux@latest -- get-shit-done-redux --global`
|
To update manually: `npx -y --package=@opengsd/get-shit-done-redux@latest -- get-shit-done-redux --global`
|
||||||
```
|
```
|
||||||
|
|
||||||
Exit.
|
Exit.
|
||||||
@@ -547,17 +547,17 @@ RUNTIME_FLAG="--$TARGET_RUNTIME"
|
|||||||
|
|
||||||
**If LOCAL install:**
|
**If LOCAL install:**
|
||||||
```bash
|
```bash
|
||||||
npx -y --package=get-shit-done-redux@latest -- get-shit-done-redux "$RUNTIME_FLAG" --local
|
npx -y --package=@opengsd/get-shit-done-redux@latest -- get-shit-done-redux "$RUNTIME_FLAG" --local
|
||||||
```
|
```
|
||||||
|
|
||||||
**If GLOBAL install:**
|
**If GLOBAL install:**
|
||||||
```bash
|
```bash
|
||||||
npx -y --package=get-shit-done-redux@latest -- get-shit-done-redux "$RUNTIME_FLAG" --global
|
npx -y --package=@opengsd/get-shit-done-redux@latest -- get-shit-done-redux "$RUNTIME_FLAG" --global
|
||||||
```
|
```
|
||||||
|
|
||||||
**If UNKNOWN install:**
|
**If UNKNOWN install:**
|
||||||
```bash
|
```bash
|
||||||
npx -y --package=get-shit-done-redux@latest -- get-shit-done-redux --claude --global
|
npx -y --package=@opengsd/get-shit-done-redux@latest -- get-shit-done-redux --claude --global
|
||||||
```
|
```
|
||||||
|
|
||||||
Capture output. If install fails, show error and exit.
|
Capture output. If install fails, show error and exit.
|
||||||
|
|||||||
14
package-lock.json
generated
14
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "get-shit-done-redux",
|
"name": "@opengsd/get-shit-done-redux",
|
||||||
"version": "1.50.0-canary.0",
|
"version": "1.0.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "get-shit-done-redux",
|
"name": "@opengsd/get-shit-done-redux",
|
||||||
"version": "1.50.0-canary.0",
|
"version": "1.0.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@anthropic-ai/claude-agent-sdk": "^0.2.84",
|
"@anthropic-ai/claude-agent-sdk": "^0.2.84",
|
||||||
@@ -1627,9 +1627,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/qs": {
|
"node_modules/qs": {
|
||||||
"version": "6.15.1",
|
"version": "6.15.2",
|
||||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz",
|
"resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz",
|
||||||
"integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==",
|
"integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==",
|
||||||
"license": "BSD-3-Clause",
|
"license": "BSD-3-Clause",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"side-channel": "^1.1.0"
|
"side-channel": "^1.1.0"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "get-shit-done-redux",
|
"name": "@opengsd/get-shit-done-redux",
|
||||||
"version": "1.50.0-canary.0",
|
"version": "1.0.0",
|
||||||
"description": "A meta-prompting, context engineering and spec-driven development system for Claude Code, OpenCode, Gemini and Codex by TÂCHES.",
|
"description": "A meta-prompting, context engineering and spec-driven development system for Claude Code, OpenCode, Gemini and Codex by TÂCHES.",
|
||||||
"bin": {
|
"bin": {
|
||||||
"get-shit-done-redux": "bin/install.js",
|
"get-shit-done-redux": "bin/install.js",
|
||||||
@@ -44,6 +44,9 @@
|
|||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/open-gsd/get-shit-done-redux/issues"
|
"url": "https://github.com/open-gsd/get-shit-done-redux/issues"
|
||||||
},
|
},
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=22.0.0"
|
"node": ">=22.0.0"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ function parseArgs(argv) {
|
|||||||
changelog: null,
|
changelog: null,
|
||||||
output: null,
|
output: null,
|
||||||
repoSlug: 'open-gsd/get-shit-done-redux',
|
repoSlug: 'open-gsd/get-shit-done-redux',
|
||||||
installCommand: 'npx get-shit-done-redux@latest',
|
installCommand: 'npx @opengsd/get-shit-done-redux@latest',
|
||||||
json: false,
|
json: false,
|
||||||
};
|
};
|
||||||
if (argv.length === 0) return { ok: true, opts };
|
if (argv.length === 0) return { ok: true, opts };
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ function serializeGithubReleaseNotes({
|
|||||||
fromRef,
|
fromRef,
|
||||||
toRef,
|
toRef,
|
||||||
repoSlug = 'open-gsd/get-shit-done-redux',
|
repoSlug = 'open-gsd/get-shit-done-redux',
|
||||||
installCommand = 'npx get-shit-done-redux@latest',
|
installCommand = 'npx @opengsd/get-shit-done-redux@latest',
|
||||||
}) {
|
}) {
|
||||||
if (installCommand.includes('`')) {
|
if (installCommand.includes('`')) {
|
||||||
throw new Error('installCommand cannot contain backtick characters');
|
throw new Error('installCommand cannot contain backtick characters');
|
||||||
|
|||||||
@@ -78,14 +78,14 @@ const SMOKE = Object.freeze({
|
|||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Locate the lib/node_modules/get-shit-done-redux package root inside an
|
* Locate the lib/node_modules/@opengsd/get-shit-done-redux package root inside
|
||||||
* npm --prefix install directory.
|
* an npm --prefix install directory.
|
||||||
*/
|
*/
|
||||||
function pkgRoot(installPrefix) {
|
function pkgRoot(installPrefix) {
|
||||||
// POSIX: <prefix>/lib/node_modules/get-shit-done-redux
|
// POSIX: <prefix>/lib/node_modules/@opengsd/get-shit-done-redux
|
||||||
// Windows: <prefix>/node_modules/get-shit-done-redux
|
// Windows: <prefix>/node_modules/@opengsd/get-shit-done-redux
|
||||||
const posix = path.join(installPrefix, 'lib', 'node_modules', 'get-shit-done-redux');
|
const posix = path.join(installPrefix, 'lib', 'node_modules', '@opengsd', 'get-shit-done-redux');
|
||||||
const win = path.join(installPrefix, 'node_modules', 'get-shit-done-redux');
|
const win = path.join(installPrefix, 'node_modules', '@opengsd', 'get-shit-done-redux');
|
||||||
return fs.existsSync(posix) ? posix : win;
|
return fs.existsSync(posix) ? posix : win;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ Use this document at the start of a new session so work continues in context wit
|
|||||||
- `QUERY-HANDLERS.md` is maintained and current.
|
- `QUERY-HANDLERS.md` is maintained and current.
|
||||||
|
|
||||||
3. **Track D — CJS deprecation headers** (done)
|
3. **Track D — CJS deprecation headers** (done)
|
||||||
- `gsd-tools.cjs` already has `@deprecated` JSDoc header (lines 3-6) pointing to `gsd-sdk query` and `@gsd-redux/sdk`.
|
- `gsd-tools.cjs` already has `@deprecated` JSDoc header (lines 3-6) pointing to `gsd-sdk query` and `@opengsd/gsd-sdk`.
|
||||||
- No additional CJS file deletion in scope per #2302.
|
- No additional CJS file deletion in scope per #2302.
|
||||||
|
|
||||||
4. **CI verification** (should run before any PR)
|
4. **CI verification** (should run before any PR)
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ Previously `state.json` and `state.load` were easy to confuse: CJS has two diffe
|
|||||||
|
|
||||||
- `stateJson` — `sdk/src/query/state.ts`; registry key `state.json`.
|
- `stateJson` — `sdk/src/query/state.ts`; registry key `state.json`.
|
||||||
- `stateProjectLoad` — `sdk/src/query/state-project-load.ts`; registry key `state.load`. Uses `createRequire` to call `core.cjs` `loadConfig(projectDir)` from the same resolution paths as a normal install (bundled monorepo path, `projectDir/.claude/get-shit-done/...`, `~/.claude/get-shit-done/...`). `GSDTools.stateLoad()` and `formatRegistryRawStdout` for `--raw` no longer force a subprocess solely for this command.
|
- `stateProjectLoad` — `sdk/src/query/state-project-load.ts`; registry key `state.load`. Uses `createRequire` to call `core.cjs` `loadConfig(projectDir)` from the same resolution paths as a normal install (bundled monorepo path, `projectDir/.claude/get-shit-done/...`, `~/.claude/get-shit-done/...`). `GSDTools.stateLoad()` and `formatRegistryRawStdout` for `--raw` no longer force a subprocess solely for this command.
|
||||||
- **Risk:** If `core.cjs` is absent (e.g. some `@gsd-redux/sdk`-only layouts), `state.load` throws `GSDError` — document; future option is a TS `loadConfig` port or bundling.
|
- **Risk:** If `core.cjs` is absent (e.g. some `@opengsd/gsd-sdk`-only layouts), `state.load` throws `GSDError` — document; future option is a TS `loadConfig` port or bundling.
|
||||||
- **Goldens:** `read-only-parity.integration.test.ts` — one block compares `state.json` to `state json` (strip `last_updated`); another compares `state.load` to `state load` (full `toEqual`). `read-only-golden-rows.ts` `readOnlyGoldenCanonicals()` includes both `state.json` and `state.load`.
|
- **Goldens:** `read-only-parity.integration.test.ts` — one block compares `state.json` to `state json` (strip `last_updated`); another compares `state.load` to `state load` (full `toEqual`). `read-only-golden-rows.ts` `readOnlyGoldenCanonicals()` includes both `state.json` and `state.load`.
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -140,7 +140,7 @@ Source: `.planning/research/decision-routing-audit.md` §3. **Tier** = priority
|
|||||||
(Strategic ordering of **parity vs decision offloading** is in **Roadmap** above.)
|
(Strategic ordering of **parity vs decision offloading** is in **Roadmap** above.)
|
||||||
|
|
||||||
1. ~~**Golden test for `phase.add-batch`**~~ — Done: `sdk/src/golden/mutation-subprocess.integration.test.ts` (`phase.add-batch` JSON parity vs CJS).
|
1. ~~**Golden test for `phase.add-batch`**~~ — Done: `sdk/src/golden/mutation-subprocess.integration.test.ts` (`phase.add-batch` JSON parity vs CJS).
|
||||||
2. ~~**Re-export `normalizeQueryCommand`**~~ — Done: exported from `sdk/src/query/index.ts` and `sdk/src/index.ts` (`@gsd-redux/sdk`).
|
2. ~~**Re-export `normalizeQueryCommand`**~~ — Done: exported from `sdk/src/query/index.ts` and `sdk/src/index.ts` (`@opengsd/gsd-sdk`).
|
||||||
3. **Issue #2302 follow-ups** — Runner alignment (`GSDTools` → registry where appropriate). **`configGet`** now uses `dispatchNativeJson` with canonical `config-get` (fixes subprocess argv vs real `gsd-tools.cjs`, which has no `config` + `get` top-level). Keep `graphify` / `from-gsd2` out of scope unless product reopens.
|
3. **Issue #2302 follow-ups** — Runner alignment (`GSDTools` → registry where appropriate). **`configGet`** now uses `dispatchNativeJson` with canonical `config-get` (fixes subprocess argv vs real `gsd-tools.cjs`, which has no `config` + `get` top-level). Keep `graphify` / `from-gsd2` out of scope unless product reopens.
|
||||||
4. **Drift check** — When adding CJS commands, update `QUERY-HANDLERS.md` matrix and golden docs in the same PR.
|
4. **Drift check** — When adding CJS commands, update `QUERY-HANDLERS.md` matrix and golden docs in the same PR.
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
# @gsd-redux/sdk
|
# @opengsd/gsd-sdk
|
||||||
|
|
||||||
TypeScript SDK for **Get Shit Done**: deterministic query/mutation handlers, plan execution, and event-stream telemetry so agents focus on judgment, not shell plumbing.
|
TypeScript SDK for **Get Shit Done**: deterministic query/mutation handlers, plan execution, and event-stream telemetry so agents focus on judgment, not shell plumbing.
|
||||||
|
|
||||||
## Install
|
## Install
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
npm install @gsd-redux/sdk
|
npm install @opengsd/gsd-sdk
|
||||||
```
|
```
|
||||||
|
|
||||||
## Quickstart — programmatic
|
## Quickstart — programmatic
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
import { GSD, createRegistry } from '@gsd-redux/sdk';
|
import { GSD, createRegistry } from '@opengsd/gsd-sdk';
|
||||||
|
|
||||||
const gsd = new GSD({ projectDir: process.cwd(), sessionId: 'my-run' });
|
const gsd = new GSD({ projectDir: process.cwd(), sessionId: 'my-run' });
|
||||||
const tools = gsd.createTools();
|
const tools = gsd.createTools();
|
||||||
@@ -25,8 +25,8 @@ const { data } = await registry.dispatch('state.json', [], process.cwd());
|
|||||||
From a project that depends on this package, **invoke the CLI with Node** (recommended in CI and local dev):
|
From a project that depends on this package, **invoke the CLI with Node** (recommended in CI and local dev):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
node ./node_modules/@gsd-redux/sdk/dist/cli.js query state.json
|
node ./node_modules/@opengsd/gsd-sdk/dist/cli.js query state.json
|
||||||
node ./node_modules/@gsd-redux/sdk/dist/cli.js query roadmap.analyze
|
node ./node_modules/@opengsd/gsd-sdk/dist/cli.js query roadmap.analyze
|
||||||
```
|
```
|
||||||
|
|
||||||
If no native handler is registered for a command, the CLI can transparently shell out to `get-shit-done/bin/gsd-tools.cjs` (see stderr warning), unless `GSD_QUERY_FALLBACK=off`.
|
If no native handler is registered for a command, the CLI can transparently shell out to `get-shit-done/bin/gsd-tools.cjs` (see stderr warning), unless `GSD_QUERY_FALLBACK=off`.
|
||||||
|
|||||||
8
sdk/package-lock.json
generated
8
sdk/package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "@gsd-redux/sdk",
|
"name": "@opengsd/gsd-sdk",
|
||||||
"version": "1.50.0-canary.0",
|
"version": "1.0.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@gsd-redux/sdk",
|
"name": "@opengsd/gsd-sdk",
|
||||||
"version": "1.50.0-canary.0",
|
"version": "1.0.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@anthropic-ai/claude-agent-sdk": "^0.2.84",
|
"@anthropic-ai/claude-agent-sdk": "^0.2.84",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@gsd-redux/sdk",
|
"name": "@opengsd/gsd-sdk",
|
||||||
"version": "1.50.0-canary.0",
|
"version": "1.0.0",
|
||||||
"description": "GSD SDK — programmatic interface for running GSD plans via the Agent SDK",
|
"description": "GSD SDK — programmatic interface for running GSD plans via the Agent SDK",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
@@ -30,6 +30,9 @@
|
|||||||
},
|
},
|
||||||
"author": "TÂCHES",
|
"author": "TÂCHES",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=22.0.0"
|
"node": ">=22.0.0"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
*
|
*
|
||||||
* @example
|
* @example
|
||||||
* ```typescript
|
* ```typescript
|
||||||
* import { GSD } from '@gsd-redux/sdk';
|
* import { GSD } from '@opengsd/gsd-sdk';
|
||||||
*
|
*
|
||||||
* const gsd = new GSD({ projectDir: '/path/to/project' });
|
* const gsd = new GSD({ projectDir: '/path/to/project' });
|
||||||
* const result = await gsd.executePlan('.planning/phases/01-auth/01-auth-01-PLAN.md');
|
* const result = await gsd.executePlan('.planning/phases/01-auth/01-auth-01-PLAN.md');
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ CJS routing seams mirror these families with thin adapters (`state/verify/init/p
|
|||||||
|
|
||||||
## `gsd-sdk query` routing
|
## `gsd-sdk query` routing
|
||||||
|
|
||||||
1. **`normalizeQueryCommand()`** (`query-command-resolution-strategy.ts`) — maps the first argv tokens to the same **command + subcommand** patterns as `gsd-tools` `runCommand()` where needed (e.g. `state json` → `state.json`, `init execute-phase 9` → `init.execute-phase` with args `['9']`, `scaffold …` → `phase.scaffold`). Re-exported from **`@gsd-redux/sdk`** and **`createRegistry`’s module** (`sdk/src/query/index.ts`) so programmatic callers can mirror CLI tokenization without importing a deep path.
|
1. **`normalizeQueryCommand()`** (`query-command-resolution-strategy.ts`) — maps the first argv tokens to the same **command + subcommand** patterns as `gsd-tools` `runCommand()` where needed (e.g. `state json` → `state.json`, `init execute-phase 9` → `init.execute-phase` with args `['9']`, `scaffold …` → `phase.scaffold`). Re-exported from **`@opengsd/gsd-sdk`** and **`createRegistry`’s module** (`sdk/src/query/index.ts`) so programmatic callers can mirror CLI tokenization without importing a deep path.
|
||||||
2. **`resolveQueryArgv()`** (`registry.ts`) — **longest-prefix match** on the normalized argv: tries joined keys `a.b.c` then `a b c` for each prefix length, longest first. Example: `state update status X` → handler `state.update` with args `[status, X]`.
|
2. **`resolveQueryArgv()`** (`registry.ts`) — **longest-prefix match** on the normalized argv: tries joined keys `a.b.c` then `a b c` for each prefix length, longest first. Example: `state update status X` → handler `state.update` with args `[status, X]`.
|
||||||
3. **Dotted single token**: one token like `init.new-project` matches the registry; if the first pass finds no handler, a single dotted token is split and matching runs again.
|
3. **Dotted single token**: one token like `init.new-project` matches the registry; if the first pass finds no handler, a single dotted token is split and matching runs again.
|
||||||
4. **CJS fallback (CLI)**: if nothing matches a registered handler and `GSD_QUERY_FALLBACK` is not `off`/`never`/`false`/`0`, the CLI shells out to `gsd-tools.cjs` with argv derived from the normalized tokens (dotted commands are split into CJS-style segments). stderr receives a short bridge warning. Set `GSD_QUERY_FALLBACK=off` for strict mode (parity tests). CLI-only commands such as `graphify` rely on this path until native handlers exist.
|
4. **CJS fallback (CLI)**: if nothing matches a registered handler and `GSD_QUERY_FALLBACK` is not `off`/`never`/`false`/`0`, the CLI shells out to `gsd-tools.cjs` with argv derived from the normalized tokens (dotted commands are split into CJS-style segments). stderr receives a short bridge warning. Set `GSD_QUERY_FALLBACK=off` for strict mode (parity tests). CLI-only commands such as `graphify` rely on this path until native handlers exist.
|
||||||
@@ -107,7 +107,7 @@ Handlers for `**state.signal-waiting`**, `**state.signal-resume**`, `**state.val
|
|||||||
**`state.json` vs `state.load` (different CJS commands):**
|
**`state.json` vs `state.load` (different CJS commands):**
|
||||||
|
|
||||||
- **`state.json`** / `state json` — port of **`cmdStateJson`** (`state.ts` `stateJson`): rebuilt STATE.md frontmatter JSON. Read-only golden: `read-only-parity.integration.test.ts` compares to CJS `state json` with **`last_updated`** stripped.
|
- **`state.json`** / `state json` — port of **`cmdStateJson`** (`state.ts` `stateJson`): rebuilt STATE.md frontmatter JSON. Read-only golden: `read-only-parity.integration.test.ts` compares to CJS `state json` with **`last_updated`** stripped.
|
||||||
- **`state.load`** / `state load` — port of **`cmdStateLoad`** (`state-project-load.ts` `stateProjectLoad`): `{ config, state_raw, state_exists, roadmap_exists, config_exists }`; **`config`** comes from **`get-shit-done/bin/lib/core.cjs`** `loadConfig`, but discovery now routes through the **SDK Package Seam Module** (`sdk-package-compatibility.ts`) so install-layout probing stays behind one compatibility Adapter. Read-only golden: full `toEqual` vs `state load`. If `core.cjs` cannot be resolved, dispatch throws **`GSDError`** with the checked probe list (document for minimal `@gsd-redux/sdk`-only installs).
|
- **`state.load`** / `state load` — port of **`cmdStateLoad`** (`state-project-load.ts` `stateProjectLoad`): `{ config, state_raw, state_exists, roadmap_exists, config_exists }`; **`config`** comes from **`get-shit-done/bin/lib/core.cjs`** `loadConfig`, but discovery now routes through the **SDK Package Seam Module** (`sdk-package-compatibility.ts`) so install-layout probing stays behind one compatibility Adapter. Read-only golden: full `toEqual` vs `state load`. If `core.cjs` cannot be resolved, dispatch throws **`GSDError`** with the checked probe list (document for minimal `@opengsd/gsd-sdk`-only installs).
|
||||||
|
|
||||||
`stateExtractField` in `state-document.ts` (re-exported by `helpers.ts`) uses **horizontal whitespace only** after `Field:` so YAML keys such as lowercase `progress:` in frontmatter are not mistaken for the body `Progress:` line (see `get-shit-done/bin/lib/state-document.cjs` — same rule).
|
`stateExtractField` in `state-document.ts` (re-exported by `helpers.ts`) uses **horizontal whitespace only** after `Field:` so YAML keys such as lowercase `progress:` in frontmatter are not mistaken for the body `Progress:` line (see `get-shit-done/bin/lib/state-document.cjs` — same rule).
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
* ## CJS consumption
|
* ## CJS consumption
|
||||||
*
|
*
|
||||||
* ```js
|
* ```js
|
||||||
* const { executeForCjs } = require('@gsd-redux/sdk/dist/runtime-bridge-sync/index.js');
|
* const { executeForCjs } = require('@opengsd/gsd-sdk/dist/runtime-bridge-sync/index.js');
|
||||||
* const result = executeForCjs({ registryCommand: 'generate-slug', registryArgs: ['My Phase'], ... });
|
* const result = executeForCjs({ registryCommand: 'generate-slug', registryArgs: ['My Phase'], ... });
|
||||||
* if (result.ok) console.log(result.data); // { slug: 'my-phase' }
|
* if (result.ok) console.log(result.data); // { slug: 'my-phase' }
|
||||||
* ```
|
* ```
|
||||||
@@ -135,7 +135,7 @@ function getSyncFn(): (input: RuntimeBridgeExecuteInput) => RuntimeBridgeSyncRes
|
|||||||
*
|
*
|
||||||
* @example
|
* @example
|
||||||
* ```js
|
* ```js
|
||||||
* const { executeForCjs } = require('@gsd-redux/sdk/dist/runtime-bridge-sync/index.js');
|
* const { executeForCjs } = require('@opengsd/gsd-sdk/dist/runtime-bridge-sync/index.js');
|
||||||
* const result = executeForCjs({
|
* const result = executeForCjs({
|
||||||
* registryCommand: 'generate-slug',
|
* registryCommand: 'generate-slug',
|
||||||
* registryArgs: ['My Phase'],
|
* registryArgs: ['My Phase'],
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ function missingLegacyCoreMessage(resolution: LegacySdkAssetResolution): string
|
|||||||
return [
|
return [
|
||||||
'state load: get-shit-done/bin/lib/core.cjs not found.',
|
'state load: get-shit-done/bin/lib/core.cjs not found.',
|
||||||
`Checked: ${resolution.probes.join(', ')}`,
|
`Checked: ${resolution.probes.join(', ')}`,
|
||||||
'Install GSD (e.g. npm i -g get-shit-done-redux) or clone with get-shit-done next to the SDK.',
|
'Install GSD (e.g. npm i -g @opengsd/get-shit-done-redux) or clone with get-shit-done next to the SDK.',
|
||||||
].join(' ');
|
].join(' ');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -66,10 +66,10 @@ describe('bug #2334: quick workflow gsd-sdk pre-flight check', () => {
|
|||||||
}
|
}
|
||||||
const step2Section = content.slice(step2Start, firstSdkCall);
|
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(
|
assert.ok(
|
||||||
hasInstallHint,
|
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)'
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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
|
* 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
|
* 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
|
* Regression guard for #2636 — `gsd-sdk query agent-skills <slug>` calls in
|
||||||
* workflows must NOT silently swallow failures via a bare `2>/dev/null`.
|
* 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
|
* the `agent-skills` handler was missing, every workflow line of the form
|
||||||
* AGENT_SKILLS_X=$(gsd-sdk query agent-skills <slug> 2>/dev/null)
|
* AGENT_SKILLS_X=$(gsd-sdk query agent-skills <slug> 2>/dev/null)
|
||||||
* resolved to empty string, and the `agent_skills.<slug>` config was never
|
* resolved to empty string, and the `agent_skills.<slug>` config was never
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
* Result: the published tarball had no `sdk/dist/cli.js`. The `gsd-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
|
* 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
|
* 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
|
* Every `gsd-sdk query <noun>` call in workflow docs thus failed on
|
||||||
* fresh installs of 1.38.3.
|
* fresh installs of 1.38.3.
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ describe('installer SDK dist-missing fail-fast (#2649)', () => {
|
|||||||
assert.strictEqual(ir.reason, 'sdk_fail_fast');
|
assert.strictEqual(ir.reason, 'sdk_fail_fast');
|
||||||
assert.strictEqual(ir.context, 'npx-cache');
|
assert.strictEqual(ir.context, 'npx-cache');
|
||||||
assert.strictEqual(ir.missing_artifact, 'sdk/dist');
|
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,
|
assert.strictEqual(ir.attempted_nested_install, false,
|
||||||
'IR contract: nested-install must always be false (this is a hard invariant)');
|
'IR contract: nested-install must always be false (this is a hard invariant)');
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
/**
|
/**
|
||||||
* Regression test for bug #2775
|
* 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
|
* `✓ 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
|
* 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
|
* 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.
|
* 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
|
* 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
|
* binary because the installer's previous behavior was to skip SDK linking
|
||||||
* entirely for local installs (#2678 over-corrected). The published tarball
|
* entirely for local installs (#2678 over-corrected). The published tarball
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ const { checkLatestVersion, CHECK_REASON, PACKAGE_NAME } = require(
|
|||||||
// Tests use a pluggable spawn so no real npm process is invoked.
|
// Tests use a pluggable spawn so no real npm process is invoked.
|
||||||
|
|
||||||
describe('Bug #2992: deterministic latest-version check', () => {
|
describe('Bug #2992: deterministic latest-version check', () => {
|
||||||
test('PACKAGE_NAME is the constant get-shit-done-redux (no callers can override)', () => {
|
test('PACKAGE_NAME is the constant @opengsd/get-shit-done-redux (no callers can override)', () => {
|
||||||
assert.equal(PACKAGE_NAME, 'get-shit-done-redux');
|
assert.equal(PACKAGE_NAME, '@opengsd/get-shit-done-redux');
|
||||||
});
|
});
|
||||||
|
|
||||||
test('CHECK_REASON enum exposes the documented codes', () => {
|
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.
|
* 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
|
* upgrade reported success, but `gsd-sdk` could not be resolved by Claude
|
||||||
* Code, Git Bash, PowerShell, or WSL. The previous diagnostic was a
|
* Code, Git Bash, PowerShell, or WSL. The previous diagnostic was a
|
||||||
* generic "not on your PATH" with no actionable info; the user couldn't
|
* 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',
|
platform: 'win32',
|
||||||
runDir: 'C:\\some\\path',
|
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')));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
* Regression test for #3033: --sdk flag parsed but never used.
|
* Regression test for #3033: --sdk flag parsed but never used.
|
||||||
*
|
*
|
||||||
* `hasSdk` was set in bin/install.js but never passed to `installSdkIfNeeded`,
|
* `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.
|
* message while still silently skipping SDK deployment for local installs.
|
||||||
*
|
*
|
||||||
* Fix: `installSdkIfNeeded` now accepts `opts.forceSdk`. When true, the
|
* Fix: `installSdkIfNeeded` now accepts `opts.forceSdk`. When true, the
|
||||||
|
|||||||
@@ -12,18 +12,20 @@ function read(rel) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
describe('bug #3091: sdk install guidance and agent fallbacks use query-capable CLI', () => {
|
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');
|
const content = read('get-shit-done/workflows/quick.md');
|
||||||
// After #3668: quick.md uses local-first preflight which may reference
|
// After #3668: quick.md uses local-first preflight which references
|
||||||
// get-shit-done-redux via npx or npm install -g. Either form is acceptable.
|
// @opengsd/get-shit-done-redux via npx for the --local fallback.
|
||||||
const referencesGsdRedux = content.includes('npm install -g get-shit-done-redux') ||
|
const referencesGsdRedux = content.includes('npm install -g @opengsd/get-shit-done-redux') ||
|
||||||
content.includes('npx get-shit-done-redux');
|
content.includes('npx @opengsd/get-shit-done-redux');
|
||||||
assert.ok(referencesGsdRedux, 'quick.md install hint must reference get-shit-done-redux');
|
assert.ok(referencesGsdRedux, 'quick.md install hint must reference @opengsd/get-shit-done-redux');
|
||||||
assert.ok(!content.includes('npm install -g @gsd-redux/sdk'));
|
assert.ok(!content.includes('@gsd-redux/sdk'));
|
||||||
assert.ok(!content.includes('npm install -g @gsd-build/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 = [
|
const files = [
|
||||||
'agents/gsd-planner.md',
|
'agents/gsd-planner.md',
|
||||||
'agents/gsd-executor.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',
|
'agents/gsd-roadmapper.md',
|
||||||
];
|
];
|
||||||
|
|
||||||
const offenders = files.filter((f) => read(f).includes('@gsd-redux/sdk/dist/cli.js query'));
|
const offenders = files.filter((f) => read(f).includes('@opengsd/gsd-sdk/dist/cli.js query'));
|
||||||
assert.deepStrictEqual(offenders, [], `stale @gsd-redux/sdk query fallback references: ${offenders.join(', ')}`);
|
assert.deepStrictEqual(offenders, [], `stale @opengsd/gsd-sdk query fallback references: ${offenders.join(', ')}`);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -4,14 +4,14 @@
|
|||||||
// Regression guard for bug #3130.
|
// Regression guard for bug #3130.
|
||||||
//
|
//
|
||||||
// Two failure modes were observed with the pre-fix npx invocation form:
|
// 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.
|
// cache and may pull an older version instead of @latest.
|
||||||
// 2. Token-routing: Bash-tool wrappers misroute the `@` token in
|
// 2. Token-routing: Bash-tool wrappers misroute the `@` token in
|
||||||
// `get-shit-done-redux@latest`, causing npm to error with
|
// `@opengsd/get-shit-done-redux@latest`, causing npm to error with
|
||||||
// "Unknown command: get-shit-done-redux@latest".
|
// "Unknown command: @opengsd/get-shit-done-redux@latest".
|
||||||
//
|
//
|
||||||
// The robust form is:
|
// 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.
|
// `--package=` forces a fresh registry fetch, bypassing the npx cache.
|
||||||
// `--` clearly delineates npx flags from the run-command, preventing
|
// `--` 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');
|
const src = fs.readFileSync(UPDATE_WF, 'utf8');
|
||||||
|
|
||||||
test('bug #3130: update.md contains no bare npx invocations (cache-stale form)', () => {
|
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.
|
// 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(
|
assert.deepEqual(
|
||||||
stale,
|
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)', () => {
|
test('bug #3130: update.md has >=3 robust npx invocations (--package= + -- separator)', () => {
|
||||||
// Three sibling invocations: local, global, and unknown/fallback.
|
// 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(
|
assert.ok(
|
||||||
robust.length >= 3,
|
robust.length >= 3,
|
||||||
`Expected >=3 robust npx invocations in update.md, found ${robust.length}`,
|
`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.
|
* Regression tests for bug #3211.
|
||||||
*
|
*
|
||||||
* Windows 11 + PowerShell 7 + Node v22.22.1, fresh
|
* 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
|
* gsd-sdk: The term 'gsd-sdk' is not recognized
|
||||||
*
|
*
|
||||||
* Root causes (Windows sibling of #3231):
|
* Root causes (Windows sibling of #3231):
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* Regression tests for bug #3231.
|
* 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:
|
* Linux but no persistent `gsd-sdk` shim is created. Two sub-bugs:
|
||||||
*
|
*
|
||||||
* 1. Transient npx PATH + null login-shell PATH → false success
|
* 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,
|
modernFile,
|
||||||
[
|
[
|
||||||
'#!/usr/bin/env node',
|
'#!/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'),
|
].join('\n'),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
* ignored by Steps 2-6 on non-GSD projects. The block was dead-but-noisy.
|
* 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-
|
* 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
|
* analysing the GSD framework's own repo, OR remove the block entirely if no
|
||||||
* downstream consumers exist.
|
* 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
|
// A valid gate checks package.json name or an equivalent positive signal
|
||||||
// that the current project IS the GSD framework's own repo.
|
// that the current project IS the GSD framework's own repo.
|
||||||
const hasFrameworkGate =
|
const hasFrameworkGate =
|
||||||
content.includes('get-shit-done-redux') ||
|
content.includes('@opengsd/get-shit-done-redux') ||
|
||||||
content.includes('is-this-the-framework') ||
|
content.includes('is-this-the-framework') ||
|
||||||
content.includes('framework repo') ||
|
content.includes('framework repo') ||
|
||||||
content.includes('Only run') ||
|
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 ' +
|
'bash block (`ls -d .kilo ... || echo unknown`) with no surrounding ' +
|
||||||
'framework-repo gate (#3290). ' +
|
'framework-repo gate (#3290). ' +
|
||||||
'Either remove the block entirely, or wrap it in a check like:\n' +
|
'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' +
|
' # ... detection block ...\n' +
|
||||||
' fi'
|
' fi'
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* Regression test for bug #3359.
|
* 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.
|
* global `gsd-sdk` earlier on PATH remains the executable workflows call.
|
||||||
* The installer must not report SDK readiness when the resolved `gsd-sdk`
|
* The installer must not report SDK readiness when the resolved `gsd-sdk`
|
||||||
* version differs from the package/runtime version being installed.
|
* 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}`,
|
`warning must include detected and installer versions. Output:\n${combined}`,
|
||||||
);
|
);
|
||||||
assert.ok(
|
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}`,
|
`warning must include global update remediation. Output:\n${combined}`,
|
||||||
);
|
);
|
||||||
assert.ok(
|
assert.ok(
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
'use strict';
|
'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
|
* 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
|
* 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
|
* 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
|
* Maintainer decision (per triage): option 2 — detect-and-warn during
|
||||||
* install. This test pins the pure detection helper so the install-time
|
* install. This test pins the pure detection helper so the install-time
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
*
|
*
|
||||||
* Test surface is the exported helper `detectStaleStandaloneSdk(runNpmLs)`.
|
* Test surface is the exported helper `detectStaleStandaloneSdk(runNpmLs)`.
|
||||||
* `runNpmLs` is an injected executor: in production it spawns
|
* `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
|
* that returns canned stdout / throws, so the test never touches the host
|
||||||
* npm state.
|
* npm state.
|
||||||
*/
|
*/
|
||||||
@@ -35,7 +35,7 @@ describe('#3406: detectStaleStandaloneSdk', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test('returns { stale: false } when npm ls reports the package is not installed', () => {
|
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.
|
// JSON shape is the standard "not present" signal.
|
||||||
const stub = () => JSON.stringify({
|
const stub = () => JSON.stringify({
|
||||||
name: 'lib',
|
name: 'lib',
|
||||||
@@ -45,13 +45,13 @@ describe('#3406: detectStaleStandaloneSdk', () => {
|
|||||||
assert.deepStrictEqual(result, { stale: false });
|
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({
|
const stub = () => JSON.stringify({
|
||||||
name: 'lib',
|
name: 'lib',
|
||||||
dependencies: {
|
dependencies: {
|
||||||
'@gsd-redux/sdk': {
|
'@opengsd/gsd-sdk': {
|
||||||
version: '0.1.0',
|
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
|
// version is an intentional install (or a future republish) and must
|
||||||
// NOT be flagged. Without this gate, every maintainer with a local-link
|
// NOT be flagged. Without this gate, every maintainer with a local-link
|
||||||
// or any future publish would trigger a misleading warning on install.
|
// 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 stubNewer = () => JSON.stringify({ dependencies: { '@opengsd/gsd-sdk': { version: '1.50.0-canary.0' } } });
|
||||||
const stubFuture = () => JSON.stringify({ dependencies: { '@gsd-redux/sdk': { version: '2.0.0' } } });
|
const stubFuture = () => JSON.stringify({ dependencies: { '@opengsd/gsd-sdk': { version: '2.0.0' } } });
|
||||||
assert.deepStrictEqual(detectStaleStandaloneSdk(stubNewer), { stale: false });
|
assert.deepStrictEqual(detectStaleStandaloneSdk(stubNewer), { stale: false });
|
||||||
assert.deepStrictEqual(detectStaleStandaloneSdk(stubFuture), { 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', () => {
|
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
|
// We can't easily stub npm inside a spawned install subprocess without
|
||||||
// shelling around it, so the install-side coverage here verifies the
|
// 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
|
// 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
|
// npm at an empty prefix), the install run prints NO #3406 warning. The
|
||||||
// positive case is exhaustively covered by detectStaleStandaloneSdk above.
|
// 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(
|
assert.ok(
|
||||||
!stdout.includes('@gsd-redux/sdk'),
|
!stdout.includes('@opengsd/gsd-sdk'),
|
||||||
'install output must not mention @gsd-redux/sdk when the package is absent'
|
'install output must not mention @opengsd/gsd-sdk when the package is absent'
|
||||||
);
|
);
|
||||||
assert.ok(
|
assert.ok(
|
||||||
!stdout.includes('#3406'),
|
!stdout.includes('#3406'),
|
||||||
@@ -158,10 +158,10 @@ describe('#3406: formatStaleStandaloneSdkWarning', () => {
|
|||||||
|
|
||||||
test('message names the stale package, the version, and the uninstall command', () => {
|
test('message names the stale package, the version, and the uninstall command', () => {
|
||||||
const out = formatStaleStandaloneSdkWarning({ stale: true, version: '0.1.0' });
|
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('0.1.0'), 'must show the stale version');
|
||||||
assert.ok(
|
assert.ok(
|
||||||
out.includes('npm uninstall -g @gsd-redux/sdk'),
|
out.includes('npm uninstall -g @opengsd/gsd-sdk'),
|
||||||
'must include the remediation command verbatim'
|
'must include the remediation command verbatim'
|
||||||
);
|
);
|
||||||
assert.ok(out.includes('#3406'), 'must reference the issue for traceability');
|
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
|
* commands from skills/<name>/SKILL.md. Prior installer logic ("Codex now
|
||||||
* discovers official skills from .agents/skills") was based on an assumption
|
* discovers official skills from .agents/skills") was based on an assumption
|
||||||
* that does not match the shipping Codex CLI behavior, leaving users with
|
* 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`.
|
* --codex --global`.
|
||||||
*
|
*
|
||||||
* Fix: re-wire copyCommandsAsCodexSkills() back into the install dispatch path
|
* Fix: re-wire copyCommandsAsCodexSkills() back into the install dispatch path
|
||||||
|
|||||||
@@ -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
|
* hard-aborts when the target ~/.codex/hooks/ contains the bundled GSD
|
||||||
* hook files (`gsd-check-update-worker.js`, `gsd-prompt-guard.js`, …)
|
* hook files (`gsd-check-update-worker.js`, `gsd-prompt-guard.js`, …)
|
||||||
* left over from a previous version. The installer-migration report
|
* left over from a previous version. The installer-migration report
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ describe('#1656: community .sh hooks must be present in hooks/dist', () => {
|
|||||||
// ─── #1657 ───────────────────────────────────────────────────────────────────
|
// ─── #1657 ───────────────────────────────────────────────────────────────────
|
||||||
//
|
//
|
||||||
// Historical context: #1657 originally guarded against a broken `promptSdk()`
|
// 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
|
// 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 …`).
|
// 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',
|
fromRef: 'v1.0.0',
|
||||||
toRef: 'v1.0.1',
|
toRef: 'v1.0.1',
|
||||||
repoSlug: 'example/project',
|
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);
|
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
|
* 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.
|
* 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
|
* 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),
|
* `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
|
* and even if it were, the public entry didn't expose `executeForCjs` or
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
* Regression tests for bug #1991
|
* Regression tests for bug #1991
|
||||||
*
|
*
|
||||||
* Cline is listed in GSD documentation as a supported runtime but was
|
* 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.
|
* did not show Cline as an option in the interactive menu.
|
||||||
*
|
*
|
||||||
* Fixed: Cline is now a first-class runtime that:
|
* Fixed: Cline is now a first-class runtime that:
|
||||||
|
|||||||
@@ -128,6 +128,12 @@ const INTERNAL_COMPONENT_SLUGS = new Set([
|
|||||||
// the URL path. Not a user-typable slash command in this product.
|
// the URL path. Not a user-typable slash command in this product.
|
||||||
'opencode',
|
'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)"
|
// 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
|
// as a temporary directory path in bash code-block examples. The regex captures
|
||||||
// "/gsd-smoke-" from the filesystem path. Not a slash command.
|
// "/gsd-smoke-" from the filesystem path. Not a slash command.
|
||||||
|
|||||||
@@ -32,9 +32,16 @@ describe('release-tarball-smoke', () => {
|
|||||||
installPrefix = createTempDir('gsd-smoke-prefix-');
|
installPrefix = createTempDir('gsd-smoke-prefix-');
|
||||||
fixtureDir = createTempDir('gsd-smoke-fixture-');
|
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(
|
const packOutput = runNpm(
|
||||||
['pack', '--pack-destination', packDir],
|
['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.
|
// 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.
|
// 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(() => {
|
after(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user