@opengsd/gsd-core 1.6.0 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "gsd-core",
3
3
  "displayName": "GSD Core",
4
- "version": "1.6.0",
4
+ "version": "1.6.1",
5
5
  "description": "GSD Core is a meta-prompting, context engineering, and spec-driven development system for AI coding agents.",
6
6
  "author": {
7
7
  "name": "open-gsd",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gsd-core",
3
- "version": "1.6.0",
3
+ "version": "1.6.1",
4
4
  "description": "GSD Core — a meta-prompting, context engineering, and spec-driven development system for AI coding agents. Loads gsd's operating context into every Gemini CLI session.",
5
5
  "contextFileName": "GEMINI.md"
6
6
  }
@@ -10,7 +10,7 @@ const capabilities = {
10
10
  "ai-integration": {
11
11
  "id": "ai-integration",
12
12
  "role": "feature",
13
- "version": "1.6.0",
13
+ "version": "1.6.1",
14
14
  "title": "AI design contract",
15
15
  "description": "AI-SPEC design contract workflow for phases that build AI systems; owns the AI integration command, agents, and workflow.ai_integration_phase activation key.",
16
16
  "tier": "full",
@@ -63,7 +63,7 @@ const capabilities = {
63
63
  "antigravity": {
64
64
  "id": "antigravity",
65
65
  "role": "runtime",
66
- "version": "1.6.0",
66
+ "version": "1.6.1",
67
67
  "title": "Antigravity",
68
68
  "description": "Google Antigravity IDE — nested under ~/.gemini/antigravity; probed across 1.x and 2.x layouts; Gemini hook event dialect; flat skill layout; tier-1 support.",
69
69
  "tier": "core",
@@ -123,7 +123,7 @@ const capabilities = {
123
123
  "audit": {
124
124
  "id": "audit",
125
125
  "role": "feature",
126
- "version": "1.6.0",
126
+ "version": "1.6.1",
127
127
  "title": "Audit",
128
128
  "description": "Open-artifact audit and UAT-gap audit for milestone close gates; exposes `gsd-tools audit-uat` (cross-phase UAT outstanding items) and `gsd-tools audit-open` (structured open-artifact scan across debug, tasks, threads, todos, seeds, UAT, verification, context-questions).",
129
129
  "tier": "full",
@@ -160,7 +160,7 @@ const capabilities = {
160
160
  "augment": {
161
161
  "id": "augment",
162
162
  "role": "runtime",
163
- "version": "1.6.0",
163
+ "version": "1.6.1",
164
164
  "title": "Augment Code",
165
165
  "description": "Augment Code CLI — commands + nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
166
166
  "tier": "core",
@@ -229,7 +229,7 @@ const capabilities = {
229
229
  "claude": {
230
230
  "id": "claude",
231
231
  "role": "runtime",
232
- "version": "1.6.0",
232
+ "version": "1.6.1",
233
233
  "title": "Claude Code",
234
234
  "description": "Anthropic Claude Code — primary development runtime; tier-1 support with full hook surface and skills-based global install.",
235
235
  "tier": "core",
@@ -295,7 +295,7 @@ const capabilities = {
295
295
  "cline": {
296
296
  "id": "cline",
297
297
  "role": "runtime",
298
- "version": "1.6.0",
298
+ "version": "1.6.1",
299
299
  "title": "Cline",
300
300
  "description": "Cline (VS Code extension) — global-only nested-skill layout; cline-rules hook surface (.clinerules); no hook events emitted; tier-2 support.",
301
301
  "tier": "core",
@@ -338,7 +338,7 @@ const capabilities = {
338
338
  "code-review": {
339
339
  "id": "code-review",
340
340
  "role": "feature",
341
- "version": "1.6.0",
341
+ "version": "1.6.1",
342
342
  "title": "Code review",
343
343
  "description": "Source-file code review and review-fix workflow support for completed execution work.",
344
344
  "tier": "full",
@@ -399,7 +399,7 @@ const capabilities = {
399
399
  "codebuddy": {
400
400
  "id": "codebuddy",
401
401
  "role": "runtime",
402
- "version": "1.6.0",
402
+ "version": "1.6.1",
403
403
  "title": "CodeBuddy",
404
404
  "description": "CodeBuddy (Tencent) — converted commands + skills artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
405
405
  "tier": "core",
@@ -468,7 +468,7 @@ const capabilities = {
468
468
  "codex": {
469
469
  "id": "codex",
470
470
  "role": "runtime",
471
- "version": "1.6.0",
471
+ "version": "1.6.1",
472
472
  "title": "OpenAI Codex CLI",
473
473
  "description": "OpenAI Codex CLI — shell-var command style; per-agent sandbox tiers; config.toml + hooks.json hook surface; tier-1 support.",
474
474
  "tier": "core",
@@ -521,7 +521,7 @@ const capabilities = {
521
521
  "copilot": {
522
522
  "id": "copilot",
523
523
  "role": "runtime",
524
- "version": "1.6.0",
524
+ "version": "1.6.1",
525
525
  "title": "GitHub Copilot",
526
526
  "description": "GitHub Copilot (VS Code) — markdown config format; copilot-inline hook surface; no hook events emitted; flat skill nesting (unconfirmed recursive loader); tier-2 support.",
527
527
  "tier": "core",
@@ -574,7 +574,7 @@ const capabilities = {
574
574
  "cursor": {
575
575
  "id": "cursor",
576
576
  "role": "runtime",
577
- "version": "1.6.0",
577
+ "version": "1.6.1",
578
578
  "title": "Cursor",
579
579
  "description": "Cursor IDE — skills + converted commands artifact layout; hooks.json surface; Claude hook event dialect; recursive skill loader (flat nesting); tier-2 support.",
580
580
  "tier": "core",
@@ -643,7 +643,7 @@ const capabilities = {
643
643
  "drift": {
644
644
  "id": "drift",
645
645
  "role": "feature",
646
- "version": "1.6.0",
646
+ "version": "1.6.1",
647
647
  "title": "Drift detection gates",
648
648
  "description": "Drift detection gates for the planning loop. At execute:wave:post: a blocking schema drift gate (detects schema files changed without a database push) and a non-blocking codebase drift gate (detects structural additions not reflected in STRUCTURE.md). At plan:pre: a non-blocking, warn-only codebase drift gate (gated on workflow.plan_drift_precheck) that flags a stale codebase map before planning, so plans are authored against a fresh STRUCTURE.md instead of discovering drift mid-execution.",
649
649
  "tier": "full",
@@ -721,7 +721,7 @@ const capabilities = {
721
721
  "gap-analysis": {
722
722
  "id": "gap-analysis",
723
723
  "role": "feature",
724
- "version": "1.6.0",
724
+ "version": "1.6.1",
725
725
  "title": "Post-planning gap analysis",
726
726
  "description": "Proactive, non-blocking post-planning coverage report. After all PLAN.md files are generated, cross-references every REQ-ID and D-ID from REQUIREMENTS.md and CONTEXT.md against plan bodies. Emits a Source | Item | Status table. Does not block phase advancement.",
727
727
  "tier": "standard",
@@ -762,7 +762,7 @@ const capabilities = {
762
762
  "gemini": {
763
763
  "id": "gemini",
764
764
  "role": "runtime",
765
- "version": "1.6.0",
765
+ "version": "1.6.1",
766
766
  "title": "Gemini CLI",
767
767
  "description": "Google Gemini CLI — commands-only artifact layout (TOML); Gemini hook event dialect; settings-json hook surface; tier-2 support.",
768
768
  "tier": "core",
@@ -819,7 +819,7 @@ const capabilities = {
819
819
  "graphify": {
820
820
  "id": "graphify",
821
821
  "role": "feature",
822
- "version": "1.6.0",
822
+ "version": "1.6.1",
823
823
  "title": "Knowledge graph",
824
824
  "description": "Build, query, and inspect the project knowledge graph in `.planning/graphs/`; exposes graphify CLI subcommands (build, query, status, diff) and the /gsd-graphify skill.",
825
825
  "tier": "full",
@@ -860,7 +860,7 @@ const capabilities = {
860
860
  "hermes": {
861
861
  "id": "hermes",
862
862
  "role": "runtime",
863
- "version": "1.6.0",
863
+ "version": "1.6.1",
864
864
  "title": "Hermes Agent",
865
865
  "description": "Hermes Agent (NousResearch) — skills nest under skills/gsd/ category bucket; nested skill layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
866
866
  "tier": "core",
@@ -913,7 +913,7 @@ const capabilities = {
913
913
  "intel": {
914
914
  "id": "intel",
915
915
  "role": "feature",
916
- "version": "1.6.0",
916
+ "version": "1.6.1",
917
917
  "title": "Codebase intelligence",
918
918
  "description": "Code-intelligence store for codebase querying, diff, snapshot, and API-surface extraction; exposes `gsd-tools intel` subcommands (query, status, update, diff, snapshot, patch-meta, validate, extract-exports, api-surface) and backs `/gsd-map-codebase` and `gsd-intel-updater`.",
919
919
  "tier": "full",
@@ -965,7 +965,7 @@ const capabilities = {
965
965
  "kilo": {
966
966
  "id": "kilo",
967
967
  "role": "runtime",
968
- "version": "1.6.0",
968
+ "version": "1.6.1",
969
969
  "title": "Kilo Code",
970
970
  "description": "Kilo Code — XDG-based config dir; global skills at ~/.kilo/skills (separate from XDG config); flat command/ + skills artifact layout; no lifecycle hook registration; tier-2 support.",
971
971
  "tier": "core",
@@ -1040,7 +1040,7 @@ const capabilities = {
1040
1040
  "kimi": {
1041
1041
  "id": "kimi",
1042
1042
  "role": "runtime",
1043
- "version": "1.6.0",
1043
+ "version": "1.6.1",
1044
1044
  "title": "Kimi CLI",
1045
1045
  "description": "Kimi CLI (Moonshot AI) — generic agents root at ~/.config/agents; skills + kimi-agents artifact layout; no hook surface; no hook events; tier-2 support.",
1046
1046
  "tier": "core",
@@ -1096,7 +1096,7 @@ const capabilities = {
1096
1096
  "mempalace": {
1097
1097
  "id": "mempalace",
1098
1098
  "role": "feature",
1099
- "version": "1.6.0",
1099
+ "version": "1.6.1",
1100
1100
  "title": "MemPalace memory",
1101
1101
  "description": "Cross-session, cross-project memory: deliberate recall before discuss/plan and verbatim capture + temporal-KG sync at phase boundaries, via the MemPalace MCP server and CLI.",
1102
1102
  "tier": "full",
@@ -1270,7 +1270,7 @@ const capabilities = {
1270
1270
  "nyquist": {
1271
1271
  "id": "nyquist",
1272
1272
  "role": "feature",
1273
- "version": "1.6.0",
1273
+ "version": "1.6.1",
1274
1274
  "title": "Nyquist validation",
1275
1275
  "description": "Validation coverage audit that maps executed work back to tests and manual-only evidence.",
1276
1276
  "tier": "full",
@@ -1320,7 +1320,7 @@ const capabilities = {
1320
1320
  "opencode": {
1321
1321
  "id": "opencode",
1322
1322
  "role": "runtime",
1323
- "version": "1.6.0",
1323
+ "version": "1.6.1",
1324
1324
  "title": "OpenCode",
1325
1325
  "description": "OpenCode — XDG-based config dir; flat command/ + skills artifact layout; settings-json config format; no lifecycle hook registration; tier-2 support.",
1326
1326
  "tier": "core",
@@ -1390,7 +1390,7 @@ const capabilities = {
1390
1390
  "pattern-mapper": {
1391
1391
  "id": "pattern-mapper",
1392
1392
  "role": "feature",
1393
- "version": "1.6.0",
1393
+ "version": "1.6.1",
1394
1394
  "title": "Pattern mapping",
1395
1395
  "description": "Optional codebase-pattern mapping before planning; owns the pattern mapper agent and workflow.pattern_mapper activation key.",
1396
1396
  "tier": "full",
@@ -1444,7 +1444,7 @@ const capabilities = {
1444
1444
  "profile-pipeline": {
1445
1445
  "id": "profile-pipeline",
1446
1446
  "role": "feature",
1447
- "version": "1.6.0",
1447
+ "version": "1.6.1",
1448
1448
  "title": "Developer profiling pipeline",
1449
1449
  "description": "Developer behavioral profiling from Claude Code session history; scans session JSONL files, extracts and samples user messages, and generates profile artifacts (USER-PROFILE.md, dev-preferences.md, CLAUDE.md sections). Exposes eight `gsd-tools` commands: scan-sessions, extract-messages, profile-sample (pipeline phase) and write-profile, profile-questionnaire, generate-dev-preferences, generate-claude-profile, generate-claude-md (output phase). Backs the /gsd-profile-user skill and gsd-user-profiler agent.",
1450
1450
  "tier": "full",
@@ -1521,7 +1521,7 @@ const capabilities = {
1521
1521
  "qwen": {
1522
1522
  "id": "qwen",
1523
1523
  "role": "runtime",
1524
- "version": "1.6.0",
1524
+ "version": "1.6.1",
1525
1525
  "title": "Qwen Code",
1526
1526
  "description": "Qwen Code (Alibaba) — nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
1527
1527
  "tier": "core",
@@ -1578,7 +1578,7 @@ const capabilities = {
1578
1578
  "research": {
1579
1579
  "id": "research",
1580
1580
  "role": "feature",
1581
- "version": "1.6.0",
1581
+ "version": "1.6.1",
1582
1582
  "title": "Phase research",
1583
1583
  "description": "Optional phase research before planning; owns the phase researcher agent and workflow.research activation key.",
1584
1584
  "tier": "standard",
@@ -1630,7 +1630,7 @@ const capabilities = {
1630
1630
  "schema-gate": {
1631
1631
  "id": "schema-gate",
1632
1632
  "role": "feature",
1633
- "version": "1.6.0",
1633
+ "version": "1.6.1",
1634
1634
  "title": "Schema push detection gate",
1635
1635
  "description": "Detects ORM schema-relevant files in the phase scope during planning and injects a mandatory [BLOCKING] schema push task into the plan. Prevents false-positive verification where build/types pass because TypeScript types come from config, not the live database.",
1636
1636
  "tier": "full",
@@ -1676,7 +1676,7 @@ const capabilities = {
1676
1676
  "security": {
1677
1677
  "id": "security",
1678
1678
  "role": "feature",
1679
- "version": "1.6.0",
1679
+ "version": "1.6.1",
1680
1680
  "title": "Security enforcement",
1681
1681
  "description": "Threat mitigation verification and ship-time security blocking for phases with security enforcement enabled.",
1682
1682
  "tier": "full",
@@ -1775,7 +1775,7 @@ const capabilities = {
1775
1775
  "tdd": {
1776
1776
  "id": "tdd",
1777
1777
  "role": "feature",
1778
- "version": "1.6.0",
1778
+ "version": "1.6.1",
1779
1779
  "title": "Test-driven development",
1780
1780
  "description": "Injects TDD heuristics into the planner and enforces RED/GREEN gate compliance on type:tdd plans after execution. Owns workflow.tdd_mode; the --tdd CLI flag is the ephemeral override.",
1781
1781
  "tier": "full",
@@ -1828,7 +1828,7 @@ const capabilities = {
1828
1828
  "trae": {
1829
1829
  "id": "trae",
1830
1830
  "role": "runtime",
1831
- "version": "1.6.0",
1831
+ "version": "1.6.1",
1832
1832
  "title": "Trae IDE",
1833
1833
  "description": "Trae IDE — nested-skill artifact layout; no hook surface (profile-marker-only config); tier-2 support.",
1834
1834
  "tier": "core",
@@ -1880,7 +1880,7 @@ const capabilities = {
1880
1880
  "ui": {
1881
1881
  "id": "ui",
1882
1882
  "role": "feature",
1883
- "version": "1.6.0",
1883
+ "version": "1.6.1",
1884
1884
  "title": "UI design contracts",
1885
1885
  "description": "UI-SPEC design contract + retrospective UI audit for frontend phases.",
1886
1886
  "tier": "full",
@@ -1975,7 +1975,7 @@ const capabilities = {
1975
1975
  "windsurf": {
1976
1976
  "id": "windsurf",
1977
1977
  "role": "runtime",
1978
- "version": "1.6.0",
1978
+ "version": "1.6.1",
1979
1979
  "title": "Windsurf",
1980
1980
  "description": "Windsurf (Codeium) — workspace workflow artifact layout for slash commands; no hook surface; no hook events; tier-2 support.",
1981
1981
  "tier": "core",
@@ -2743,7 +2743,7 @@ const runtimes = {
2743
2743
  "antigravity": {
2744
2744
  "id": "antigravity",
2745
2745
  "role": "runtime",
2746
- "version": "1.6.0",
2746
+ "version": "1.6.1",
2747
2747
  "title": "Antigravity",
2748
2748
  "description": "Google Antigravity IDE — nested under ~/.gemini/antigravity; probed across 1.x and 2.x layouts; Gemini hook event dialect; flat skill layout; tier-1 support.",
2749
2749
  "tier": "core",
@@ -2803,7 +2803,7 @@ const runtimes = {
2803
2803
  "augment": {
2804
2804
  "id": "augment",
2805
2805
  "role": "runtime",
2806
- "version": "1.6.0",
2806
+ "version": "1.6.1",
2807
2807
  "title": "Augment Code",
2808
2808
  "description": "Augment Code CLI — commands + nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
2809
2809
  "tier": "core",
@@ -2872,7 +2872,7 @@ const runtimes = {
2872
2872
  "claude": {
2873
2873
  "id": "claude",
2874
2874
  "role": "runtime",
2875
- "version": "1.6.0",
2875
+ "version": "1.6.1",
2876
2876
  "title": "Claude Code",
2877
2877
  "description": "Anthropic Claude Code — primary development runtime; tier-1 support with full hook surface and skills-based global install.",
2878
2878
  "tier": "core",
@@ -2938,7 +2938,7 @@ const runtimes = {
2938
2938
  "cline": {
2939
2939
  "id": "cline",
2940
2940
  "role": "runtime",
2941
- "version": "1.6.0",
2941
+ "version": "1.6.1",
2942
2942
  "title": "Cline",
2943
2943
  "description": "Cline (VS Code extension) — global-only nested-skill layout; cline-rules hook surface (.clinerules); no hook events emitted; tier-2 support.",
2944
2944
  "tier": "core",
@@ -2981,7 +2981,7 @@ const runtimes = {
2981
2981
  "codebuddy": {
2982
2982
  "id": "codebuddy",
2983
2983
  "role": "runtime",
2984
- "version": "1.6.0",
2984
+ "version": "1.6.1",
2985
2985
  "title": "CodeBuddy",
2986
2986
  "description": "CodeBuddy (Tencent) — converted commands + skills artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
2987
2987
  "tier": "core",
@@ -3050,7 +3050,7 @@ const runtimes = {
3050
3050
  "codex": {
3051
3051
  "id": "codex",
3052
3052
  "role": "runtime",
3053
- "version": "1.6.0",
3053
+ "version": "1.6.1",
3054
3054
  "title": "OpenAI Codex CLI",
3055
3055
  "description": "OpenAI Codex CLI — shell-var command style; per-agent sandbox tiers; config.toml + hooks.json hook surface; tier-1 support.",
3056
3056
  "tier": "core",
@@ -3103,7 +3103,7 @@ const runtimes = {
3103
3103
  "copilot": {
3104
3104
  "id": "copilot",
3105
3105
  "role": "runtime",
3106
- "version": "1.6.0",
3106
+ "version": "1.6.1",
3107
3107
  "title": "GitHub Copilot",
3108
3108
  "description": "GitHub Copilot (VS Code) — markdown config format; copilot-inline hook surface; no hook events emitted; flat skill nesting (unconfirmed recursive loader); tier-2 support.",
3109
3109
  "tier": "core",
@@ -3156,7 +3156,7 @@ const runtimes = {
3156
3156
  "cursor": {
3157
3157
  "id": "cursor",
3158
3158
  "role": "runtime",
3159
- "version": "1.6.0",
3159
+ "version": "1.6.1",
3160
3160
  "title": "Cursor",
3161
3161
  "description": "Cursor IDE — skills + converted commands artifact layout; hooks.json surface; Claude hook event dialect; recursive skill loader (flat nesting); tier-2 support.",
3162
3162
  "tier": "core",
@@ -3225,7 +3225,7 @@ const runtimes = {
3225
3225
  "gemini": {
3226
3226
  "id": "gemini",
3227
3227
  "role": "runtime",
3228
- "version": "1.6.0",
3228
+ "version": "1.6.1",
3229
3229
  "title": "Gemini CLI",
3230
3230
  "description": "Google Gemini CLI — commands-only artifact layout (TOML); Gemini hook event dialect; settings-json hook surface; tier-2 support.",
3231
3231
  "tier": "core",
@@ -3282,7 +3282,7 @@ const runtimes = {
3282
3282
  "hermes": {
3283
3283
  "id": "hermes",
3284
3284
  "role": "runtime",
3285
- "version": "1.6.0",
3285
+ "version": "1.6.1",
3286
3286
  "title": "Hermes Agent",
3287
3287
  "description": "Hermes Agent (NousResearch) — skills nest under skills/gsd/ category bucket; nested skill layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
3288
3288
  "tier": "core",
@@ -3335,7 +3335,7 @@ const runtimes = {
3335
3335
  "kilo": {
3336
3336
  "id": "kilo",
3337
3337
  "role": "runtime",
3338
- "version": "1.6.0",
3338
+ "version": "1.6.1",
3339
3339
  "title": "Kilo Code",
3340
3340
  "description": "Kilo Code — XDG-based config dir; global skills at ~/.kilo/skills (separate from XDG config); flat command/ + skills artifact layout; no lifecycle hook registration; tier-2 support.",
3341
3341
  "tier": "core",
@@ -3410,7 +3410,7 @@ const runtimes = {
3410
3410
  "kimi": {
3411
3411
  "id": "kimi",
3412
3412
  "role": "runtime",
3413
- "version": "1.6.0",
3413
+ "version": "1.6.1",
3414
3414
  "title": "Kimi CLI",
3415
3415
  "description": "Kimi CLI (Moonshot AI) — generic agents root at ~/.config/agents; skills + kimi-agents artifact layout; no hook surface; no hook events; tier-2 support.",
3416
3416
  "tier": "core",
@@ -3466,7 +3466,7 @@ const runtimes = {
3466
3466
  "opencode": {
3467
3467
  "id": "opencode",
3468
3468
  "role": "runtime",
3469
- "version": "1.6.0",
3469
+ "version": "1.6.1",
3470
3470
  "title": "OpenCode",
3471
3471
  "description": "OpenCode — XDG-based config dir; flat command/ + skills artifact layout; settings-json config format; no lifecycle hook registration; tier-2 support.",
3472
3472
  "tier": "core",
@@ -3536,7 +3536,7 @@ const runtimes = {
3536
3536
  "qwen": {
3537
3537
  "id": "qwen",
3538
3538
  "role": "runtime",
3539
- "version": "1.6.0",
3539
+ "version": "1.6.1",
3540
3540
  "title": "Qwen Code",
3541
3541
  "description": "Qwen Code (Alibaba) — nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
3542
3542
  "tier": "core",
@@ -3593,7 +3593,7 @@ const runtimes = {
3593
3593
  "trae": {
3594
3594
  "id": "trae",
3595
3595
  "role": "runtime",
3596
- "version": "1.6.0",
3596
+ "version": "1.6.1",
3597
3597
  "title": "Trae IDE",
3598
3598
  "description": "Trae IDE — nested-skill artifact layout; no hook surface (profile-marker-only config); tier-2 support.",
3599
3599
  "tier": "core",
@@ -3645,7 +3645,7 @@ const runtimes = {
3645
3645
  "windsurf": {
3646
3646
  "id": "windsurf",
3647
3647
  "role": "runtime",
3648
- "version": "1.6.0",
3648
+ "version": "1.6.1",
3649
3649
  "title": "Windsurf",
3650
3650
  "description": "Windsurf (Codeium) — workspace workflow artifact layout for slash commands; no hook surface; no hook events; tier-2 support.",
3651
3651
  "tier": "core",
@@ -165,6 +165,14 @@ function cmdMilestoneComplete(cwd, version, options, raw) {
165
165
  })();
166
166
  while ((pm = phasePattern.exec(scopedContent)) !== null) {
167
167
  const phaseNum = pm[1];
168
+ // Phase 0 (pre-milestone) and Phase 999 (backlog) are sentinels, not
169
+ // real phases — they legitimately have no directory and must not block
170
+ // milestone completion. Mirrors the engine-wide sentinel convention
171
+ // (phase-id getMilestoneFromPhaseId, roadmap-command-router SENTINELS,
172
+ // the #1445 /^999/ progress filters). (#1580)
173
+ const major = parseInt(phaseNum, 10);
174
+ if (major === 0 || major === 999)
175
+ continue;
168
176
  const normalized = normalizePhaseName(phaseNum);
169
177
  // A phase has disk_status: 'no_directory' when no phase directory
170
178
  // with a matching token exists on disk. Use the same phaseTokenMatches
@@ -1287,7 +1287,19 @@ function cmdPhaseComplete(cwd, phaseNum, raw) {
1287
1287
  if (isLastPhase && roadmapContent !== null) {
1288
1288
  try {
1289
1289
  const roadmapForPhases = extractCurrentMilestone(roadmapContent, cwd);
1290
- const phasePattern = /#{2,4}\s*Phase\s+(\d+[A-Z]?(?:\.\d+)*)\s*:\s*([^\n]+)/gi;
1290
+ // #1591: match BOTH heading-style phases (`### Phase N:`) AND
1291
+ // checkbox-list items, INCLUDING the canonical bold form the roadmap
1292
+ // template emits (`- [ ] **Phase N: Name**`). When the active
1293
+ // milestone's checklist is `- [ ]` items inside a <details> block
1294
+ // (and the next phase has no directory yet, so the disk-based
1295
+ // resolver finds nothing), this roadmap-enumeration fallback is the
1296
+ // only path that can find the next phase. The prior heading-only
1297
+ // pattern missed checkbox items, and a checkbox-only broadening still
1298
+ // missed the bold template rows → is_last_phase=true on a mid-milestone
1299
+ // phase. Allow optional `**`/`__` emphasis after the marker and stop
1300
+ // the name capture at emphasis so bold names slug cleanly; the number
1301
+ // capture is unchanged.
1302
+ const phasePattern = /(?:#{2,4}|-\s*\[[ xX]\])\s*(?:\*\*|__)?\s*Phase\s+(\d+[A-Z]?(?:\.\d+)*)\s*:\s*([^\n*]+)/gi;
1291
1303
  let pm;
1292
1304
  while ((pm = phasePattern.exec(roadmapForPhases)) !== null) {
1293
1305
  if (comparePhaseNum(pm[1], phaseNum) > 0) {
@@ -249,6 +249,15 @@ function cmdRoadmapAnalyze(cwd, raw) {
249
249
  const phasePattern = /#{2,4}\s*(?:\[[^\]]+\]\s*)?Phase\s+(\d+[A-Z]?(?:[.-]\d+)*)\s*:\s*([^\n]+)/gi;
250
250
  const phases = [];
251
251
  let match;
252
+ // Phase 0 (pre-milestone) and Phase 999 (backlog) are sentinels, not real
253
+ // phases. They legitimately have no directory and must never be surfaced as
254
+ // current/next phase or counted in phase_count. Mirrors the engine-wide
255
+ // sentinel convention (phase-id getMilestoneFromPhaseId, roadmap-command-router
256
+ // SENTINELS, the #1445 /^999/ progress filters). (#1580)
257
+ const isSentinelPhase = (num) => {
258
+ const major = parseInt(num, 10);
259
+ return major === 0 || major === 999;
260
+ };
252
261
  // Build phase directory lookup once (O(1) readdir instead of O(N) per phase)
253
262
  const _phaseDirNames = (() => {
254
263
  try {
@@ -262,6 +271,8 @@ function cmdRoadmapAnalyze(cwd, raw) {
262
271
  })();
263
272
  while ((match = phasePattern.exec(content)) !== null) {
264
273
  const phaseNum = match[1];
274
+ if (isSentinelPhase(phaseNum))
275
+ continue;
265
276
  const phaseName = match[2].replace(/\(INSERTED\)/i, '').trim();
266
277
  // Extract goal from the section
267
278
  const sectionStart = match.index;
@@ -362,7 +373,7 @@ function cmdRoadmapAnalyze(cwd, raw) {
362
373
  checklistPhases.add(checklistMatch[1]);
363
374
  }
364
375
  const detailPhases = new Set(phases.map(p => p.number));
365
- const missingDetails = [...checklistPhases].filter(p => !detailPhases.has(p));
376
+ const missingDetails = [...checklistPhases].filter(p => !detailPhases.has(p) && !isSentinelPhase(p));
366
377
  const result = {
367
378
  milestones,
368
379
  phases,
@@ -259,6 +259,14 @@ function isManagedHookCommand(commandText, opts = {}) {
259
259
  }
260
260
  return false;
261
261
  }
262
+ /**
263
+ * Detect a `"$VAR"/rest` anchored hook-script token — a path whose leading
264
+ * shell variable is already double-quoted with the remainder left bare (the
265
+ * shape `projectLocalHookPrefix` emits for local installs, e.g.
266
+ * `"$CLAUDE_PROJECT_DIR"/.claude/hooks/gsd-x.js`). Such a token is ALREADY a
267
+ * valid, correctly-quoted shell argument and must never be re-quoted.
268
+ */
269
+ const ANCHORED_HOOK_SCRIPT_TOKEN = /^"\$[A-Za-z_][A-Za-z0-9_]*"\//;
262
270
  /**
263
271
  * Projection helper for legacy settings.json hook rewrites.
264
272
  *
@@ -270,8 +278,20 @@ function projectLegacySettingsHookCommand({ absoluteRunner, scriptPath, scriptTo
270
278
  if (!absoluteRunner || !scriptPath)
271
279
  return null;
272
280
  const normalizedScriptPath = platform === 'win32' ? scriptPath.replace(/\\/g, '/') : scriptPath;
281
+ // #1693: a script path already carrying a `"$CLAUDE_PROJECT_DIR"`-anchored
282
+ // quoted prefix (local installs) is already a valid shell token — only the
283
+ // variable is quoted, the rest is bare. JSON.stringify-ing it on Windows
284
+ // yields `"\"$CLAUDE_PROJECT_DIR\"/..."` (escaped quotes inside an outer
285
+ // quote); node then receives an argument that *starts* with a `"`, treats it
286
+ // as relative, and dies with MODULE_NOT_FOUND. Emit anchored tokens verbatim;
287
+ // only bare absolute paths (which may contain spaces, e.g. "Program Files")
288
+ // need the JSON.stringify quoting. Scoped to win32: the non-Windows branch
289
+ // already preserves the caller's `scriptToken` (which is the bare anchored
290
+ // token for these inputs), so it never had the double-quote bug.
273
291
  const commandScriptToken = platform === 'win32'
274
- ? JSON.stringify(normalizedScriptPath)
292
+ ? (ANCHORED_HOOK_SCRIPT_TOKEN.test(normalizedScriptPath)
293
+ ? normalizedScriptPath
294
+ : JSON.stringify(normalizedScriptPath))
275
295
  : (scriptToken || JSON.stringify(normalizedScriptPath));
276
296
  return projectShellCommandText({
277
297
  runnerToken: absoluteRunner,
@@ -9,7 +9,7 @@
9
9
  "runtimeTierDefaults": {
10
10
  "claude": {
11
11
  "opus": { "model": "claude-opus-4-8" },
12
- "sonnet": { "model": "claude-sonnet-4-6" },
12
+ "sonnet": { "model": "claude-sonnet-5" },
13
13
  "haiku": { "model": "claude-haiku-4-5" }
14
14
  },
15
15
  "codex": {
@@ -29,17 +29,17 @@
29
29
  },
30
30
  "opencode": {
31
31
  "opus": { "model": "anthropic/claude-opus-4-8" },
32
- "sonnet": { "model": "anthropic/claude-sonnet-4-6" },
32
+ "sonnet": { "model": "anthropic/claude-sonnet-5" },
33
33
  "haiku": { "model": "anthropic/claude-haiku-4-5" }
34
34
  },
35
35
  "copilot": {
36
36
  "opus": { "model": "claude-opus-4-8" },
37
- "sonnet": { "model": "claude-sonnet-4-6" },
37
+ "sonnet": { "model": "claude-sonnet-5" },
38
38
  "haiku": { "model": "claude-haiku-4-5" }
39
39
  },
40
40
  "hermes": {
41
41
  "opus": { "model": "anthropic/claude-opus-4-8" },
42
- "sonnet": { "model": "anthropic/claude-sonnet-4-6" },
42
+ "sonnet": { "model": "anthropic/claude-sonnet-5" },
43
43
  "haiku": { "model": "anthropic/claude-haiku-4-5" }
44
44
  },
45
45
  "kilo": {
@@ -91,13 +91,13 @@
91
91
  "providerPresets": {
92
92
  "anthropic": {
93
93
  "opus": { "low": { "model": "claude-opus-4-5" }, "medium": { "model": "claude-opus-4-8" }, "high": { "model": "claude-opus-4-8" } },
94
- "sonnet": { "low": { "model": "claude-haiku-4-5" }, "medium": { "model": "claude-sonnet-4-6" }, "high": { "model": "claude-opus-4-8" } },
95
- "haiku": { "low": { "model": "claude-haiku-4-5" }, "medium": { "model": "claude-haiku-4-5" }, "high": { "model": "claude-sonnet-4-6" } }
94
+ "sonnet": { "low": { "model": "claude-haiku-4-5" }, "medium": { "model": "claude-sonnet-5" }, "high": { "model": "claude-opus-4-8" } },
95
+ "haiku": { "low": { "model": "claude-haiku-4-5" }, "medium": { "model": "claude-haiku-4-5" }, "high": { "model": "claude-sonnet-5" } }
96
96
  },
97
97
  "anthropic-fable": {
98
98
  "opus": { "low": { "model": "claude-opus-4-5" }, "medium": { "model": "claude-opus-4-8" }, "high": { "model": "claude-fable-5" } },
99
- "sonnet": { "low": { "model": "claude-haiku-4-5" }, "medium": { "model": "claude-sonnet-4-6" }, "high": { "model": "claude-fable-5" } },
100
- "haiku": { "low": { "model": "claude-haiku-4-5" }, "medium": { "model": "claude-haiku-4-5" }, "high": { "model": "claude-sonnet-4-6" } }
99
+ "sonnet": { "low": { "model": "claude-haiku-4-5" }, "medium": { "model": "claude-sonnet-5" }, "high": { "model": "claude-fable-5" } },
100
+ "haiku": { "low": { "model": "claude-haiku-4-5" }, "medium": { "model": "claude-haiku-4-5" }, "high": { "model": "claude-sonnet-5" } }
101
101
  },
102
102
  "openai": {
103
103
  "opus": { "low": { "model": "gpt-5.4", "reasoning_effort": "medium" }, "medium": { "model": "gpt-5.5", "reasoning_effort": "high" }, "high": { "model": "gpt-5.5", "reasoning_effort": "xhigh" } },
@@ -353,13 +353,13 @@ Built-in tier defaults by runtime:
353
353
 
354
354
  | Runtime | `opus` | `sonnet` | `haiku` |
355
355
  |------------|-------------------------------|---------------------------------|-------------------------------|
356
- | `claude` | `claude-opus-4-8` | `claude-sonnet-4-6` | `claude-haiku-4-5` |
356
+ | `claude` | `claude-opus-4-8` | `claude-sonnet-5` | `claude-haiku-4-5` |
357
357
  | `codex` | `gpt-5.5` | `gpt-5.4` | `gpt-5.4-mini` |
358
358
  | `gemini` | `gemini-3.1-pro-preview` | `gemini-3-flash` | `gemini-2.5-flash-lite` |
359
359
  | `qwen` | `qwen3-max-2026-01-23` | `qwen3-coder-plus` | `qwen3-coder-next` |
360
- | `opencode` | `anthropic/claude-opus-4-8` | `anthropic/claude-sonnet-4-6` | `anthropic/claude-haiku-4-5` |
361
- | `copilot` | `claude-opus-4-8` | `claude-sonnet-4-6` | `claude-haiku-4-5` |
362
- | `hermes` | `anthropic/claude-opus-4-8` | `anthropic/claude-sonnet-4-6` | `anthropic/claude-haiku-4-5` |
360
+ | `opencode` | `anthropic/claude-opus-4-8` | `anthropic/claude-sonnet-5` | `anthropic/claude-haiku-4-5` |
361
+ | `copilot` | `claude-opus-4-8` | `claude-sonnet-5` | `claude-haiku-4-5` |
362
+ | `hermes` | `anthropic/claude-opus-4-8` | `anthropic/claude-sonnet-5` | `anthropic/claude-haiku-4-5` |
363
363
  | Group B (`kilo`, `cline`, `cursor`, `windsurf`, `augment`, `trae`, `codebuddy`, `antigravity`) | (no built-in default — your runtime handles model selection) | | |
364
364
 
365
365
  Display a table to the user showing the effective configuration:
@@ -623,8 +623,8 @@ AskUserQuestion([
623
623
  header: "Provider",
624
624
  multiSelect: false,
625
625
  options: [
626
- { label: "anthropic", description: "claude-opus-4-8 / claude-sonnet-4-6 / claude-haiku-4-5 (Anthropic / Claude)" },
627
- { label: "anthropic-fable", description: "claude-fable-5 / claude-sonnet-4-6 / claude-haiku-4-5 (Anthropic / Claude Fable opt-in)" },
626
+ { label: "anthropic", description: "claude-opus-4-8 / claude-sonnet-5 / claude-haiku-4-5 (Anthropic / Claude)" },
627
+ { label: "anthropic-fable", description: "claude-fable-5 / claude-sonnet-5 / claude-haiku-4-5 (Anthropic / Claude Fable opt-in)" },
628
628
  { label: "openai", description: "gpt-5.5 / gpt-5.4 / gpt-5.4-mini (OpenAI / Codex)" },
629
629
  { label: "Other known provider", description: "Type google or qwen; both still use the canonical tier mapping." }
630
630
  ]
@@ -654,11 +654,11 @@ Canonical tier mappings by provider and budget:
654
654
 
655
655
  | Provider | Budget | high | medium | low |
656
656
  |-----------|--------|----------------------------|----------------------------|----------------------------|
657
- | anthropic | high | claude-opus-4-8 | claude-opus-4-8 | claude-sonnet-4-6 |
658
- | anthropic | medium | claude-opus-4-8 | claude-sonnet-4-6 | claude-haiku-4-5 |
657
+ | anthropic | high | claude-opus-4-8 | claude-opus-4-8 | claude-sonnet-5 |
658
+ | anthropic | medium | claude-opus-4-8 | claude-sonnet-5 | claude-haiku-4-5 |
659
659
  | anthropic | low | claude-haiku-4-5 | claude-haiku-4-5 | claude-haiku-4-5 |
660
- | anthropic-fable | high | claude-fable-5 | claude-fable-5 | claude-sonnet-4-6 |
661
- | anthropic-fable | medium | claude-opus-4-8 | claude-sonnet-4-6 | claude-haiku-4-5 |
660
+ | anthropic-fable | high | claude-fable-5 | claude-fable-5 | claude-sonnet-5 |
661
+ | anthropic-fable | medium | claude-opus-4-8 | claude-sonnet-5 | claude-haiku-4-5 |
662
662
  | anthropic-fable | low | claude-haiku-4-5 | claude-haiku-4-5 | claude-haiku-4-5 |
663
663
  | openai | high | gpt-5.5 | gpt-5.5 | gpt-5.5 |
664
664
  | openai | medium | gpt-5.5 | gpt-5.4 | gpt-5.4-mini |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengsd/gsd-core",
3
- "version": "1.6.0",
3
+ "version": "1.6.1",
4
4
  "description": "GSD Core is a meta-prompting, context engineering, and spec-driven development system for AI coding agents.",
5
5
  "bin": {
6
6
  "gsd-core": "bin/install.js",