sddx-workflow 0.8.0 → 0.9.1
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/dist/cli.js
CHANGED
|
@@ -135,6 +135,20 @@ var PROVIDERS = {
|
|
|
135
135
|
{ src: "codex-skills/review/SKILL.md", dest: ".agents/skills/review/SKILL.md" },
|
|
136
136
|
{ src: "codex-skills/finish/SKILL.md", dest: ".agents/skills/finish/SKILL.md" }
|
|
137
137
|
]
|
|
138
|
+
},
|
|
139
|
+
gemini: {
|
|
140
|
+
name: "Gemini CLI",
|
|
141
|
+
dirs: [],
|
|
142
|
+
files: [
|
|
143
|
+
{ src: "gemini.md", dest: "GEMINI.md" }
|
|
144
|
+
]
|
|
145
|
+
},
|
|
146
|
+
zed: {
|
|
147
|
+
name: "Zed",
|
|
148
|
+
dirs: [],
|
|
149
|
+
files: [
|
|
150
|
+
{ src: "zed-rules/sddx-workflow.md", dest: ".rules" }
|
|
151
|
+
]
|
|
138
152
|
}
|
|
139
153
|
};
|
|
140
154
|
var ALL_PROVIDER_IDS = Object.keys(PROVIDERS);
|
|
@@ -169,6 +183,7 @@ async function initCommand(options) {
|
|
|
169
183
|
}
|
|
170
184
|
}
|
|
171
185
|
const claudeExisted = import_fs2.default.existsSync(import_path2.default.join(cwd, "CLAUDE.md"));
|
|
186
|
+
const geminiExisted = import_fs2.default.existsSync(import_path2.default.join(cwd, "GEMINI.md"));
|
|
172
187
|
const agentsExisted = import_fs2.default.existsSync(import_path2.default.join(cwd, "AGENTS.md"));
|
|
173
188
|
for (const file of CORE_FILES) {
|
|
174
189
|
copyTemplate(file.src, import_path2.default.join(cwd, file.dest), force);
|
|
@@ -178,7 +193,6 @@ async function initCommand(options) {
|
|
|
178
193
|
copyTemplate(file.src, import_path2.default.join(cwd, file.dest), force);
|
|
179
194
|
}
|
|
180
195
|
}
|
|
181
|
-
const providerNames = selectedProviders.map((id) => PROVIDERS[id].name).join(", ");
|
|
182
196
|
console.log("");
|
|
183
197
|
console.log(" Done. Next steps:");
|
|
184
198
|
console.log("");
|
|
@@ -189,6 +203,13 @@ async function initCommand(options) {
|
|
|
189
203
|
} else {
|
|
190
204
|
console.log(" 2. CLAUDE.md already exists \u2014 add a reference to .sdd/ files manually");
|
|
191
205
|
}
|
|
206
|
+
if (selectedProviders.includes("gemini")) {
|
|
207
|
+
if (!geminiExisted) {
|
|
208
|
+
console.log(" GEMINI.md was created \u2014 Gemini CLI will read it automatically");
|
|
209
|
+
} else {
|
|
210
|
+
console.log(" GEMINI.md already exists \u2014 add a reference to .sdd/ files manually");
|
|
211
|
+
}
|
|
212
|
+
}
|
|
192
213
|
if (selectedProviders.includes("codex")) {
|
|
193
214
|
if (!agentsExisted) {
|
|
194
215
|
console.log(" AGENTS.md was created \u2014 Codex will read it automatically");
|
|
@@ -196,8 +217,19 @@ async function initCommand(options) {
|
|
|
196
217
|
console.log(" AGENTS.md already exists \u2014 add a reference to .sdd/ files manually");
|
|
197
218
|
}
|
|
198
219
|
}
|
|
199
|
-
|
|
200
|
-
|
|
220
|
+
const commandProviders = ["claude-code", "copilot", "codex"];
|
|
221
|
+
const withCommands = selectedProviders.filter((id) => commandProviders.includes(id));
|
|
222
|
+
const rulesOnly = selectedProviders.filter((id) => !commandProviders.includes(id));
|
|
223
|
+
if (withCommands.length > 0) {
|
|
224
|
+
const names = withCommands.map((id) => PROVIDERS[id].name).join(", ");
|
|
225
|
+
console.log(` 3. Slash commands ready in: ${names}. Type / to see them.`);
|
|
226
|
+
}
|
|
227
|
+
if (rulesOnly.length > 0) {
|
|
228
|
+
const names = rulesOnly.map((id) => PROVIDERS[id].name).join(", ");
|
|
229
|
+
const step = withCommands.length === 0 ? "3." : " ";
|
|
230
|
+
console.log(` ${step} Context rules installed for: ${names}. The agent reads workflow.md on every task.`);
|
|
231
|
+
}
|
|
232
|
+
console.log("");
|
|
201
233
|
}
|
|
202
234
|
|
|
203
235
|
// src/commands/add.ts
|
|
@@ -257,7 +289,8 @@ var WORKFLOW_FILES = [
|
|
|
257
289
|
{ src: "copilot-prompts/spec-tasks.prompt.md", dest: ".github/prompts/spec-tasks.prompt.md" },
|
|
258
290
|
{ src: "copilot-prompts/review.prompt.md", dest: ".github/prompts/review.prompt.md" },
|
|
259
291
|
{ src: "copilot-prompts/finish.prompt.md", dest: ".github/prompts/finish.prompt.md" },
|
|
260
|
-
{ src: "copilot-instructions.md", dest: ".github/copilot-instructions.md" }
|
|
292
|
+
{ src: "copilot-instructions.md", dest: ".github/copilot-instructions.md" },
|
|
293
|
+
{ src: "zed-rules/sddx-workflow.md", dest: ".rules" }
|
|
261
294
|
];
|
|
262
295
|
function updateCommand() {
|
|
263
296
|
const cwd = process.cwd();
|
package/package.json
CHANGED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Gemini — Project Context
|
|
2
|
+
|
|
3
|
+
This project uses the SDD Protocol. Read these files before starting any task:
|
|
4
|
+
|
|
5
|
+
1. **[.sdd/workflow.md](.sdd/workflow.md)** — commands, ceremony levels, and stop points
|
|
6
|
+
2. **[.sdd/project-overview.md](.sdd/project-overview.md)** — what this app is, its non-goals, domains, and definition of done
|
|
7
|
+
3. **[.sdd/conventions.md](.sdd/conventions.md)** — project-specific conventions and patterns
|
|
8
|
+
|
|
9
|
+
## Quick Reference
|
|
10
|
+
|
|
11
|
+
| Intent | Workflow |
|
|
12
|
+
|---|---|
|
|
13
|
+
| Initialize project context | `bootstrap` (new) · `bootstrap --scan` (existing) |
|
|
14
|
+
| Explore / research | `ask` |
|
|
15
|
+
| Surface and validate assumptions | `assume` |
|
|
16
|
+
| Fix a confirmed bug | `bugfix` → `finish` |
|
|
17
|
+
| Restructure without behavior change | `refactor` → `finish` |
|
|
18
|
+
| New feature | `spec-new` → `spec-plan` → `spec-tasks` → `review` → `finish` |
|
|
19
|
+
| Stage + commit after any work | `finish` |
|
|
20
|
+
|
|
21
|
+
Invoke any workflow by name (e.g., "run bootstrap", "start spec-new for auth-refresh").
|
|
22
|
+
Full definitions are in `.sdd/workflow.md`.
|
|
23
|
+
|
|
24
|
+
## Active Specs
|
|
25
|
+
|
|
26
|
+
<!-- List specs currently in progress — completed specs live in specs/_done/ and are not active context.
|
|
27
|
+
- specs/auth-refresh/ — in spec-tasks (task 3 of 5)
|
|
28
|
+
- specs/payments-v2/ — plan pending approval
|
|
29
|
+
-->
|
|
30
|
+
|
|
31
|
+
## Domain Files
|
|
32
|
+
|
|
33
|
+
Relevant domain context lives in `.sdd/domains/`. Read the relevant domain file before working in that area.
|
|
34
|
+
|
|
35
|
+
<!-- List domains present in this project, e.g.:
|
|
36
|
+
- [.sdd/domains/auth.md](.sdd/domains/auth.md)
|
|
37
|
+
- [.sdd/domains/payments.md](.sdd/domains/payments.md)
|
|
38
|
+
-->
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Requirements: <Feature Name>
|
|
2
2
|
|
|
3
|
+
> **Decisions and trade-offs only — no implementation.** Code snippets are allowed
|
|
4
|
+
> only when they reduce ambiguity (e.g. a function signature, an example input/output,
|
|
5
|
+
> a concrete error shape). If a snippet is doing anything more than that, it belongs
|
|
6
|
+
> in `2-plan.md`, not here.
|
|
7
|
+
|
|
3
8
|
## Status
|
|
4
9
|
|
|
5
10
|
- [ ] Draft
|
|
@@ -70,6 +75,24 @@ Scenario: <add one scenario per distinct behavior>
|
|
|
70
75
|
Business: "Must ship before the Q2 demo on May 15."
|
|
71
76
|
UX: "Must match the existing row layout in the info modal — no redesign." -->
|
|
72
77
|
|
|
78
|
+
## Assumptions
|
|
79
|
+
|
|
80
|
+
<!-- What this document is taking as given about users, business rules, or scope.
|
|
81
|
+
Different from Constraints (hard rules from outside) and Open Questions (unresolved).
|
|
82
|
+
Each assumption must be **falsifiable** — something the reader could correct.
|
|
83
|
+
Generic filler ("users want a good experience") is not an assumption.
|
|
84
|
+
|
|
85
|
+
Format: what + why we're assuming it + what changes if it's wrong.
|
|
86
|
+
|
|
87
|
+
Example:
|
|
88
|
+
1. **Users only need the most recent open timestamp, not a history.** — based on
|
|
89
|
+
the original feature request; nobody asked for history.
|
|
90
|
+
If wrong: the data model needs an access_log table, not a single column.
|
|
91
|
+
|
|
92
|
+
2. **"Opening" means clicking into the file viewer, not previewing in a list.** —
|
|
93
|
+
list previews are passive, not deliberate access.
|
|
94
|
+
If wrong: the trigger surface expands and we'd record many more events. -->
|
|
95
|
+
|
|
73
96
|
## Open Questions
|
|
74
97
|
|
|
75
98
|
<!-- Mark each question by whether it blocks planning or can be decided during it.
|
package/templates/workflow.md
CHANGED
|
@@ -101,10 +101,10 @@ Rules:
|
|
|
101
101
|
**Purpose:** Lightweight flow for confirmed bugs.
|
|
102
102
|
|
|
103
103
|
Stages (in order, no skipping):
|
|
104
|
-
1. **Reproduce** —
|
|
105
|
-
2. **Diagnose** — identify root cause, not
|
|
106
|
-
3. **Fix** —
|
|
107
|
-
4. **Validate** —
|
|
104
|
+
1. **Reproduce** — if the repo has a test suite, write a failing test that captures the bug before doing anything else. If no suite exists or a test is not feasible, document a deterministic minimal repro (exact steps, inputs, observed vs. expected output) and state explicitly why a test isn't viable. If the bug cannot be reproduced at all, STOP and report — do not guess at a fix.
|
|
105
|
+
2. **Diagnose** — identify the root cause, not the symptom. State the root cause in one sentence before proposing any fix. If you cannot, run /assume and surface what's missing.
|
|
106
|
+
3. **Fix** — the minimum change that addresses the stated root cause. Do not refactor surrounding code, rename adjacent symbols, tidy formatting, or fix unrelated issues you notice along the way (note them, don't fix them).
|
|
107
|
+
4. **Validate** — the failing test from Reproduce now passes, and the full suite is green. If Reproduce used a manual repro, walk it again and confirm the original symptom is gone.
|
|
108
108
|
|
|
109
109
|
Stop points:
|
|
110
110
|
- After Reproduce: if unable to reproduce, STOP and report
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
This project uses the SDD Protocol. Before starting any task, read:
|
|
2
|
+
|
|
3
|
+
1. `.sdd/workflow.md` — all commands, ceremony levels, and stop points
|
|
4
|
+
2. `.sdd/project-overview.md` — what this app is, its non-goals, and domains
|
|
5
|
+
3. `.sdd/conventions.md` — project-specific conventions and patterns
|
|
6
|
+
|
|
7
|
+
## Workflows
|
|
8
|
+
|
|
9
|
+
| Workflow | Purpose |
|
|
10
|
+
|---|---|
|
|
11
|
+
| `bootstrap` | Populate project context — interview or codebase scan |
|
|
12
|
+
| `ask` | Research only — no code changes |
|
|
13
|
+
| `assume` | List assumptions and stop for confirmation |
|
|
14
|
+
| `bugfix` | Reproduce → diagnose → fix → validate |
|
|
15
|
+
| `refactor` | Restructure without behavior change |
|
|
16
|
+
| `spec-new` | Scaffold a spec folder |
|
|
17
|
+
| `spec-plan` | Generate technical plan — stop for approval |
|
|
18
|
+
| `spec-tasks` | Execute plan one task at a time, TDD-first |
|
|
19
|
+
| `review` | Final audit before closing |
|
|
20
|
+
| `finish` | Stage files and generate commit message |
|
|
21
|
+
|
|
22
|
+
Invoke by name (e.g., "run bootstrap", "start spec-new for auth-refresh").
|
|
23
|
+
Full definitions are in `.sdd/workflow.md`.
|