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.
- package/.apm/agents/specky-design-architect.agent.md +1 -1
- package/.apm/agents/specky-implementer.agent.md +7 -7
- package/.apm/agents/specky-onboarding.agent.md +1 -1
- package/.apm/agents/specky-quality-reviewer.agent.md +5 -5
- package/.apm/agents/specky-release-engineer.agent.md +7 -7
- package/.apm/agents/specky-requirements-engineer.agent.md +6 -6
- package/.apm/agents/specky-research-analyst.agent.md +7 -7
- package/.apm/agents/specky-sdd-clarify.agent.md +3 -2
- package/.apm/agents/specky-sdd-init.agent.md +1 -1
- package/.apm/agents/specky-spec-engineer.agent.md +1 -1
- package/.apm/agents/specky-task-planner.agent.md +1 -1
- package/.apm/hooks/specky-run.sh +32 -0
- package/.apm/instructions/claude-instructions.instructions.md +74 -0
- package/.apm/instructions/copilot-instructions.instructions.md +3 -9
- package/.apm/instructions/cursor-instructions.instructions.md +69 -0
- package/.apm/instructions/opencode-instructions.instructions.md +45 -0
- package/.apm/prompts/specky-onboarding.prompt.md +1 -0
- package/.apm/prompts/specky-pipeline-status.prompt.md +1 -0
- package/.apm/skills/specky-design-architect/SKILL.md +21 -0
- package/.apm/skills/specky-onboarding/SKILL.md +8 -2
- package/.apm/skills/specky-quality-reviewer/SKILL.md +28 -0
- package/.apm/skills/specky-sdd-clarify/SKILL.md +25 -0
- package/.apm/skills/specky-sdd-init/SKILL.md +28 -0
- package/.apm/skills/specky-sdd-pipeline/SKILL.md +20 -19
- package/.apm/skills/specky-spec-engineer/SKILL.md +27 -0
- package/.apm/skills/specky-task-planner/SKILL.md +20 -0
- package/CHANGELOG.md +64 -0
- package/README.md +177 -82
- package/apm-policy.yml +7 -0
- package/apm.lock.yaml +29 -19
- package/apm.yml +2 -2
- package/config.yml +5 -3
- package/dist/cli/commands/compile.d.ts.map +1 -1
- package/dist/cli/commands/compile.js +36 -14
- package/dist/cli/commands/compile.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +220 -12
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/hooks.js +2 -2
- package/dist/cli/commands/hooks.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +8 -5
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/lib/apm/lock.js +2 -2
- package/dist/cli/lib/apm/lock.js.map +1 -1
- package/dist/cli/lib/asset-copier.d.ts.map +1 -1
- package/dist/cli/lib/asset-copier.js +73 -36
- package/dist/cli/lib/asset-copier.js.map +1 -1
- package/dist/cli/lib/gitignore-writer.d.ts.map +1 -1
- package/dist/cli/lib/gitignore-writer.js +2 -1
- package/dist/cli/lib/gitignore-writer.js.map +1 -1
- package/dist/cli/lib/harness/compilers/claude.d.ts.map +1 -1
- package/dist/cli/lib/harness/compilers/claude.js +2 -2
- package/dist/cli/lib/harness/compilers/claude.js.map +1 -1
- package/dist/cli/lib/harness/compilers/common.d.ts +2 -0
- package/dist/cli/lib/harness/compilers/common.d.ts.map +1 -1
- package/dist/cli/lib/harness/compilers/common.js +6 -0
- package/dist/cli/lib/harness/compilers/common.js.map +1 -1
- package/dist/cli/lib/harness/compilers/cursor.d.ts.map +1 -1
- package/dist/cli/lib/harness/compilers/cursor.js +3 -2
- package/dist/cli/lib/harness/compilers/cursor.js.map +1 -1
- package/dist/cli/lib/harness/tool-map.js +2 -2
- package/dist/cli/lib/harness/tool-map.js.map +1 -1
- package/dist/cli/lib/mcp-writer.d.ts.map +1 -1
- package/dist/cli/lib/mcp-writer.js +2 -0
- package/dist/cli/lib/mcp-writer.js.map +1 -1
- package/dist/cli/lib/paths.d.ts +4 -0
- package/dist/cli/lib/paths.d.ts.map +1 -1
- package/dist/cli/lib/paths.js +4 -0
- package/dist/cli/lib/paths.js.map +1 -1
- package/dist/cursor-hooks.json +288 -0
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/dist/services/state-machine.d.ts +22 -1
- package/dist/services/state-machine.d.ts.map +1 -1
- package/dist/services/state-machine.js +95 -5
- package/dist/services/state-machine.js.map +1 -1
- package/dist/templates/specification.md +2 -0
- package/dist/tools/pipeline.d.ts.map +1 -1
- package/dist/tools/pipeline.js +96 -42
- package/dist/tools/pipeline.js.map +1 -1
- package/dist/tools/tool-enforcement.d.ts.map +1 -1
- package/dist/tools/tool-enforcement.js +13 -0
- package/dist/tools/tool-enforcement.js.map +1 -1
- package/package.json +5 -6
- package/site/specky-icon.png +0 -0
- 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 (
|
|
32
|
+
## EARS Notation (Canonical 6 Patterns)
|
|
33
33
|
|
|
34
|
-
EARS (Easy Approach to Requirements Syntax)
|
|
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
|
-
|
|
37
|
-
|
|
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
|
-
|
|
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
|
|
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.
|