specky-sdd 3.8.0 → 3.10.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 (87) hide show
  1. package/.apm/agents/specky-design-architect.agent.md +1 -1
  2. package/.apm/agents/specky-implementer.agent.md +7 -7
  3. package/.apm/agents/specky-onboarding.agent.md +1 -1
  4. package/.apm/agents/specky-quality-reviewer.agent.md +5 -5
  5. package/.apm/agents/specky-release-engineer.agent.md +7 -7
  6. package/.apm/agents/specky-requirements-engineer.agent.md +6 -6
  7. package/.apm/agents/specky-research-analyst.agent.md +7 -7
  8. package/.apm/agents/specky-sdd-clarify.agent.md +3 -2
  9. package/.apm/agents/specky-sdd-init.agent.md +1 -1
  10. package/.apm/agents/specky-spec-engineer.agent.md +1 -1
  11. package/.apm/agents/specky-task-planner.agent.md +1 -1
  12. package/.apm/hooks/specky-run.sh +32 -0
  13. package/.apm/instructions/claude-instructions.instructions.md +74 -0
  14. package/.apm/instructions/copilot-instructions.instructions.md +3 -9
  15. package/.apm/instructions/cursor-instructions.instructions.md +69 -0
  16. package/.apm/instructions/opencode-instructions.instructions.md +45 -0
  17. package/.apm/prompts/specky-onboarding.prompt.md +1 -0
  18. package/.apm/prompts/specky-pipeline-status.prompt.md +1 -0
  19. package/.apm/skills/specky-design-architect/SKILL.md +21 -0
  20. package/.apm/skills/specky-onboarding/SKILL.md +8 -2
  21. package/.apm/skills/specky-quality-reviewer/SKILL.md +28 -0
  22. package/.apm/skills/specky-sdd-clarify/SKILL.md +25 -0
  23. package/.apm/skills/specky-sdd-init/SKILL.md +28 -0
  24. package/.apm/skills/specky-sdd-pipeline/SKILL.md +20 -19
  25. package/.apm/skills/specky-spec-engineer/SKILL.md +27 -0
  26. package/.apm/skills/specky-task-planner/SKILL.md +20 -0
  27. package/CHANGELOG.md +64 -0
  28. package/README.md +177 -82
  29. package/apm-policy.yml +7 -0
  30. package/apm.lock.yaml +29 -19
  31. package/apm.yml +2 -2
  32. package/config.yml +5 -3
  33. package/dist/cli/commands/compile.d.ts.map +1 -1
  34. package/dist/cli/commands/compile.js +36 -14
  35. package/dist/cli/commands/compile.js.map +1 -1
  36. package/dist/cli/commands/doctor.d.ts.map +1 -1
  37. package/dist/cli/commands/doctor.js +220 -12
  38. package/dist/cli/commands/doctor.js.map +1 -1
  39. package/dist/cli/commands/hooks.js +2 -2
  40. package/dist/cli/commands/hooks.js.map +1 -1
  41. package/dist/cli/commands/init.d.ts.map +1 -1
  42. package/dist/cli/commands/init.js +8 -5
  43. package/dist/cli/commands/init.js.map +1 -1
  44. package/dist/cli/lib/apm/lock.js +2 -2
  45. package/dist/cli/lib/apm/lock.js.map +1 -1
  46. package/dist/cli/lib/asset-copier.d.ts.map +1 -1
  47. package/dist/cli/lib/asset-copier.js +73 -36
  48. package/dist/cli/lib/asset-copier.js.map +1 -1
  49. package/dist/cli/lib/gitignore-writer.d.ts.map +1 -1
  50. package/dist/cli/lib/gitignore-writer.js +2 -1
  51. package/dist/cli/lib/gitignore-writer.js.map +1 -1
  52. package/dist/cli/lib/harness/compilers/claude.d.ts.map +1 -1
  53. package/dist/cli/lib/harness/compilers/claude.js +2 -2
  54. package/dist/cli/lib/harness/compilers/claude.js.map +1 -1
  55. package/dist/cli/lib/harness/compilers/common.d.ts +2 -0
  56. package/dist/cli/lib/harness/compilers/common.d.ts.map +1 -1
  57. package/dist/cli/lib/harness/compilers/common.js +6 -0
  58. package/dist/cli/lib/harness/compilers/common.js.map +1 -1
  59. package/dist/cli/lib/harness/compilers/cursor.d.ts.map +1 -1
  60. package/dist/cli/lib/harness/compilers/cursor.js +3 -2
  61. package/dist/cli/lib/harness/compilers/cursor.js.map +1 -1
  62. package/dist/cli/lib/harness/tool-map.js +2 -2
  63. package/dist/cli/lib/harness/tool-map.js.map +1 -1
  64. package/dist/cli/lib/mcp-writer.d.ts.map +1 -1
  65. package/dist/cli/lib/mcp-writer.js +2 -0
  66. package/dist/cli/lib/mcp-writer.js.map +1 -1
  67. package/dist/cli/lib/paths.d.ts +4 -0
  68. package/dist/cli/lib/paths.d.ts.map +1 -1
  69. package/dist/cli/lib/paths.js +4 -0
  70. package/dist/cli/lib/paths.js.map +1 -1
  71. package/dist/cursor-hooks.json +288 -0
  72. package/dist/index.js +2 -3
  73. package/dist/index.js.map +1 -1
  74. package/dist/services/state-machine.d.ts +22 -1
  75. package/dist/services/state-machine.d.ts.map +1 -1
  76. package/dist/services/state-machine.js +95 -5
  77. package/dist/services/state-machine.js.map +1 -1
  78. package/dist/templates/specification.md +2 -0
  79. package/dist/tools/pipeline.d.ts.map +1 -1
  80. package/dist/tools/pipeline.js +96 -42
  81. package/dist/tools/pipeline.js.map +1 -1
  82. package/dist/tools/tool-enforcement.d.ts.map +1 -1
  83. package/dist/tools/tool-enforcement.js +13 -0
  84. package/dist/tools/tool-enforcement.js.map +1 -1
  85. package/package.json +5 -6
  86. package/site/specky-icon.png +0 -0
  87. package/templates/specification.md +2 -0
@@ -29,27 +29,20 @@ The SDD pipeline consists of 10 sequential phases designed to transform feature
29
29
 
30
30
  **Phase 9: Release** — Release gate execution, documentation generation, PR creation, work item export, and changelog preparation.
31
31
 
32
- ## EARS Notation (Extended Requirements)
32
+ ## EARS Notation (Canonical 6 Patterns)
33
33
 
34
- EARS (Easy Approach to Requirements Syntax) provides five core patterns plus a complex pattern for unambiguous requirement capture:
34
+ EARS (Easy Approach to Requirements Syntax) uses six requirement patterns. Should/May express priority or obligation level inside a requirement; they are not separate Specky EARS patterns.
35
35
 
36
- 1. **Shall** Mandatory requirements. Format: "The system shall [action]."
37
- - Example: "The system shall validate email format before submission."
36
+ | Pattern | Format |
37
+ |---------|--------|
38
+ | Ubiquitous | The system shall... |
39
+ | Event-driven | When [event], the system shall... |
40
+ | State-driven | While [state], the system shall... |
41
+ | Optional | Where [condition], the system shall... |
42
+ | Unwanted | If [condition], then the system shall... |
43
+ | Complex | While [state], when [event], the system shall... |
38
44
 
39
- 2. **Should** — Desired but not mandatory. Format: "The system should [action]."
40
- - Example: "The system should display results within 2 seconds."
41
-
42
- 3. **May** — Optional enhancements. Format: "The system may [action]."
43
- - Example: "The system may support bulk import operations."
44
-
45
- 4. **If...Then...** — Conditional requirements. Format: "If [condition] then [action]."
46
- - Example: "If user is admin then system shall grant access to configuration panel."
47
-
48
- 5. **When...Then...** — Trigger-based requirements. Format: "When [event] then [action]."
49
- - Example: "When form is submitted then system shall validate all required fields."
50
-
51
- 6. **Complex** — Combination patterns for intricate business logic.
52
- - Example: "If user role is editor, when publish button is clicked, then system shall validate content and if valid shall queue for approval."
45
+ See `references/ears-notation.md` for examples and validation guidance.
53
46
 
54
47
  ## Model Recommendation Table
55
48
 
@@ -98,6 +91,14 @@ The pipeline includes 16 automation hooks for customization:
98
91
 
99
92
  Hooks are configured in `sdd-hooks.json` with PreToolUse and PostToolUse matchers.
100
93
 
94
+ ## Server-Enforced Analysis Gate (v3.10+)
95
+
96
+ Once the pipeline reaches **Analyze**, implement/verify/release MCP tools require `gate_decision: APPROVE` from `sdd_run_analysis`. The server blocks tools such as `sdd_implement`, `sdd_generate_iac`, and `sdd_create_pr` centrally via `validateGateForTool` — not only when calling `sdd_advance_phase`.
97
+
98
+ Rewriting SPECIFICATION.md, DESIGN.md, or TASKS.md invalidates the gate; re-run analysis before implementation.
99
+
100
+ Phase bookkeeping: write-tools call `ensurePhasesThrough` so skipping `sdd_advance_phase` does not leave orphan phases (e.g. Discover stuck in `in_progress`).
101
+
101
102
  ## Key Artifacts per Phase
102
103
 
103
104
  - **CONSTITUTION.md** (Phase 0 — Init) — Project charter, scope boundaries, success criteria, stakeholder register
@@ -132,7 +133,7 @@ Hooks are configured in `sdd-hooks.json` with PreToolUse and PostToolUse matcher
132
133
  @specky-implementer (Phase 7 — scaffold code + tests)
133
134
  ```
134
135
 
135
- See [copilot-instructions.instructions.md](../../instructions/copilot-instructions.instructions.md) for the full agent catalog.
136
+ See the target-specific instruction rule for the full runtime entry point guidance.
136
137
 
137
138
  ## Workflow Entry Points
138
139
 
@@ -0,0 +1,27 @@
1
+ ---
2
+ name: specky-spec-engineer
3
+ description: "Use for Phase 2 (Specify): write SPECIFICATION.md with EARS, REQ-IDs, and acceptance criteria. Trigger on sdd_write_spec, sdd_turnkey_spec, sdd_validate_ears, or /specky-specify."
4
+ ---
5
+
6
+ # Phase 2 — Specify
7
+
8
+ ## Prerequisites
9
+ - CONSTITUTION.md and RESEARCH.md exist on `spec/NNN-*`
10
+
11
+ ## Workflow
12
+ 1. Read CONSTITUTION.md and RESEARCH.md
13
+ 2. Call `sdd_write_spec` or `sdd_turnkey_spec`
14
+ 3. Optional: call `sdd_figma_to_spec`
15
+ 4. Call `sdd_validate_ears` and fix every failure
16
+ 5. Present SPECIFICATION.md for LGTM at the Phase 2 gate
17
+
18
+ ## EARS
19
+ Use the canonical 6 patterns in `../specky-sdd-pipeline/references/ears-notation.md`.
20
+
21
+ ## REQ-ID Format
22
+ `REQ-{DOMAIN}-{NNN}` — unique, uppercase domain, zero-padded sequence.
23
+
24
+ ## Hard Rules
25
+ - Every requirement needs an EARS pattern, REQ-ID, and measurable acceptance criteria
26
+ - Always run `sdd_validate_ears` before presenting
27
+ - Branch must be `spec/NNN-*`
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: specky-task-planner
3
+ description: "Use for Phase 5 (Tasks): produce TASKS.md and CHECKLIST.md with dependencies, REQ traceability, and complexity. Trigger on sdd_write_tasks, sdd_checklist, or /specky-tasks."
4
+ ---
5
+
6
+ # Phase 5 — Tasks
7
+
8
+ ## Prerequisites
9
+ - Approved DESIGN.md at the Phase 4 LGTM gate
10
+
11
+ ## Workflow
12
+ 1. Read DESIGN.md and SPECIFICATION.md
13
+ 2. Call `sdd_write_tasks` to create TASK-NNN items with [P], S/M/L/XL, dependencies, and REQ links
14
+ 3. Call `sdd_checklist` for security, testing, and NFR checks
15
+ 4. Present TASKS.md and CHECKLIST.md for LGTM at the Phase 5 gate
16
+
17
+ ## Hard Rules
18
+ - Every task traces to at least one REQ-ID
19
+ - Parallel tasks are marked `[P]`
20
+ - Dependencies are explicit
package/CHANGELOG.md CHANGED
@@ -7,6 +7,70 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [3.10.0] - 2026-07-13
11
+
12
+ Pipeline MCP hardening and harness completeness: server-enforced analysis gates, strict phase bookkeeping, and expanded per-target doctor/install coverage.
13
+
14
+ ### Added
15
+
16
+ - **Central analysis gate enforcement** via `validateGateForTool` in tool-enforcement — implement/verify/release tools require `gate_decision: APPROVE` once the pipeline reaches Analyze.
17
+ - **`ensurePhasesThrough`** closes orphan phase states when write-tools run without intermediate `sdd_advance_phase` calls.
18
+ - **`invalidateGateDecision`** clears stale approvals when SPEC/DESIGN/TASKS are rewritten.
19
+ - **Strict feature resolution** — wrong `feature_number` throws instead of silently falling back to `features[0]`.
20
+ - **OpenCode instruction primitive** (`.apm/instructions/opencode-instructions.instructions.md`) and target-aware `specky compile --target=opencode`.
21
+ - **Expanded Cursor instructions** with full agent/command/gate documentation.
22
+ - **Doctor checks:** Copilot hooks manifest, Claude hooks-in-settings, agent-skills skill count, OpenCode AGENTS.md advisory, improved workspace target inference (Cursor/OpenCode/agent-skills).
23
+ - **Regression tests:** pipeline gate MCP integration, Cursor full install, mcp-writer dual VS Code schema, expanded pipeline-honesty and state-integrity coverage.
24
+
25
+ ### Changed
26
+
27
+ - **`sdd_write_spec`** persists `discovery_answers` in SPECIFICATION.md, computes real EARS scores, blocks invalid EARS without `force: true`, and reorders phase recording (start-before-write).
28
+ - **`sdd_run_analysis`** marks Analyze completed only on APPROVE; BLOCK/CHANGES_NEEDED leave Analyze in progress.
29
+ - **`sdd_clarify`** no longer auto-completes Clarify — only starts the phase.
30
+ - **`sdd_discover`** completes Discover phase and uses correct MCP `readOnlyHint`.
31
+ - **`sdd_advance_phase`** loads `pipeline.require_lgtm` dynamically; LGTM check runs inside the state-machine lock.
32
+ - **VS Code MCP registration** writes both `servers` and `mcpServers` for legacy compatibility.
33
+ - **Claude/Cursor tool map** includes `MultiEdit` for `workspace.edit` parity with hook permissions.
34
+ - **Doctor default targets** returns empty scope with guidance when no install metadata or signals are found (no more silent claude+copilot default).
35
+
36
+ ### Fixed
37
+
38
+ - Analysis gate was only enforced on `sdd_advance_phase`, not on downstream implement tools.
39
+ - Phase state could become inconsistent when skipping `advance_phase` between discover and specify.
40
+ - Stale `gate_decision` survived artifact rewrites.
41
+ - Multi-feature silent fallback to the wrong feature directory.
42
+ - Cognitive-debt timing improved via start-before-write phase recording on write tools.
43
+ - Audited public documentation and website assets (carried from unreleased work).
44
+ - Aligned container security claims with the workflow (SBOM always; Cosign optional).
45
+
46
+ ## [3.9.0] - 2026-07-09
47
+
48
+ Cursor-native hook automation, six dedicated phase skills, full `specky doctor` install parity across harnesses, and cross-target instruction isolation fixes.
49
+
50
+ ### Added
51
+
52
+ - **Cursor-native hook automation.** `specky install --target=cursor` now installs `.cursor/hooks.json` (Cursor schema v1), the `.cursor/hooks/specky-run.sh` stdin adapter, and `.cursor/hooks/scripts/` (16 scripts). Blocking gates (artifact validation, phase gate, security scan, release gate) deny unsafe actions with `failClosed`; advisory gates warn without blocking.
53
+ - **Six dedicated phase companion skills** (14 total): `specky-sdd-init`, `specky-spec-engineer`, `specky-sdd-clarify`, `specky-design-architect`, `specky-task-planner`, and `specky-quality-reviewer`. Each phase agent loads its dedicated skill first; `specky-sdd-pipeline` remains the shared cross-phase overview.
54
+ - **Dedicated Cursor instruction primitive** compiled to `.cursor/rules/specky-sdd.mdc` with `alwaysApply` and a neutral title.
55
+ - **Dedicated Claude instruction primitive** compiled to `.claude/rules/specky-sdd.md` with neutral naming (no Copilot title or `@workspace` references).
56
+ - **Full `specky doctor` install parity** for Cursor (11 checks), Claude (10), Copilot (9), and OpenCode (7): agent/prompt/skill/hook-script counts, rule format, MCP registration, and a cross-target leakage scan.
57
+ - Regression suites: `cursor-target`, `copilot-target`, `claude-target`, and `opencode-target`.
58
+ - APM policy now allows the Cursor-native hook events (`sessionStart`, `beforeSubmitPrompt`, `beforeMCPExecution`, `afterMCPExecution`, `preToolUse`, `postToolUse`, `stop`).
59
+
60
+ ### Changed
61
+
62
+ - Renamed the hook-manifest generator `scripts/build-claude-hooks.mjs` → `scripts/build-hook-manifests.mjs`; it now emits Claude, Copilot, **and** Cursor manifests from the single `.apm/hooks/sdd-hooks.json` source of truth.
63
+ - `specky compile` is now target-aware: each target renders only its own instruction primitive (with the Copilot primitive as the neutral fallback) instead of concatenating every primitive into each root context file.
64
+ - EARS notation is unified to the canonical six patterns (Ubiquitous, Event-driven, State-driven, Optional, Unwanted, Complex) across the rule, phase agents, and the `specky-sdd-pipeline` skill.
65
+ - All slash-command prompts now carry an `argument-hint`.
66
+
67
+ ### Fixed
68
+
69
+ - Copilot installs no longer copy the Cursor/Claude instruction primitives into `.github/instructions/` (cross-target leak); only the Copilot instruction is installed and stale primitives are removed.
70
+ - Claude installs no longer receive the Copilot-named rule (`copilot-instructions.md`) or `@workspace`/`applyTo` leakage; the stale file is removed on install.
71
+ - Copilot instruction content: merged the orphaned `## Rule #7`/`## Rule #8` headings back into the Key Rules list and replaced the outdated `@workspace /prompt-name` invocation with `/prompt-name`.
72
+ - Corrected duplicated workflow step numbering in phase agents.
73
+
10
74
  ## [3.8.0] - 2026-07-07
11
75
 
12
76
  Wave 1 multi-harness APM targets (Cursor, OpenCode, Agent Skills) plus a multi-feature phase-advancement fix.