@opengsd/gsd-core 1.6.0-rc.2 → 1.6.0

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.
Files changed (157) hide show
  1. package/.claude-plugin/plugin.json +2 -1
  2. package/agents/gsd-advisor-researcher.md +2 -0
  3. package/agents/gsd-ai-researcher.md +2 -0
  4. package/agents/gsd-assumptions-analyzer.md +2 -0
  5. package/agents/gsd-doc-classifier.md +2 -0
  6. package/agents/gsd-doc-synthesizer.md +2 -0
  7. package/agents/gsd-domain-researcher.md +2 -0
  8. package/agents/gsd-eval-auditor.md +6 -9
  9. package/agents/gsd-phase-researcher.md +2 -0
  10. package/agents/gsd-planner.md +8 -57
  11. package/agents/gsd-project-researcher.md +2 -0
  12. package/agents/gsd-research-synthesizer.md +2 -0
  13. package/agents/gsd-security-auditor.md +37 -18
  14. package/agents/gsd-ui-researcher.md +2 -0
  15. package/bin/install.js +370 -18
  16. package/gemini-extension.json +1 -1
  17. package/gsd-core/bin/gsd-tools.cjs +46 -4
  18. package/gsd-core/bin/lib/audit-command-router.cjs +52 -14
  19. package/gsd-core/bin/lib/capability-lifecycle.cjs +30 -7
  20. package/gsd-core/bin/lib/capability-registry.cjs +96 -83
  21. package/gsd-core/bin/lib/capability-validator.cjs +22 -0
  22. package/gsd-core/bin/lib/cjs-command-router-adapter.cjs +40 -2
  23. package/gsd-core/bin/lib/command-aliases.cjs +10 -1
  24. package/gsd-core/bin/lib/command-routing-hub.cjs +10 -3
  25. package/gsd-core/bin/lib/config-schema.cjs +1 -0
  26. package/gsd-core/bin/lib/config.cjs +67 -24
  27. package/gsd-core/bin/lib/coverage.cjs +464 -0
  28. package/gsd-core/bin/lib/decisions.cjs +27 -0
  29. package/gsd-core/bin/lib/eval-command-router.cjs +21 -0
  30. package/gsd-core/bin/lib/eval.cjs +60 -0
  31. package/gsd-core/bin/lib/frontmatter.cjs +132 -13
  32. package/gsd-core/bin/lib/graphify-command-router.cjs +53 -36
  33. package/gsd-core/bin/lib/init.cjs +139 -30
  34. package/gsd-core/bin/lib/install-profiles.cjs +6 -3
  35. package/gsd-core/bin/lib/intel-command-router.cjs +79 -60
  36. package/gsd-core/bin/lib/io.cjs +1 -0
  37. package/gsd-core/bin/lib/phase.cjs +16 -2
  38. package/gsd-core/bin/lib/plan-scan.cjs +2 -2
  39. package/gsd-core/bin/lib/planning-workspace.cjs +157 -13
  40. package/gsd-core/bin/lib/profile-output.cjs +18 -6
  41. package/gsd-core/bin/lib/runtime-artifact-conversion.cjs +53 -16
  42. package/gsd-core/bin/lib/runtime-artifact-layout.cjs +21 -3
  43. package/gsd-core/bin/lib/runtime-hooks-surface.cjs +15 -0
  44. package/gsd-core/bin/lib/runtime-name-policy.cjs +47 -2
  45. package/gsd-core/bin/lib/shell-command-projection.cjs +10 -0
  46. package/gsd-core/bin/lib/state.cjs +398 -60
  47. package/gsd-core/bin/lib/surface.cjs +42 -10
  48. package/gsd-core/bin/lib/uat-predicate.cjs +13 -6
  49. package/gsd-core/bin/lib/update-context.cjs +2 -2
  50. package/gsd-core/bin/lib/verification.cjs +67 -6
  51. package/gsd-core/bin/lib/verify.cjs +8 -1
  52. package/gsd-core/bin/shared/config-defaults.manifest.json +3 -0
  53. package/gsd-core/bin/shared/config-schema.manifest.json +2 -1
  54. package/gsd-core/references/planner-guidance.md +66 -0
  55. package/gsd-core/references/planning-config.md +2 -2
  56. package/gsd-core/references/security-asvs-levels.md +27 -0
  57. package/gsd-core/references/untrusted-input-boundary.md +13 -0
  58. package/gsd-core/templates/SECURITY.md +6 -4
  59. package/gsd-core/templates/summary-complex.md +4 -0
  60. package/gsd-core/templates/summary-minimal.md +3 -0
  61. package/gsd-core/templates/summary-standard.md +4 -0
  62. package/gsd-core/templates/summary.md +41 -0
  63. package/gsd-core/workflows/autonomous.md +53 -46
  64. package/gsd-core/workflows/complete-milestone.md +27 -8
  65. package/gsd-core/workflows/execute-phase.md +1 -1
  66. package/gsd-core/workflows/execute-plan.md +5 -0
  67. package/gsd-core/workflows/manager.md +17 -7
  68. package/gsd-core/workflows/new-project.md +82 -16
  69. package/gsd-core/workflows/plan-phase.md +15 -0
  70. package/gsd-core/workflows/profile-user.md +6 -2
  71. package/gsd-core/workflows/progress.md +37 -4
  72. package/gsd-core/workflows/quick.md +3 -1
  73. package/gsd-core/workflows/secure-phase.md +13 -7
  74. package/gsd-core/workflows/ship.md +3 -1
  75. package/gsd-core/workflows/spec-phase.md +3 -1
  76. package/gsd-core/workflows/transition.md +14 -12
  77. package/gsd-core/workflows/ui-review.md +2 -6
  78. package/gsd-core/workflows/verify-work.md +74 -1
  79. package/hooks/dist/gsd-read-injection-scanner.js +49 -25
  80. package/hooks/gsd-read-injection-scanner.js +49 -25
  81. package/hooks/hooks.json +1 -1
  82. package/package.json +4 -2
  83. package/scripts/check-alias-drift.cjs +5 -0
  84. package/scripts/gen-plugin-skills.cjs +117 -0
  85. package/scripts/lint-test-file-count.allowlist.json +2 -1
  86. package/scripts/prompt-injection-scan.sh +9 -0
  87. package/scripts/release-notes/conventional-title.cjs +88 -0
  88. package/scripts/release-notes/format-github-release-notes.cjs +4 -3
  89. package/skills/gsd-add-tests/SKILL.md +38 -0
  90. package/skills/gsd-ai-integration-phase/SKILL.md +37 -0
  91. package/skills/gsd-audit-fix/SKILL.md +33 -0
  92. package/skills/gsd-audit-milestone/SKILL.md +37 -0
  93. package/skills/gsd-audit-uat/SKILL.md +25 -0
  94. package/skills/gsd-autonomous/SKILL.md +51 -0
  95. package/skills/gsd-capture/SKILL.md +67 -0
  96. package/skills/gsd-cleanup/SKILL.md +24 -0
  97. package/skills/gsd-code-review/SKILL.md +59 -0
  98. package/skills/gsd-complete-milestone/SKILL.md +142 -0
  99. package/skills/gsd-config/SKILL.md +56 -0
  100. package/skills/gsd-debug/SKILL.md +53 -0
  101. package/skills/gsd-discuss-phase/SKILL.md +77 -0
  102. package/skills/gsd-docs-update/SKILL.md +49 -0
  103. package/skills/gsd-eval-review/SKILL.md +33 -0
  104. package/skills/gsd-execute-phase/SKILL.md +65 -0
  105. package/skills/gsd-explore/SKILL.md +28 -0
  106. package/skills/gsd-extract-learnings/SKILL.md +22 -0
  107. package/skills/gsd-fast/SKILL.md +31 -0
  108. package/skills/gsd-forensics/SKILL.md +56 -0
  109. package/skills/gsd-graphify/SKILL.md +204 -0
  110. package/skills/gsd-health/SKILL.md +31 -0
  111. package/skills/gsd-help/SKILL.md +29 -0
  112. package/skills/gsd-import/SKILL.md +46 -0
  113. package/skills/gsd-inbox/SKILL.md +39 -0
  114. package/skills/gsd-ingest-docs/SKILL.md +43 -0
  115. package/skills/gsd-manager/SKILL.md +45 -0
  116. package/skills/gsd-map-codebase/SKILL.md +83 -0
  117. package/skills/gsd-mempalace-capture/SKILL.md +71 -0
  118. package/skills/gsd-mempalace-recall/SKILL.md +102 -0
  119. package/skills/gsd-milestone-summary/SKILL.md +51 -0
  120. package/skills/gsd-mvp-phase/SKILL.md +45 -0
  121. package/skills/gsd-new-milestone/SKILL.md +45 -0
  122. package/skills/gsd-new-project/SKILL.md +47 -0
  123. package/skills/gsd-ns-context/SKILL.md +24 -0
  124. package/skills/gsd-ns-ideate/SKILL.md +23 -0
  125. package/skills/gsd-ns-manage/SKILL.md +35 -0
  126. package/skills/gsd-ns-project/SKILL.md +26 -0
  127. package/skills/gsd-ns-review/SKILL.md +28 -0
  128. package/skills/gsd-ns-workflow/SKILL.md +33 -0
  129. package/skills/gsd-pause-work/SKILL.md +43 -0
  130. package/skills/gsd-phase/SKILL.md +57 -0
  131. package/skills/gsd-plan-phase/SKILL.md +63 -0
  132. package/skills/gsd-plan-review-convergence/SKILL.md +60 -0
  133. package/skills/gsd-pr-branch/SKILL.md +26 -0
  134. package/skills/gsd-profile-user/SKILL.md +47 -0
  135. package/skills/gsd-progress/SKILL.md +49 -0
  136. package/skills/gsd-quick/SKILL.md +174 -0
  137. package/skills/gsd-resume-work/SKILL.md +31 -0
  138. package/skills/gsd-review/SKILL.md +42 -0
  139. package/skills/gsd-review-backlog/SKILL.md +63 -0
  140. package/skills/gsd-secure-phase/SKILL.md +36 -0
  141. package/skills/gsd-settings/SKILL.md +29 -0
  142. package/skills/gsd-ship/SKILL.md +24 -0
  143. package/skills/gsd-sketch/SKILL.md +60 -0
  144. package/skills/gsd-spec-phase/SKILL.md +63 -0
  145. package/skills/gsd-spike/SKILL.md +57 -0
  146. package/skills/gsd-stats/SKILL.md +20 -0
  147. package/skills/gsd-surface/SKILL.md +162 -0
  148. package/skills/gsd-thread/SKILL.md +24 -0
  149. package/skills/gsd-ui-phase/SKILL.md +35 -0
  150. package/skills/gsd-ui-review/SKILL.md +33 -0
  151. package/skills/gsd-ultraplan-phase/SKILL.md +34 -0
  152. package/skills/gsd-undo/SKILL.md +35 -0
  153. package/skills/gsd-update/SKILL.md +50 -0
  154. package/skills/gsd-validate-phase/SKILL.md +36 -0
  155. package/skills/gsd-verify-work/SKILL.md +39 -0
  156. package/skills/gsd-workspace/SKILL.md +53 -0
  157. package/skills/gsd-workstreams/SKILL.md +70 -0
@@ -10,7 +10,7 @@ const capabilities = {
10
10
  "ai-integration": {
11
11
  "id": "ai-integration",
12
12
  "role": "feature",
13
- "version": "1.6.0-rc.2",
13
+ "version": "1.6.0",
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,9 +63,9 @@ const capabilities = {
63
63
  "antigravity": {
64
64
  "id": "antigravity",
65
65
  "role": "runtime",
66
- "version": "1.6.0-rc.2",
66
+ "version": "1.6.0",
67
67
  "title": "Antigravity",
68
- "description": "Google Antigravity IDE — nested under ~/.gemini/antigravity; probed across 1.x and 2.x layouts; Gemini hook event dialect; nested skill layout; tier-1 support.",
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",
70
70
  "requires": [],
71
71
  "engines": {
@@ -93,7 +93,7 @@ const capabilities = {
93
93
  "kind": "skills",
94
94
  "destSubpath": "skills",
95
95
  "prefix": "gsd-",
96
- "nesting": "nested",
96
+ "nesting": "flat",
97
97
  "recursive": false,
98
98
  "converter": "convertClaudeCommandToAntigravitySkill"
99
99
  }
@@ -103,7 +103,7 @@ const capabilities = {
103
103
  "kind": "skills",
104
104
  "destSubpath": "skills",
105
105
  "prefix": "gsd-",
106
- "nesting": "nested",
106
+ "nesting": "flat",
107
107
  "recursive": false,
108
108
  "converter": "convertClaudeCommandToAntigravitySkill"
109
109
  }
@@ -123,7 +123,7 @@ const capabilities = {
123
123
  "audit": {
124
124
  "id": "audit",
125
125
  "role": "feature",
126
- "version": "1.6.0-rc.2",
126
+ "version": "1.6.0",
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-rc.2",
163
+ "version": "1.6.0",
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-rc.2",
232
+ "version": "1.6.0",
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-rc.2",
298
+ "version": "1.6.0",
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-rc.2",
341
+ "version": "1.6.0",
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-rc.2",
402
+ "version": "1.6.0",
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-rc.2",
471
+ "version": "1.6.0",
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-rc.2",
524
+ "version": "1.6.0",
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-rc.2",
577
+ "version": "1.6.0",
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,9 +643,9 @@ const capabilities = {
643
643
  "drift": {
644
644
  "id": "drift",
645
645
  "role": "feature",
646
- "version": "1.6.0-rc.2",
646
+ "version": "1.6.0",
647
647
  "title": "Drift detection gates",
648
- "description": "Post-execution drift detection gates that run after each wave completes. Provides two gates 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).",
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",
650
650
  "requires": [],
651
651
  "engines": {
@@ -679,6 +679,11 @@ const capabilities = {
679
679
  "type": "boolean",
680
680
  "default": true,
681
681
  "description": "Enable the drift gates at execute:wave:post. When enabled, the schema drift gate blocks verification if schema-relevant files changed during execution but no database push command was executed; the codebase drift gate (non-blocking) warns when structural additions exceed the drift_threshold."
682
+ },
683
+ "workflow.plan_drift_precheck": {
684
+ "type": "boolean",
685
+ "default": true,
686
+ "description": "Enable the non-blocking codebase drift pre-check at plan:pre, before /gsd:plan-phase spawns the planner. When enabled, a stale STRUCTURE.md (structural additions exceeding drift_threshold) is surfaced up front as a warn-only advisory pointing to /gsd:map-codebase; it never blocks planning and never spawns the mapper agent. Separate from schema_drift_gate so autonomous/CI runs can silence the plan-time advisory while keeping the execute:wave:post gates enabled."
682
687
  }
683
688
  },
684
689
  "steps": [],
@@ -701,13 +706,22 @@ const capabilities = {
701
706
  "when": "workflow.schema_drift_gate",
702
707
  "blocking": false,
703
708
  "onError": "skip"
709
+ },
710
+ {
711
+ "point": "plan:pre",
712
+ "check": {
713
+ "query": "verify.codebase-drift"
714
+ },
715
+ "when": "workflow.plan_drift_precheck",
716
+ "blocking": false,
717
+ "onError": "skip"
704
718
  }
705
719
  ]
706
720
  },
707
721
  "gap-analysis": {
708
722
  "id": "gap-analysis",
709
723
  "role": "feature",
710
- "version": "1.6.0-rc.2",
724
+ "version": "1.6.0",
711
725
  "title": "Post-planning gap analysis",
712
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.",
713
727
  "tier": "standard",
@@ -748,7 +762,7 @@ const capabilities = {
748
762
  "gemini": {
749
763
  "id": "gemini",
750
764
  "role": "runtime",
751
- "version": "1.6.0-rc.2",
765
+ "version": "1.6.0",
752
766
  "title": "Gemini CLI",
753
767
  "description": "Google Gemini CLI — commands-only artifact layout (TOML); Gemini hook event dialect; settings-json hook surface; tier-2 support.",
754
768
  "tier": "core",
@@ -805,7 +819,7 @@ const capabilities = {
805
819
  "graphify": {
806
820
  "id": "graphify",
807
821
  "role": "feature",
808
- "version": "1.6.0-rc.2",
822
+ "version": "1.6.0",
809
823
  "title": "Knowledge graph",
810
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.",
811
825
  "tier": "full",
@@ -846,7 +860,7 @@ const capabilities = {
846
860
  "hermes": {
847
861
  "id": "hermes",
848
862
  "role": "runtime",
849
- "version": "1.6.0-rc.2",
863
+ "version": "1.6.0",
850
864
  "title": "Hermes Agent",
851
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.",
852
866
  "tier": "core",
@@ -899,7 +913,7 @@ const capabilities = {
899
913
  "intel": {
900
914
  "id": "intel",
901
915
  "role": "feature",
902
- "version": "1.6.0-rc.2",
916
+ "version": "1.6.0",
903
917
  "title": "Codebase intelligence",
904
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`.",
905
919
  "tier": "full",
@@ -951,7 +965,7 @@ const capabilities = {
951
965
  "kilo": {
952
966
  "id": "kilo",
953
967
  "role": "runtime",
954
- "version": "1.6.0-rc.2",
968
+ "version": "1.6.0",
955
969
  "title": "Kilo Code",
956
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.",
957
971
  "tier": "core",
@@ -1026,7 +1040,7 @@ const capabilities = {
1026
1040
  "kimi": {
1027
1041
  "id": "kimi",
1028
1042
  "role": "runtime",
1029
- "version": "1.6.0-rc.2",
1043
+ "version": "1.6.0",
1030
1044
  "title": "Kimi CLI",
1031
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.",
1032
1046
  "tier": "core",
@@ -1082,7 +1096,7 @@ const capabilities = {
1082
1096
  "mempalace": {
1083
1097
  "id": "mempalace",
1084
1098
  "role": "feature",
1085
- "version": "1.6.0-rc.2",
1099
+ "version": "1.6.0",
1086
1100
  "title": "MemPalace memory",
1087
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.",
1088
1102
  "tier": "full",
@@ -1256,7 +1270,7 @@ const capabilities = {
1256
1270
  "nyquist": {
1257
1271
  "id": "nyquist",
1258
1272
  "role": "feature",
1259
- "version": "1.6.0-rc.2",
1273
+ "version": "1.6.0",
1260
1274
  "title": "Nyquist validation",
1261
1275
  "description": "Validation coverage audit that maps executed work back to tests and manual-only evidence.",
1262
1276
  "tier": "full",
@@ -1306,7 +1320,7 @@ const capabilities = {
1306
1320
  "opencode": {
1307
1321
  "id": "opencode",
1308
1322
  "role": "runtime",
1309
- "version": "1.6.0-rc.2",
1323
+ "version": "1.6.0",
1310
1324
  "title": "OpenCode",
1311
1325
  "description": "OpenCode — XDG-based config dir; flat command/ + skills artifact layout; settings-json config format; no lifecycle hook registration; tier-2 support.",
1312
1326
  "tier": "core",
@@ -1376,7 +1390,7 @@ const capabilities = {
1376
1390
  "pattern-mapper": {
1377
1391
  "id": "pattern-mapper",
1378
1392
  "role": "feature",
1379
- "version": "1.6.0-rc.2",
1393
+ "version": "1.6.0",
1380
1394
  "title": "Pattern mapping",
1381
1395
  "description": "Optional codebase-pattern mapping before planning; owns the pattern mapper agent and workflow.pattern_mapper activation key.",
1382
1396
  "tier": "full",
@@ -1430,7 +1444,7 @@ const capabilities = {
1430
1444
  "profile-pipeline": {
1431
1445
  "id": "profile-pipeline",
1432
1446
  "role": "feature",
1433
- "version": "1.6.0-rc.2",
1447
+ "version": "1.6.0",
1434
1448
  "title": "Developer profiling pipeline",
1435
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.",
1436
1450
  "tier": "full",
@@ -1507,7 +1521,7 @@ const capabilities = {
1507
1521
  "qwen": {
1508
1522
  "id": "qwen",
1509
1523
  "role": "runtime",
1510
- "version": "1.6.0-rc.2",
1524
+ "version": "1.6.0",
1511
1525
  "title": "Qwen Code",
1512
1526
  "description": "Qwen Code (Alibaba) — nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
1513
1527
  "tier": "core",
@@ -1564,7 +1578,7 @@ const capabilities = {
1564
1578
  "research": {
1565
1579
  "id": "research",
1566
1580
  "role": "feature",
1567
- "version": "1.6.0-rc.2",
1581
+ "version": "1.6.0",
1568
1582
  "title": "Phase research",
1569
1583
  "description": "Optional phase research before planning; owns the phase researcher agent and workflow.research activation key.",
1570
1584
  "tier": "standard",
@@ -1616,7 +1630,7 @@ const capabilities = {
1616
1630
  "schema-gate": {
1617
1631
  "id": "schema-gate",
1618
1632
  "role": "feature",
1619
- "version": "1.6.0-rc.2",
1633
+ "version": "1.6.0",
1620
1634
  "title": "Schema push detection gate",
1621
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.",
1622
1636
  "tier": "full",
@@ -1662,7 +1676,7 @@ const capabilities = {
1662
1676
  "security": {
1663
1677
  "id": "security",
1664
1678
  "role": "feature",
1665
- "version": "1.6.0-rc.2",
1679
+ "version": "1.6.0",
1666
1680
  "title": "Security enforcement",
1667
1681
  "description": "Threat mitigation verification and ship-time security blocking for phases with security enforcement enabled.",
1668
1682
  "tier": "full",
@@ -1761,7 +1775,7 @@ const capabilities = {
1761
1775
  "tdd": {
1762
1776
  "id": "tdd",
1763
1777
  "role": "feature",
1764
- "version": "1.6.0-rc.2",
1778
+ "version": "1.6.0",
1765
1779
  "title": "Test-driven development",
1766
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.",
1767
1781
  "tier": "full",
@@ -1814,7 +1828,7 @@ const capabilities = {
1814
1828
  "trae": {
1815
1829
  "id": "trae",
1816
1830
  "role": "runtime",
1817
- "version": "1.6.0-rc.2",
1831
+ "version": "1.6.0",
1818
1832
  "title": "Trae IDE",
1819
1833
  "description": "Trae IDE — nested-skill artifact layout; no hook surface (profile-marker-only config); tier-2 support.",
1820
1834
  "tier": "core",
@@ -1866,7 +1880,7 @@ const capabilities = {
1866
1880
  "ui": {
1867
1881
  "id": "ui",
1868
1882
  "role": "feature",
1869
- "version": "1.6.0-rc.2",
1883
+ "version": "1.6.0",
1870
1884
  "title": "UI design contracts",
1871
1885
  "description": "UI-SPEC design contract + retrospective UI audit for frontend phases.",
1872
1886
  "tier": "full",
@@ -1961,9 +1975,9 @@ const capabilities = {
1961
1975
  "windsurf": {
1962
1976
  "id": "windsurf",
1963
1977
  "role": "runtime",
1964
- "version": "1.6.0-rc.2",
1978
+ "version": "1.6.0",
1965
1979
  "title": "Windsurf",
1966
- "description": "Windsurf (Codeium) — nested under ~/.codeium/windsurf; skills-only artifact layout; no hook surface; no hook events; tier-2 support.",
1980
+ "description": "Windsurf (Codeium) — workspace workflow artifact layout for slash commands; no hook surface; no hook events; tier-2 support.",
1967
1981
  "tier": "core",
1968
1982
  "requires": [],
1969
1983
  "engines": {
@@ -1980,24 +1994,15 @@ const capabilities = {
1980
1994
  },
1981
1995
  "configFormat": "none",
1982
1996
  "artifactLayout": {
1983
- "global": [
1984
- {
1985
- "kind": "skills",
1986
- "destSubpath": "skills",
1987
- "prefix": "gsd-",
1988
- "nesting": "flat",
1989
- "recursive": false,
1990
- "converter": "convertClaudeCommandToWindsurfSkill"
1991
- }
1992
- ],
1997
+ "global": [],
1993
1998
  "local": [
1994
1999
  {
1995
- "kind": "skills",
1996
- "destSubpath": "skills",
2000
+ "kind": "commands",
2001
+ "destSubpath": "workflows",
1997
2002
  "prefix": "gsd-",
1998
2003
  "nesting": "flat",
1999
2004
  "recursive": false,
2000
- "converter": "convertClaudeCommandToWindsurfSkill"
2005
+ "converter": "convertClaudeCommandToWindsurfWorkflow"
2001
2006
  }
2002
2007
  ]
2003
2008
  },
@@ -2228,6 +2233,16 @@ const byLoopPoint = {
2228
2233
  }
2229
2234
  ],
2230
2235
  "gates": [
2236
+ {
2237
+ "capId": "drift",
2238
+ "point": "plan:pre",
2239
+ "check": {
2240
+ "query": "verify.codebase-drift"
2241
+ },
2242
+ "when": "workflow.plan_drift_precheck",
2243
+ "blocking": false,
2244
+ "onError": "skip"
2245
+ },
2231
2246
  {
2232
2247
  "capId": "ui",
2233
2248
  "point": "plan:pre",
@@ -2480,6 +2495,7 @@ const configKeys = {
2480
2495
  "workflow.drift_threshold": "drift",
2481
2496
  "workflow.drift_action": "drift",
2482
2497
  "workflow.schema_drift_gate": "drift",
2498
+ "workflow.plan_drift_precheck": "drift",
2483
2499
  "workflow.post_planning_gaps": "gap-analysis",
2484
2500
  "graphify.enabled": "graphify",
2485
2501
  "intel.enabled": "intel",
@@ -2553,6 +2569,12 @@ const configSchema = {
2553
2569
  "default": true,
2554
2570
  "description": "Enable the drift gates at execute:wave:post. When enabled, the schema drift gate blocks verification if schema-relevant files changed during execution but no database push command was executed; the codebase drift gate (non-blocking) warns when structural additions exceed the drift_threshold."
2555
2571
  },
2572
+ "workflow.plan_drift_precheck": {
2573
+ "owner": "drift",
2574
+ "type": "boolean",
2575
+ "default": true,
2576
+ "description": "Enable the non-blocking codebase drift pre-check at plan:pre, before /gsd:plan-phase spawns the planner. When enabled, a stale STRUCTURE.md (structural additions exceeding drift_threshold) is surfaced up front as a warn-only advisory pointing to /gsd:map-codebase; it never blocks planning and never spawns the mapper agent. Separate from schema_drift_gate so autonomous/CI runs can silence the plan-time advisory while keeping the execute:wave:post gates enabled."
2577
+ },
2556
2578
  "workflow.post_planning_gaps": {
2557
2579
  "owner": "gap-analysis",
2558
2580
  "type": "boolean",
@@ -2721,9 +2743,9 @@ const runtimes = {
2721
2743
  "antigravity": {
2722
2744
  "id": "antigravity",
2723
2745
  "role": "runtime",
2724
- "version": "1.6.0-rc.2",
2746
+ "version": "1.6.0",
2725
2747
  "title": "Antigravity",
2726
- "description": "Google Antigravity IDE — nested under ~/.gemini/antigravity; probed across 1.x and 2.x layouts; Gemini hook event dialect; nested skill layout; tier-1 support.",
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.",
2727
2749
  "tier": "core",
2728
2750
  "requires": [],
2729
2751
  "engines": {
@@ -2751,7 +2773,7 @@ const runtimes = {
2751
2773
  "kind": "skills",
2752
2774
  "destSubpath": "skills",
2753
2775
  "prefix": "gsd-",
2754
- "nesting": "nested",
2776
+ "nesting": "flat",
2755
2777
  "recursive": false,
2756
2778
  "converter": "convertClaudeCommandToAntigravitySkill"
2757
2779
  }
@@ -2761,7 +2783,7 @@ const runtimes = {
2761
2783
  "kind": "skills",
2762
2784
  "destSubpath": "skills",
2763
2785
  "prefix": "gsd-",
2764
- "nesting": "nested",
2786
+ "nesting": "flat",
2765
2787
  "recursive": false,
2766
2788
  "converter": "convertClaudeCommandToAntigravitySkill"
2767
2789
  }
@@ -2781,7 +2803,7 @@ const runtimes = {
2781
2803
  "augment": {
2782
2804
  "id": "augment",
2783
2805
  "role": "runtime",
2784
- "version": "1.6.0-rc.2",
2806
+ "version": "1.6.0",
2785
2807
  "title": "Augment Code",
2786
2808
  "description": "Augment Code CLI — commands + nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
2787
2809
  "tier": "core",
@@ -2850,7 +2872,7 @@ const runtimes = {
2850
2872
  "claude": {
2851
2873
  "id": "claude",
2852
2874
  "role": "runtime",
2853
- "version": "1.6.0-rc.2",
2875
+ "version": "1.6.0",
2854
2876
  "title": "Claude Code",
2855
2877
  "description": "Anthropic Claude Code — primary development runtime; tier-1 support with full hook surface and skills-based global install.",
2856
2878
  "tier": "core",
@@ -2916,7 +2938,7 @@ const runtimes = {
2916
2938
  "cline": {
2917
2939
  "id": "cline",
2918
2940
  "role": "runtime",
2919
- "version": "1.6.0-rc.2",
2941
+ "version": "1.6.0",
2920
2942
  "title": "Cline",
2921
2943
  "description": "Cline (VS Code extension) — global-only nested-skill layout; cline-rules hook surface (.clinerules); no hook events emitted; tier-2 support.",
2922
2944
  "tier": "core",
@@ -2959,7 +2981,7 @@ const runtimes = {
2959
2981
  "codebuddy": {
2960
2982
  "id": "codebuddy",
2961
2983
  "role": "runtime",
2962
- "version": "1.6.0-rc.2",
2984
+ "version": "1.6.0",
2963
2985
  "title": "CodeBuddy",
2964
2986
  "description": "CodeBuddy (Tencent) — converted commands + skills artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
2965
2987
  "tier": "core",
@@ -3028,7 +3050,7 @@ const runtimes = {
3028
3050
  "codex": {
3029
3051
  "id": "codex",
3030
3052
  "role": "runtime",
3031
- "version": "1.6.0-rc.2",
3053
+ "version": "1.6.0",
3032
3054
  "title": "OpenAI Codex CLI",
3033
3055
  "description": "OpenAI Codex CLI — shell-var command style; per-agent sandbox tiers; config.toml + hooks.json hook surface; tier-1 support.",
3034
3056
  "tier": "core",
@@ -3081,7 +3103,7 @@ const runtimes = {
3081
3103
  "copilot": {
3082
3104
  "id": "copilot",
3083
3105
  "role": "runtime",
3084
- "version": "1.6.0-rc.2",
3106
+ "version": "1.6.0",
3085
3107
  "title": "GitHub Copilot",
3086
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.",
3087
3109
  "tier": "core",
@@ -3134,7 +3156,7 @@ const runtimes = {
3134
3156
  "cursor": {
3135
3157
  "id": "cursor",
3136
3158
  "role": "runtime",
3137
- "version": "1.6.0-rc.2",
3159
+ "version": "1.6.0",
3138
3160
  "title": "Cursor",
3139
3161
  "description": "Cursor IDE — skills + converted commands artifact layout; hooks.json surface; Claude hook event dialect; recursive skill loader (flat nesting); tier-2 support.",
3140
3162
  "tier": "core",
@@ -3203,7 +3225,7 @@ const runtimes = {
3203
3225
  "gemini": {
3204
3226
  "id": "gemini",
3205
3227
  "role": "runtime",
3206
- "version": "1.6.0-rc.2",
3228
+ "version": "1.6.0",
3207
3229
  "title": "Gemini CLI",
3208
3230
  "description": "Google Gemini CLI — commands-only artifact layout (TOML); Gemini hook event dialect; settings-json hook surface; tier-2 support.",
3209
3231
  "tier": "core",
@@ -3260,7 +3282,7 @@ const runtimes = {
3260
3282
  "hermes": {
3261
3283
  "id": "hermes",
3262
3284
  "role": "runtime",
3263
- "version": "1.6.0-rc.2",
3285
+ "version": "1.6.0",
3264
3286
  "title": "Hermes Agent",
3265
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.",
3266
3288
  "tier": "core",
@@ -3313,7 +3335,7 @@ const runtimes = {
3313
3335
  "kilo": {
3314
3336
  "id": "kilo",
3315
3337
  "role": "runtime",
3316
- "version": "1.6.0-rc.2",
3338
+ "version": "1.6.0",
3317
3339
  "title": "Kilo Code",
3318
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.",
3319
3341
  "tier": "core",
@@ -3388,7 +3410,7 @@ const runtimes = {
3388
3410
  "kimi": {
3389
3411
  "id": "kimi",
3390
3412
  "role": "runtime",
3391
- "version": "1.6.0-rc.2",
3413
+ "version": "1.6.0",
3392
3414
  "title": "Kimi CLI",
3393
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.",
3394
3416
  "tier": "core",
@@ -3444,7 +3466,7 @@ const runtimes = {
3444
3466
  "opencode": {
3445
3467
  "id": "opencode",
3446
3468
  "role": "runtime",
3447
- "version": "1.6.0-rc.2",
3469
+ "version": "1.6.0",
3448
3470
  "title": "OpenCode",
3449
3471
  "description": "OpenCode — XDG-based config dir; flat command/ + skills artifact layout; settings-json config format; no lifecycle hook registration; tier-2 support.",
3450
3472
  "tier": "core",
@@ -3514,7 +3536,7 @@ const runtimes = {
3514
3536
  "qwen": {
3515
3537
  "id": "qwen",
3516
3538
  "role": "runtime",
3517
- "version": "1.6.0-rc.2",
3539
+ "version": "1.6.0",
3518
3540
  "title": "Qwen Code",
3519
3541
  "description": "Qwen Code (Alibaba) — nested-skill artifact layout; settings-json hook surface; Claude hook event dialect; tier-2 support.",
3520
3542
  "tier": "core",
@@ -3571,7 +3593,7 @@ const runtimes = {
3571
3593
  "trae": {
3572
3594
  "id": "trae",
3573
3595
  "role": "runtime",
3574
- "version": "1.6.0-rc.2",
3596
+ "version": "1.6.0",
3575
3597
  "title": "Trae IDE",
3576
3598
  "description": "Trae IDE — nested-skill artifact layout; no hook surface (profile-marker-only config); tier-2 support.",
3577
3599
  "tier": "core",
@@ -3623,9 +3645,9 @@ const runtimes = {
3623
3645
  "windsurf": {
3624
3646
  "id": "windsurf",
3625
3647
  "role": "runtime",
3626
- "version": "1.6.0-rc.2",
3648
+ "version": "1.6.0",
3627
3649
  "title": "Windsurf",
3628
- "description": "Windsurf (Codeium) — nested under ~/.codeium/windsurf; skills-only artifact layout; no hook surface; no hook events; tier-2 support.",
3650
+ "description": "Windsurf (Codeium) — workspace workflow artifact layout for slash commands; no hook surface; no hook events; tier-2 support.",
3629
3651
  "tier": "core",
3630
3652
  "requires": [],
3631
3653
  "engines": {
@@ -3642,24 +3664,15 @@ const runtimes = {
3642
3664
  },
3643
3665
  "configFormat": "none",
3644
3666
  "artifactLayout": {
3645
- "global": [
3646
- {
3647
- "kind": "skills",
3648
- "destSubpath": "skills",
3649
- "prefix": "gsd-",
3650
- "nesting": "flat",
3651
- "recursive": false,
3652
- "converter": "convertClaudeCommandToWindsurfSkill"
3653
- }
3654
- ],
3667
+ "global": [],
3655
3668
  "local": [
3656
3669
  {
3657
- "kind": "skills",
3658
- "destSubpath": "skills",
3670
+ "kind": "commands",
3671
+ "destSubpath": "workflows",
3659
3672
  "prefix": "gsd-",
3660
3673
  "nesting": "flat",
3661
3674
  "recursive": false,
3662
- "converter": "convertClaudeCommandToWindsurfSkill"
3675
+ "converter": "convertClaudeCommandToWindsurfWorkflow"
3663
3676
  }
3664
3677
  ]
3665
3678
  },
@@ -582,6 +582,27 @@ function validateFeatureBody(cap) {
582
582
  'absolute path, or ".." segment) — it contains unsafe characters: ' + JSON.stringify(h.script),
583
583
  );
584
584
  }
585
+ // #1634: optional tool-scoping `matcher` (a settings.json concept — exact tool name,
586
+ // pipe-separated list, wildcard, or regex; e.g. "Write|Edit"). When present it must be a
587
+ // non-empty string without control characters; absent => match-all (omitted at projection
588
+ // so existing shipped capabilities are unchanged).
589
+ if (h.matcher !== undefined) {
590
+ if (typeof h.matcher !== 'string' || h.matcher.length === 0) {
591
+ errors.push('hooks[' + i + '].matcher must be a non-empty string when present');
592
+ } else {
593
+ // Reject ASCII control characters (0x00-0x1f and 0x7f DEL) via char codes — a literal
594
+ // control-char range regex trips ESLint's no-control-regex rule, and char codes are
595
+ // equally precise.
596
+ let hasControl = false;
597
+ for (let c = 0; c < h.matcher.length; c++) {
598
+ const code = h.matcher.charCodeAt(c);
599
+ if (code < 0x20 || code === 0x7f) { hasControl = true; break; }
600
+ }
601
+ if (hasControl) {
602
+ errors.push('hooks[' + i + '].matcher must not contain control characters');
603
+ }
604
+ }
605
+ }
585
606
  }
586
607
  }
587
608
  }
@@ -665,6 +686,7 @@ const VALID_CONVERTER_NAMES = new Set([
665
686
  'convertClaudeCommandToOpencodeSkill',
666
687
  'convertClaudeCommandToTraeSkill',
667
688
  'convertClaudeCommandToWindsurfSkill',
689
+ 'convertClaudeCommandToWindsurfWorkflow',
668
690
  // agent converters (#1173 — descriptor-driven agent conversion wiring)
669
691
  'convertClaudeAgentToCopilotAgent',
670
692
  'convertClaudeAgentToAntigravityAgent',