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.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +2 -1
- package/SKILL.md +17 -2
- package/cli/phases.mjs +2 -2
- package/cli/util.mjs +4 -1
- package/docs/orchid-sdd-design.md +7 -2
- package/package.json +3 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "orchid-sdd",
|
|
3
3
|
"displayName": "orchid-sdd",
|
|
4
|
-
"version": "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.
|
|
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
|
-
-
|
|
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
|
-
|
|
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
|
|
100
|
-
closed: "
|
|
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
|
-
|
|
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.
|
|
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",
|