@agentic-coding-framework/orchestrator-core 0.1.2 → 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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=dispatch.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/dispatch.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,373 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const os_1 = require("os");
7
+ const state_1 = require("../state");
8
+ const dispatch_1 = require("../dispatch");
9
+ const rules_1 = require("../rules");
10
+ (0, vitest_1.describe)("dispatch", () => {
11
+ let tempDir;
12
+ (0, vitest_1.beforeEach)(() => {
13
+ tempDir = (0, fs_1.mkdtempSync)((0, path_1.join)((0, os_1.tmpdir)(), "dispatch-test-"));
14
+ });
15
+ (0, vitest_1.afterEach)(() => {
16
+ (0, fs_1.rmSync)(tempDir, { recursive: true, force: true });
17
+ });
18
+ /** Helper: init project + start a story at a specific step/status */
19
+ function setupState(overrides) {
20
+ const { state } = (0, state_1.initState)(tempDir, "test-app");
21
+ Object.assign(state, overrides);
22
+ (0, state_1.writeState)(tempDir, state);
23
+ return state;
24
+ }
25
+ /** Helper: write a HANDOFF.md file */
26
+ function writeHandoff(content) {
27
+ const aiDir = (0, path_1.join)(tempDir, ".ai");
28
+ (0, fs_1.mkdirSync)(aiDir, { recursive: true });
29
+ (0, fs_1.writeFileSync)((0, path_1.join)(aiDir, "HANDOFF.md"), content, "utf-8");
30
+ }
31
+ // ── dispatch() ────────────────────────────────────────────────────────────
32
+ (0, vitest_1.describe)("dispatch()", () => {
33
+ (0, vitest_1.it)("returns done when step is done", () => {
34
+ setupState({ story: "US-001", step: "done", status: "pass" });
35
+ const result = (0, dispatch_1.dispatch)(tempDir);
36
+ (0, vitest_1.expect)(result.type).toBe("done");
37
+ });
38
+ (0, vitest_1.it)("dispatches pending bootstrap step", () => {
39
+ setupState({ step: "bootstrap", status: "pending" });
40
+ const result = (0, dispatch_1.dispatch)(tempDir);
41
+ (0, vitest_1.expect)(result.type).toBe("dispatched");
42
+ if (result.type === "dispatched") {
43
+ (0, vitest_1.expect)(result.step).toBe("bootstrap");
44
+ (0, vitest_1.expect)(result.attempt).toBe(1);
45
+ (0, vitest_1.expect)(result.prompt).toContain("Bootstrap");
46
+ }
47
+ });
48
+ (0, vitest_1.it)("advances from pass to next step", () => {
49
+ setupState({
50
+ story: "US-001",
51
+ step: "bdd",
52
+ status: "pass",
53
+ attempt: 1,
54
+ max_attempts: 3,
55
+ });
56
+ const result = (0, dispatch_1.dispatch)(tempDir);
57
+ (0, vitest_1.expect)(result.type).toBe("dispatched");
58
+ if (result.type === "dispatched") {
59
+ (0, vitest_1.expect)(result.step).toBe("sdd-delta");
60
+ (0, vitest_1.expect)(result.attempt).toBe(1);
61
+ }
62
+ });
63
+ (0, vitest_1.it)("retries on failing with no specific reason", () => {
64
+ setupState({
65
+ story: "US-001",
66
+ step: "impl",
67
+ status: "failing",
68
+ attempt: 2,
69
+ max_attempts: 5,
70
+ reason: null,
71
+ });
72
+ const result = (0, dispatch_1.dispatch)(tempDir);
73
+ (0, vitest_1.expect)(result.type).toBe("dispatched");
74
+ if (result.type === "dispatched") {
75
+ (0, vitest_1.expect)(result.step).toBe("impl");
76
+ (0, vitest_1.expect)(result.attempt).toBe(3);
77
+ }
78
+ });
79
+ (0, vitest_1.it)("routes constitution_violation from impl to sdd-delta", () => {
80
+ setupState({
81
+ story: "US-001",
82
+ step: "impl",
83
+ status: "failing",
84
+ attempt: 1,
85
+ max_attempts: 5,
86
+ reason: "constitution_violation",
87
+ });
88
+ const result = (0, dispatch_1.dispatch)(tempDir);
89
+ (0, vitest_1.expect)(result.type).toBe("dispatched");
90
+ if (result.type === "dispatched") {
91
+ (0, vitest_1.expect)(result.step).toBe("sdd-delta");
92
+ (0, vitest_1.expect)(result.attempt).toBe(1);
93
+ }
94
+ });
95
+ (0, vitest_1.it)("blocks when max_attempts exhausted", () => {
96
+ setupState({
97
+ story: "US-001",
98
+ step: "impl",
99
+ status: "failing",
100
+ attempt: 5,
101
+ max_attempts: 5,
102
+ });
103
+ const result = (0, dispatch_1.dispatch)(tempDir);
104
+ (0, vitest_1.expect)(result.type).toBe("blocked");
105
+ });
106
+ (0, vitest_1.it)("pauses at review step", () => {
107
+ setupState({
108
+ story: "US-001",
109
+ step: "review",
110
+ status: "pending",
111
+ attempt: 1,
112
+ max_attempts: 1,
113
+ });
114
+ const result = (0, dispatch_1.dispatch)(tempDir);
115
+ (0, vitest_1.expect)(result.type).toBe("needs_human");
116
+ });
117
+ (0, vitest_1.it)("returns already_running for running state", () => {
118
+ setupState({
119
+ story: "US-001",
120
+ step: "impl",
121
+ status: "running",
122
+ dispatched_at: new Date().toISOString(),
123
+ timeout_min: 10,
124
+ });
125
+ const result = (0, dispatch_1.dispatch)(tempDir);
126
+ (0, vitest_1.expect)(result.type).toBe("already_running");
127
+ });
128
+ (0, vitest_1.it)("returns timeout for expired running state", () => {
129
+ setupState({
130
+ story: "US-001",
131
+ step: "impl",
132
+ status: "running",
133
+ dispatched_at: new Date(Date.now() - 15 * 60_000).toISOString(),
134
+ timeout_min: 10,
135
+ });
136
+ const result = (0, dispatch_1.dispatch)(tempDir);
137
+ (0, vitest_1.expect)(result.type).toBe("timeout");
138
+ });
139
+ (0, vitest_1.it)("advances through review when pass", () => {
140
+ setupState({
141
+ story: "US-001",
142
+ step: "review",
143
+ status: "pass",
144
+ attempt: 1,
145
+ max_attempts: 1,
146
+ });
147
+ const result = (0, dispatch_1.dispatch)(tempDir);
148
+ (0, vitest_1.expect)(result.type).toBe("dispatched");
149
+ if (result.type === "dispatched") {
150
+ (0, vitest_1.expect)(result.step).toBe("scaffold");
151
+ }
152
+ });
153
+ });
154
+ // ── buildPrompt() ─────────────────────────────────────────────────────────
155
+ (0, vitest_1.describe)("buildPrompt()", () => {
156
+ (0, vitest_1.it)("includes step name and story", () => {
157
+ const state = { ...(0, state_1.createInitialState)("app"), story: "US-005", step: "impl", attempt: 1 };
158
+ const rule = (0, rules_1.getRule)("impl");
159
+ const prompt = (0, dispatch_1.buildPrompt)(state, rule);
160
+ (0, vitest_1.expect)(prompt).toContain("Implementation");
161
+ (0, vitest_1.expect)(prompt).toContain("US-005");
162
+ });
163
+ (0, vitest_1.it)("includes attempt info when > 1", () => {
164
+ const state = { ...(0, state_1.createInitialState)("app"), story: "US-005", step: "impl", attempt: 3, max_attempts: 5 };
165
+ const rule = (0, rules_1.getRule)("impl");
166
+ const prompt = (0, dispatch_1.buildPrompt)(state, rule);
167
+ (0, vitest_1.expect)(prompt).toContain("Attempt 3 of 5");
168
+ });
169
+ (0, vitest_1.it)("omits attempt info when = 1", () => {
170
+ const state = { ...(0, state_1.createInitialState)("app"), story: "US-005", step: "impl", attempt: 1 };
171
+ const rule = (0, rules_1.getRule)("impl");
172
+ const prompt = (0, dispatch_1.buildPrompt)(state, rule);
173
+ (0, vitest_1.expect)(prompt).not.toContain("Attempt");
174
+ });
175
+ (0, vitest_1.it)("includes human_note when present", () => {
176
+ const state = { ...(0, state_1.createInitialState)("app"), story: "US-005", step: "impl", attempt: 1, human_note: "Fix the timezone bug" };
177
+ const rule = (0, rules_1.getRule)("impl");
178
+ const prompt = (0, dispatch_1.buildPrompt)(state, rule);
179
+ (0, vitest_1.expect)(prompt).toContain("Fix the timezone bug");
180
+ (0, vitest_1.expect)(prompt).toContain("Human Instruction");
181
+ });
182
+ (0, vitest_1.it)("includes HANDOFF output instructions", () => {
183
+ const state = { ...(0, state_1.createInitialState)("app"), story: "US-005", step: "bdd", attempt: 1 };
184
+ const rule = (0, rules_1.getRule)("bdd");
185
+ const prompt = (0, dispatch_1.buildPrompt)(state, rule);
186
+ (0, vitest_1.expect)(prompt).toContain("YAML front matter");
187
+ (0, vitest_1.expect)(prompt).toContain("needs_clarification");
188
+ (0, vitest_1.expect)(prompt).toContain("constitution_violation");
189
+ });
190
+ (0, vitest_1.it)("includes failing tests on retry", () => {
191
+ const state = {
192
+ ...(0, state_1.createInitialState)("app"),
193
+ story: "US-005",
194
+ step: "impl",
195
+ attempt: 2,
196
+ failing_tests: ["cart_test.go:TestApplyCoupon"],
197
+ };
198
+ const rule = (0, rules_1.getRule)("impl");
199
+ const prompt = (0, dispatch_1.buildPrompt)(state, rule);
200
+ (0, vitest_1.expect)(prompt).toContain("TestApplyCoupon");
201
+ });
202
+ });
203
+ // ── parseHandoff() ────────────────────────────────────────────────────────
204
+ (0, vitest_1.describe)("parseHandoff()", () => {
205
+ (0, vitest_1.it)("returns null when no HANDOFF.md", () => {
206
+ (0, vitest_1.expect)((0, dispatch_1.parseHandoff)(tempDir)).toBeNull();
207
+ });
208
+ (0, vitest_1.it)("parses YAML front matter", () => {
209
+ writeHandoff(`---
210
+ story: US-005
211
+ step: impl
212
+ attempt: 2
213
+ status: failing
214
+ reason: null
215
+ files_changed:
216
+ - internal/cart/service.go
217
+ - internal/discount/engine.go
218
+ tests_pass: 42
219
+ tests_fail: 2
220
+ tests_skip: 1
221
+ ---
222
+
223
+ # HANDOFF — US-005 impl attempt:2
224
+
225
+ ## What was done
226
+ - Fixed timezone issue
227
+ `);
228
+ const result = (0, dispatch_1.parseHandoff)(tempDir);
229
+ (0, vitest_1.expect)(result).not.toBeNull();
230
+ (0, vitest_1.expect)(result.story).toBe("US-005");
231
+ (0, vitest_1.expect)(result.step).toBe("impl");
232
+ (0, vitest_1.expect)(result.attempt).toBe(2);
233
+ (0, vitest_1.expect)(result.status).toBe("failing");
234
+ (0, vitest_1.expect)(result.reason).toBeNull();
235
+ (0, vitest_1.expect)(result.files_changed).toEqual([
236
+ "internal/cart/service.go",
237
+ "internal/discount/engine.go",
238
+ ]);
239
+ (0, vitest_1.expect)(result.tests_pass).toBe(42);
240
+ (0, vitest_1.expect)(result.tests_fail).toBe(2);
241
+ (0, vitest_1.expect)(result.body).toContain("Fixed timezone issue");
242
+ });
243
+ (0, vitest_1.it)("parses pass status", () => {
244
+ writeHandoff(`---
245
+ story: US-005
246
+ step: impl
247
+ attempt: 1
248
+ status: pass
249
+ reason: null
250
+ tests_pass: 44
251
+ tests_fail: 0
252
+ tests_skip: 0
253
+ ---
254
+
255
+ All tests pass.
256
+ `);
257
+ const result = (0, dispatch_1.parseHandoff)(tempDir);
258
+ (0, vitest_1.expect)(result.status).toBe("pass");
259
+ (0, vitest_1.expect)(result.tests_fail).toBe(0);
260
+ });
261
+ (0, vitest_1.it)("falls back to grep for old format", () => {
262
+ writeHandoff(`# HANDOFF
263
+
264
+ ## Status
265
+ NEEDS CLARIFICATION: the coupon stacking rules are undefined.
266
+ `);
267
+ const result = (0, dispatch_1.parseHandoff)(tempDir);
268
+ (0, vitest_1.expect)(result.status).toBe("failing");
269
+ (0, vitest_1.expect)(result.reason).toBe("needs_clarification");
270
+ });
271
+ (0, vitest_1.it)("fallback treats no keyword as pass", () => {
272
+ writeHandoff(`# HANDOFF
273
+
274
+ Everything done, all good.
275
+ `);
276
+ const result = (0, dispatch_1.parseHandoff)(tempDir);
277
+ (0, vitest_1.expect)(result.status).toBe("pass");
278
+ (0, vitest_1.expect)(result.reason).toBeNull();
279
+ });
280
+ });
281
+ // ── applyHandoff() ────────────────────────────────────────────────────────
282
+ (0, vitest_1.describe)("applyHandoff()", () => {
283
+ (0, vitest_1.it)("applies HANDOFF results to STATE", () => {
284
+ setupState({
285
+ story: "US-005",
286
+ step: "impl",
287
+ status: "running",
288
+ attempt: 2,
289
+ max_attempts: 5,
290
+ });
291
+ writeHandoff(`---
292
+ story: US-005
293
+ step: impl
294
+ attempt: 2
295
+ status: pass
296
+ reason: null
297
+ files_changed:
298
+ - internal/cart/service.go
299
+ tests_pass: 44
300
+ tests_fail: 0
301
+ tests_skip: 0
302
+ ---
303
+
304
+ All tests pass.
305
+ `);
306
+ const updated = (0, dispatch_1.applyHandoff)(tempDir);
307
+ (0, vitest_1.expect)(updated.status).toBe("pass");
308
+ (0, vitest_1.expect)(updated.tests?.pass).toBe(44);
309
+ (0, vitest_1.expect)(updated.files_changed).toEqual(["internal/cart/service.go"]);
310
+ (0, vitest_1.expect)(updated.completed_at).toBeTruthy();
311
+ });
312
+ (0, vitest_1.it)("marks failing when no HANDOFF exists", () => {
313
+ setupState({
314
+ story: "US-005",
315
+ step: "impl",
316
+ status: "running",
317
+ attempt: 1,
318
+ max_attempts: 5,
319
+ });
320
+ // No HANDOFF.md written — executor crashed
321
+ const updated = (0, dispatch_1.applyHandoff)(tempDir);
322
+ (0, vitest_1.expect)(updated.status).toBe("failing");
323
+ });
324
+ });
325
+ // ── Review approval/rejection ──────────────────────────────────────────────
326
+ (0, vitest_1.describe)("approveReview()", () => {
327
+ (0, vitest_1.it)("sets review to pass", () => {
328
+ setupState({ story: "US-001", step: "review", status: "needs_human" });
329
+ (0, dispatch_1.approveReview)(tempDir);
330
+ const state = (0, state_1.readState)(tempDir);
331
+ (0, vitest_1.expect)(state.status).toBe("pass");
332
+ });
333
+ (0, vitest_1.it)("attaches human note", () => {
334
+ setupState({ story: "US-001", step: "review", status: "needs_human" });
335
+ (0, dispatch_1.approveReview)(tempDir, "Looks good, but rename the module");
336
+ const state = (0, state_1.readState)(tempDir);
337
+ (0, vitest_1.expect)(state.human_note).toBe("Looks good, but rename the module");
338
+ });
339
+ (0, vitest_1.it)("throws if not at review step", () => {
340
+ setupState({ story: "US-001", step: "impl", status: "running" });
341
+ (0, vitest_1.expect)(() => (0, dispatch_1.approveReview)(tempDir)).toThrow("not \"review\"");
342
+ });
343
+ });
344
+ (0, vitest_1.describe)("rejectReview()", () => {
345
+ (0, vitest_1.it)("sets review to failing with reason", () => {
346
+ setupState({ story: "US-001", step: "review", status: "needs_human" });
347
+ (0, dispatch_1.rejectReview)(tempDir, "needs_clarification", "What does 'fast' mean?");
348
+ const state = (0, state_1.readState)(tempDir);
349
+ (0, vitest_1.expect)(state.status).toBe("failing");
350
+ (0, vitest_1.expect)(state.reason).toBe("needs_clarification");
351
+ (0, vitest_1.expect)(state.human_note).toBe("What does 'fast' mean?");
352
+ });
353
+ });
354
+ // ── startStory() ──────────────────────────────────────────────────────────
355
+ (0, vitest_1.describe)("startStory()", () => {
356
+ (0, vitest_1.it)("resets state for new story", () => {
357
+ setupState({
358
+ story: "US-001",
359
+ step: "done",
360
+ status: "pass",
361
+ attempt: 3,
362
+ });
363
+ const state = (0, dispatch_1.startStory)(tempDir, "US-002");
364
+ (0, vitest_1.expect)(state.story).toBe("US-002");
365
+ (0, vitest_1.expect)(state.step).toBe("bdd");
366
+ (0, vitest_1.expect)(state.attempt).toBe(1);
367
+ (0, vitest_1.expect)(state.status).toBe("pending");
368
+ (0, vitest_1.expect)(state.reason).toBeNull();
369
+ (0, vitest_1.expect)(state.tests).toBeNull();
370
+ });
371
+ });
372
+ });
373
+ //# sourceMappingURL=dispatch.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.test.js","sourceRoot":"","sources":["../../src/__tests__/dispatch.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rules.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/rules.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const rules_1 = require("../rules");
5
+ (0, vitest_1.describe)("rules", () => {
6
+ (0, vitest_1.describe)("STEP_RULES completeness", () => {
7
+ const expectedSteps = [
8
+ "bdd",
9
+ "sdd-delta",
10
+ "contract",
11
+ "review",
12
+ "scaffold",
13
+ "impl",
14
+ "verify",
15
+ "update-memory",
16
+ ];
17
+ (0, vitest_1.it)("has rules for all micro-waterfall steps", () => {
18
+ for (const step of expectedSteps) {
19
+ (0, vitest_1.expect)(rules_1.STEP_RULES).toHaveProperty(step);
20
+ }
21
+ });
22
+ (0, vitest_1.it)("every step has required fields", () => {
23
+ for (const [name, rule] of Object.entries(rules_1.STEP_RULES)) {
24
+ (0, vitest_1.expect)(rule.display_name, `${name}.display_name`).toBeTruthy();
25
+ (0, vitest_1.expect)(rule.next_on_pass, `${name}.next_on_pass`).toBeTruthy();
26
+ (0, vitest_1.expect)(rule.on_fail, `${name}.on_fail`).toHaveProperty("default");
27
+ (0, vitest_1.expect)(rule.max_attempts, `${name}.max_attempts`).toBeGreaterThan(0);
28
+ (0, vitest_1.expect)(typeof rule.requires_human).toBe("boolean");
29
+ (0, vitest_1.expect)(rule.step_instruction, `${name}.step_instruction`).toBeDefined();
30
+ }
31
+ });
32
+ (0, vitest_1.it)("next_on_pass forms a valid chain ending at done", () => {
33
+ let current = "bdd";
34
+ const visited = new Set();
35
+ while (current !== "done") {
36
+ if (visited.has(current)) {
37
+ throw new Error(`Cycle detected at step: ${current}`);
38
+ }
39
+ visited.add(current);
40
+ const rule = rules_1.STEP_RULES[current];
41
+ current = rule.next_on_pass;
42
+ }
43
+ // Should have visited all steps
44
+ (0, vitest_1.expect)(visited.size).toBe(expectedSteps.length);
45
+ });
46
+ });
47
+ (0, vitest_1.describe)("BOOTSTRAP_RULE", () => {
48
+ (0, vitest_1.it)("has next_on_pass = bdd", () => {
49
+ (0, vitest_1.expect)(rules_1.BOOTSTRAP_RULE.next_on_pass).toBe("bdd");
50
+ });
51
+ (0, vitest_1.it)("has max_attempts = 1", () => {
52
+ (0, vitest_1.expect)(rules_1.BOOTSTRAP_RULE.max_attempts).toBe(1);
53
+ });
54
+ });
55
+ (0, vitest_1.describe)("getRule", () => {
56
+ (0, vitest_1.it)("returns bootstrap rule", () => {
57
+ (0, vitest_1.expect)((0, rules_1.getRule)("bootstrap")).toBe(rules_1.BOOTSTRAP_RULE);
58
+ });
59
+ (0, vitest_1.it)("returns step rule for impl", () => {
60
+ (0, vitest_1.expect)((0, rules_1.getRule)("impl").display_name).toBe("Implementation");
61
+ });
62
+ (0, vitest_1.it)("throws for done", () => {
63
+ (0, vitest_1.expect)(() => (0, rules_1.getRule)("done")).toThrow("No rule for");
64
+ });
65
+ });
66
+ (0, vitest_1.describe)("resolvePaths", () => {
67
+ (0, vitest_1.it)("replaces {story} placeholder", () => {
68
+ const paths = ["docs/bdd/US-{story}.md", "docs/sdd.md"];
69
+ const resolved = (0, rules_1.resolvePaths)(paths, "US-005");
70
+ (0, vitest_1.expect)(resolved).toEqual(["docs/bdd/US-US-005.md", "docs/sdd.md"]);
71
+ });
72
+ (0, vitest_1.it)("handles multiple placeholders in one path", () => {
73
+ const paths = ["{story}/{story}.md"];
74
+ const resolved = (0, rules_1.resolvePaths)(paths, "US-001");
75
+ (0, vitest_1.expect)(resolved).toEqual(["US-001/US-001.md"]);
76
+ });
77
+ (0, vitest_1.it)("handles empty array", () => {
78
+ (0, vitest_1.expect)((0, rules_1.resolvePaths)([], "US-001")).toEqual([]);
79
+ });
80
+ });
81
+ (0, vitest_1.describe)("getDispatchMode", () => {
82
+ (0, vitest_1.it)("S → single", () => {
83
+ (0, vitest_1.expect)((0, rules_1.getDispatchMode)("S")).toBe("single");
84
+ });
85
+ (0, vitest_1.it)("L → team", () => {
86
+ (0, vitest_1.expect)((0, rules_1.getDispatchMode)("L")).toBe("team");
87
+ });
88
+ (0, vitest_1.it)("M with 0 parallel → single", () => {
89
+ (0, vitest_1.expect)((0, rules_1.getDispatchMode)("M", 0)).toBe("single");
90
+ });
91
+ (0, vitest_1.it)("M with 2+ parallel → team", () => {
92
+ (0, vitest_1.expect)((0, rules_1.getDispatchMode)("M", 2)).toBe("team");
93
+ });
94
+ (0, vitest_1.it)("unknown → single", () => {
95
+ (0, vitest_1.expect)((0, rules_1.getDispatchMode)("X")).toBe("single");
96
+ });
97
+ });
98
+ (0, vitest_1.describe)("getFailTarget", () => {
99
+ (0, vitest_1.it)("routes constitution_violation from impl to sdd-delta", () => {
100
+ (0, vitest_1.expect)((0, rules_1.getFailTarget)("impl", "constitution_violation")).toBe("sdd-delta");
101
+ });
102
+ (0, vitest_1.it)("routes needs_clarification from impl to review", () => {
103
+ (0, vitest_1.expect)((0, rules_1.getFailTarget)("impl", "needs_clarification")).toBe("review");
104
+ });
105
+ (0, vitest_1.it)("routes null reason from impl to impl (retry)", () => {
106
+ (0, vitest_1.expect)((0, rules_1.getFailTarget)("impl", null)).toBe("impl");
107
+ });
108
+ (0, vitest_1.it)("routes null reason from bdd to bdd (retry)", () => {
109
+ (0, vitest_1.expect)((0, rules_1.getFailTarget)("bdd", null)).toBe("bdd");
110
+ });
111
+ (0, vitest_1.it)("routes needs_clarification from review to bdd", () => {
112
+ (0, vitest_1.expect)((0, rules_1.getFailTarget)("review", "needs_clarification")).toBe("bdd");
113
+ });
114
+ });
115
+ (0, vitest_1.describe)("getStepSequence", () => {
116
+ (0, vitest_1.it)("returns 8 steps in order", () => {
117
+ const seq = (0, rules_1.getStepSequence)();
118
+ (0, vitest_1.expect)(seq).toHaveLength(8);
119
+ (0, vitest_1.expect)(seq[0]).toBe("bdd");
120
+ (0, vitest_1.expect)(seq[seq.length - 1]).toBe("update-memory");
121
+ });
122
+ });
123
+ });
124
+ //# sourceMappingURL=rules.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.test.js","sourceRoot":"","sources":["../../src/__tests__/rules.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=state.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/state.test.ts"],"names":[],"mappings":""}