orchid-sdd 0.2.0 → 0.3.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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "orchid-sdd",
3
3
  "displayName": "orchid-sdd",
4
- "version": "0.2.0",
4
+ "version": "0.3.0",
5
5
  "description": "Memory-backed, specification-driven development for Claude Code. Explicit-only /orchid-sdd:run workflow with a local Node CLI.",
6
6
  "author": {
7
7
  "name": "orchid-sdd contributors"
package/README.md CHANGED
@@ -220,6 +220,7 @@ orchid-sdd gate pass G1 --evidence intent/prd.md
220
220
  orchid-sdd discover
221
221
  # ... assess, plan, build, review ...
222
222
  orchid-sdd close --approve
223
+ # Agent: "Do you want to start the technical handover?"
223
224
  orchid-sdd handover --approve
224
225
  ```
225
226
 
@@ -1369,7 +1370,7 @@ gates marked below. The CLI cannot verify who invoked it, so the process must no
1369
1370
  The agent asks before a human gate and only runs the command after an explicit answer:
1370
1371
 
1371
1372
  ```text
1372
- Agent: "G1 evidence is ready: intent/prd.md. Do you approve?"
1373
+ Agent: "G1 evidence is ready: intent/prd.md. Approve the changes and move forward."
1373
1374
  Human: "Approved."
1374
1375
  Agent: orchid-sdd gate pass G1 --evidence intent/prd.md
1375
1376
  ```
package/SKILL.md CHANGED
@@ -121,6 +121,15 @@ A gate passes only with evidence. Never pass a gate on a promise.
121
121
 
122
122
  Use `--evidence <iteration-relative path>` or `--note "why"`; both are logged.
123
123
 
124
+ Before a human gate, end the message with this exact request:
125
+
126
+ > **Approve the changes and move forward.**
127
+ >
128
+ > Evidence: `<iteration-relative paths>`. Reply `approve` to record the gate, or list
129
+ > the changes required.
130
+
131
+ Wait for an explicit answer. Do not run `gate pass` or advance the phase first.
132
+
124
133
  The orchestrator executes `gate pass|fail` after the required authorization. The CLI
125
134
  records the decision; it cannot verify human identity or semantic quality. Never treat a
126
135
  passing command as proof of human approval, and never auto-pass a human gate. G5 is the
@@ -241,11 +250,15 @@ Artifacts: `reviews/logic-review.md`, `reviews/steering-review.md`.
241
250
  - Review behaviour against PRD/TRD/Gherkin, the integration diff, and the steering rules.
242
251
  - Walk every scenario; check invariants, scope creep, dropped requirements, copy, error
243
252
  states, accessibility, and prior regressions.
253
+ - Verify the change is explainable in business terms. The full human tutorial is Phase 8
254
+ (`HANDOVER.md` + `tour.md`); it is not a Phase 6 artifact.
244
255
  - For each steering rule, record `satisfied`, `not applicable`, `finding`, or `waived` with
245
256
  current evidence in `reviews/steering-review.md`; a blocking rule without evidence stops G6.
246
257
  - Findings become new prompts (spec version increments) or a waived risk with an ADR.
247
258
  - Loop capped at `reviews.logic.max_loops`; survivors become a follow-up iteration.
248
- - Pass G6, then `orchid-sdd close --approve`.
259
+ - End with the human-gate request: **Approve the changes and move forward.** Include the
260
+ verdict and evidence. After explicit approval, pass G6 and run
261
+ `orchid-sdd close --approve`.
249
262
 
250
263
  ## Phase 7 — Closure
251
264
 
@@ -255,10 +268,12 @@ Artifacts: `reviews/logic-review.md`, `reviews/steering-review.md`.
255
268
  `execution.release_strategy`; tag/freeze the iteration.
256
269
  - Mark closed and rebuild the manifest. A closed iteration is immutable.
257
270
  - If it will not ship, use `orchid-sdd abandon "<reason>"` instead.
271
+ - After closure, ask: **Do you want to start the technical handover?** Wait for the
272
+ answer before starting Phase 8.
258
273
 
259
274
  ## Phase 8 — Handover
260
275
 
261
- Generate `handover/HANDOVER.md` and `handover/tour.md`. Explain what changed, why, where
276
+ On confirmation, generate `handover/HANDOVER.md` and `handover/tour.md`. Explain what changed, why, where
262
277
  to look, how to run/test, how to roll back, and what remains. The tour is 10–15 ordered
263
278
  stops with anchors and test commands. Verify links and commands, then
264
279
  `orchid-sdd handover --approve`.
package/cli/phases.mjs CHANGED
@@ -96,8 +96,8 @@ function nextAction(phase) {
96
96
  assessment: "Run the impact lenses and negotiation; then `orchid-sdd gate pass G3 --evidence assessment/negotiation.md`.",
97
97
  planning: "Generate the prompt DAG and cost estimate; then `orchid-sdd gate pass G4 --evidence plan/plan.json`.",
98
98
  build: "Execute ready prompts with `orchid-sdd build --all`; then `orchid-sdd gate pass G5 --note \"all prompts reviewed\"`.",
99
- logic_review: "Verify steering, write reviews/steering-review.md, then `orchid-sdd gate pass G6 --evidence reviews/steering-review.md`.",
100
- closed: "Run `orchid-sdd handover`, then `orchid-sdd handover --approve`.",
99
+ logic_review: "Verify scenarios and steering, write reviews/logic-review.md and reviews/steering-review.md; ask the human \"Approve the changes and move forward.\" Then `orchid-sdd gate pass G6 --evidence reviews/logic-review.md`.",
100
+ closed: "Ask \"Do you want to start the technical handover?\" If yes, run `orchid-sdd handover`, then `orchid-sdd handover --approve`.",
101
101
  handover: "Iteration complete.",
102
102
  abandoned: "Start a new iteration with `orchid-sdd start`.",
103
103
  setup: "Run `orchid-sdd setup`.",
package/cli/util.mjs CHANGED
@@ -2,7 +2,10 @@ import crypto from "node:crypto";
2
2
  import fs from "node:fs";
3
3
  import path from "node:path";
4
4
 
5
- export const SKILL_VERSION = "0.2.0";
5
+ const packageJson = JSON.parse(
6
+ fs.readFileSync(new URL("../package.json", import.meta.url), "utf8"),
7
+ );
8
+ export const SKILL_VERSION = packageJson.version;
6
9
  export const SCHEMA_VERSION = "1.0.0";
7
10
 
8
11
  export class OrchidError extends Error {
@@ -518,7 +518,9 @@ the caller or the semantic quality of the evidence. A passing command is therefo
518
518
  proof of human approval, and a human gate must never be auto-passed. G5 is the
519
519
  agent/reviewer gate; G2 requires human confirmation only when answers changed scope. When no
520
520
  agent is running, the developer runs the same command manually. The agent-facing rules are
521
- in `SKILL.md`.
521
+ in `SKILL.md`. At a human gate, the agent presents the evidence and ends with the exact
522
+ request: **Approve the changes and move forward.** It records the gate only after an explicit
523
+ answer.
522
524
 
523
525
  ### 4.7 Right-sizing and scope constraints
524
526
 
@@ -944,6 +946,8 @@ plan/ # the prompt folder for this spec
944
946
 
945
947
  **Output:** `reviews/logic-review.md`, with findings by severity and a verdict, plus `reviews/steering-review.md` mapping each active rule to evidence. A blocking rule with no verdict or current evidence stops G6. Logic review must not become a second technical review; technical findings go back to CR or assessment with the right persona.
946
948
 
949
+ The “explainable to a non-engineer” check verifies that the PM can state the behaviour in business terms. The full human tutorial — `handover/HANDOVER.md` and `handover/tour.md` — is generated and walked in Phase 8, after closure.
950
+
947
951
  - **Gaps or incoherences** → generate follow-up prompts in Phase 4, increment the spec version, and loop.
948
952
  - **Minor fixes** → small prompts, same loop.
949
953
  - **Loops are capped** at `reviews.logic.max_loops` (default 2): findings that survive the cap become either a **follow-up iteration** (linked `followUpTo`, planned immediately) or a **waived risk** with an ADR. G6 records which path was taken; the loop never runs unbounded.
@@ -973,7 +977,8 @@ plan/ # the prompt folder for this spec
973
977
  - write `release-notes.md`: changes, breaking changes, migrations, rollback, version bump;
974
978
  - merge the integration branch into the default branch per `execution.release_strategy` (squash merge, release PR, or manual);
975
979
  - tag or prepare the release according to project convention;
976
- - mark the iteration `closed`; it becomes read-only.
980
+ - mark the iteration `closed`; it becomes read-only;
981
+ - ask whether the human wants to start the technical handover, and wait for the answer before Phase 8.
977
982
 
978
983
  **Rule:** archive, don't destroy. A closed iteration is immutable. Reopening it creates a new iteration linked with `followUpTo` and a new spec version. An iteration that will not ship is ended with `/orchid-sdd abandon` instead: same archival, no release, and the manifest records `abandoned` plus the reason.
979
984
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orchid-sdd",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "A memory-backed, specification-driven development (SDD) skill for coding agents.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -25,6 +25,7 @@
25
25
  },
26
26
  "scripts": {
27
27
  "test": "node --test tests/setup.test.mjs tests/memory.test.mjs tests/lifecycle.test.mjs tests/workspace.test.mjs tests/migration.test.mjs tests/plugin.test.mjs tests/personas.test.mjs tests/skill-install.test.mjs tests/profiles.test.mjs tests/steering.test.mjs tests/models.test.mjs tests/prompt-state.test.mjs",
28
+ "prepublishOnly": "npm test",
28
29
  "plugin:check": "node --test tests/plugin.test.mjs",
29
30
  "personas:check": "node --test tests/personas.test.mjs",
30
31
  "skill:check": "node --test tests/skill-install.test.mjs",
@@ -55,6 +56,7 @@
55
56
  "@commitlint/config-conventional": "^21.2.4",
56
57
  "@semantic-release/changelog": "^7.0.0",
57
58
  "@semantic-release/commit-analyzer": "^13.0.1",
59
+ "@semantic-release/exec": "^7.1.0",
58
60
  "@semantic-release/git": "^11.0.1",
59
61
  "@semantic-release/github": "^12.0.10",
60
62
  "@semantic-release/npm": "^13.2.0",