chore(#518): rename npm package + bin to @opengsd/gsd-core (#519)

* chore: rename npm package + bin to @opengsd/gsd-core (functional)

- package.json: name @opengsd/get-shit-done-redux → @opengsd/gsd-core,
  bin key get-shit-done-redux → gsd-core, repository/homepage/bugs URLs
- package-lock.json: regenerated (npm install --package-lock-only)
- tests/**, scripts/**, bin/**, .github/**, agents/**, commands/**,
  get-shit-done/bin/**, get-shit-done/workflows/**:
  applied the 4-rule replacement (scoped npm ref, GitHub repo path,
  bin/clone invocations) per #505 single-source refactor

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* docs: sweep live references to @opengsd/gsd-core

Update all live documentation (README.md + translations, docs/**,
CONTRIBUTING.md, VERSIONING.md, SECURITY.md, CONTEXT.md,
docs/CANARY.md) to reflect the renamed package and repository.

Rules applied:
- @opengsd/get-shit-done-redux → @opengsd/gsd-core (scoped npm name)
- open-gsd/get-shit-done-redux → open-gsd/gsd-core (GitHub repo)
- GSD-redux/get-shit-done-redux → open-gsd/gsd-core (stale badge org)
- bare bin/clone refs → gsd-core

CHANGELOG.md, docs/adr/**, docs/RELEASE-*.md, docs/research/**,
and .changeset/** are preserved byte-identical.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix: add negative lookbehind to slash-command regex in bug-2954 test

The extractSlashReferences regex matched /gsd-core inside npm package
URLs (@opengsd/gsd-core), producing a false /gsd:core command reference.
Adding a negative lookbehind (?<![a-z]) excludes matches preceded by a
letter, so only standalone /gsd-<cmd> and /gsd:<cmd> tokens are found.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore(#518): add changeset for package rename

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(#518): update package-identity expectations to the renamed coordinates

The rebase regenerated the seam to @opengsd/gsd-core (bin gsd-core, repo
open-gsd/gsd-core). The #498 seam tests assert deriveIdentity against the REAL
package.json, so their expected literals must follow the rename. The drift-lint
unit test is left as-is — its SEAM is a self-consistent fixture and its
stale-literal detection cases would shift if altered; the live-repo scan in it
already passes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Tom Boucher
2026-05-30 17:25:02 -04:00
committed by GitHub
parent 05cdec5f47
commit 79002a00cb
173 changed files with 662 additions and 655 deletions

View File

@@ -120,7 +120,7 @@ User-facing entry points. Each file contains YAML frontmatter (name, description
**Total commands:** see [`docs/INVENTORY.md`](INVENTORY.md#commands) for the authoritative count and full roster.
#### Two-stage hierarchical routing (v1.40, [#2792](https://github.com/open-gsd/get-shit-done-redux/issues/2792))
#### Two-stage hierarchical routing (v1.40, [#2792](https://github.com/open-gsd/gsd-core/issues/2792))
To keep the eager skill-listing token cost low, v1.40 introduces six namespace **meta-skills** (`gsd-workflow`, `gsd-project`, `gsd-quality`, `gsd-context`, `gsd-manage`, `gsd-ideate` — sourced from `commands/gsd/ns-*.md`, but the invocable `name:` is the bare form shown here) layered above the concrete sub-skills. The model sees 6 namespace routers (~120 tokens) instead of a flat 86-skill listing (~2,150 tokens), selects a namespace, then routes to the concrete sub-skill via a routing table embedded in the namespace router's body. Namespace skills are **additive** — every concrete command is still directly invocable.

View File

@@ -20,13 +20,13 @@ A canary build NEVER becomes a `next` build directly, and a `next` build NEVER b
```bash
# One-off invocation (npx)
npx @opengsd/get-shit-done-redux@canary
npx @opengsd/gsd-core@canary
# Pin to the canary dist-tag globally
npm install -g @opengsd/get-shit-done-redux@canary
npm install -g @opengsd/gsd-core@canary
# Pin to an exact canary version
npm install -g @opengsd/get-shit-done-redux@1.50.0-canary.1
npm install -g @opengsd/gsd-core@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.
@@ -47,20 +47,20 @@ The CC installer's defensive purge rewrites stale config blocks left by older GS
```bash
# Back to the current stable
npm install -g @opengsd/get-shit-done-redux@latest
npm install -g @opengsd/gsd-core@latest
# Or to the next/RC train
npm install -g @opengsd/get-shit-done-redux@next
npm install -g @opengsd/gsd-core@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.
## Reporting issues against canary
File against the [issue tracker](https://github.com/open-gsd/get-shit-done-redux/issues) with the `bug` template. Include the exact canary version (`get-shit-done-redux --version` reports it) so triage can route the report back into the `dev` stream rather than the stable stream.
File against the [issue tracker](https://github.com/open-gsd/gsd-core/issues) with the `bug` template. Include the exact canary version (`gsd-core --version` reports it) so triage can route the report back into the `dev` stream rather than the stable stream.
## Where to look next
- Active canary release notes: [`docs/RELEASE-v1.50.0-canary.1.md`](RELEASE-v1.50.0-canary.1.md)
- Stable release notes: [`CHANGELOG.md`](../CHANGELOG.md)
- Stream architecture rationale: discussed across [#2727](https://github.com/open-gsd/get-shit-done-redux/issues/2727), [#2773](https://github.com/open-gsd/get-shit-done-redux/issues/2773) (codex schema-break and the resulting promotion bottleneck that motivated explicit stream isolation)
- Stream architecture rationale: discussed across [#2727](https://github.com/open-gsd/gsd-core/issues/2727), [#2773](https://github.com/open-gsd/gsd-core/issues/2773) (codex schema-break and the resulting promotion bottleneck that motivated explicit stream isolation)

View File

@@ -16,7 +16,7 @@ The hyphen and colon forms are *runtime-specific spellings of the same command*.
## Namespace Meta-Skills
Six namespace routers ship as the first-stage entry points in v1.40. They keep the eager skill-listing token cost low (~120 tokens for 6 routers vs ~2,150 for a flat 86-skill listing) while the full surface remains directly invocable. The model selects a namespace, then routes to the concrete sub-skill. See [#2792](https://github.com/open-gsd/get-shit-done-redux/issues/2792).
Six namespace routers ship as the first-stage entry points in v1.40. They keep the eager skill-listing token cost low (~120 tokens for 6 routers vs ~2,150 for a flat 86-skill listing) while the full surface remains directly invocable. The model selects a namespace, then routes to the concrete sub-skill. See [#2792](https://github.com/open-gsd/gsd-core/issues/2792).
| Command | Routes to |
|---------|-----------|
@@ -757,7 +757,7 @@ Generate a developer behavioral profile from Claude Code session analysis across
Validate `.planning/` directory integrity. With `--context`, probes the
context-window utilization guard against the 60 % / 70 % thresholds (added
v1.40.0, [#2792](https://github.com/open-gsd/get-shit-done-redux/issues/2792)).
v1.40.0, [#2792](https://github.com/open-gsd/gsd-core/issues/2792)).
| Flag | Description |
|------|-------------|

View File

@@ -136,11 +136,11 @@ GSD stores project settings in `.planning/config.json`. Created during `/gsd-new
|---------|------|---------|---------|-------------|
| `mode` | enum | `interactive`, `yolo` | `interactive` | `yolo` auto-approves decisions; `interactive` confirms at each step |
| `granularity` | enum | `coarse`, `standard`, `fine` | `standard` | Controls phase count: `coarse` (3-5), `standard` (5-8), `fine` (8-12) |
| `model_profile` | enum | `quality`, `balanced`, `budget`, `adaptive`, `inherit` | `balanced` | Model tier for each agent (see [Model Profiles](#model-profiles)). `adaptive` was added per [#1713](https://github.com/open-gsd/get-shit-done-redux/issues/1713) / [#1806](https://github.com/open-gsd/get-shit-done-redux/issues/1806) and resolves the same way as the other tiers under runtime-aware profiles. |
| `runtime` | string | `claude`, `codex`, or any string | (none) | Active runtime for [runtime-aware profile resolution](#runtime-aware-profiles-2517). When set, profile tiers (opus/sonnet/haiku) resolve to runtime-native model IDs. Today only the Codex install path emits per-agent model IDs from this resolver; other runtimes (`opencode`, `gemini`, `qwen`, `copilot`, …) consume the resolver at spawn time and gain dedicated install-path support in [#2612](https://github.com/open-gsd/get-shit-done-redux/issues/2612). When unset (default), behavior is unchanged from prior versions. Added in v1.39 |
| `model_profile` | enum | `quality`, `balanced`, `budget`, `adaptive`, `inherit` | `balanced` | Model tier for each agent (see [Model Profiles](#model-profiles)). `adaptive` was added per [#1713](https://github.com/open-gsd/gsd-core/issues/1713) / [#1806](https://github.com/open-gsd/gsd-core/issues/1806) and resolves the same way as the other tiers under runtime-aware profiles. |
| `runtime` | string | `claude`, `codex`, or any string | (none) | Active runtime for [runtime-aware profile resolution](#runtime-aware-profiles-2517). When set, profile tiers (opus/sonnet/haiku) resolve to runtime-native model IDs. Today only the Codex install path emits per-agent model IDs from this resolver; other runtimes (`opencode`, `gemini`, `qwen`, `copilot`, …) consume the resolver at spawn time and gain dedicated install-path support in [#2612](https://github.com/open-gsd/gsd-core/issues/2612). When unset (default), behavior is unchanged from prior versions. Added in v1.39 |
| `model_profile_overrides.<runtime>.<tier>` | string \| object | per-runtime tier override | (none) | Override the runtime-aware tier mapping for a specific `(runtime, tier)`. Tier is one of `opus`, `sonnet`, `haiku`. Value is either a model ID string (e.g. `"gpt-5-pro"`) or `{ model, reasoning_effort }`. See [Runtime-Aware Profiles](#runtime-aware-profiles-2517). Added in v1.39 |
| `models.<phase_type>` | enum | `opus`, `sonnet`, `haiku`, `inherit` | (none) | Per-phase-type model tier. Six accepted slots: `planning`, `discuss`, `research`, `execution`, `verification`, `completion`. Lets you tune at the phase level ("Opus for planning, Sonnet for the rest") without learning agent names. Resolves between `model_overrides` (higher) and `model_profile` (lower); see [Per-Phase-Type Models](#per-phase-type-models-models--added-in-v140). Added in v1.40 ([#3023](https://github.com/open-gsd/get-shit-done-redux/pull/3030)) |
| `dynamic_routing.enabled` | boolean | `true`, `false` | `false` | Master switch for [dynamic routing with failure-tier escalation](#dynamic-routing-with-failure-tier-escalation-dynamic_routing--added-in-v140). When `true`, agents resolve to `tier_models[default_tier]` and escalate one tier up on orchestrator-detected soft failure. Added in v1.40 ([#3024](https://github.com/open-gsd/get-shit-done-redux/pull/3031)) |
| `models.<phase_type>` | enum | `opus`, `sonnet`, `haiku`, `inherit` | (none) | Per-phase-type model tier. Six accepted slots: `planning`, `discuss`, `research`, `execution`, `verification`, `completion`. Lets you tune at the phase level ("Opus for planning, Sonnet for the rest") without learning agent names. Resolves between `model_overrides` (higher) and `model_profile` (lower); see [Per-Phase-Type Models](#per-phase-type-models-models--added-in-v140). Added in v1.40 ([#3023](https://github.com/open-gsd/gsd-core/pull/3030)) |
| `dynamic_routing.enabled` | boolean | `true`, `false` | `false` | Master switch for [dynamic routing with failure-tier escalation](#dynamic-routing-with-failure-tier-escalation-dynamic_routing--added-in-v140). When `true`, agents resolve to `tier_models[default_tier]` and escalate one tier up on orchestrator-detected soft failure. Added in v1.40 ([#3024](https://github.com/open-gsd/gsd-core/pull/3031)) |
| `dynamic_routing.tier_models.<tier>` | enum | `opus`, `sonnet`, `haiku` | (none) | Tier alias for `light`, `standard`, or `heavy`. Used when `dynamic_routing.enabled: true`. Added in v1.40 |
| `dynamic_routing.escalate_on_failure` | boolean | `true`, `false` | `true` | When `false`, escalation is disabled even if `enabled: true` — every attempt uses the default tier. Added in v1.40 |
| `dynamic_routing.max_escalations` | integer | `0`, `1`, `2`, … | `1` | Hard cap on retries per agent invocation. Beyond the cap the resolver returns the cap-tier model. Added in v1.40 |
@@ -258,7 +258,7 @@ All workflow toggles follow the **absent = enabled** pattern. If a key is missin
| `executor.stall_detect_interval_minutes` | number | `5` | Minutes between executor stall checks while an executor agent is active. The execute-phase orchestrator uses this cadence to inspect recent commits and avoid waiting forever on a silent agent. |
| `executor.stall_threshold_minutes` | number | `10` | Minutes without executor completion or expected-branch commit activity before execute-phase offers recovery choices for a possible stalled executor. |
| `workflow.inline_plan_threshold` | number | `3` | Maximum number of tasks in a phase before the planner generates a separate PLAN.md file instead of inlining tasks in the prompt |
| `workflow.drift_threshold` | number | `3` | Minimum number of new structural elements (new directories, barrel exports, migrations, route modules) introduced during a phase before the post-execute codebase-drift gate takes action. See [#2003](https://github.com/open-gsd/get-shit-done-redux/issues/2003). Added in v1.39 |
| `workflow.drift_threshold` | number | `3` | Minimum number of new structural elements (new directories, barrel exports, migrations, route modules) introduced during a phase before the post-execute codebase-drift gate takes action. See [#2003](https://github.com/open-gsd/gsd-core/issues/2003). Added in v1.39 |
| `workflow.drift_action` | string | `warn` | What to do when `workflow.drift_threshold` is exceeded after `/gsd-execute-phase`. `warn` prints a message suggesting `/gsd-map-codebase --paths …`; `auto-remap` spawns `gsd-codebase-mapper` scoped to the affected paths. Added in v1.39 |
| `workflow.build_command` | string | (none) | Shell command to build the project in the post-merge build gate (Step A of step 5.6 in execute-phase). When unset, the gate auto-detects: Xcode (`.xcodeproj` present) → `xcodebuild build`, `Makefile` with `build:` target → `make build`, Justfile → `just build`, `Cargo.toml` → `cargo build`, `go.mod` → `go build ./...`, Python → `python -m py_compile`, `package.json` with `build` script → `npm run build`. Runs with a 5-minute timeout; failure increments `WAVE_FAILURE_COUNT`. Added in v1.39 |
| `workflow.test_command` | string | (none) | Shell command to run the project's test suite in the post-merge test gate (Step B of step 5.6 in execute-phase) and the regression gate. When unset, the gate auto-detects: Xcode (`.xcodeproj` present) → `xcodebuild test`, `Makefile` with `test:` target → `make test`, Justfile → `just test`, `package.json` → `npm test`, `Cargo.toml` → `cargo test`, `go.mod` → `go test ./...`, Python → `python -m pytest`. Runs with a 5-minute timeout; failure increments `WAVE_FAILURE_COUNT`. Added in v1.39 |
@@ -821,7 +821,7 @@ for the change to take effect. See issue #2256.
### Per-Phase-Type Models (`models`) — added in v1.41
> Express tuning at the **phase** level (planning, research, execution, verification) without learning the agent taxonomy. Added in [#3023](https://github.com/open-gsd/get-shit-done-redux/pull/3030).
> Express tuning at the **phase** level (planning, research, execution, verification) without learning the agent taxonomy. Added in [#3023](https://github.com/open-gsd/gsd-core/pull/3030).
`model_overrides` is per-**agent** (precise but verbose; you have to know that `gsd-codebase-mapper` is research and `gsd-doc-writer` is execution). The `models` block lets you say "Opus for planning and execution, Sonnet for the rest" in two lines:
@@ -905,7 +905,7 @@ Direct edits to `.planning/config.json` are looser — the resolver simply ignor
### Dynamic Routing with Failure-Tier Escalation (`dynamic_routing`) — added in v1.41
> Start cheap, escalate only when the agent fails the gate. Added in [#3024](https://github.com/open-gsd/get-shit-done-redux/pull/3031).
> Start cheap, escalate only when the agent fails the gate. Added in [#3024](https://github.com/open-gsd/gsd-core/pull/3031).
`dynamic_routing` lets you pay for the cheap tier by default and only escalate to the more expensive tier when the orchestrator detects a soft failure (verification inconclusive, plan-check FLAG, etc.).
@@ -986,7 +986,7 @@ The `dynamic_routing` block is **disabled by default** — `enabled: false` (or
### Effort Control (`effort`) — added in v1.42
> Unified cross-provider effort knob. Added in [#443](https://github.com/open-gsd/get-shit-done-redux/issues/443).
> Unified cross-provider effort knob. Added in [#443](https://github.com/open-gsd/gsd-core/issues/443).
Control the reasoning effort of agent invocations with a single config. The universal ladder is:
@@ -1039,7 +1039,7 @@ Valid effort values: `minimal`, `low`, `medium`, `high`, `xhigh`, `max`.
### Fast Mode (`fast_mode`) — added in v1.42
> Per-agent fast_mode propagation knob. Added in [#443](https://github.com/open-gsd/get-shit-done-redux/issues/443).
> Per-agent fast_mode propagation knob. Added in [#443](https://github.com/open-gsd/gsd-core/issues/443).
Control whether fast_mode is propagated to agent invocations. Only accepts real booleans — string `"true"` is rejected.
@@ -1101,7 +1101,7 @@ Use `node gsd-tools.cjs resolve-execution <agent-type> [--effort <level>] [--fas
### Non-Claude Runtimes (Codex, OpenCode, Gemini CLI, Kilo)
> **Codex CLI minimum supported version: `0.130.0`** (issue [#3562](https://github.com/open-gsd/get-shit-done-redux/issues/3562)).
> **Codex CLI minimum supported version: `0.130.0`** (issue [#3562](https://github.com/open-gsd/gsd-core/issues/3562)).
>
> [Codex CLI 0.130.0](https://github.com/openai/codex/releases/tag/rust-v0.130.0) (released 2026-05-08) removed extra-skills-roots discovery via [openai/codex#21485](https://github.com/openai/codex/pull/21485). From this version forward, Codex CLI only scans `~/.codex/skills/<name>/SKILL.md`, `<project>/.codex/skills/`, and registered plugin roots for invocable skills. GSD installs the `$gsd-*` surface as `~/.codex/skills/gsd-<name>/SKILL.md` so commands resolve after a Codex restart. Earlier Codex CLI versions can show a duplicate listing (the legacy extra-roots scan plus the user-root copies) — restart Codex and either upgrade to ≥ 0.130.0 or accept the duplicates until you do.

View File

@@ -1050,7 +1050,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.
```
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`.
The banner is silent when up-to-date and rate-limits "check failed" diagnostics to once per 24 hours. Removed cleanly by `npx @opengsd/gsd-core --uninstall` or by deleting the SessionStart entry that references `gsd-update-banner.js`.
### 38. Developer Profiling
@@ -1432,7 +1432,7 @@ Test suite that scans all agent, workflow, and command files for embedded inject
### 55. Multi-Runtime Installer Selection
**Part of:** `npx @opengsd/get-shit-done-redux`
**Part of:** `npx @opengsd/gsd-core`
**Purpose:** Select multiple runtimes in a single interactive install session.
@@ -1451,7 +1451,7 @@ Test suite that scans all agent, workflow, and command files for embedded inject
### 56. Windsurf Runtime Support
**Part of:** `npx @opengsd/get-shit-done-redux`
**Part of:** `npx @opengsd/gsd-core`
**Purpose:** Add Windsurf as a supported AI CLI runtime for GSD installation and execution.
@@ -1671,7 +1671,7 @@ Test suite that scans all agent, workflow, and command files for embedded inject
### 68. Claude Code Skills Migration
**Part of:** `npx @opengsd/get-shit-done-redux`
**Part of:** `npx @opengsd/gsd-core`
**Purpose:** Migrate GSD commands to Claude Code 2.1.88+ skills format with backward compatibility.
@@ -1935,7 +1935,7 @@ Test suite that scans all agent, workflow, and command files for embedded inject
### 85. New Runtime Support (Trae, Cline, Augment Code)
**Part of:** `npx @opengsd/get-shit-done-redux`
**Part of:** `npx @opengsd/gsd-core`
**Purpose:** Extend GSD installation to Trae IDE, Cline, and Augment Code runtimes.
@@ -2277,7 +2277,7 @@ Test suite that scans all agent, workflow, and command files for embedded inject
### 104. New Runtime Support (Cline, CodeBuddy, Qwen Code)
**Part of:** `npx @opengsd/get-shit-done-redux`
**Part of:** `npx @opengsd/gsd-core`
**Purpose:** Extend GSD installation to Cline, CodeBuddy, and Qwen Code runtimes.
@@ -2606,7 +2606,7 @@ Users who run a memory / knowledge-base MCP server (for example, ExoCortex-style
- REQ-CONSOLIDATE-03: Deleted micro-skill slash forms (the bare `gsd-add-todo`, `gsd-add-backlog`, `gsd-plant-seed`, `gsd-check-todos`, `gsd-add-phase`, `gsd-insert-phase`, `gsd-remove-phase`, `gsd-edit-phase`, `gsd-new-workspace`, `gsd-list-workspaces`, `gsd-remove-workspace`, `gsd-settings-advanced`, `gsd-settings-integrations`, `gsd-set-profile`, `gsd-sketch-wrap-up`, `gsd-spike-wrap-up`, `gsd-reapply-patches`, `gsd-code-review-fix`, …) MUST resolve to "Unknown command" — no shadow stubs.
- REQ-CONSOLIDATE-04: `autonomous.md` invokes `/gsd-code-review --fix` (was previously calling the deleted `gsd-code-review-fix`).
**Reference issue:** [#2790](https://github.com/open-gsd/get-shit-done-redux/issues/2790)
**Reference issue:** [#2790](https://github.com/open-gsd/gsd-core/issues/2790)
---
@@ -2634,7 +2634,7 @@ Users who run a memory / knowledge-base MCP server (for example, ExoCortex-style
- REQ-NS-02: Existing sub-skills are unchanged and still invocable directly — namespace skills are additive, not a replacement for direct slash forms.
- REQ-NS-03: The body of each namespace router contains a routing table that maps user intent to the correct concrete sub-skill on the post-#2790 consolidated surface.
**Reference issue:** [#2792](https://github.com/open-gsd/get-shit-done-redux/issues/2792)
**Reference issue:** [#2792](https://github.com/open-gsd/gsd-core/issues/2792)
---
@@ -2649,7 +2649,7 @@ Users who run a memory / knowledge-base MCP server (for example, ExoCortex-style
- REQ-CTX-GUARD-02: The same triage is exposed as `gsd-tools.cjs validate context --tokens-used <int> --context-window <int>` — a structured envelope for status-line and hook callers (#125). Both flags are required; the handler returns the same `{ percent, state }` envelope as the pure classifier in REQ-CTX-GUARD-03.
- REQ-CTX-GUARD-03: The classifier (`bin/lib/context-utilization.cjs`) is pure: input `(tokensUsed, contextWindow)`, output `{ percent, state }`. Easy to unit-test, easy to reuse from any caller.
**Reference issue:** [#2792](https://github.com/open-gsd/get-shit-done-redux/issues/2792)
**Reference issue:** [#2792](https://github.com/open-gsd/gsd-core/issues/2792)
---
@@ -2666,7 +2666,7 @@ Users who run a memory / knowledge-base MCP server (for example, ExoCortex-style
- REQ-LIFECYCLE-02: `formatGsdState()` checks the lifecycle fields in priority order and emits the first matching scene (Phase active → Idle next-recommended → Milestone complete → Default fallback).
- REQ-LIFECYCLE-03: All four fields default to undefined; existing STATE.md files render byte-for-byte identically.
**Reference issue:** [#2833](https://github.com/open-gsd/get-shit-done-redux/issues/2833) — see [`docs/STATE-MD-LIFECYCLE.md`](STATE-MD-LIFECYCLE.md) for the full field reference and rendering rules.
**Reference issue:** [#2833](https://github.com/open-gsd/gsd-core/issues/2833) — see [`docs/STATE-MD-LIFECYCLE.md`](STATE-MD-LIFECYCLE.md) for the full field reference and rendering rules.
---
@@ -2706,7 +2706,7 @@ Users who run a memory / knowledge-base MCP server (for example, ExoCortex-style
- REQ-PHASE-MODELS-02: Configs without a `models` block behave byte-for-byte identically to pre-v1.41 behavior.
- REQ-PHASE-MODELS-03: `discuss` and `completion` are accepted by the schema for forward compatibility; setting them today is a no-op until a subagent maps to each.
**Reference issue:** [#3023](https://github.com/open-gsd/get-shit-done-redux/pull/3030)
**Reference issue:** [#3023](https://github.com/open-gsd/gsd-core/pull/3030)
---
@@ -2727,7 +2727,7 @@ Users who run a memory / knowledge-base MCP server (for example, ExoCortex-style
- REQ-DYNROUTE-02: New resolver `resolveModelForTier(cwd, agent, attempt)` in `core.cjs` is the single call-site for orchestrator integration.
- REQ-DYNROUTE-03: `max_escalations` caps the escalation chain to prevent runaway cost.
**Reference issue:** [#3024](https://github.com/open-gsd/get-shit-done-redux/pull/3031)
**Reference issue:** [#3024](https://github.com/open-gsd/gsd-core/pull/3031)
---
@@ -2740,14 +2740,14 @@ 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.
- Silent when up-to-date.
- Failure diagnostics rate-limited to once per 24 h.
- Cleanly removed by `npx @opengsd/get-shit-done-redux --uninstall`.
- Cleanly removed by `npx @opengsd/gsd-core --uninstall`.
**Requirements:**
- REQ-BANNER-01: Banner does not install without explicit opt-in.
- REQ-BANNER-02: No additional network requests — reuses the existing background update-check cache.
- REQ-BANNER-03: Uninstall path removes the banner hook.
**Reference issue:** [#2795](https://github.com/open-gsd/get-shit-done-redux/pull/2795)
**Reference issue:** [#2795](https://github.com/open-gsd/gsd-core/pull/2795)
---
@@ -2766,7 +2766,7 @@ Users who run a memory / knowledge-base MCP server (for example, ExoCortex-style
No new commands or daemon process — purely a documentation artifact that maps existing primitives onto a tracker-driven workflow.
**Reference issue:** [#2840](https://github.com/open-gsd/get-shit-done-redux/pull/2840)
**Reference issue:** [#2840](https://github.com/open-gsd/gsd-core/pull/2840)
---
@@ -2794,7 +2794,7 @@ Source commit: abc1234 (3 commits behind HEAD)
**Fallback:** pre-v0.7 graphs and non-git checkouts return `commit_stale: null`; callers fall back to the existing mtime-based `stale` flag. No behavior change for existing users.
**Reference issue:** [#3170](https://github.com/open-gsd/get-shit-done-redux/issues/3170)
**Reference issue:** [#3170](https://github.com/open-gsd/gsd-core/issues/3170)
---

View File

@@ -60,7 +60,7 @@ Full roster at `commands/gsd/*.md`. The groupings below mirror `docs/COMMANDS.md
### Namespace Meta-Skills
These six routers are descriptor-only entries that the model picks first; the body of each contains a routing table that points at the correct concrete sub-skill. They exist to keep the eager skill-listing token cost low while the full surface remains reachable. See [#2792](https://github.com/open-gsd/get-shit-done-redux/issues/2792) for the rationale; the routing tables target the post-[#2790](https://github.com/open-gsd/get-shit-done-redux/issues/2790) consolidated surface.
These six routers are descriptor-only entries that the model picks first; the body of each contains a routing table that points at the correct concrete sub-skill. They exist to keep the eager skill-listing token cost low while the full surface remains reachable. See [#2792](https://github.com/open-gsd/gsd-core/issues/2792) for the rationale; the routing tables target the post-[#2790](https://github.com/open-gsd/gsd-core/issues/2790) consolidated surface.
| Command | Role | Source |
|---------|------|--------|

View File

@@ -1,7 +1,7 @@
# STATE.md Phase Lifecycle Frontmatter
> **Status:** Read-side shipped in v1.40.0 (issue
> [#2833](https://github.com/open-gsd/get-shit-done-redux/issues/2833)).
> [#2833](https://github.com/open-gsd/gsd-core/issues/2833)).
> `parseStateMd()` reads the four frontmatter fields below and
> `formatGsdState()` renders the in-flight / idle / progress scenes.
> SDK write-side support to maintain the fields automatically is tracked

View File

@@ -2,7 +2,7 @@
This project's `tests/` directory uses **filename suffix markers** to group tests into named suites. The harness `scripts/run-tests.cjs` filters by suite when given `--suite <name>`. Without a flag it runs every `*.test.cjs` file (the historical default — unchanged).
> Tracked by issue [#3597](https://github.com/open-gsd/get-shit-done-redux/issues/3597).
> Tracked by issue [#3597](https://github.com/open-gsd/gsd-core/issues/3597).
## Suites

View File

@@ -1246,7 +1246,7 @@ For the full audit, harness reference, and the composition note with `model_prof
### Using Non-Claude Runtimes (Codex, OpenCode, Gemini CLI, Kilo)
> **Codex CLI minimum supported version: `0.130.0`** (issue [#3562](https://github.com/open-gsd/get-shit-done-redux/issues/3562)).
> **Codex CLI minimum supported version: `0.130.0`** (issue [#3562](https://github.com/open-gsd/gsd-core/issues/3562)).
>
> Codex CLI [0.130.0](https://github.com/openai/codex/releases/tag/rust-v0.130.0) (released 2026-05-08) removed extra-skills-roots discovery via [openai/codex#21485](https://github.com/openai/codex/pull/21485). From that version onward, Codex only discovers commands from `~/.codex/skills/<name>/SKILL.md` (user root), `<project>/.codex/skills/` (cwd root), and registered plugin roots. The GSD installer writes `~/.codex/skills/gsd-<name>/SKILL.md` directly so `$gsd-help`, `$gsd-new-project`, etc. are discoverable after restart.
>
@@ -1313,7 +1313,7 @@ All other frontmatter fields (`description:`, `system:`, `model:`) are accepted
If you have access to any machine with Node.js — including WSL, a Linux VM, a CI runner, or a Docker container — you can run:
```bash
npx @opengsd/get-shit-done-redux@latest --opencode --global
npx @opengsd/gsd-core@latest --opencode --global
```
This produces a correctly converted `~/.config/opencode/agents/` directory. Copy that directory to your Windows machine.
@@ -1328,10 +1328,10 @@ Cline uses a rules-based integration — GSD installs as `.clinerules` rather th
```bash
# Global install (applies to all projects)
npx @opengsd/get-shit-done-redux --cline --global
npx @opengsd/gsd-core --cline --global
# Local install (this project only)
npx @opengsd/get-shit-done-redux --cline --local
npx @opengsd/gsd-core --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.
@@ -1341,7 +1341,7 @@ Global installs write to `~/.cline/`. Local installs write to `./.cline/`. No cu
CodeBuddy uses a skills-based integration.
```bash
npx @opengsd/get-shit-done-redux --codebuddy --global
npx @opengsd/gsd-core --codebuddy --global
```
Skills are installed to `~/.codebuddy/skills/gsd-*/SKILL.md`.
@@ -1351,7 +1351,7 @@ Skills are installed to `~/.codebuddy/skills/gsd-*/SKILL.md`.
Qwen Code uses the same open skills standard as Claude Code 2.1.88+.
```bash
npx @opengsd/get-shit-done-redux --qwen --global
npx @opengsd/gsd-core --qwen --global
```
Skills are installed to `~/.qwen/skills/gsd-*/SKILL.md`. Use the `QWEN_CONFIG_DIR` environment variable to override the default install path.
@@ -1360,12 +1360,12 @@ Skills are installed to `~/.qwen/skills/gsd-*/SKILL.md`. Use the `QWEN_CONFIG_DI
Many supported runtimes ship a prerelease edition alongside their stable release — Windsurf Next, Cursor Nightly, VS Code Insiders, Codex preview channels, JetBrains EAP, and so on. Prerelease editions read from a sibling configuration directory, so the default install path won't reach them.
GSD does not enumerate prerelease editions as separate named runtimes. They are accommodated through the existing `<RUNTIME>_CONFIG_DIR` environment variables and the free-string runtime policy (see [#2517](https://github.com/open-gsd/get-shit-done-redux/issues/2517)) — installs work, paths resolve, GSD operates. Prerelease editions are **best-effort and not separately tested** as part of release CI.
GSD does not enumerate prerelease editions as separate named runtimes. They are accommodated through the existing `<RUNTIME>_CONFIG_DIR` environment variables and the free-string runtime policy (see [#2517](https://github.com/open-gsd/gsd-core/issues/2517)) — installs work, paths resolve, GSD operates. Prerelease editions are **best-effort and not separately tested** as part of release CI.
**Pattern.** Set the runtime's `*_CONFIG_DIR` env var to the prerelease directory before running the installer:
```bash
WINDSURF_CONFIG_DIR=~/.codeium/windsurf-next npx @opengsd/get-shit-done-redux@latest --windsurf --global
WINDSURF_CONFIG_DIR=~/.codeium/windsurf-next npx @opengsd/gsd-core@latest --windsurf --global
```
Select the corresponding stable runtime in the installer prompt. Skills land in the prerelease directory; commands appear in the prerelease editor.
@@ -1405,7 +1405,7 @@ Since v1.17, the installer backs up locally modified files to `gsd-local-patches
### Cannot Update via npm
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.
If `npx @opengsd/gsd-core` 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
@@ -1427,7 +1427,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.
**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.
**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/gsd-core --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.

View File

@@ -1,6 +1,6 @@
# Issue tracker: GitHub
Issues for this repo live in **GitHub Issues** at `open-gsd/get-shit-done-redux`.
Issues for this repo live in **GitHub Issues** at `open-gsd/gsd-core`.
## Auth
@@ -9,19 +9,19 @@ repo-local `.envrc` before running `gh`.
## Conventions
- **Create**: `gh issue create --repo open-gsd/get-shit-done-redux --title "..." --body "..."`
- **Read**: `gh issue view <number> --repo open-gsd/get-shit-done-redux --comments`
- **List**: `gh issue list --repo open-gsd/get-shit-done-redux --state open --json number,title,labels --jq '...'`
- **Comment**: `gh issue comment <number> --repo open-gsd/get-shit-done-redux --body "..."`
- **Label**: `gh issue edit <number> --repo open-gsd/get-shit-done-redux --add-label "..." --remove-label "..."`
- **Close**: `gh issue close <number> --repo open-gsd/get-shit-done-redux --comment "..."`
- **Create**: `gh issue create --repo open-gsd/gsd-core --title "..." --body "..."`
- **Read**: `gh issue view <number> --repo open-gsd/gsd-core --comments`
- **List**: `gh issue list --repo open-gsd/gsd-core --state open --json number,title,labels --jq '...'`
- **Comment**: `gh issue comment <number> --repo open-gsd/gsd-core --body "..."`
- **Label**: `gh issue edit <number> --repo open-gsd/gsd-core --add-label "..." --remove-label "..."`
- **Close**: `gh issue close <number> --repo open-gsd/gsd-core --comment "..."`
Always pass `--repo open-gsd/get-shit-done-redux` explicitly — the local clone has multiple remotes and `gh` may resolve to the wrong one.
Always pass `--repo open-gsd/gsd-core` explicitly — the local clone has multiple remotes and `gh` may resolve to the wrong one.
## When a skill says "publish to the issue tracker"
Create a GitHub issue at `open-gsd/get-shit-done-redux`.
Create a GitHub issue at `open-gsd/gsd-core`.
## When a skill says "fetch the relevant ticket"
Run `gh issue view <number> --repo open-gsd/get-shit-done-redux --comments`.
Run `gh issue view <number> --repo open-gsd/gsd-core --comments`.

View File

@@ -1,6 +1,6 @@
# Triage Labels
Maps the five canonical triage roles to the actual label strings in `open-gsd/get-shit-done-redux`.
Maps the five canonical triage roles to the actual label strings in `open-gsd/gsd-core`.
| Canonical role | Label in this repo | Notes |
|-------------------|--------------------------|----------------------------------------------------------------|

View File

@@ -38,13 +38,13 @@ immutable once created. Tag creation is unrestricted.
```bash
# Dry-run (evaluate mode — logs violations, does not block)
REPO=open-gsd/get-shit-done-redux ENFORCEMENT=evaluate bash scripts/sync-rulesets.sh
REPO=open-gsd/gsd-core ENFORCEMENT=evaluate bash scripts/sync-rulesets.sh
# Activate protection
REPO=open-gsd/get-shit-done-redux ENFORCEMENT=active bash scripts/sync-rulesets.sh
REPO=open-gsd/gsd-core ENFORCEMENT=active bash scripts/sync-rulesets.sh
# Roll back to disabled
REPO=open-gsd/get-shit-done-redux ENFORCEMENT=disabled bash scripts/sync-rulesets.sh
REPO=open-gsd/gsd-core ENFORCEMENT=disabled bash scripts/sync-rulesets.sh
```
The script is idempotent: running it twice with the same `ENFORCEMENT` value
@@ -55,7 +55,7 @@ is a no-op semantically (PUT with identical body).
After applying with `evaluate`, check which PRs/pushes would have been blocked:
```bash
REPO=open-gsd/get-shit-done-redux
REPO=open-gsd/gsd-core
RULESET_ID=$(gh api repos/$REPO/rulesets --jq '.[] | select(.name=="main-protection") | .id')
gh api repos/$REPO/rulesets/$RULESET_ID/rule-suites
```

View File

@@ -102,7 +102,7 @@ git add -A && git commit -m "fix: harden config parse for trailing comma"
git push -u origin fix/3187-config-corruption
# 4. Open a PR. Target = next. (Don't change the target.)
gh pr create --base next --repo open-gsd/get-shit-done-redux
gh pr create --base next --repo open-gsd/gsd-core
# 5. CI runs. Reviewer approves. PR squash-merges into `next`.
# Your branch auto-deletes.

View File

@@ -60,7 +60,7 @@ GSD's `/gsd-pause-work` command saves execution state. The WARNING message sugge
## Setup
Both hooks are automatically registered during `npx @opengsd/get-shit-done-redux` installation:
Both hooks are automatically registered during `npx @opengsd/gsd-core` installation:
- **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)

View File

@@ -36,8 +36,8 @@ will read it.
```bash
# 1. Clone
git clone https://github.com/open-gsd/get-shit-done-redux.git
cd get-shit-done-redux
git clone https://github.com/open-gsd/gsd-core.git
cd gsd-core
# 2. Activate the pinned Node version
nvm use # nvm
@@ -67,7 +67,7 @@ See https://docs.npmjs.com/cli/v10/commands/npm-ci
| `npm run test:integration` | Integration tests |
| `npm run build:sdk` | Rebuild the SDK dist (required before first test run) |
> `npm run check:integrity` — available once [#114](https://github.com/open-gsd/get-shit-done-redux/issues/114) merges.
> `npm run check:integrity` — available once [#114](https://github.com/open-gsd/gsd-core/issues/114) merges.
---

View File

@@ -72,7 +72,7 @@ Currently accepted ADRs:
| `0004-worktree-workstream-seam-module.md` | Planning Workspace Module as single seam for worktree and workstream state |
| `0005-sdk-architecture-seam-map.md` | SDK Architecture seam map for query/runtime surfaces |
| `0006-planning-path-projection-module.md` | Planning Path Projection Module for SDK query handlers |
| `0007-sdk-package-seam-module.md` | SDK Package Seam Module owns SDK-to-get-shit-done-redux compatibility |
| `0007-sdk-package-seam-module.md` | SDK Package Seam Module owns SDK-to-gsd-core compatibility |
### When an ADR is required

View File

@@ -28,7 +28,7 @@ Currently, Grok Build is only supported via its Claude compatibility layer. This
## 2. Current Multi-Runtime Setup (as of May 2026)
### Development Source (Single Source of Truth)
- **Path:** `/home/cristian/bum/get-shit-done` (this repo — your working fork of `open-gsd/get-shit-done-redux`)
- **Path:** `/home/cristian/bum/get-shit-done` (this repo — your working fork of `open-gsd/gsd-core`)
### Installed Locations
- `~/.agents/get-shit-done/` — Core workflows, references, templates, `gsd-tools.cjs`, `bin/`

View File

@@ -1306,7 +1306,7 @@ Claude が GSD ワークフローコンテキスト外でファイル編集を
### 55. マルチランタイムインストーラー選択
**対象:** `npx @opengsd/get-shit-done-redux`
**対象:** `npx @opengsd/gsd-core`
**目的:** 1回のインタラクティブなインストールセッションで複数のランタイムを選択します。
@@ -1325,7 +1325,7 @@ Claude が GSD ワークフローコンテキスト外でファイル編集を
### 56. Windsurf ランタイムサポート
**対象:** `npx @opengsd/get-shit-done-redux`
**対象:** `npx @opengsd/gsd-core`
**目的:** Windsurf AI IDE のサポートを追加します。
@@ -1546,7 +1546,7 @@ Claude が GSD ワークフローコンテキスト外でファイル編集を
### 68. Claude Code スキルマイグレーション
**対象:** `npx @opengsd/get-shit-done-redux`
**対象:** `npx @opengsd/gsd-core`
**目的:** GSD コマンドを Claude Code 2.1.88+ のスキル形式に後方互換性を維持してマイグレーションします。
@@ -1809,7 +1809,7 @@ Claude が GSD ワークフローコンテキスト外でファイル編集を
### 85. 新規ランタイムサポート (Trae, Cline, Augment Code)
**対象:** `npx @opengsd/get-shit-done-redux`
**対象:** `npx @opengsd/gsd-core`
**目的:** Trae IDE、Cline、Augment Code ランタイムへの GSD インストールを拡張します。

View File

@@ -60,7 +60,7 @@ GSD の `/gsd-pause-work` コマンドは実行状態を保存します。WARNIN
## セットアップ
両フックは `npx @opengsd/get-shit-done-redux` のインストール時に自動的に登録されます:
両フックは `npx @opengsd/gsd-core` のインストール時に自動的に登録されます:
- **ステータスライン**(ブリッジファイルの書き込み): settings.json の `statusLine` として登録
- **コンテキストモニター**(ブリッジファイルの読み取り): settings.json の `PostToolUse` フックとして登録(Gemini では `AfterTool`)

View File

@@ -1306,7 +1306,7 @@ Claude가 GSD 워크플로우 컨텍스트 밖에서 파일 편집을 시도하
### 55. Multi-Runtime Installer Selection
**일부:** `npx @opengsd/get-shit-done-redux`
**일부:** `npx @opengsd/gsd-core`
**목적:** 단일 대화형 설치 세션에서 여러 런타임을 선택합니다.
@@ -1325,7 +1325,7 @@ Claude가 GSD 워크플로우 컨텍스트 밖에서 파일 편집을 시도하
### 56. Windsurf 런타임 지원
**대상:** `npx @opengsd/get-shit-done-redux`
**대상:** `npx @opengsd/gsd-core`
**목적:** Windsurf AI IDE 지원을 추가합니다.
@@ -1546,7 +1546,7 @@ Claude가 GSD 워크플로우 컨텍스트 밖에서 파일 편집을 시도하
### 68. Claude Code 스킬 마이그레이션
**대상:** `npx @opengsd/get-shit-done-redux`
**대상:** `npx @opengsd/gsd-core`
**목적:** GSD 명령어를 하위 호환성을 유지하면서 Claude Code 2.1.88+ 스킬 형식으로 마이그레이션합니다.
@@ -1809,7 +1809,7 @@ Claude가 GSD 워크플로우 컨텍스트 밖에서 파일 편집을 시도하
### 85. 신규 런타임 지원 (Trae, Cline, Augment Code)
**대상:** `npx @opengsd/get-shit-done-redux`
**대상:** `npx @opengsd/gsd-core`
**목적:** Trae IDE, Cline, Augment Code 런타임으로 GSD 설치를 확장합니다.

View File

@@ -60,7 +60,7 @@ GSD의 `/gsd-pause-work` 명령어는 실행 상태를 저장합니다. WARNING
## 설정
두 훅 모두 `npx @opengsd/get-shit-done-redux` 설치 중에 자동으로 등록됩니다.
두 훅 모두 `npx @opengsd/gsd-core` 설치 중에 자동으로 등록됩니다.
- **Statusline** (브리지 파일 기록): settings.json에 `statusLine`으로 등록
- **Context Monitor** (브리지 파일 읽기): settings.json에 `PostToolUse` 훅으로 등록 (Gemini의 경우 `AfterTool`)

View File

@@ -1,11 +1,11 @@
# Manual Update (Non-npm Install)
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.
Use this procedure when `npx @opengsd/gsd-core@latest` is unavailable — e.g. during a publish outage or if you are working directly from the source repo.
## Prerequisites
- Node.js installed
- This repo cloned locally (`git clone https://github.com/open-gsd/get-shit-done-redux`)
- This repo cloned locally (`git clone https://github.com/open-gsd/gsd-core`)
## Steps

View File

@@ -41,7 +41,7 @@ The top-level README still mixes legacy transition language, personal attributio
## Acceptance Criteria
1. README contains a continuity notice naming `open-gsd/get-shit-done-redux` as canonical.
1. README contains a continuity notice naming `open-gsd/gsd-core` as canonical.
2. README removes personal legacy attribution in origin-story prose.
3. README strongly recommends migration away from legacy artifacts.
4. README links to Discussions #109 and #119.

View File

@@ -2,7 +2,7 @@
- **Status:** Reference
- **Date:** 2026-05-14
- **Tracking issue:** [#3524](https://github.com/open-gsd/get-shit-done-redux/issues/3524)
- **Tracking issue:** [#3524](https://github.com/open-gsd/gsd-core/issues/3524)
- **Related ADR:** [`docs/adr/3524-cjs-sdk-hard-seam.md`](../adr/3524-cjs-sdk-hard-seam.md)
## Why this PRD exists
@@ -11,7 +11,7 @@ The ADR defines the target architecture — one source of truth per Shared Modul
## Problem statement
The CJS↔SDK boundary in `open-gsd/get-shit-done-redux` is structurally permeable. Multiple Shared Modules — STATE.md Document Module, Workstream Inventory Module, and several others — exist today as **hand-synced pairs** of `.cjs` and `.ts` files with character-identical implementations. Constants (`CONFIG_DEFAULTS`, `VALID_CONFIG_KEYS`) are likewise defined twice. The boundary is policed only by:
The CJS↔SDK boundary in `open-gsd/gsd-core` is structurally permeable. Multiple Shared Modules — STATE.md Document Module, Workstream Inventory Module, and several others — exist today as **hand-synced pairs** of `.cjs` and `.ts` files with character-identical implementations. Constants (`CONFIG_DEFAULTS`, `VALID_CONFIG_KEYS`) are likewise defined twice. The boundary is policed only by:
- A naming-parity test (`tests/config-schema-sdk-parity.test.cjs`)
- Output-parity golden tests for read-only handlers (`sdk/src/golden/read-only-parity.integration.test.ts`)
@@ -209,7 +209,7 @@ Phase 5 specifically preserves the in-process model: `QueryRuntimeBridge.execute
### 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.
- 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.
- The published `@opengsd/gsd-core` 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.
### Risks

View File

@@ -12,7 +12,7 @@
### Repos in scope
All active, non-archived repositories under the `open-gsd` GitHub organization,
beginning with the pilot repo `open-gsd/get-shit-done-redux`.
beginning with the pilot repo `open-gsd/gsd-core`.
### Out of scope
@@ -26,7 +26,7 @@ beginning with the pilot repo `open-gsd/get-shit-done-redux`.
This section defines the mandatory security controls for every in-scope repo.
Each control links to the PR that implements it in the pilot repo
(`open-gsd/get-shit-done-redux`). Sibling repos adopt the same controls during
(`open-gsd/gsd-core`). Sibling repos adopt the same controls during
Phase 2 rollout (§ 6).
### 2.1 Dependency integrity
@@ -45,9 +45,9 @@ integrity as a prerequisite.
([SLSA](https://slsa.dev/))
**Implementation in pilot:** PR
[#135](https://github.com/open-gsd/get-shit-done-redux/pull/135)
[#135](https://github.com/open-gsd/gsd-core/pull/135)
(linked to issue
[#114](https://github.com/open-gsd/get-shit-done-redux/issues/114)).
[#114](https://github.com/open-gsd/gsd-core/issues/114)).
**Verify locally:**
@@ -79,9 +79,9 @@ mechanism.
([GitGuardian exclusion grammar](https://docs.gitguardian.com/internal-repositories-monitoring/integrations/cli/secrets))
**Implementation in pilot:** PR
[#134](https://github.com/open-gsd/get-shit-done-redux/pull/134)
[#134](https://github.com/open-gsd/gsd-core/pull/134)
(linked to issue
[#115](https://github.com/open-gsd/get-shit-done-redux/issues/115)).
[#115](https://github.com/open-gsd/gsd-core/issues/115)).
Exclusion annotation files: `.secretscanignore` (top-level) and
`.base64scanignore` (top-level, for base64-encoded values).
@@ -114,9 +114,9 @@ risks in automated pipelines.
([CNCF Security TAG](https://github.com/cncf/tag-security))
**Implementation in pilot:** PR
[#133](https://github.com/open-gsd/get-shit-done-redux/pull/133)
[#133](https://github.com/open-gsd/gsd-core/pull/133)
(linked to issue
[#113](https://github.com/open-gsd/get-shit-done-redux/issues/113)).
[#113](https://github.com/open-gsd/gsd-core/issues/113)).
**Verify locally:**
@@ -142,9 +142,9 @@ supply-chain vectors (CVE-2021-42574 — "Trojan Source"). Detecting them at sca
time prevents invisible payload injection in source and output files.
**Implementation in pilot:** PR
[#132](https://github.com/open-gsd/get-shit-done-redux/pull/132)
[#132](https://github.com/open-gsd/gsd-core/pull/132)
(linked to issue
[#116](https://github.com/open-gsd/get-shit-done-redux/issues/116)).
[#116](https://github.com/open-gsd/gsd-core/issues/116)).
**Verify locally:**
@@ -174,7 +174,7 @@ OpenSSF Scorecard's "Pinned-Dependencies" check measures this directly.
([OpenSSF Scorecard](https://github.com/ossf/scorecard/blob/main/docs/checks.md))
**Implementation in pilot:** PR for issue
[#117](https://github.com/open-gsd/get-shit-done-redux/issues/117)
[#117](https://github.com/open-gsd/gsd-core/issues/117)
(see PR #136).
**Verify locally:**
@@ -280,7 +280,7 @@ Post-Incident Activity.
### Where to report
Report security vulnerabilities via **private security advisory** on GitHub:
`https://github.com/open-gsd/get-shit-done-redux/security/advisories/new`
`https://github.com/open-gsd/gsd-core/security/advisories/new`
Do not open public issues for security vulnerabilities.
@@ -294,7 +294,7 @@ If private advisory filing is unavailable, contact the open-gsd maintainers and
```text
Title: [Short description, e.g., "Secret exposed in CI log for PR #NNN"]
Affected repo: open-gsd/get-shit-done-redux (or sibling repo name)
Affected repo: open-gsd/gsd-core (or sibling repo name)
Affected ver: [npm version range, e.g., "<=1.42.3" or "all versions"]
Reporter: [Your name / handle, or "Anonymous"]
Date found: YYYY-MM-DD
@@ -383,7 +383,7 @@ Responsibilities:
| Step | Detail |
|---|---|
| 1 | Requester opens a GitHub issue in `open-gsd/get-shit-done-redux` tagged `security-exception` |
| 1 | Requester opens a GitHub issue in `open-gsd/gsd-core` tagged `security-exception` |
| 2 | Issue describes: which control, why the exception is needed, proposed compensating control |
| 3 | One maintainer approves the exception in the issue thread |
| 4 | Exception is time-limited: maximum 90 days. Requester must file a renewal or close the issue. |
@@ -393,7 +393,7 @@ Responsibilities:
## 6. Rollout plan
### Phase 1 — Pilot: `open-gsd/get-shit-done-redux` (in progress)
### Phase 1 — Pilot: `open-gsd/gsd-core` (in progress)
| Item | Status | Owner | Target date | Exit criteria |
|---|---|---|---|---|

View File

@@ -6,19 +6,19 @@
**解决上下文衰减 —— 即 Claude 填充上下文窗口时发生的质量退化问题。**
[![npm version](https://img.shields.io/npm/v/%40opengsd%2Fget-shit-done-redux?style=for-the-badge&logo=npm&logoColor=white&color=CB3837)](https://www.npmjs.com/package/@opengsd/get-shit-done-redux)
[![npm downloads](https://img.shields.io/npm/dm/%40opengsd%2Fget-shit-done-redux?style=for-the-badge&logo=npm&logoColor=white&color=CB3837)](https://www.npmjs.com/package/@opengsd/get-shit-done-redux)
[![Tests](https://img.shields.io/github/actions/workflow/status/GSD-redux/get-shit-done-redux/test.yml?branch=main&style=for-the-badge&logo=github&label=Tests)](https://github.com/GSD-redux/get-shit-done-redux/actions/workflows/test.yml)
[![npm version](https://img.shields.io/npm/v/%40opengsd%2Fgsd-core?style=for-the-badge&logo=npm&logoColor=white&color=CB3837)](https://www.npmjs.com/package/@opengsd/gsd-core)
[![npm downloads](https://img.shields.io/npm/dm/%40opengsd%2Fgsd-core?style=for-the-badge&logo=npm&logoColor=white&color=CB3837)](https://www.npmjs.com/package/@opengsd/gsd-core)
[![Tests](https://img.shields.io/github/actions/workflow/status/open-gsd/gsd-core/test.yml?branch=main&style=for-the-badge&logo=github&label=Tests)](https://github.com/open-gsd/gsd-core/actions/workflows/test.yml)
[![Discord](https://img.shields.io/badge/Discord-Join-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.gg/mYgfVNfA2r)
[![X (Twitter)](https://img.shields.io/badge/X-@gsd__foundation-000000?style=for-the-badge&logo=x&logoColor=white)](https://x.com/gsd_foundation)
[![$GSD Token](https://img.shields.io/badge/$GSD-Dexscreener-1C1C1C?style=for-the-badge&logo=data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgZmlsbD0iIzAwRkYwMCIvPjwvc3ZnPg==&logoColor=00FF00)](https://dexscreener.com/solana/dwudwjvan7bzkw9zwlbyv6kspdlvhwzrqy6ebk8xzxkv)
[![GitHub stars](https://img.shields.io/github/stars/GSD-redux/get-shit-done-redux?style=for-the-badge&logo=github&color=181717)](https://github.com/GSD-redux/get-shit-done-redux)
[![GitHub stars](https://img.shields.io/github/stars/open-gsd/gsd-core?style=for-the-badge&logo=github&color=181717)](https://github.com/open-gsd/gsd-core)
[![License](https://img.shields.io/badge/license-MIT-blue?style=for-the-badge)](LICENSE)
<br>
```bash
npx @opengsd/get-shit-done-redux@latest
npx @opengsd/gsd-core@latest
```
**支持 Mac、Windows 和 Linux。**
@@ -78,7 +78,7 @@ GSD 解决了这个问题。它是让 Claude Code 变得可靠的上下文工程
## 快速开始
```bash
npx @opengsd/get-shit-done-redux@latest
npx @opengsd/gsd-core@latest
```
安装程序会提示你选择:
@@ -99,7 +99,7 @@ npx @opengsd/get-shit-done-redux@latest
GSD 快速迭代。定期更新:
```bash
npx @opengsd/get-shit-done-redux@latest
npx @opengsd/gsd-core@latest
```
<details>
@@ -107,25 +107,25 @@ npx @opengsd/get-shit-done-redux@latest
```bash
# Claude Code
npx @opengsd/get-shit-done-redux --claude --global # 安装到 ~/.claude/
npx @opengsd/get-shit-done-redux --claude --local # 安装到 ./.claude/
npx @opengsd/gsd-core --claude --global # 安装到 ~/.claude/
npx @opengsd/gsd-core --claude --local # 安装到 ./.claude/
# OpenCode
npx @opengsd/get-shit-done-redux --opencode --global # 安装到 ~/.config/opencode/
npx @opengsd/gsd-core --opencode --global # 安装到 ~/.config/opencode/
# Gemini CLI
npx @opengsd/get-shit-done-redux --gemini --global # 安装到 ~/.gemini/
npx @opengsd/gsd-core --gemini --global # 安装到 ~/.gemini/
# Kilo
npx @opengsd/get-shit-done-redux --kilo --global # 安装到 ~/.config/kilo/
npx @opengsd/get-shit-done-redux --kilo --local # 安装到 ./.kilo/
npx @opengsd/gsd-core --kilo --global # 安装到 ~/.config/kilo/
npx @opengsd/gsd-core --kilo --local # 安装到 ./.kilo/
# Codex
npx @opengsd/get-shit-done-redux --codex --global # 安装到 ~/.codex/
npx @opengsd/get-shit-done-redux --codex --local # 安装到 ./.codex/
npx @opengsd/gsd-core --codex --global # 安装到 ~/.codex/
npx @opengsd/gsd-core --codex --local # 安装到 ./.codex/
# 所有运行时
npx @opengsd/get-shit-done-redux --all --global # 安装到所有目录
npx @opengsd/gsd-core --all --global # 安装到所有目录
```
使用 `--global`(`-g`)或 `--local`(`-l`)跳过位置提示。
@@ -139,7 +139,7 @@ npx @opengsd/get-shit-done-redux --all --global # 安装到所有目录
克隆仓库并本地运行安装程序:
```bash
git clone https://github.com/GSD-redux/get-shit-done-redux.git
git clone https://github.com/open-gsd/gsd-core.git
cd get-shit-done
node bin/install.js --claude --local
```
@@ -652,18 +652,18 @@ GSD 的代码库映射和分析命令读取文件以了解你的项目。**保
**命令没有按预期工作?**
- 运行 `/gsd-help` 验证安装
- 重新运行 `npx @opengsd/get-shit-done-redux` 重新安装
- 重新运行 `npx @opengsd/gsd-core` 重新安装
**更新到最新版本?**
```bash
npx @opengsd/get-shit-done-redux@latest
npx @opengsd/gsd-core@latest
```
**使用 Docker 或容器化环境?**
如果用波浪号路径(`~/.claude/...`)读取文件失败,在安装前设置 `CLAUDE_CONFIG_DIR`:
```bash
CLAUDE_CONFIG_DIR=/home/youruser/.claude npx @opengsd/get-shit-done-redux --global
CLAUDE_CONFIG_DIR=/home/youruser/.claude npx @opengsd/gsd-core --global
```
这确保使用绝对路径而不是 `~`,后者在容器中可能无法正确展开。
@@ -673,16 +673,16 @@ CLAUDE_CONFIG_DIR=/home/youruser/.claude npx @opengsd/get-shit-done-redux --glob
```bash
# 全局安装
npx @opengsd/get-shit-done-redux --claude --global --uninstall
npx @opengsd/get-shit-done-redux --opencode --global --uninstall
npx @opengsd/get-shit-done-redux --kilo --global --uninstall
npx @opengsd/get-shit-done-redux --codex --global --uninstall
npx @opengsd/gsd-core --claude --global --uninstall
npx @opengsd/gsd-core --opencode --global --uninstall
npx @opengsd/gsd-core --kilo --global --uninstall
npx @opengsd/gsd-core --codex --global --uninstall
# 本地安装(当前项目)
npx @opengsd/get-shit-done-redux --claude --local --uninstall
npx @opengsd/get-shit-done-redux --opencode --local --uninstall
npx @opengsd/get-shit-done-redux --kilo --local --uninstall
npx @opengsd/get-shit-done-redux --codex --local --uninstall
npx @opengsd/gsd-core --claude --local --uninstall
npx @opengsd/gsd-core --opencode --local --uninstall
npx @opengsd/gsd-core --kilo --local --uninstall
npx @opengsd/gsd-core --codex --local --uninstall
```
这删除所有 GSD 命令、代理、钩子和设置,同时保留你的其他配置。
@@ -691,7 +691,7 @@ npx @opengsd/get-shit-done-redux --codex --local --uninstall
## 社区移植
OpenCode、Gemini CLI、Kilo 和 Codex 现在通过 `npx @opengsd/get-shit-done-redux` 原生支持。
OpenCode、Gemini CLI、Kilo 和 Codex 现在通过 `npx @opengsd/gsd-core` 原生支持。
这些社区移植开创了多运行时支持:
@@ -704,11 +704,11 @@ OpenCode、Gemini CLI、Kilo 和 Codex 现在通过 `npx @opengsd/get-shit-done-
## Star 历史
<a href="https://star-history.com/#GSD-redux/get-shit-done-redux&Date">
<a href="https://star-history.com/#open-gsd/gsd-core&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=GSD-redux/get-shit-done-redux&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=GSD-redux/get-shit-done-redux&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=GSD-redux/get-shit-done-redux&type=Date" />
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=open-gsd/gsd-core&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=open-gsd/gsd-core&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=open-gsd/gsd-core&type=Date" />
</picture>
</a>