* 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:
@@ -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.
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 |
|
||||
|------|-------------|
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -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 |
|
||||
|---------|------|--------|
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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`.
|
||||
|
||||
@@ -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 |
|
||||
|-------------------|--------------------------|----------------------------------------------------------------|
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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/`
|
||||
|
||||
@@ -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 インストールを拡張します。
|
||||
|
||||
|
||||
@@ -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`)
|
||||
|
||||
@@ -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 설치를 확장합니다.
|
||||
|
||||
|
||||
@@ -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`)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 |
|
||||
|---|---|---|---|---|
|
||||
|
||||
@@ -6,19 +6,19 @@
|
||||
|
||||
**解决上下文衰减 —— 即 Claude 填充上下文窗口时发生的质量退化问题。**
|
||||
|
||||
[](https://www.npmjs.com/package/@opengsd/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://www.npmjs.com/package/@opengsd/gsd-core)
|
||||
[](https://www.npmjs.com/package/@opengsd/gsd-core)
|
||||
[](https://github.com/open-gsd/gsd-core/actions/workflows/test.yml)
|
||||
[](https://discord.gg/mYgfVNfA2r)
|
||||
[](https://x.com/gsd_foundation)
|
||||
[](https://dexscreener.com/solana/dwudwjvan7bzkw9zwlbyv6kspdlvhwzrqy6ebk8xzxkv)
|
||||
[](https://github.com/GSD-redux/get-shit-done-redux)
|
||||
[](https://github.com/open-gsd/gsd-core)
|
||||
[](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>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user