Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
e89da6f
chore: sync next package version to 1.16.0
github-actions[bot] Oct 5, 2026
ba49560
Merge pull request #5223 from open-gsd/chore/sync-next-version-1.16.0
trek-e Oct 5, 2026
bd748f1
chore: back-merge main into next (1b362a1f6)
github-actions[bot] Oct 5, 2026
a1f3db9
Merge pull request #5224 from open-gsd/chore/backmerge-main-to-next-1…
trek-e Oct 5, 2026
13d3723
chore(#4036): CI timeout budget history update (#5226)
trek-e Oct 5, 2026
82f7acd
chore(#4036): CI timeout budget history update (#5230)
trek-e Oct 6, 2026
55d046d
docs(#5237): record persistent planning references as out-of-scope
Oct 7, 2026
663acba
Merge pull request #5244 from open-gsd/docs/5237-out-of-scope-persist…
trek-e Oct 7, 2026
f2077e7
fix(#4839): keep update hook advisory on launch failure (#5159)
agammann Oct 7, 2026
b310da2
fix(#5084): scan config text in the anchor's separator projection (#5…
ScalingMBA Oct 7, 2026
ec006cf
fix(#5083): check npm cache isolation against the injected sandbox HO…
ScalingMBA Oct 7, 2026
8ae71aa
feat(#4866): add the StateWriteIntent verifying executor and bounded-…
davesienkowski Oct 7, 2026
83aba44
chore(#4036): CI timeout budget history update (#5247)
trek-e Oct 7, 2026
ed0f3fd
chore(#4036): CI timeout budget history update (#5253)
trek-e Oct 8, 2026
5d987cc
fix(#5054): retire the unscoped Bash(npx gsd-core *) allow rule (#5269)
behruznassre Oct 10, 2026
651bd2f
chore(#4036): CI timeout budget history update (#5272)
trek-e Oct 10, 2026
b747aca
chore(#4036): CI timeout budget history update (#5311)
trek-e Oct 11, 2026
77a12fa
chore(#4036): CI timeout budget history update (#5324)
trek-e Oct 12, 2026
d0b53f9
docs(#5336): ADR-5331 — OpenCode 2.x support and OpenCode 1.x sunset …
trek-e Oct 12, 2026
57538de
feat(#5337): OpenCode 2.x plugin entrypoint, generation detection, an…
claude Oct 12, 2026
67b8dce
feat(#5337): bridge 2.x session events, document OpenCode 1.x/2.x, ad…
claude Oct 12, 2026
b9b83a5
chore(#5337): register the opt-in OpenCode smoke test in the platform…
claude Oct 12, 2026
309c0c2
feat(#5337): close Phase 1 gaps — install state, compaction/config ev…
claude Oct 12, 2026
8d39d6b
feat(#5338): OpenCode 2.x installer output, migration 011, JSONC-safe…
claude Oct 12, 2026
a46d0a9
chore(#5338): changeset fragments
claude Oct 12, 2026
5a6b917
docs(#5338): link the shadow-note issue from the ADR amendment
claude Oct 12, 2026
43045e8
test(#5338): keep a docs URL out of the command-foreground test comment
claude Oct 12, 2026
1ff8362
test: add migration 011 checksum to the installer-migration baseline
claude Oct 12, 2026
3e61f13
feat(#5339): OpenCode Phase 3 — verification matrix, parity hooks, st…
claude Oct 13, 2026
a59a6fb
chore(#5339): changeset fragments
claude Oct 13, 2026
8611481
test(#5339): assemble the injection phrase at run time so the prompt-…
claude Oct 13, 2026
a5bf996
test(#5339): the empty-plugin-dir uninstall test also strips the stag…
claude Oct 13, 2026
eba49e3
chore(#4036): CI timeout budget history update (#5347)
trek-e Oct 13, 2026
f11d667
fix(#5344): stop reporting a same-scope commands + skills pair as a s…
trek-e Oct 13, 2026
91e9519
fix(#5228): smart-entry prints the phase's position in the milestone,…
trek-e Oct 13, 2026
e612933
fix(#5227): one ADR entry per top-level list item, ordered markers st…
trek-e Oct 13, 2026
618eef8
test(#5214): deny a Bash spawn of gsd-debugger and pin the manager's …
claude Oct 13, 2026
97dc549
fix(#5214): deny a Bash spawn of gsd-debugger so the managed debug lo…
claude Oct 13, 2026
798f333
chore(#5214): changeset fragment
claude Oct 13, 2026
0eab5a4
Merge pull request #5352 from open-gsd/fix/5214-debug-manager-bash-spawn
trek-e Oct 13, 2026
19b1692
fix(#4790): let a capability deliver review rules to the built-in cod…
trek-e Oct 13, 2026
2f8c720
fix(#4805): resume-project discovers .continue-here files without the…
trek-e Oct 13, 2026
d11853b
test(#4817): a legacy report that never declared a plan/summary names…
claude Oct 13, 2026
eea5ab4
fix(#4817): the stale diagnostic names a phase artifact the report ne…
claude Oct 13, 2026
a7bc2b4
refactor(#4817): drop the now-unused boolean wrapper around the uncov…
claude Oct 13, 2026
2cea0e4
chore(#4817): changeset fragment
claude Oct 13, 2026
bdc9554
test(#4824): phase.complete status follows the next phase's disk state
claude Oct 13, 2026
fde7d4e
fix(#4824): phase.complete writes Status/Current Plan/Stopped at from…
claude Oct 13, 2026
dc89889
chore(#4824): changeset fragment
claude Oct 13, 2026
1ff4c86
test(#4857): the stale diagnostic names the covered files that moved
claude Oct 14, 2026
cf44495
fix(#4857): verification status names the covered files that moved
claude Oct 14, 2026
338c333
chore(#4857): changeset fragment
claude Oct 14, 2026
6a15bf0
test(#4860): the plugin manifest registers each workflow once
claude Oct 14, 2026
7a704fe
fix(#4860): the Claude plugin registers each workflow once, through s…
claude Oct 14, 2026
64d39de
chore(#4860): changeset fragment
claude Oct 14, 2026
9c4d04f
test(#4860): name the plugin-details timeout
claude Oct 14, 2026
14c6515
fix(#4854): init verbs emit the ROADMAP display name, not the directo…
trek-e Oct 14, 2026
08cde7a
docs(#5326): record lowering engines.node below 24 as out-of-scope (#…
trek-e Oct 14, 2026
03d6963
chore: bump version to 1.17.0 for release
github-actions[bot] Oct 14, 2026
59d5840
fix(#4985): statusline meter reads 100% where Claude Code auto-compac…
0xdhx Oct 14, 2026
ef48795
chore(deps): bump @modelcontextprotocol/sdk (#5377)
dependabot[bot] Oct 14, 2026
fdf66c2
chore(#4036): CI timeout budget history update (#5379)
trek-e Oct 14, 2026
e288f4a
fix(#4859): runtime-generated guidance names the registered command f…
trek-e Oct 14, 2026
433a434
fix(deps): bump proxy-addr to 2.0.8 to clear GHSA-jqcg-44mw-7w3h (#5386)
trek-e Oct 14, 2026
671aa6f
fix(#4840): register the context monitor only on hosts that install a…
trek-e Oct 14, 2026
51f0c04
fix(#4838): the Codex Windows hook shim resolves node when the hook f…
trek-e Oct 14, 2026
bdd20c2
ci(#5402): pin AUDIT_BASELINE_REF in release rc/finalize test shards …
trek-e Oct 14, 2026
d65957b
fix(deps): bump proxy-addr to 2.0.8 to clear GHSA-jqcg-44mw-7w3h (#5386)
trek-e Oct 14, 2026
6776fdb
Merge origin/next into release/1.17.0
claude Oct 14, 2026
962c119
chore: promote CHANGELOG for v1.17.0
github-actions[bot] Oct 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
{
"name": "gsd-core",
"description": "GSD Core is a meta-prompting, context engineering, and spec-driven development system for AI coding agents.",
"version": "1.16.0",
"version": "1.17.0",
"source": "./",
"author": {
"name": "open-gsd",
Expand Down
3 changes: 1 addition & 2 deletions .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "gsd-core",
"displayName": "GSD Core",
"version": "1.16.0",
"version": "1.17.0",
"description": "GSD Core is a meta-prompting, context engineering, and spec-driven development system for AI coding agents.",
"author": {
"name": "open-gsd",
Expand All @@ -18,6 +18,5 @@
"claude-code",
"gsd"
],
"commands": "./commands/gsd/",
"skills": "./skills/"
}
12 changes: 12 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -415,6 +415,12 @@ jobs:
- name: Run unit tests (shard ${{ matrix.shard }}, raw coverage only)
env:
NODE_OPTIONS: --max-old-space-size=6144
# Pin the #3588/#4196 npm-audit gate's baseline to the commit this
# run was dispatched from. Unset, resolveBaselineRef() falls back to
# the LIVE origin/next tip, which can move mid-run (run 38549271057:
# an advisory fixed on next after the run began was reported as
# "newly introduced" by this branch). Same pinning test.yml does.
AUDIT_BASELINE_REF: ${{ github.sha }}
run: |
npm ci
node scripts/check-npm-integrity.cjs
Expand Down Expand Up @@ -694,6 +700,12 @@ jobs:
- name: Run unit tests (shard ${{ matrix.shard }}, raw coverage only)
env:
NODE_OPTIONS: --max-old-space-size=6144
# Pin the #3588/#4196 npm-audit gate's baseline to the commit this
# run was dispatched from. Unset, resolveBaselineRef() falls back to
# the LIVE origin/next tip, which can move mid-run (run 38549271057:
# an advisory fixed on next after the run began was reported as
# "newly introduced" by this branch). Same pinning test.yml does.
AUDIT_BASELINE_REF: ${{ github.sha }}
run: |
npm ci
node scripts/check-npm-integrity.cjs
Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,8 @@ build/
/gsd-core/bin/lib/review-reviewer-selection.cjs
/gsd-core/bin/lib/review-lane-descriptor.cjs
/gsd-core/bin/lib/review-lane-invocation.cjs
/gsd-core/bin/lib/opencode-version.cjs
/gsd-core/bin/lib/jsonc-edit.cjs
/gsd-core/bin/lib/review-lane-runner.cjs
/gsd-core/bin/lib/reviewer-step-dispatch.cjs
/gsd-core/bin/lib/clusters.cjs
Expand Down Expand Up @@ -199,6 +201,8 @@ build/
/gsd-core/bin/lib/installer-migrations/007-retire-config-root-commonjs-marker.cjs
/gsd-core/bin/lib/installer-migrations/009-pi-retire-reserved-hooks-dir.cjs
/gsd-core/bin/lib/installer-migrations/010-antigravity-retire-confighome-artifacts.cjs
/gsd-core/bin/lib/installer-migrations/011-opencode-mcp-no-prompts.cjs
/gsd-core/bin/lib/opencode-mcp-entry.cjs
/gsd-core/bin/lib/observability/logger.cjs
/gsd-core/bin/lib/active-workstream-store.cjs
/gsd-core/bin/lib/adr-parser.cjs
Expand Down
23 changes: 22 additions & 1 deletion .kilo/plugins/gsd-core.js
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,18 @@ function gitProbingGuardTimeoutMs() {
return GIT_PROBING_GUARD_FALLBACK_TIMEOUT_MS;
}

// Hooks are Node scripts. `process.execPath` is only a JS runtime when the host is Node or Bun
// itself; inside OpenCode's single-file binary (1.x and 2.x) spawning it with a .js path boots
// OpenCode instead and exits 0, silently disabling every guard (#4849). So: an explicit
// GSD_HOOK_RUNTIME wins, then a Node/Bun host's own executable, else `node` from PATH.
let warnedMissingRuntime = false;
function hookRuntime() {
const fromEnv = process.env.GSD_HOOK_RUNTIME;
if (typeof fromEnv === "string" && fromEnv.length > 0) return fromEnv;
const base = path.basename(process.execPath).toLowerCase().replace(/\.exe$/, "");
return base === "node" || base === "bun" ? process.execPath : "node";
}

function runHook(hookFile, payload, opts = {}) {
const hookPath = path.join(HOOKS_DIR, hookFile);
if (!fs.existsSync(hookPath)) {
Expand All @@ -261,7 +273,7 @@ function runHook(hookFile, payload, opts = {}) {
(GIT_PROBING_GUARDS.has(hookFile) ? gitProbingGuardTimeoutMs() : 8000);
let result;
try {
result = spawnSync(process.execPath, [hookPath], {
result = spawnSync(hookRuntime(), [hookPath], {
input: JSON.stringify(payload),
encoding: "utf8",
timeout,
Expand All @@ -273,6 +285,15 @@ function runHook(hookFile, payload, opts = {}) {
return { stdout: "", exitCode: 0, timedOut: false };
}

if (result.error && !warnedMissingRuntime) {
// The runtime could not be started: the guard did not run. Fail open (adapter contract) but
// never silently (#4849).
warnedMissingRuntime = true;
console.error(
`[gsd-core] cannot start hook runtime '${hookRuntime()}' (${result.error.code || result.error.message}) — ` +
"GSD hooks are NOT enforced. Install Node.js or set GSD_HOOK_RUNTIME to a node/bun executable.",
);
}
const stdout = (result.stdout || "").trim();
const exitCode = result.status == null ? 0 : result.status;
return { stdout, exitCode, timedOut: result.signal === "SIGTERM" };
Expand Down
Loading
Loading