@kynetic-ai/spec 0.9.0 → 0.10.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 (291) hide show
  1. package/README.md +2 -1
  2. package/dist/acp/client.d.ts +13 -1
  3. package/dist/acp/client.d.ts.map +1 -1
  4. package/dist/acp/client.js +17 -2
  5. package/dist/acp/client.js.map +1 -1
  6. package/dist/acp/framing.d.ts +12 -1
  7. package/dist/acp/framing.d.ts.map +1 -1
  8. package/dist/acp/framing.js +27 -4
  9. package/dist/acp/framing.js.map +1 -1
  10. package/dist/agent-runtime/dispatch.d.ts +261 -0
  11. package/dist/agent-runtime/dispatch.d.ts.map +1 -0
  12. package/dist/agent-runtime/dispatch.js +791 -0
  13. package/dist/agent-runtime/dispatch.js.map +1 -0
  14. package/dist/agent-runtime/index.d.ts +11 -0
  15. package/dist/agent-runtime/index.d.ts.map +1 -0
  16. package/dist/agent-runtime/index.js +11 -0
  17. package/dist/agent-runtime/index.js.map +1 -0
  18. package/dist/agent-runtime/invocation.d.ts +86 -0
  19. package/dist/agent-runtime/invocation.d.ts.map +1 -0
  20. package/dist/agent-runtime/invocation.js +442 -0
  21. package/dist/agent-runtime/invocation.js.map +1 -0
  22. package/dist/agent-runtime/prompts.d.ts +50 -0
  23. package/dist/agent-runtime/prompts.d.ts.map +1 -0
  24. package/dist/agent-runtime/prompts.js +108 -0
  25. package/dist/agent-runtime/prompts.js.map +1 -0
  26. package/dist/agents/spawner.d.ts.map +1 -1
  27. package/dist/agents/spawner.js +60 -4
  28. package/dist/agents/spawner.js.map +1 -1
  29. package/dist/cli/batch-exec.d.ts.map +1 -1
  30. package/dist/cli/batch-exec.js +183 -81
  31. package/dist/cli/batch-exec.js.map +1 -1
  32. package/dist/cli/batch-write-buffer.d.ts +141 -0
  33. package/dist/cli/batch-write-buffer.d.ts.map +1 -0
  34. package/dist/cli/batch-write-buffer.js +400 -0
  35. package/dist/cli/batch-write-buffer.js.map +1 -0
  36. package/dist/cli/commands/agent.d.ts +20 -0
  37. package/dist/cli/commands/agent.d.ts.map +1 -0
  38. package/dist/cli/commands/agent.js +831 -0
  39. package/dist/cli/commands/agent.js.map +1 -0
  40. package/dist/cli/commands/agents.d.ts +1 -1
  41. package/dist/cli/commands/agents.d.ts.map +1 -1
  42. package/dist/cli/commands/agents.js +2 -1
  43. package/dist/cli/commands/agents.js.map +1 -1
  44. package/dist/cli/commands/batch.js +1 -1
  45. package/dist/cli/commands/batch.js.map +1 -1
  46. package/dist/cli/commands/inbox.d.ts.map +1 -1
  47. package/dist/cli/commands/inbox.js +46 -22
  48. package/dist/cli/commands/inbox.js.map +1 -1
  49. package/dist/cli/commands/index.d.ts +1 -0
  50. package/dist/cli/commands/index.d.ts.map +1 -1
  51. package/dist/cli/commands/index.js +1 -0
  52. package/dist/cli/commands/index.js.map +1 -1
  53. package/dist/cli/commands/init.d.ts.map +1 -1
  54. package/dist/cli/commands/init.js +4 -6
  55. package/dist/cli/commands/init.js.map +1 -1
  56. package/dist/cli/commands/item.d.ts.map +1 -1
  57. package/dist/cli/commands/item.js +34 -17
  58. package/dist/cli/commands/item.js.map +1 -1
  59. package/dist/cli/commands/log.js +1 -1
  60. package/dist/cli/commands/log.js.map +1 -1
  61. package/dist/cli/commands/merge-driver.d.ts.map +1 -1
  62. package/dist/cli/commands/merge-driver.js +8 -3
  63. package/dist/cli/commands/merge-driver.js.map +1 -1
  64. package/dist/cli/commands/meta.d.ts.map +1 -1
  65. package/dist/cli/commands/meta.js +159 -6
  66. package/dist/cli/commands/meta.js.map +1 -1
  67. package/dist/cli/commands/module.d.ts.map +1 -1
  68. package/dist/cli/commands/module.js +2 -1
  69. package/dist/cli/commands/module.js.map +1 -1
  70. package/dist/cli/commands/plan-import.js +19 -3
  71. package/dist/cli/commands/plan-import.js.map +1 -1
  72. package/dist/cli/commands/plan.d.ts.map +1 -1
  73. package/dist/cli/commands/plan.js +87 -43
  74. package/dist/cli/commands/plan.js.map +1 -1
  75. package/dist/cli/commands/ralph.d.ts +5 -51
  76. package/dist/cli/commands/ralph.d.ts.map +1 -1
  77. package/dist/cli/commands/ralph.js +52 -1462
  78. package/dist/cli/commands/ralph.js.map +1 -1
  79. package/dist/cli/commands/search.d.ts.map +1 -1
  80. package/dist/cli/commands/search.js +22 -13
  81. package/dist/cli/commands/search.js.map +1 -1
  82. package/dist/cli/commands/serve.d.ts.map +1 -1
  83. package/dist/cli/commands/serve.js +70 -11
  84. package/dist/cli/commands/serve.js.map +1 -1
  85. package/dist/cli/commands/session/checkpoint.d.ts.map +1 -1
  86. package/dist/cli/commands/session/checkpoint.js +7 -2
  87. package/dist/cli/commands/session/checkpoint.js.map +1 -1
  88. package/dist/cli/commands/session/commands.d.ts.map +1 -1
  89. package/dist/cli/commands/session/commands.js +15 -0
  90. package/dist/cli/commands/session/commands.js.map +1 -1
  91. package/dist/cli/commands/session/context.d.ts.map +1 -1
  92. package/dist/cli/commands/session/context.js +10 -5
  93. package/dist/cli/commands/session/context.js.map +1 -1
  94. package/dist/cli/commands/session/log.d.ts +1 -0
  95. package/dist/cli/commands/session/log.d.ts.map +1 -1
  96. package/dist/cli/commands/session/log.js +124 -8
  97. package/dist/cli/commands/session/log.js.map +1 -1
  98. package/dist/cli/commands/session/stale-close.d.ts +17 -0
  99. package/dist/cli/commands/session/stale-close.d.ts.map +1 -0
  100. package/dist/cli/commands/session/stale-close.js +378 -0
  101. package/dist/cli/commands/session/stale-close.js.map +1 -0
  102. package/dist/cli/commands/setup.d.ts +4 -0
  103. package/dist/cli/commands/setup.d.ts.map +1 -1
  104. package/dist/cli/commands/setup.js +150 -6
  105. package/dist/cli/commands/setup.js.map +1 -1
  106. package/dist/cli/commands/skill-crud.d.ts.map +1 -1
  107. package/dist/cli/commands/skill-crud.js +4 -3
  108. package/dist/cli/commands/skill-crud.js.map +1 -1
  109. package/dist/cli/commands/skill-diff.d.ts.map +1 -1
  110. package/dist/cli/commands/skill-diff.js +15 -0
  111. package/dist/cli/commands/skill-diff.js.map +1 -1
  112. package/dist/cli/commands/skill-install.d.ts.map +1 -1
  113. package/dist/cli/commands/skill-install.js +50 -18
  114. package/dist/cli/commands/skill-install.js.map +1 -1
  115. package/dist/cli/commands/task.d.ts.map +1 -1
  116. package/dist/cli/commands/task.js +552 -323
  117. package/dist/cli/commands/task.js.map +1 -1
  118. package/dist/cli/commands/tasks.js +1 -1
  119. package/dist/cli/commands/tasks.js.map +1 -1
  120. package/dist/cli/commands/triage.d.ts.map +1 -1
  121. package/dist/cli/commands/triage.js +37 -13
  122. package/dist/cli/commands/triage.js.map +1 -1
  123. package/dist/cli/commands/validate.d.ts.map +1 -1
  124. package/dist/cli/commands/validate.js +99 -50
  125. package/dist/cli/commands/validate.js.map +1 -1
  126. package/dist/cli/help/content.d.ts.map +1 -1
  127. package/dist/cli/help/content.js +5 -0
  128. package/dist/cli/help/content.js.map +1 -1
  129. package/dist/cli/index.d.ts.map +1 -1
  130. package/dist/cli/index.js +2 -1
  131. package/dist/cli/index.js.map +1 -1
  132. package/dist/cli/output.d.ts.map +1 -1
  133. package/dist/cli/output.js +5 -1
  134. package/dist/cli/output.js.map +1 -1
  135. package/dist/cli/validators.d.ts +4 -0
  136. package/dist/cli/validators.d.ts.map +1 -1
  137. package/dist/cli/validators.js +12 -0
  138. package/dist/cli/validators.js.map +1 -1
  139. package/dist/daemon/project-context.ts +22 -0
  140. package/dist/daemon/routes/agent-dispatch.ts +272 -0
  141. package/dist/daemon/server.ts +55 -20
  142. package/dist/daemon/websocket/handler.ts +67 -6
  143. package/dist/daemon/websocket/lifecycle.ts +19 -0
  144. package/dist/daemon/websocket/pubsub.ts +74 -3
  145. package/dist/export/html.d.ts.map +1 -1
  146. package/dist/export/html.js +5 -2
  147. package/dist/export/html.js.map +1 -1
  148. package/dist/export/triage.d.ts +1 -1
  149. package/dist/export/triage.d.ts.map +1 -1
  150. package/dist/export/triage.js +5 -3
  151. package/dist/export/triage.js.map +1 -1
  152. package/dist/parser/alignment.d.ts.map +1 -1
  153. package/dist/parser/alignment.js +6 -3
  154. package/dist/parser/alignment.js.map +1 -1
  155. package/dist/parser/assess.js +1 -1
  156. package/dist/parser/assess.js.map +1 -1
  157. package/dist/parser/config.d.ts +6 -6
  158. package/dist/parser/meta.d.ts.map +1 -1
  159. package/dist/parser/meta.js +9 -8
  160. package/dist/parser/meta.js.map +1 -1
  161. package/dist/parser/plan-document.d.ts +12 -12
  162. package/dist/parser/plans.d.ts +7 -0
  163. package/dist/parser/plans.d.ts.map +1 -1
  164. package/dist/parser/plans.js +100 -15
  165. package/dist/parser/plans.js.map +1 -1
  166. package/dist/parser/refs.d.ts +5 -0
  167. package/dist/parser/refs.d.ts.map +1 -1
  168. package/dist/parser/refs.js +17 -12
  169. package/dist/parser/refs.js.map +1 -1
  170. package/dist/parser/shadow.d.ts +1 -1
  171. package/dist/parser/shadow.d.ts.map +1 -1
  172. package/dist/parser/shadow.js +241 -76
  173. package/dist/parser/shadow.js.map +1 -1
  174. package/dist/parser/skill-render.d.ts.map +1 -1
  175. package/dist/parser/skill-render.js +6 -3
  176. package/dist/parser/skill-render.js.map +1 -1
  177. package/dist/parser/validate.d.ts.map +1 -1
  178. package/dist/parser/validate.js +70 -108
  179. package/dist/parser/validate.js.map +1 -1
  180. package/dist/parser/yaml.d.ts +24 -5
  181. package/dist/parser/yaml.d.ts.map +1 -1
  182. package/dist/parser/yaml.js +228 -66
  183. package/dist/parser/yaml.js.map +1 -1
  184. package/dist/schema/meta.d.ts +442 -119
  185. package/dist/schema/meta.d.ts.map +1 -1
  186. package/dist/schema/meta.js +55 -0
  187. package/dist/schema/meta.js.map +1 -1
  188. package/dist/schema/plan.d.ts +22 -22
  189. package/dist/schema/spec.d.ts +39 -39
  190. package/dist/schema/task.d.ts +43 -32
  191. package/dist/schema/task.d.ts.map +1 -1
  192. package/dist/schema/task.js +5 -0
  193. package/dist/schema/task.js.map +1 -1
  194. package/dist/sessions/store.d.ts +112 -0
  195. package/dist/sessions/store.d.ts.map +1 -1
  196. package/dist/sessions/store.js +414 -22
  197. package/dist/sessions/store.js.map +1 -1
  198. package/dist/sessions/types.d.ts +75 -17
  199. package/dist/sessions/types.d.ts.map +1 -1
  200. package/dist/sessions/types.js +51 -1
  201. package/dist/sessions/types.js.map +1 -1
  202. package/dist/triage/actions.d.ts +1 -0
  203. package/dist/triage/actions.d.ts.map +1 -1
  204. package/dist/triage/actions.js +34 -7
  205. package/dist/triage/actions.js.map +1 -1
  206. package/dist/utils/commit.js +1 -1
  207. package/dist/utils/commit.js.map +1 -1
  208. package/dist/web-ui/_app/env.js +1 -0
  209. package/dist/web-ui/_app/immutable/assets/0.BxCxvrZR.css +1 -0
  210. package/dist/web-ui/_app/immutable/assets/select-trigger.CV-KWLNP.css +1 -0
  211. package/dist/web-ui/_app/immutable/chunks/B-CZR0q8.js +1 -0
  212. package/dist/web-ui/_app/immutable/chunks/B1IR5Su5.js +1 -0
  213. package/dist/web-ui/_app/immutable/chunks/BCkp8Hs8.js +1 -0
  214. package/dist/web-ui/_app/immutable/chunks/B_Cvvtc4.js +1 -0
  215. package/dist/web-ui/_app/immutable/chunks/BtFaGGII.js +1 -0
  216. package/dist/web-ui/_app/immutable/chunks/Bu8JVsCH.js +1 -0
  217. package/dist/web-ui/_app/immutable/chunks/C87u-CNA.js +1 -0
  218. package/dist/web-ui/_app/immutable/chunks/CrFkBTYp.js +1 -0
  219. package/dist/web-ui/_app/immutable/chunks/D1ArdqNb.js +1 -0
  220. package/dist/web-ui/_app/immutable/chunks/D28BF5MJ.js +1 -0
  221. package/dist/web-ui/_app/immutable/chunks/D6RtLpzL.js +1 -0
  222. package/dist/web-ui/_app/immutable/chunks/D7FHSgx2.js +1 -0
  223. package/dist/web-ui/_app/immutable/chunks/DBXrsxZQ.js +2 -0
  224. package/dist/web-ui/_app/immutable/chunks/Da_hHMuA.js +1 -0
  225. package/dist/web-ui/_app/immutable/chunks/Do6LchSF.js +1 -0
  226. package/dist/web-ui/_app/immutable/chunks/DoNPtcAw.js +1 -0
  227. package/dist/web-ui/_app/immutable/chunks/DtUbXRZz.js +1 -0
  228. package/dist/web-ui/_app/immutable/chunks/DyFPRlLl.js +1 -0
  229. package/dist/web-ui/_app/immutable/chunks/DzAP8lRM.js +1 -0
  230. package/dist/web-ui/_app/immutable/chunks/DzVXElzN.js +2 -0
  231. package/dist/web-ui/_app/immutable/chunks/aoPBFken.js +1 -0
  232. package/dist/web-ui/_app/immutable/chunks/i-XnOIX0.js +1 -0
  233. package/dist/web-ui/_app/immutable/chunks/laxtrUO3.js +1 -0
  234. package/dist/web-ui/_app/immutable/chunks/q1nIWgqB.js +1 -0
  235. package/dist/web-ui/_app/immutable/chunks/sTLbk5Nm.js +1 -0
  236. package/dist/web-ui/_app/immutable/chunks/vwKgQu5P.js +5 -0
  237. package/dist/web-ui/_app/immutable/entry/app.BCwMcqnT.js +2 -0
  238. package/dist/web-ui/_app/immutable/entry/start.wKCQH-tt.js +1 -0
  239. package/dist/web-ui/_app/immutable/nodes/0.CjGVMG74.js +1 -0
  240. package/dist/web-ui/_app/immutable/nodes/1.B6_AIPan.js +1 -0
  241. package/dist/web-ui/_app/immutable/nodes/2.q4oCS7Ws.js +1 -0
  242. package/dist/web-ui/_app/immutable/nodes/3.rTKZf9o2.js +1 -0
  243. package/dist/web-ui/_app/immutable/nodes/4.DVIDRu1d.js +1 -0
  244. package/dist/web-ui/_app/immutable/nodes/5.8PtPXIOd.js +1 -0
  245. package/dist/web-ui/_app/immutable/nodes/6.ZZrTemy_.js +1 -0
  246. package/dist/web-ui/_app/immutable/nodes/7.IP-gxCxi.js +1 -0
  247. package/dist/web-ui/_app/version.json +1 -0
  248. package/dist/web-ui/index.html +36 -0
  249. package/dist/web-ui/robots.txt +3 -0
  250. package/package.json +3 -2
  251. package/plugin/.claude-plugin/marketplace.json +1 -1
  252. package/plugin/.claude-plugin/plugin.json +1 -1
  253. package/plugin/plugins/kspec/skills/create-workflow/SKILL.md +1 -1
  254. package/plugin/plugins/kspec/skills/{observations → observe}/SKILL.md +1 -1
  255. package/plugin/plugins/kspec/skills/plan/SKILL.md +1 -1
  256. package/plugin/plugins/kspec/skills/task-work/SKILL.md +26 -3
  257. package/plugin/plugins/kspec/skills/triage-inbox/SKILL.md +1 -1
  258. package/plugin/plugins/kspec/skills/writing-specs/SKILL.md +1 -1
  259. package/templates/agents-sections/01-quick-start.md +1 -0
  260. package/templates/agents-sections/06-ralph-loop.md +64 -11
  261. package/templates/skills/create-workflow/SKILL.md +1 -1
  262. package/templates/skills/manifest.yaml +1 -1
  263. package/templates/skills/plan/SKILL.md +1 -1
  264. package/templates/skills/task-work/SKILL.md +26 -3
  265. package/templates/skills/triage-inbox/SKILL.md +1 -1
  266. package/templates/skills/writing-specs/SKILL.md +1 -1
  267. package/dist/ralph/cli-renderer.d.ts +0 -27
  268. package/dist/ralph/cli-renderer.d.ts.map +0 -1
  269. package/dist/ralph/cli-renderer.js +0 -250
  270. package/dist/ralph/cli-renderer.js.map +0 -1
  271. package/dist/ralph/events.d.ts +0 -65
  272. package/dist/ralph/events.d.ts.map +0 -1
  273. package/dist/ralph/events.js +0 -600
  274. package/dist/ralph/events.js.map +0 -1
  275. package/dist/ralph/index.d.ts +0 -11
  276. package/dist/ralph/index.d.ts.map +0 -1
  277. package/dist/ralph/index.js +0 -16
  278. package/dist/ralph/index.js.map +0 -1
  279. package/dist/ralph/loop-errors.d.ts +0 -83
  280. package/dist/ralph/loop-errors.d.ts.map +0 -1
  281. package/dist/ralph/loop-errors.js +0 -150
  282. package/dist/ralph/loop-errors.js.map +0 -1
  283. package/dist/ralph/subagent.d.ts +0 -96
  284. package/dist/ralph/subagent.d.ts.map +0 -1
  285. package/dist/ralph/subagent.js +0 -195
  286. package/dist/ralph/subagent.js.map +0 -1
  287. package/dist/ralph/wrap-up.d.ts +0 -127
  288. package/dist/ralph/wrap-up.d.ts.map +0 -1
  289. package/dist/ralph/wrap-up.js +0 -271
  290. package/dist/ralph/wrap-up.js.map +0 -1
  291. /package/templates/skills/{observations → observe}/SKILL.md +0 -0
@@ -10,9 +10,12 @@ import { cors } from '@elysiajs/cors';
10
10
  import { staticPlugin } from '@elysiajs/static';
11
11
  import { ulid } from 'ulidx';
12
12
  import { existsSync } from 'fs';
13
+ import { fileURLToPath } from 'url';
14
+ import { dirname } from 'path';
13
15
  import { PubSubManager } from './websocket/pubsub';
14
16
  import { HeartbeatManager } from './websocket/heartbeat';
15
17
  import { WebSocketHandler } from './websocket/handler';
18
+ import { handleWebSocketClose } from './websocket/lifecycle';
16
19
  import type { ConnectionData, ConnectedEvent } from './websocket/types';
17
20
  import { PidFileManager } from './pid';
18
21
  import { projectContextMiddleware } from './middleware/project-context';
@@ -23,6 +26,7 @@ import { createMetaRoutes } from './routes/meta';
23
26
  import { createValidationRoutes } from './routes/validation';
24
27
  import { createProjectsRoutes } from './routes/projects';
25
28
  import { createTriageRoutes } from './routes/triage';
29
+ import { createAgentDispatchRoutes, getDispatchEngine, stopAllEngines } from './routes/agent-dispatch';
26
30
  import { join } from 'path';
27
31
 
28
32
  export interface ServerOptions {
@@ -39,8 +43,11 @@ export interface ServerOptions {
39
43
  * 2. WEB_UI_DIR environment variable
40
44
  * 3. packages/web-ui/build in current working directory (monorepo dev)
41
45
  * 4. web-ui/build in current working directory
46
+ * 5. Bundled dist/web-ui/ relative to this module (npm package installs)
47
+ *
48
+ * Exported for testing only.
42
49
  */
43
- function resolveWebUiPath(webUiDir?: string): string | null {
50
+ export function resolveWebUiPath(webUiDir?: string): string | null {
44
51
  // 1. Explicit option
45
52
  if (webUiDir && existsSync(webUiDir)) {
46
53
  return webUiDir;
@@ -65,6 +72,15 @@ function resolveWebUiPath(webUiDir?: string): string | null {
65
72
  return altPath;
66
73
  }
67
74
 
75
+ // 5. Bundled assets: dist/web-ui/ relative to daemon module location
76
+ // Covers npm package installs where no local web UI build exists.
77
+ // import.meta.url resolves to dist/daemon/server.js → sibling is dist/web-ui/
78
+ const selfDir = dirname(fileURLToPath(import.meta.url));
79
+ const bundledPath = join(selfDir, '..', 'web-ui');
80
+ if (existsSync(bundledPath)) {
81
+ return bundledPath;
82
+ }
83
+
68
84
  return null;
69
85
  }
70
86
 
@@ -166,8 +182,10 @@ export async function createServer(options: ServerOptions) {
166
182
  heartbeatManager = new HeartbeatManager();
167
183
  wsHandler = new WebSocketHandler(pubsubManager);
168
184
 
169
- // WeakMap to store project path during WebSocket upgrade
170
- const wsProjectPaths = new Map<string, string>();
185
+ // WeakMap to store project path during WebSocket upgrade (keyed by Request object)
186
+ // Using WeakMap avoids needing to pass a requestId through beforeHandle return value,
187
+ // which breaks WebSocket upgrade in Elysia 1.4 when derive middleware is present.
188
+ const wsProjectPaths = new WeakMap<Request, string>();
171
189
 
172
190
  const app = new Elysia()
173
191
  // AC-15: Plugin pattern for middleware
@@ -222,6 +240,10 @@ export async function createServer(options: ServerOptions) {
222
240
  // AC: @multi-directory-daemon ac-28, ac-29, ac-30 - Projects management endpoints
223
241
  .use(createProjectsRoutes({ projectManager: projectContextManager }))
224
242
 
243
+ // AC: @agent-dispatch-engine ac-4 - Agent dispatch API endpoints
244
+ // AC: @daemon-agent-dispatch ac-3, ac-4 - Pass pubsub for WebSocket broadcast on invocation events
245
+ .use(createAgentDispatchRoutes({ pubsub: pubsubManager }))
246
+
225
247
  // AC-4: WebSocket endpoint for real-time updates
226
248
  .ws<ConnectionData>('/ws', {
227
249
  beforeHandle({ request, store }) {
@@ -232,14 +254,17 @@ export async function createServer(options: ServerOptions) {
232
254
  const projectPath = request.headers.get('X-Kspec-Dir')
233
255
  || url.searchParams.get('project')
234
256
  || undefined;
235
- const requestId = ulid(); // Temporary ID to correlate upgrade with open
236
257
 
258
+ // IMPORTANT: Do NOT return a value from ws beforeHandle.
259
+ // In Elysia 1.4 with derive middleware, returning a value short-circuits
260
+ // the WebSocket upgrade and sends the value as an HTTP 200 response.
261
+ // Use a WeakMap keyed by Request object to pass data to open().
237
262
  try {
238
263
  const manager = (store as Record<string, unknown>).projectManager as import('./project-context').ProjectContextManager | undefined;
239
264
  if (!manager) {
240
265
  // Fallback: project manager not initialized yet
241
- wsProjectPaths.set(requestId, startupProjectPath);
242
- return { wsRequestId: requestId };
266
+ wsProjectPaths.set(request, startupProjectPath);
267
+ return;
243
268
  }
244
269
 
245
270
  let projectContext;
@@ -264,9 +289,8 @@ export async function createServer(options: ServerOptions) {
264
289
  }
265
290
  }
266
291
 
267
- // Store resolved path for open() handler
268
- wsProjectPaths.set(requestId, projectContext.path);
269
- return { wsRequestId: requestId };
292
+ // Store resolved path for open() handler via WeakMap
293
+ wsProjectPaths.set(request, projectContext.path);
270
294
  } catch (err: unknown) {
271
295
  console.error(`[daemon] WebSocket connection rejected: ${err instanceof Error ? err.message : String(err)}`);
272
296
  throw err;
@@ -275,16 +299,13 @@ export async function createServer(options: ServerOptions) {
275
299
  open(ws) {
276
300
  // AC: @api-contract ac-25, @trait-websocket-protocol ac-1
277
301
  const sessionId = ulid();
302
+ const openContext = ws.data as { id?: unknown; request?: unknown } | undefined;
303
+ const contextId = typeof openContext?.id === 'string' ? openContext.id : undefined;
278
304
 
279
305
  // AC: @multi-directory-daemon ac-21 - Get bound project path
280
- // Fallback to startup project if not found (shouldn't happen)
281
- const requestId = (ws.data as ConnectionData & { wsRequestId?: string }).wsRequestId;
282
- const projectPath = requestId ? wsProjectPaths.get(requestId) || startupProjectPath : startupProjectPath;
283
-
284
- // Clean up temporary mapping
285
- if (requestId) {
286
- wsProjectPaths.delete(requestId);
287
- }
306
+ // Retrieve project path from WeakMap via the request object on ws.data
307
+ const request = openContext?.request as Request | undefined;
308
+ const projectPath = request ? wsProjectPaths.get(request) || startupProjectPath : startupProjectPath;
288
309
 
289
310
  ws.data = {
290
311
  sessionId,
@@ -295,7 +316,7 @@ export async function createServer(options: ServerOptions) {
295
316
  projectPath // AC: @multi-directory-daemon ac-21 - immutable binding
296
317
  };
297
318
 
298
- pubsubManager.addConnection(sessionId, ws);
319
+ pubsubManager.addConnection(sessionId, ws, contextId);
299
320
  console.log(`[daemon] WebSocket client connected: ${sessionId} bound to ${projectPath} (${pubsubManager.getConnectionCount()} total)`);
300
321
 
301
322
  // Send connected event with session_id
@@ -316,8 +337,7 @@ export async function createServer(options: ServerOptions) {
316
337
  heartbeatManager.recordPong(ws);
317
338
  },
318
339
  close(ws, code, reason) {
319
- pubsubManager.removeConnection(ws.data.sessionId);
320
- console.log(`[daemon] WebSocket client disconnected: ${ws.data.sessionId} (code: ${code}, reason: ${reason})`);
340
+ handleWebSocketClose(pubsubManager, ws, code, reason);
321
341
  }
322
342
  });
323
343
 
@@ -353,6 +373,18 @@ export async function createServer(options: ServerOptions) {
353
373
  console.log(`[daemon] Server listening on http://localhost:${port} (IPv4: 127.0.0.1, IPv6: ::1)`);
354
374
  console.log(`[daemon] WebSocket available at ws://localhost:${port}/ws`);
355
375
 
376
+ // AC: @agent-dispatch-engine ac-5 - Wire file change callback to dispatch engine
377
+ projectContextManager.setFileChangeCallback((projectPath, file) => {
378
+ // Only forward changes to project.tasks.yaml
379
+ if (!file.endsWith('project.tasks.yaml')) return;
380
+ const engine = getDispatchEngine(projectPath);
381
+ if (engine) {
382
+ engine.handleFileChange(projectPath).catch((err) => {
383
+ console.error('[dispatch] Error handling file change:', err);
384
+ });
385
+ }
386
+ });
387
+
356
388
  // AC: @multi-directory-daemon ac-17 - Start file watcher for startup project
357
389
  if (startupProjectPath) {
358
390
  try {
@@ -374,6 +406,9 @@ export async function createServer(options: ServerOptions) {
374
406
  // Stop heartbeat monitoring
375
407
  heartbeatManager.stop();
376
408
 
409
+ // AC: @agent-dispatch-engine ac-11 - Stop all dispatch engines before shutting down
410
+ await stopAllEngines();
411
+
377
412
  // AC: @multi-directory-daemon ac-11b - Stop all file watchers
378
413
  await projectContextManager.stopAllWatchers();
379
414
  console.log('[daemon] All file watchers stopped');
@@ -12,6 +12,49 @@ import type { ServerWebSocket } from 'bun';
12
12
  import type { WebSocketCommand, CommandAck, ConnectionData } from './types';
13
13
  import type { PubSubManager } from './pubsub';
14
14
 
15
+ type WebSocketRawMessage =
16
+ | string
17
+ | Buffer
18
+ | ArrayBuffer
19
+ | ArrayBufferView
20
+ | Blob
21
+ | Record<string, unknown>;
22
+
23
+ /**
24
+ * Decode inbound WebSocket payloads into UTF-8 text.
25
+ *
26
+ * Node/WebSocket clients may deliver command frames as Uint8Array/ArrayBuffer
27
+ * or Blob instead of plain strings.
28
+ */
29
+ async function decodeWebSocketMessage(rawMessage: WebSocketRawMessage): Promise<string> {
30
+ if (typeof rawMessage === 'string') {
31
+ return rawMessage;
32
+ }
33
+
34
+ if (typeof rawMessage === 'object' && rawMessage !== null && !ArrayBuffer.isView(rawMessage)) {
35
+ if (rawMessage instanceof ArrayBuffer) {
36
+ return Buffer.from(rawMessage).toString('utf-8');
37
+ }
38
+
39
+ if (rawMessage instanceof Blob) {
40
+ return await rawMessage.text();
41
+ }
42
+
43
+ // Some runtimes already JSON-decode inbound websocket command payloads.
44
+ return JSON.stringify(rawMessage);
45
+ }
46
+
47
+ if (ArrayBuffer.isView(rawMessage)) {
48
+ return Buffer.from(
49
+ rawMessage.buffer,
50
+ rawMessage.byteOffset,
51
+ rawMessage.byteLength,
52
+ ).toString('utf-8');
53
+ }
54
+
55
+ return String(rawMessage);
56
+ }
57
+
15
58
  export class WebSocketHandler {
16
59
  constructor(private pubsub: PubSubManager) {}
17
60
 
@@ -19,12 +62,22 @@ export class WebSocketHandler {
19
62
  * Handle incoming WebSocket command
20
63
  * AC: @api-contract ac-26, ac-27, ac-28, ac-30
21
64
  */
22
- handleMessage(ws: ServerWebSocket<ConnectionData>, rawMessage: string | Buffer) {
65
+ handleMessage(
66
+ ws: ServerWebSocket<ConnectionData>,
67
+ rawMessage: WebSocketRawMessage,
68
+ ): Promise<void> {
69
+ return this.handleMessageInternal(ws, rawMessage);
70
+ }
71
+
72
+ private async handleMessageInternal(
73
+ ws: ServerWebSocket<ConnectionData>,
74
+ rawMessage: WebSocketRawMessage,
75
+ ): Promise<void> {
23
76
  let command: WebSocketCommand;
24
77
 
25
78
  try {
26
79
  // Parse command
27
- const messageStr = typeof rawMessage === 'string' ? rawMessage : rawMessage.toString();
80
+ const messageStr = await decodeWebSocketMessage(rawMessage);
28
81
  command = JSON.parse(messageStr);
29
82
 
30
83
  // Validate command structure
@@ -76,11 +129,12 @@ export class WebSocketHandler {
76
129
  return;
77
130
  }
78
131
 
79
- const success = this.pubsub.subscribe(ws.data.sessionId, topics);
132
+ const sessionId = this.resolveSessionId(ws);
133
+ const success = sessionId ? this.pubsub.subscribe(sessionId, topics) : false;
80
134
 
81
135
  if (success) {
82
136
  this.sendAck(ws, command.request_id, true);
83
- console.log(`[ws] ${ws.data.sessionId} subscribed to: ${topics.join(', ')}`);
137
+ console.log(`[ws] ${sessionId} subscribed to: ${topics.join(', ')}`);
84
138
  } else {
85
139
  this.sendAck(ws, command.request_id, false, 'not_found', 'Session not found');
86
140
  }
@@ -97,11 +151,12 @@ export class WebSocketHandler {
97
151
  return;
98
152
  }
99
153
 
100
- const success = this.pubsub.unsubscribe(ws.data.sessionId, topics);
154
+ const sessionId = this.resolveSessionId(ws);
155
+ const success = sessionId ? this.pubsub.unsubscribe(sessionId, topics) : false;
101
156
 
102
157
  if (success) {
103
158
  this.sendAck(ws, command.request_id, true);
104
- console.log(`[ws] ${ws.data.sessionId} unsubscribed from: ${topics.join(', ')}`);
159
+ console.log(`[ws] ${sessionId} unsubscribed from: ${topics.join(', ')}`);
105
160
  } else {
106
161
  this.sendAck(ws, command.request_id, false, 'not_found', 'Session not found');
107
162
  }
@@ -114,6 +169,12 @@ export class WebSocketHandler {
114
169
  this.sendAck(ws, command.request_id, true);
115
170
  }
116
171
 
172
+ private resolveSessionId(ws: ServerWebSocket<ConnectionData>): string | undefined {
173
+ const data = ws.data as { id?: unknown } | undefined;
174
+ const contextId = typeof data?.id === 'string' ? data.id : undefined;
175
+ return this.pubsub.getSessionIdBySocket(ws, contextId);
176
+ }
177
+
117
178
  /**
118
179
  * Send ack response
119
180
  * AC: @api-contract ac-27
@@ -0,0 +1,19 @@
1
+ import type { ServerWebSocket } from 'bun';
2
+ import type { ConnectionData } from './types';
3
+ import type { PubSubManager } from './pubsub';
4
+
5
+ /**
6
+ * Handle websocket close cleanup and logging with stable session identity.
7
+ */
8
+ export function handleWebSocketClose(
9
+ pubsub: PubSubManager,
10
+ ws: ServerWebSocket<ConnectionData>,
11
+ code: number,
12
+ reason: string
13
+ ): string {
14
+ const closeContext = ws.data as { id?: unknown } | undefined;
15
+ const contextId = typeof closeContext?.id === 'string' ? closeContext.id : undefined;
16
+ const sessionId = pubsub.removeConnectionBySocket(ws, contextId) ?? 'unknown';
17
+ console.log(`[daemon] WebSocket client disconnected: ${sessionId} (code: ${code}, reason: ${reason})`);
18
+ return sessionId;
19
+ }
@@ -14,22 +14,93 @@ import type { ServerWebSocket } from 'bun';
14
14
  import { ulid } from 'ulidx';
15
15
  import type { BroadcastEvent, ConnectionData } from './types';
16
16
 
17
+ const SESSION_TOPIC_PREFIX = '__kspec_session:';
18
+
19
+ function sessionTopic(sessionId: string): string {
20
+ return `${SESSION_TOPIC_PREFIX}${sessionId}`;
21
+ }
22
+
17
23
  export class PubSubManager {
18
24
  private connections = new Map<string, ServerWebSocket<ConnectionData>>();
25
+ private sessionIdsBySocket = new WeakMap<ServerWebSocket<ConnectionData>, string>();
26
+ private sessionIdsByContextId = new Map<string, string>();
27
+ private contextIdsBySessionId = new Map<string, string>();
19
28
 
20
29
  /**
21
30
  * Register a new WebSocket connection
22
31
  * AC: @trait-websocket-protocol ac-1
23
32
  */
24
- addConnection(sessionId: string, ws: ServerWebSocket<ConnectionData>) {
33
+ addConnection(sessionId: string, ws: ServerWebSocket<ConnectionData>, contextId?: string) {
25
34
  this.connections.set(sessionId, ws);
35
+ this.sessionIdsBySocket.set(ws, sessionId);
36
+ if (contextId) {
37
+ this.sessionIdsByContextId.set(contextId, sessionId);
38
+ this.contextIdsBySessionId.set(sessionId, contextId);
39
+ }
40
+ ws.subscribe?.(sessionTopic(sessionId));
26
41
  }
27
42
 
28
43
  /**
29
44
  * Remove a WebSocket connection
30
45
  */
31
- removeConnection(sessionId: string) {
32
- this.connections.delete(sessionId);
46
+ removeConnection(sessionId: string): boolean {
47
+ const ws = this.connections.get(sessionId);
48
+ if (ws) {
49
+ ws.unsubscribe?.(sessionTopic(sessionId));
50
+ this.sessionIdsBySocket.delete(ws);
51
+ }
52
+ const contextId = this.contextIdsBySessionId.get(sessionId);
53
+ if (contextId) {
54
+ this.contextIdsBySessionId.delete(sessionId);
55
+ this.sessionIdsByContextId.delete(contextId);
56
+ }
57
+ return this.connections.delete(sessionId);
58
+ }
59
+
60
+ /**
61
+ * Resolve a stable session ID for a socket and remove that connection.
62
+ * This is resilient when ws.data.sessionId is missing in close callbacks.
63
+ */
64
+ removeConnectionBySocket(ws: ServerWebSocket<ConnectionData>, contextId?: string): string | undefined {
65
+ const sessionId = this.getSessionIdBySocket(ws, contextId);
66
+ if (!sessionId) {
67
+ return undefined;
68
+ }
69
+
70
+ this.removeConnection(sessionId);
71
+ return sessionId;
72
+ }
73
+
74
+ /**
75
+ * Get stable session ID for socket from registration mapping.
76
+ */
77
+ getSessionIdBySocket(ws: ServerWebSocket<ConnectionData>, contextId?: string): string | undefined {
78
+ const mappedSessionId = this.sessionIdsBySocket.get(ws);
79
+ if (mappedSessionId) {
80
+ return mappedSessionId;
81
+ }
82
+
83
+ const data = ws.data as Partial<ConnectionData> | undefined;
84
+ if (data?.sessionId) {
85
+ return data.sessionId;
86
+ }
87
+
88
+ const subscriptions = (ws as Partial<ServerWebSocket<ConnectionData>>).subscriptions;
89
+ if (Array.isArray(subscriptions)) {
90
+ const sessionSubscription = subscriptions.find((topic) => topic.startsWith(SESSION_TOPIC_PREFIX));
91
+ if (sessionSubscription) {
92
+ return sessionSubscription.slice(SESSION_TOPIC_PREFIX.length);
93
+ }
94
+ }
95
+
96
+ if (contextId) {
97
+ const sessionFromContext = this.sessionIdsByContextId.get(contextId);
98
+ if (sessionFromContext) {
99
+ return sessionFromContext;
100
+ }
101
+ }
102
+
103
+ return undefined;
33
104
  }
34
105
 
35
106
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/export/html.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAmNlE"}
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/export/html.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGhD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAqNlE"}
@@ -4,6 +4,7 @@
4
4
  * Generates self-contained HTML files with embedded JSON and SPA loader.
5
5
  * AC: @gh-pages-export ac-6
6
6
  */
7
+ import { shortestUniqueUlid } from "../parser/refs.js";
7
8
  /**
8
9
  * Generate a self-contained HTML file with embedded JSON snapshot.
9
10
  *
@@ -15,6 +16,8 @@
15
16
  * AC: @gh-pages-export ac-6
16
17
  */
17
18
  export function generateHtmlExport(snapshot) {
19
+ const taskUlids = snapshot.tasks.map((task) => task._ulid);
20
+ const itemUlids = snapshot.items.map((item) => item._ulid);
18
21
  const jsonData = JSON.stringify(snapshot, null, 2);
19
22
  const escapedJson = jsonData
20
23
  .replace(/</g, "\\u003c")
@@ -183,7 +186,7 @@ export function generateHtmlExport(snapshot) {
183
186
  ${escapeHtml(task.title)}
184
187
  </div>
185
188
  <div class="item-meta">
186
- @${task.slugs[0] || task._ulid.slice(0, 8)}
189
+ @${task.slugs[0] || shortestUniqueUlid(task._ulid, taskUlids)}
187
190
  ${task.spec_ref_title ? ` • ${escapeHtml(task.spec_ref_title)}` : ""}
188
191
  </div>
189
192
  </div>
@@ -199,7 +202,7 @@ export function generateHtmlExport(snapshot) {
199
202
  <div class="item">
200
203
  <div class="item-title">${escapeHtml(item.title)}</div>
201
204
  <div class="item-meta">
202
- ${item.type || "item"} • @${item.slugs[0] || item._ulid.slice(0, 8)}
205
+ ${item.type || "item"} • @${item.slugs[0] || shortestUniqueUlid(item._ulid, itemUlids)}
203
206
  ${item.acceptance_criteria?.length ? ` • ${item.acceptance_criteria.length} ACs` : ""}
204
207
  </div>
205
208
  </div>
@@ -1 +1 @@
1
- {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/export/html.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/export/html.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,7 @@ export declare function truncateText(text: string, maxLen?: number): string;
16
16
  * AC: @triage-agent-export ac-1
17
17
  * AC: @triage-agent-export ac-3
18
18
  */
19
- export declare function formatTriageRecordContext(record: TriageRecord): string;
19
+ export declare function formatTriageRecordContext(record: TriageRecord, displayRef?: string): string;
20
20
  /**
21
21
  * Export triage records in context (markdown) format.
22
22
  * AC: @triage-agent-export ac-1 — markdown block per record
@@ -1 +1 @@
1
- {"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../src/export/triage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW,GAAG,MAAM,CAItE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAsBtE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CASrE;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;AAExE;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,kBAAkB,CAYpB"}
1
+ {"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../src/export/triage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAW,GAAG,MAAM,CAItE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,YAAY,EACpB,UAAU,GAAE,MAAiC,GAC5C,MAAM,CAsBR;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAarE;AAED;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,SAAS,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;AAExE;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,YAAY,EAAE,EACvB,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,kBAAkB,CAYpB"}
@@ -6,6 +6,7 @@
6
6
  *
7
7
  * AC: @triage-agent-export ac-1, ac-2, ac-3, ac-4
8
8
  */
9
+ import { shortestUniqueUlid } from "../parser/refs.js";
9
10
  /**
10
11
  * Truncate text to a maximum length, taking only the first line.
11
12
  */
@@ -20,9 +21,9 @@ export function truncateText(text, maxLen = 60) {
20
21
  * AC: @triage-agent-export ac-1
21
22
  * AC: @triage-agent-export ac-3
22
23
  */
23
- export function formatTriageRecordContext(record) {
24
+ export function formatTriageRecordContext(record, displayRef = record._ulid.slice(0, 8)) {
24
25
  const lines = [];
25
- lines.push(`### ${record._ulid.slice(0, 8)} — ${truncateText(record.item_snapshot, 80)}`);
26
+ lines.push(`### ${displayRef} — ${truncateText(record.item_snapshot, 80)}`);
26
27
  lines.push("");
27
28
  lines.push(`**Item:** ${record.item_snapshot}`);
28
29
  lines.push(`**Status:** ${record.status}`);
@@ -57,9 +58,10 @@ export function exportTriageAsContext(records) {
57
58
  if (records.length === 0) {
58
59
  return "No triage decisions recorded.";
59
60
  }
61
+ const recordUlids = records.map((record) => record._ulid);
60
62
  let content = "# Triage Decisions\n\n";
61
63
  for (const record of records) {
62
- content += formatTriageRecordContext(record);
64
+ content += formatTriageRecordContext(record, shortestUniqueUlid(record._ulid, recordUlids));
63
65
  }
64
66
  return content;
65
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"triage.js","sourceRoot":"","sources":["../../src/export/triage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"triage.js","sourceRoot":"","sources":["../../src/export/triage.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"alignment.d.ts","sourceRoot":"","sources":["../../src/parser/alignment.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAO1E;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,oBAAoB,CAAC;IACpC,cAAc,EAAE,oBAAoB,CAAC;IACrC,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,eAAe,GAAG,iBAAiB,GAAG,sBAAsB,CAAC;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD;;;GAGG;AACH,qBAAa,cAAc;IACzB,+CAA+C;IAC/C,OAAO,CAAC,WAAW,CAA+B;IAElD,0CAA0C;IAC1C,OAAO,CAAC,UAAU,CAA6B;IAE/C,6BAA6B;IAC7B,OAAO,CAAC,SAAS,CAAqC;IAEtD,wBAAwB;IACxB,OAAO,CAAC,KAAK,CAAiC;IAE9C;;OAEG;gBACS,KAAK,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;IAkBxD;;;OAGG;IACH,UAAU,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAa1C;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE;IAO/C;;OAEG;IACH,cAAc,CACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,cAAc,GACvB,cAAc,GAAG,SAAS;IAW7B;;OAEG;IACH,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB;IA4B/D;;OAEG;IACH,wBAAwB,CACtB,QAAQ,EAAE,MAAM,GACf,yBAAyB,GAAG,SAAS;IA4BxC;;OAEG;IACH,qBAAqB,IAAI,gBAAgB,EAAE;IAmD3C;;OAEG;IACH,6BAA6B,IAAI,yBAAyB,EAAE;IAW5D;;OAEG;IACH,QAAQ,IAAI;QACV,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;KACvB;CAyBF;AAMD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,oBAAoB,CAAC;IACrC,SAAS,EAAE,oBAAoB,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAChD,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,UAAU,EAAE,EACtB,QAAQ,EAAE,cAAc,EAAE,EAC1B,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA6C5B"}
1
+ {"version":3,"file":"alignment.d.ts","sourceRoot":"","sources":["../../src/parser/alignment.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAO1E;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,oBAAoB,CAAC;IACpC,cAAc,EAAE,oBAAoB,CAAC;IACrC,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,eAAe,GAAG,iBAAiB,GAAG,sBAAsB,CAAC;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAMD;;;GAGG;AACH,qBAAa,cAAc;IACzB,+CAA+C;IAC/C,OAAO,CAAC,WAAW,CAA+B;IAElD,0CAA0C;IAC1C,OAAO,CAAC,UAAU,CAA6B;IAE/C,6BAA6B;IAC7B,OAAO,CAAC,SAAS,CAAqC;IAEtD,wBAAwB;IACxB,OAAO,CAAC,KAAK,CAAiC;IAE9C;;OAEG;gBACS,KAAK,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE;IAkBxD;;;OAGG;IACH,UAAU,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;IAa1C;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE;IAO/C;;OAEG;IACH,cAAc,CACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,cAAc,GACvB,cAAc,GAAG,SAAS;IAW7B;;OAEG;IACH,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB;IA4B/D;;OAEG;IACH,wBAAwB,CACtB,QAAQ,EAAE,MAAM,GACf,yBAAyB,GAAG,SAAS;IA4BxC;;OAEG;IACH,qBAAqB,IAAI,gBAAgB,EAAE;IAsD3C;;OAEG;IACH,6BAA6B,IAAI,yBAAyB,EAAE;IAW5D;;OAEG;IACH,QAAQ,IAAI;QACV,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;KACvB;CAyBF;AAMD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,oBAAoB,CAAC;IACrC,SAAS,EAAE,oBAAoB,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAChD,GAAG,EAAE,YAAY,EACjB,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,UAAU,EAAE,EACtB,QAAQ,EAAE,cAAc,EAAE,EAC1B,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA6C5B"}
@@ -144,9 +144,11 @@ export class AlignmentIndex {
144
144
  // Orphaned spec (no tasks)
145
145
  // AC: @trait-retrospective ac-1
146
146
  // Skip retrospective specs from orphaned warnings
147
+ // Policy: warn for not_started and in_progress (suspicious), but trust
148
+ // implemented/verified as baseline history predating the task system.
147
149
  const isRetrospective = spec.traits?.includes("@trait-retrospective");
148
150
  if (taskUlids.length === 0 &&
149
- currentStatus === "not_started" &&
151
+ (currentStatus === "not_started" || currentStatus === "in_progress") &&
150
152
  !isRetrospective) {
151
153
  warnings.push({
152
154
  type: "orphaned_spec",
@@ -155,8 +157,9 @@ export class AlignmentIndex {
155
157
  message: `Spec item "${spec.title}" has no implementing tasks`,
156
158
  });
157
159
  }
158
- // Status mismatch
159
- if (currentStatus !== expectedStatus) {
160
+ // Status mismatch (only when tasks exist — no-task specs are handled above
161
+ // for not_started/in_progress; implemented/verified are trusted as baseline)
162
+ if (taskUlids.length > 0 && currentStatus !== expectedStatus) {
160
163
  warnings.push({
161
164
  type: "status_mismatch",
162
165
  specUlid,
@@ -1 +1 @@
1
- {"version":3,"file":"alignment.js","sourceRoot":"","sources":["../../src/parser/alignment.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"alignment.js","sourceRoot":"","sources":["../../src/parser/alignment.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,7 @@
12
12
  * AC: @tasks-assess-automation ac-8 through ac-16
13
13
  */
14
14
  export function assessTask(task, index, items) {
15
- const taskRef = task.slugs.length > 0 ? `@${task.slugs[0]}` : `@${task._ulid.slice(0, 8)}`;
15
+ const taskRef = task.slugs.length > 0 ? `@${task.slugs[0]}` : `@${index.shortUlid(task._ulid)}`;
16
16
  const taskType = task.type || "task";
17
17
  // AC: @tasks-assess-automation ac-8, ac-9 - Check has_spec_ref
18
18
  const hasSpecRefResult = checkHasSpecRef(task, index);
@@ -1 +1 @@
1
- {"version":3,"file":"assess.js","sourceRoot":"","sources":["../../src/parser/assess.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assess.js","sourceRoot":"","sources":["../../src/parser/assess.ts"],"names":[],"mappings":"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"}