smartlisa 0.1.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.
Files changed (155) hide show
  1. package/README.md +77 -0
  2. package/dist/cli.js +6517 -0
  3. package/dist/src/adapters/cli/formatter.d.ts +34 -0
  4. package/dist/src/adapters/cli/formatter.d.ts.map +1 -0
  5. package/dist/src/adapters/cli/formatter.js +254 -0
  6. package/dist/src/adapters/cli/formatter.js.map +1 -0
  7. package/dist/src/adapters/cli/index.d.ts +14 -0
  8. package/dist/src/adapters/cli/index.d.ts.map +1 -0
  9. package/dist/src/adapters/cli/index.js +781 -0
  10. package/dist/src/adapters/cli/index.js.map +1 -0
  11. package/dist/src/adapters/state/__tests__/api.test.d.ts +8 -0
  12. package/dist/src/adapters/state/__tests__/api.test.d.ts.map +1 -0
  13. package/dist/src/adapters/state/__tests__/api.test.js +500 -0
  14. package/dist/src/adapters/state/__tests__/api.test.js.map +1 -0
  15. package/dist/src/adapters/state/__tests__/filesystem.test.d.ts +7 -0
  16. package/dist/src/adapters/state/__tests__/filesystem.test.d.ts.map +1 -0
  17. package/dist/src/adapters/state/__tests__/filesystem.test.js +418 -0
  18. package/dist/src/adapters/state/__tests__/filesystem.test.js.map +1 -0
  19. package/dist/src/adapters/state/api.d.ts +148 -0
  20. package/dist/src/adapters/state/api.d.ts.map +1 -0
  21. package/dist/src/adapters/state/api.js +337 -0
  22. package/dist/src/adapters/state/api.js.map +1 -0
  23. package/dist/src/adapters/state/filesystem.d.ts +80 -0
  24. package/dist/src/adapters/state/filesystem.d.ts.map +1 -0
  25. package/dist/src/adapters/state/filesystem.js +228 -0
  26. package/dist/src/adapters/state/filesystem.js.map +1 -0
  27. package/dist/src/adapters/state/index.d.ts +9 -0
  28. package/dist/src/adapters/state/index.d.ts.map +1 -0
  29. package/dist/src/adapters/state/index.js +10 -0
  30. package/dist/src/adapters/state/index.js.map +1 -0
  31. package/dist/src/adapters/state/types.d.ts +131 -0
  32. package/dist/src/adapters/state/types.d.ts.map +1 -0
  33. package/dist/src/adapters/state/types.js +11 -0
  34. package/dist/src/adapters/state/types.js.map +1 -0
  35. package/dist/src/core/__tests__/context.test.d.ts +12 -0
  36. package/dist/src/core/__tests__/context.test.d.ts.map +1 -0
  37. package/dist/src/core/__tests__/context.test.js +528 -0
  38. package/dist/src/core/__tests__/context.test.js.map +1 -0
  39. package/dist/src/core/__tests__/discover.test.d.ts +2 -0
  40. package/dist/src/core/__tests__/discover.test.d.ts.map +1 -0
  41. package/dist/src/core/__tests__/discover.test.js +667 -0
  42. package/dist/src/core/__tests__/discover.test.js.map +1 -0
  43. package/dist/src/core/__tests__/engine.test.d.ts +2 -0
  44. package/dist/src/core/__tests__/engine.test.d.ts.map +1 -0
  45. package/dist/src/core/__tests__/engine.test.js +444 -0
  46. package/dist/src/core/__tests__/engine.test.js.map +1 -0
  47. package/dist/src/core/__tests__/feedback.test.d.ts +2 -0
  48. package/dist/src/core/__tests__/feedback.test.d.ts.map +1 -0
  49. package/dist/src/core/__tests__/feedback.test.js +351 -0
  50. package/dist/src/core/__tests__/feedback.test.js.map +1 -0
  51. package/dist/src/core/__tests__/plan.test.d.ts +2 -0
  52. package/dist/src/core/__tests__/plan.test.d.ts.map +1 -0
  53. package/dist/src/core/__tests__/plan.test.js +429 -0
  54. package/dist/src/core/__tests__/plan.test.js.map +1 -0
  55. package/dist/src/core/__tests__/schemas.test.d.ts +2 -0
  56. package/dist/src/core/__tests__/schemas.test.d.ts.map +1 -0
  57. package/dist/src/core/__tests__/schemas.test.js +614 -0
  58. package/dist/src/core/__tests__/schemas.test.js.map +1 -0
  59. package/dist/src/core/__tests__/state.test.d.ts +2 -0
  60. package/dist/src/core/__tests__/state.test.d.ts.map +1 -0
  61. package/dist/src/core/__tests__/state.test.js +1107 -0
  62. package/dist/src/core/__tests__/state.test.js.map +1 -0
  63. package/dist/src/core/__tests__/status.test.d.ts +2 -0
  64. package/dist/src/core/__tests__/status.test.d.ts.map +1 -0
  65. package/dist/src/core/__tests__/status.test.js +600 -0
  66. package/dist/src/core/__tests__/status.test.js.map +1 -0
  67. package/dist/src/core/__tests__/test-helpers.d.ts +28 -0
  68. package/dist/src/core/__tests__/test-helpers.d.ts.map +1 -0
  69. package/dist/src/core/__tests__/test-helpers.js +185 -0
  70. package/dist/src/core/__tests__/test-helpers.js.map +1 -0
  71. package/dist/src/core/__tests__/utils.test.d.ts +2 -0
  72. package/dist/src/core/__tests__/utils.test.d.ts.map +1 -0
  73. package/dist/src/core/__tests__/utils.test.js +276 -0
  74. package/dist/src/core/__tests__/utils.test.js.map +1 -0
  75. package/dist/src/core/__tests__/validate.test.d.ts +2 -0
  76. package/dist/src/core/__tests__/validate.test.d.ts.map +1 -0
  77. package/dist/src/core/__tests__/validate.test.js +354 -0
  78. package/dist/src/core/__tests__/validate.test.js.map +1 -0
  79. package/dist/src/core/commands/discover.d.ts +71 -0
  80. package/dist/src/core/commands/discover.d.ts.map +1 -0
  81. package/dist/src/core/commands/discover.js +687 -0
  82. package/dist/src/core/commands/discover.js.map +1 -0
  83. package/dist/src/core/commands/feedback.d.ts +49 -0
  84. package/dist/src/core/commands/feedback.d.ts.map +1 -0
  85. package/dist/src/core/commands/feedback.js +283 -0
  86. package/dist/src/core/commands/feedback.js.map +1 -0
  87. package/dist/src/core/commands/index.d.ts +11 -0
  88. package/dist/src/core/commands/index.d.ts.map +1 -0
  89. package/dist/src/core/commands/index.js +11 -0
  90. package/dist/src/core/commands/index.js.map +1 -0
  91. package/dist/src/core/commands/plan.d.ts +108 -0
  92. package/dist/src/core/commands/plan.d.ts.map +1 -0
  93. package/dist/src/core/commands/plan.js +621 -0
  94. package/dist/src/core/commands/plan.js.map +1 -0
  95. package/dist/src/core/commands/status.d.ts +72 -0
  96. package/dist/src/core/commands/status.d.ts.map +1 -0
  97. package/dist/src/core/commands/status.js +720 -0
  98. package/dist/src/core/commands/status.js.map +1 -0
  99. package/dist/src/core/commands/validate.d.ts +47 -0
  100. package/dist/src/core/commands/validate.d.ts.map +1 -0
  101. package/dist/src/core/commands/validate.js +608 -0
  102. package/dist/src/core/commands/validate.js.map +1 -0
  103. package/dist/src/core/engine.d.ts +294 -0
  104. package/dist/src/core/engine.d.ts.map +1 -0
  105. package/dist/src/core/engine.js +219 -0
  106. package/dist/src/core/engine.js.map +1 -0
  107. package/dist/src/core/index.d.ts +14 -0
  108. package/dist/src/core/index.d.ts.map +1 -0
  109. package/dist/src/core/index.js +18 -0
  110. package/dist/src/core/index.js.map +1 -0
  111. package/dist/src/core/prompts/context-helpers.d.ts +48 -0
  112. package/dist/src/core/prompts/context-helpers.d.ts.map +1 -0
  113. package/dist/src/core/prompts/context-helpers.js +206 -0
  114. package/dist/src/core/prompts/context-helpers.js.map +1 -0
  115. package/dist/src/core/prompts/discovery.d.ts +11 -0
  116. package/dist/src/core/prompts/discovery.d.ts.map +1 -0
  117. package/dist/src/core/prompts/discovery.js +179 -0
  118. package/dist/src/core/prompts/discovery.js.map +1 -0
  119. package/dist/src/core/prompts/feedback.d.ts +38 -0
  120. package/dist/src/core/prompts/feedback.d.ts.map +1 -0
  121. package/dist/src/core/prompts/feedback.js +292 -0
  122. package/dist/src/core/prompts/feedback.js.map +1 -0
  123. package/dist/src/core/prompts/index.d.ts +12 -0
  124. package/dist/src/core/prompts/index.d.ts.map +1 -0
  125. package/dist/src/core/prompts/index.js +12 -0
  126. package/dist/src/core/prompts/index.js.map +1 -0
  127. package/dist/src/core/prompts/planning.d.ts +15 -0
  128. package/dist/src/core/prompts/planning.d.ts.map +1 -0
  129. package/dist/src/core/prompts/planning.js +293 -0
  130. package/dist/src/core/prompts/planning.js.map +1 -0
  131. package/dist/src/core/prompts/status.d.ts +41 -0
  132. package/dist/src/core/prompts/status.d.ts.map +1 -0
  133. package/dist/src/core/prompts/status.js +270 -0
  134. package/dist/src/core/prompts/status.js.map +1 -0
  135. package/dist/src/core/prompts/validate.d.ts +62 -0
  136. package/dist/src/core/prompts/validate.d.ts.map +1 -0
  137. package/dist/src/core/prompts/validate.js +302 -0
  138. package/dist/src/core/prompts/validate.js.map +1 -0
  139. package/dist/src/core/schemas.d.ts +5045 -0
  140. package/dist/src/core/schemas.d.ts.map +1 -0
  141. package/dist/src/core/schemas.js +492 -0
  142. package/dist/src/core/schemas.js.map +1 -0
  143. package/dist/src/core/state.d.ts +156 -0
  144. package/dist/src/core/state.d.ts.map +1 -0
  145. package/dist/src/core/state.js +608 -0
  146. package/dist/src/core/state.js.map +1 -0
  147. package/dist/src/core/types.d.ts +167 -0
  148. package/dist/src/core/types.d.ts.map +1 -0
  149. package/dist/src/core/types.js +102 -0
  150. package/dist/src/core/types.js.map +1 -0
  151. package/dist/src/core/utils.d.ts +39 -0
  152. package/dist/src/core/utils.d.ts.map +1 -0
  153. package/dist/src/core/utils.js +208 -0
  154. package/dist/src/core/utils.js.map +1 -0
  155. package/package.json +77 -0
@@ -0,0 +1,600 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
2
+ import { createTestContext, cleanupTestContext, initializeTestProject, setupDiscoveryComplete, setupMilestonesApproved, setupEpicWithArtifacts, } from "./test-helpers.js";
3
+ import { overview } from "../commands/status.js";
4
+ describe("Status Script Integration", () => {
5
+ let ctx;
6
+ beforeEach(async () => {
7
+ ctx = await createTestContext();
8
+ await initializeTestProject(ctx);
9
+ vi.spyOn(process, "cwd").mockReturnValue(ctx.testDir);
10
+ vi.spyOn(console, "log").mockImplementation(() => { });
11
+ });
12
+ afterEach(async () => {
13
+ vi.restoreAllMocks();
14
+ await cleanupTestContext(ctx);
15
+ });
16
+ describe("Project Overview", () => {
17
+ it("should show basic project info", async () => {
18
+ const project = await ctx.state.readProject();
19
+ expect(project?.name).toBe("Test Project");
20
+ expect(project?.status).toBe("active");
21
+ });
22
+ it("should show project stats", async () => {
23
+ const project = await ctx.state.readProject();
24
+ expect(project?.stats.milestones).toBe(0);
25
+ expect(project?.stats.epics).toBe(0);
26
+ expect(project?.stats.stories).toBe(0);
27
+ expect(project?.stats.completed_stories).toBe(0);
28
+ });
29
+ it("should show updated stats after setup", async () => {
30
+ await setupDiscoveryComplete(ctx);
31
+ await setupMilestonesApproved(ctx);
32
+ await setupEpicWithArtifacts(ctx);
33
+ const project = await ctx.state.readProject();
34
+ expect(project?.stats.epics).toBe(1);
35
+ expect(project?.stats.stories).toBe(3);
36
+ expect(project?.stats.completed_stories).toBe(1);
37
+ });
38
+ });
39
+ describe("Overview Command Stats Calculation", () => {
40
+ beforeEach(async () => {
41
+ await setupDiscoveryComplete(ctx);
42
+ await setupMilestonesApproved(ctx);
43
+ await setupEpicWithArtifacts(ctx);
44
+ });
45
+ it("should calculate stats dynamically from actual stories", async () => {
46
+ const result = await overview(ctx.state);
47
+ expect(result.status).toBe("success");
48
+ expect(result.data.project.stats.stories).toBe(3);
49
+ expect(result.data.project.stats.completedStories).toBe(1);
50
+ expect(result.data.project.stats.epics).toBe(1);
51
+ expect(result.data.project.stats.milestones).toBe(1);
52
+ });
53
+ it("should show correct stats even when project.stats is stale", async () => {
54
+ // Simulate stale project.stats (e.g., stories=0 but completed_stories=4)
55
+ const project = await ctx.state.readProject();
56
+ if (project) {
57
+ project.stats.stories = 0;
58
+ project.stats.completed_stories = 99;
59
+ project.stats.epics = 0;
60
+ project.stats.milestones = 0;
61
+ await ctx.state.writeProject(project);
62
+ }
63
+ // Overview should calculate dynamically, not use stale values
64
+ const result = await overview(ctx.state);
65
+ expect(result.status).toBe("success");
66
+ // Should reflect actual data, not stale project.stats
67
+ expect(result.data.project.stats.stories).toBe(3);
68
+ expect(result.data.project.stats.completedStories).toBe(1);
69
+ expect(result.data.project.stats.epics).toBe(1);
70
+ expect(result.data.project.stats.milestones).toBe(1);
71
+ });
72
+ it("should update completed count when story status changes", async () => {
73
+ // Mark another story as done
74
+ const stories = await ctx.state.readStories("E1", "auth");
75
+ if (stories) {
76
+ const story = stories.stories.find((s) => s.id === "E1.S1");
77
+ if (story) {
78
+ story.status = "done";
79
+ }
80
+ await ctx.state.writeStories("E1", "auth", stories);
81
+ }
82
+ const result = await overview(ctx.state);
83
+ expect(result.status).toBe("success");
84
+ expect(result.data.project.stats.stories).toBe(3);
85
+ expect(result.data.project.stats.completedStories).toBe(2); // Now 2 done
86
+ });
87
+ it("should count stories across multiple epics", async () => {
88
+ // Add a second epic with stories
89
+ await ctx.state.createEpicDir("E2", "profile");
90
+ const epic2 = {
91
+ id: "E2",
92
+ slug: "profile",
93
+ name: "User Profile",
94
+ description: "User profile management",
95
+ milestone: "M1",
96
+ deferred: false,
97
+ created: new Date().toISOString(),
98
+ updated: new Date().toISOString(),
99
+ artifacts: {
100
+ prd: { status: "complete", version: 1 },
101
+ architecture: { status: "complete", version: 1 },
102
+ stories: { status: "complete", count: 2 },
103
+ },
104
+ dependencies: [],
105
+ stats: { requirements: 1, stories: 2, coverage: 100 },
106
+ };
107
+ await ctx.state.writeEpic(epic2);
108
+ const stories2 = {
109
+ epic_id: "E2",
110
+ stories: [
111
+ {
112
+ id: "E2.S1",
113
+ title: "View profile",
114
+ description: "View user profile",
115
+ type: "feature",
116
+ requirements: ["E2.R1"],
117
+ acceptance_criteria: ["Profile displayed"],
118
+ dependencies: [],
119
+ status: "done",
120
+ assignee: null,
121
+ },
122
+ {
123
+ id: "E2.S2",
124
+ title: "Edit profile",
125
+ description: "Edit user profile",
126
+ type: "feature",
127
+ requirements: ["E2.R1"],
128
+ acceptance_criteria: ["Profile updated"],
129
+ dependencies: ["E2.S1"],
130
+ status: "todo",
131
+ assignee: null,
132
+ },
133
+ ],
134
+ coverage: { "E2.R1": ["E2.S1", "E2.S2"] },
135
+ validation: { coverage_complete: true, all_links_valid: true },
136
+ };
137
+ await ctx.state.writeStories("E2", "profile", stories2);
138
+ // Add E2 to milestone
139
+ const index = await ctx.state.readMilestoneIndex();
140
+ if (index && index.milestones.length > 0) {
141
+ index.milestones[0].epics.push("E2");
142
+ await ctx.state.writeMilestoneIndex(index);
143
+ }
144
+ const result = await overview(ctx.state);
145
+ expect(result.status).toBe("success");
146
+ expect(result.data.project.stats.epics).toBe(2);
147
+ expect(result.data.project.stats.stories).toBe(5); // 3 from E1 + 2 from E2
148
+ expect(result.data.project.stats.completedStories).toBe(2); // 1 from E1 + 1 from E2
149
+ });
150
+ });
151
+ describe("Milestone Progress", () => {
152
+ beforeEach(async () => {
153
+ await setupDiscoveryComplete(ctx);
154
+ await setupMilestonesApproved(ctx);
155
+ });
156
+ it("should show milestone list", async () => {
157
+ const index = await ctx.state.readMilestoneIndex();
158
+ expect(index?.milestones).toHaveLength(1);
159
+ expect(index?.milestones[0].name).toBe("Foundation");
160
+ });
161
+ it("should calculate story progress per milestone", async () => {
162
+ await setupEpicWithArtifacts(ctx);
163
+ const index = await ctx.state.readMilestoneIndex();
164
+ const milestone = index?.milestones[0];
165
+ expect(milestone?.epics).toContain("E1");
166
+ // Get stories for the epic
167
+ const stories = await ctx.state.readStories("E1", "auth");
168
+ const total = stories?.stories.length || 0;
169
+ const completed = stories?.stories.filter((s) => s.status === "done").length || 0;
170
+ expect(total).toBe(3);
171
+ expect(completed).toBe(1);
172
+ });
173
+ });
174
+ describe("Epic Status", () => {
175
+ beforeEach(async () => {
176
+ await setupDiscoveryComplete(ctx);
177
+ await setupMilestonesApproved(ctx);
178
+ await setupEpicWithArtifacts(ctx);
179
+ });
180
+ it("should show epic list", async () => {
181
+ const epicDirs = await ctx.state.listEpicDirs();
182
+ expect(epicDirs).toHaveLength(1);
183
+ expect(epicDirs[0]).toBe("E1-auth");
184
+ });
185
+ it("should show epic details", async () => {
186
+ const result = await ctx.state.getEpicWithStatus("E1", "auth");
187
+ expect(result?.epic.name).toBe("Authentication");
188
+ // Status is derived: test helper creates a story with status "in_progress"
189
+ expect(result?.status).toBe("in_progress");
190
+ expect(result?.epic.artifacts.prd.status).toBe("complete");
191
+ });
192
+ });
193
+ describe("Board View", () => {
194
+ beforeEach(async () => {
195
+ await setupDiscoveryComplete(ctx);
196
+ await setupMilestonesApproved(ctx);
197
+ await setupEpicWithArtifacts(ctx);
198
+ });
199
+ it("should group stories by status", async () => {
200
+ const stories = await ctx.state.readStories("E1", "auth");
201
+ const byStatus = {};
202
+ stories?.stories.forEach((s) => {
203
+ byStatus[s.status] = (byStatus[s.status] || 0) + 1;
204
+ });
205
+ expect(byStatus.todo).toBe(1);
206
+ expect(byStatus.in_progress).toBe(1);
207
+ expect(byStatus.done).toBe(1);
208
+ });
209
+ });
210
+ describe("Story Details", () => {
211
+ beforeEach(async () => {
212
+ await setupDiscoveryComplete(ctx);
213
+ await setupMilestonesApproved(ctx);
214
+ await setupEpicWithArtifacts(ctx);
215
+ });
216
+ it("should show story by ID", async () => {
217
+ const stories = await ctx.state.readStories("E1", "auth");
218
+ const story = stories?.stories.find((s) => s.id === "E1.S1");
219
+ expect(story).toBeDefined();
220
+ expect(story?.title).toBe("Implement login API");
221
+ expect(story?.type).toBe("feature");
222
+ });
223
+ it("should show acceptance criteria", async () => {
224
+ const stories = await ctx.state.readStories("E1", "auth");
225
+ const story = stories?.stories[0];
226
+ expect(story?.acceptance_criteria).toBeDefined();
227
+ expect(story?.acceptance_criteria.length).toBeGreaterThan(0);
228
+ });
229
+ it("should show requirement links", async () => {
230
+ const stories = await ctx.state.readStories("E1", "auth");
231
+ const story = stories?.stories[0];
232
+ expect(story?.requirements).toContain("E1.R1");
233
+ });
234
+ it("should show dependencies", async () => {
235
+ const stories = await ctx.state.readStories("E1", "auth");
236
+ const story = stories?.stories.find((s) => s.id === "E1.S2");
237
+ expect(story?.dependencies).toContain("E1.S1");
238
+ });
239
+ });
240
+ describe("Story Context", () => {
241
+ beforeEach(async () => {
242
+ await setupDiscoveryComplete(ctx);
243
+ await setupMilestonesApproved(ctx);
244
+ await setupEpicWithArtifacts(ctx);
245
+ });
246
+ it("should provide full context for implementation", async () => {
247
+ // Read all context pieces
248
+ const epic = await ctx.state.readEpic("E1", "auth");
249
+ const prd = await ctx.state.readPrd("E1", "auth");
250
+ const arch = await ctx.state.readArchitecture("E1", "auth");
251
+ const stories = await ctx.state.readStories("E1", "auth");
252
+ const discoveryContext = await ctx.state.readDiscoveryContext();
253
+ const constraints = await ctx.state.readConstraints();
254
+ // All should be available
255
+ expect(epic).toBeDefined();
256
+ expect(prd).toBeDefined();
257
+ expect(arch).toBeDefined();
258
+ expect(stories).toBeDefined();
259
+ expect(discoveryContext).toBeDefined();
260
+ // Should have business context
261
+ expect(discoveryContext?.problem).toBe("Test problem");
262
+ expect(discoveryContext?.vision).toBe("Test vision");
263
+ });
264
+ });
265
+ describe("Story Lineage (Why)", () => {
266
+ beforeEach(async () => {
267
+ await setupDiscoveryComplete(ctx);
268
+ await setupMilestonesApproved(ctx);
269
+ await setupEpicWithArtifacts(ctx);
270
+ });
271
+ it("should trace story back to requirements", async () => {
272
+ const stories = await ctx.state.readStories("E1", "auth");
273
+ const story = stories?.stories[0];
274
+ expect(story?.requirements).toBeDefined();
275
+ expect(story?.requirements.length).toBeGreaterThan(0);
276
+ });
277
+ it("should trace story back to epic", async () => {
278
+ const epic = await ctx.state.readEpic("E1", "auth");
279
+ expect(epic?.name).toBe("Authentication");
280
+ expect(epic?.description).toBeDefined();
281
+ });
282
+ it("should trace epic back to milestone", async () => {
283
+ const epic = await ctx.state.readEpic("E1", "auth");
284
+ const index = await ctx.state.readMilestoneIndex();
285
+ const milestone = index?.milestones.find((m) => m.id === epic?.milestone);
286
+ expect(milestone).toBeDefined();
287
+ expect(milestone?.name).toBe("Foundation");
288
+ });
289
+ it("should include business context", async () => {
290
+ const context = await ctx.state.readDiscoveryContext();
291
+ expect(context?.problem).toBeDefined();
292
+ expect(context?.values?.length).toBeGreaterThan(0);
293
+ });
294
+ });
295
+ describe("Architecture Guidance (How)", () => {
296
+ beforeEach(async () => {
297
+ await setupDiscoveryComplete(ctx);
298
+ await setupMilestonesApproved(ctx);
299
+ await setupEpicWithArtifacts(ctx);
300
+ });
301
+ it("should provide architecture reference", async () => {
302
+ const arch = await ctx.state.readArchitecture("E1", "auth");
303
+ expect(arch).toContain("# Architecture");
304
+ expect(arch).toContain("Data Model");
305
+ expect(arch).toContain("API");
306
+ });
307
+ it("should show story dependencies status", async () => {
308
+ const stories = await ctx.state.readStories("E1", "auth");
309
+ const story = stories?.stories.find((s) => s.id === "E1.S2");
310
+ // S2 depends on S1
311
+ const dependencyId = story?.dependencies[0];
312
+ const dependency = stories?.stories.find((s) => s.id === dependencyId);
313
+ expect(dependency?.status).toBe("todo");
314
+ });
315
+ });
316
+ describe("Hierarchical Context Display", () => {
317
+ beforeEach(async () => {
318
+ await setupDiscoveryComplete(ctx);
319
+ await setupMilestonesApproved(ctx);
320
+ await setupEpicWithArtifacts(ctx);
321
+ });
322
+ describe("Project Context", () => {
323
+ it("should assemble project context with discovery", async () => {
324
+ const context = await ctx.state.assembleProjectContext();
325
+ expect(context.project.name).toBe("Test Project");
326
+ expect(context.project.status).toBe("active");
327
+ expect(context.discovery?.problem).toBe("Test problem");
328
+ expect(context.discovery?.vision).toBe("Test vision");
329
+ expect(context.discovery?.values).toHaveLength(1);
330
+ expect(context.discovery?.values?.[0].name).toBe("Simplicity");
331
+ });
332
+ it("should include constraints when present", async () => {
333
+ // Add constraints
334
+ const constraints = await ctx.state.readConstraints();
335
+ if (constraints) {
336
+ constraints.constraints = [
337
+ {
338
+ id: "C1",
339
+ type: "technical",
340
+ constraint: "Must use TypeScript",
341
+ impact: ["All code"],
342
+ },
343
+ ];
344
+ await ctx.state.writeConstraints(constraints);
345
+ }
346
+ const context = await ctx.state.assembleProjectContext();
347
+ expect(context.constraints?.constraints).toHaveLength(1);
348
+ expect(context.constraints?.constraints[0].constraint).toBe("Must use TypeScript");
349
+ });
350
+ it("should return null discovery when not complete", async () => {
351
+ // Reset discovery
352
+ const history = await ctx.state.readDiscoveryHistory();
353
+ if (history) {
354
+ history.is_complete = false;
355
+ history.completed = undefined;
356
+ await ctx.state.writeDiscoveryHistory(history);
357
+ }
358
+ const discContext = await ctx.state.readDiscoveryContext();
359
+ if (discContext) {
360
+ discContext.problem = undefined;
361
+ discContext.vision = undefined;
362
+ discContext.gathered = undefined;
363
+ await ctx.state.writeDiscoveryContext(discContext);
364
+ }
365
+ const context = await ctx.state.assembleProjectContext();
366
+ // Discovery context should still exist but with undefined values
367
+ expect(context.discovery?.problem).toBeUndefined();
368
+ expect(context.discovery?.vision).toBeUndefined();
369
+ });
370
+ });
371
+ describe("Milestone Context", () => {
372
+ it("should assemble milestone context with inherited project", async () => {
373
+ const context = await ctx.state.assembleMilestoneContext("M1");
374
+ expect(context.milestone.id).toBe("M1");
375
+ expect(context.milestone.name).toBe("Foundation");
376
+ expect(context.project.project.name).toBe("Test Project");
377
+ expect(context.project.discovery?.problem).toBe("Test problem");
378
+ });
379
+ it("should include sibling epics", async () => {
380
+ const context = await ctx.state.assembleMilestoneContext("M1");
381
+ expect(context.siblingEpics).toHaveLength(1);
382
+ expect(context.siblingEpics[0].id).toBe("E1");
383
+ expect(context.siblingEpics[0].name).toBe("Authentication");
384
+ });
385
+ it("should return null milestone discovery when not done", async () => {
386
+ const context = await ctx.state.assembleMilestoneContext("M1");
387
+ // No milestone discovery was set up
388
+ expect(context.milestoneDiscovery).toBeNull();
389
+ });
390
+ it("should include milestone discovery when available", async () => {
391
+ // Add milestone discovery
392
+ const now = new Date().toISOString();
393
+ await ctx.state.writeMilestoneDiscovery("M1", {
394
+ status: "complete",
395
+ problem: undefined,
396
+ scope: [],
397
+ out_of_scope: [],
398
+ success_criteria: ["Milestone M1 is done when auth works"],
399
+ constraints: [],
400
+ created: now,
401
+ updated: now,
402
+ source: "user_added",
403
+ element_type: "milestone",
404
+ element_id: "M1",
405
+ history: [],
406
+ });
407
+ const context = await ctx.state.assembleMilestoneContext("M1");
408
+ expect(context.milestoneDiscovery?.status).toBe("complete");
409
+ expect(context.milestoneDiscovery?.success_criteria).toContain("Milestone M1 is done when auth works");
410
+ });
411
+ });
412
+ describe("Epic Context", () => {
413
+ it("should assemble epic context with all inherited context", async () => {
414
+ const context = await ctx.state.assembleEpicContext("E1");
415
+ expect(context.epic.id).toBe("E1");
416
+ expect(context.epic.name).toBe("Authentication");
417
+ expect(context.milestone.id).toBe("M1");
418
+ expect(context.project.project.name).toBe("Test Project");
419
+ expect(context.project.discovery?.problem).toBe("Test problem");
420
+ });
421
+ it("should include artifact status in epic context", async () => {
422
+ const context = await ctx.state.assembleEpicContext("E1");
423
+ // Artifacts should be included (from EpicSchema)
424
+ expect(context.epic.artifacts).toBeDefined();
425
+ expect(context.epic.artifacts.prd.status).toBe("complete");
426
+ expect(context.epic.artifacts.prd.version).toBe(1);
427
+ expect(context.epic.artifacts.architecture.status).toBe("complete");
428
+ expect(context.epic.artifacts.stories.status).toBe("complete");
429
+ expect(context.epic.artifacts.stories.count).toBe(3);
430
+ // Stats should also be included
431
+ expect(context.epic.stats).toBeDefined();
432
+ expect(context.epic.stats.requirements).toBe(2);
433
+ expect(context.epic.stats.stories).toBe(3);
434
+ expect(context.epic.stats.coverage).toBe(100);
435
+ });
436
+ it("should include epic discovery when available", async () => {
437
+ // Add epic discovery
438
+ const now = new Date().toISOString();
439
+ await ctx.state.writeEpicDiscovery("E1", "auth", {
440
+ status: "complete",
441
+ problem: "Need secure authentication",
442
+ scope: ["Login", "Logout", "Session management"],
443
+ out_of_scope: ["OAuth", "SSO"],
444
+ success_criteria: ["Users can log in securely"],
445
+ constraints: [
446
+ { id: "EC1", type: "technical", constraint: "Use JWT", impact: [] },
447
+ ],
448
+ created: now,
449
+ updated: now,
450
+ source: "user_added",
451
+ element_type: "epic",
452
+ element_id: "E1",
453
+ history: [],
454
+ });
455
+ const context = await ctx.state.assembleEpicContext("E1");
456
+ expect(context.epicDiscovery?.status).toBe("complete");
457
+ expect(context.epicDiscovery?.problem).toBe("Need secure authentication");
458
+ expect(context.epicDiscovery?.scope).toContain("Login");
459
+ expect(context.epicDiscovery?.out_of_scope).toContain("OAuth");
460
+ expect(context.epicDiscovery?.constraints).toHaveLength(1);
461
+ });
462
+ it("should include dependencies with PRD/arch status", async () => {
463
+ // Create a second epic that E1 depends on
464
+ await ctx.state.createEpicDir("E2", "core");
465
+ const epic2 = {
466
+ id: "E2",
467
+ slug: "core",
468
+ name: "Core Framework",
469
+ description: "Core application framework",
470
+ milestone: "M1",
471
+ deferred: false,
472
+ created: new Date().toISOString(),
473
+ updated: new Date().toISOString(),
474
+ artifacts: {
475
+ prd: { status: "complete", version: 1 },
476
+ architecture: { status: "pending", version: 0 },
477
+ stories: { status: "pending", count: 0 },
478
+ },
479
+ dependencies: [],
480
+ stats: { requirements: 0, stories: 0, coverage: 0 },
481
+ };
482
+ await ctx.state.writeEpic(epic2);
483
+ await ctx.state.writePrd("E2", "core", "# Core PRD");
484
+ // Update E1 to depend on E2
485
+ const e1 = await ctx.state.readEpic("E1", "auth");
486
+ if (e1) {
487
+ e1.dependencies = ["E2"];
488
+ await ctx.state.writeEpic(e1);
489
+ }
490
+ const context = await ctx.state.assembleEpicContext("E1");
491
+ expect(context.dependencies).toHaveLength(1);
492
+ expect(context.dependencies[0].id).toBe("E2");
493
+ expect(context.dependencies[0].hasPrd).toBe(true);
494
+ expect(context.dependencies[0].hasArchitecture).toBe(false);
495
+ });
496
+ });
497
+ describe("Story Context", () => {
498
+ it("should assemble story context with full hierarchy", async () => {
499
+ const context = await ctx.state.assembleStoryContext("E1");
500
+ expect(context.epic.id).toBe("E1");
501
+ expect(context.milestone.id).toBe("M1");
502
+ expect(context.project.project.name).toBe("Test Project");
503
+ expect(context.prd).toContain("# E1: Authentication");
504
+ expect(context.architecture).toContain("# Architecture");
505
+ });
506
+ it("should include requirements extracted from PRD", async () => {
507
+ const context = await ctx.state.assembleStoryContext("E1");
508
+ expect(context.requirements.length).toBeGreaterThan(0);
509
+ expect(context.requirements.find(r => r.id === "E1.R1")).toBeDefined();
510
+ expect(context.requirements.find(r => r.id === "E1.R2")).toBeDefined();
511
+ });
512
+ it("should inherit all project context", async () => {
513
+ const context = await ctx.state.assembleStoryContext("E1");
514
+ expect(context.project.discovery?.problem).toBe("Test problem");
515
+ expect(context.project.discovery?.vision).toBe("Test vision");
516
+ expect(context.project.discovery?.values?.[0].name).toBe("Simplicity");
517
+ });
518
+ });
519
+ describe("JSON Output Format", () => {
520
+ it("should output valid JSON for project context", async () => {
521
+ const context = await ctx.state.assembleProjectContext();
522
+ const json = JSON.stringify(context);
523
+ const parsed = JSON.parse(json);
524
+ expect(parsed.project.name).toBe("Test Project");
525
+ expect(parsed.discovery.problem).toBe("Test problem");
526
+ });
527
+ it("should output valid JSON for epic context with artifacts", async () => {
528
+ const context = await ctx.state.assembleEpicContext("E1");
529
+ const json = JSON.stringify(context);
530
+ const parsed = JSON.parse(json);
531
+ expect(parsed.epic.id).toBe("E1");
532
+ expect(parsed.epic.artifacts).toBeDefined();
533
+ expect(parsed.epic.artifacts.prd.status).toBe("complete");
534
+ expect(parsed.epic.artifacts.architecture.status).toBe("complete");
535
+ expect(parsed.epic.artifacts.stories.count).toBe(3);
536
+ expect(parsed.epic.stats.coverage).toBe(100);
537
+ });
538
+ it("should output valid JSON for milestone context", async () => {
539
+ const context = await ctx.state.assembleMilestoneContext("M1");
540
+ const json = JSON.stringify(context);
541
+ const parsed = JSON.parse(json);
542
+ expect(parsed.milestone.id).toBe("M1");
543
+ expect(parsed.siblingEpics).toHaveLength(1);
544
+ expect(parsed.project.project.name).toBe("Test Project");
545
+ });
546
+ it("should output valid JSON for story context", async () => {
547
+ const context = await ctx.state.assembleStoryContext("E1");
548
+ const json = JSON.stringify(context);
549
+ const parsed = JSON.parse(json);
550
+ expect(parsed.prd).toContain("# E1: Authentication");
551
+ expect(parsed.architecture).toContain("# Architecture");
552
+ expect(parsed.requirements.length).toBeGreaterThan(0);
553
+ });
554
+ });
555
+ });
556
+ describe("Queue Status", () => {
557
+ beforeEach(async () => {
558
+ await setupDiscoveryComplete(ctx);
559
+ });
560
+ it("should show stuck queue", async () => {
561
+ const queue = await ctx.state.readStuckQueue();
562
+ expect(queue?.stuck).toEqual([]);
563
+ });
564
+ it("should show feedback queue", async () => {
565
+ const queue = await ctx.state.readFeedbackQueue();
566
+ expect(queue?.feedback).toEqual([]);
567
+ });
568
+ it("should show pending items count", async () => {
569
+ // Add stuck item
570
+ const stuckQueue = await ctx.state.readStuckQueue();
571
+ stuckQueue.stuck.push({
572
+ id: "stuck-001",
573
+ task_id: "task-001",
574
+ type: "ambiguous",
575
+ summary: "Unclear requirement",
576
+ attempts: [],
577
+ created: new Date().toISOString(),
578
+ priority: "high",
579
+ });
580
+ await ctx.state.writeStuckQueue(stuckQueue);
581
+ // Add feedback item
582
+ const feedbackQueue = await ctx.state.readFeedbackQueue();
583
+ feedbackQueue.feedback.push({
584
+ id: "fb-001",
585
+ type: "blocker",
586
+ source: { type: "execution" },
587
+ summary: "API unavailable",
588
+ affects: [],
589
+ status: "pending",
590
+ created: new Date().toISOString(),
591
+ });
592
+ await ctx.state.writeFeedbackQueue(feedbackQueue);
593
+ const stuck = await ctx.state.readStuckQueue();
594
+ const feedback = await ctx.state.readFeedbackQueue();
595
+ expect(stuck?.stuck).toHaveLength(1);
596
+ expect(feedback?.feedback).toHaveLength(1);
597
+ });
598
+ });
599
+ });
600
+ //# sourceMappingURL=status.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.test.js","sourceRoot":"","sources":["../../../../src/core/__tests__/status.test.ts"],"names":[],"mappings":"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"}