@kynetic-ai/spec 0.11.0 → 0.12.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 (501) hide show
  1. package/README.md +55 -455
  2. package/dist/agent-runtime/bootstrap.d.ts +31 -0
  3. package/dist/agent-runtime/bootstrap.d.ts.map +1 -0
  4. package/dist/agent-runtime/bootstrap.js +302 -0
  5. package/dist/agent-runtime/bootstrap.js.map +1 -0
  6. package/dist/agent-runtime/dispatch.d.ts +119 -10
  7. package/dist/agent-runtime/dispatch.d.ts.map +1 -1
  8. package/dist/agent-runtime/dispatch.js +1154 -219
  9. package/dist/agent-runtime/dispatch.js.map +1 -1
  10. package/dist/agent-runtime/invocation.d.ts +28 -1
  11. package/dist/agent-runtime/invocation.d.ts.map +1 -1
  12. package/dist/agent-runtime/invocation.js +171 -59
  13. package/dist/agent-runtime/invocation.js.map +1 -1
  14. package/dist/agent-runtime/prompts.d.ts +9 -0
  15. package/dist/agent-runtime/prompts.d.ts.map +1 -1
  16. package/dist/agent-runtime/prompts.js +42 -7
  17. package/dist/agent-runtime/prompts.js.map +1 -1
  18. package/dist/agent-runtime/session-event-accumulator.d.ts +83 -0
  19. package/dist/agent-runtime/session-event-accumulator.d.ts.map +1 -0
  20. package/dist/agent-runtime/session-event-accumulator.js +203 -0
  21. package/dist/agent-runtime/session-event-accumulator.js.map +1 -0
  22. package/dist/agent-runtime/session-event-types.d.ts +67 -0
  23. package/dist/agent-runtime/session-event-types.d.ts.map +1 -0
  24. package/dist/agent-runtime/session-event-types.js +13 -0
  25. package/dist/agent-runtime/session-event-types.js.map +1 -0
  26. package/dist/agent-runtime/workspace.d.ts +244 -0
  27. package/dist/agent-runtime/workspace.d.ts.map +1 -0
  28. package/dist/agent-runtime/workspace.js +2025 -0
  29. package/dist/agent-runtime/workspace.js.map +1 -0
  30. package/dist/agents/adapters.d.ts.map +1 -1
  31. package/dist/agents/adapters.js +58 -13
  32. package/dist/agents/adapters.js.map +1 -1
  33. package/dist/agents/spawner.d.ts +8 -0
  34. package/dist/agents/spawner.d.ts.map +1 -1
  35. package/dist/agents/spawner.js +25 -3
  36. package/dist/agents/spawner.js.map +1 -1
  37. package/dist/cli/batch-exec.js +1 -1
  38. package/dist/cli/batch-exec.js.map +1 -1
  39. package/dist/cli/command-annotations.d.ts +15 -3
  40. package/dist/cli/command-annotations.d.ts.map +1 -1
  41. package/dist/cli/command-annotations.js +23 -3
  42. package/dist/cli/command-annotations.js.map +1 -1
  43. package/dist/cli/commands/agent.d.ts +2 -0
  44. package/dist/cli/commands/agent.d.ts.map +1 -1
  45. package/dist/cli/commands/agent.js +144 -27
  46. package/dist/cli/commands/agent.js.map +1 -1
  47. package/dist/cli/commands/agents.d.ts.map +1 -1
  48. package/dist/cli/commands/agents.js +5 -5
  49. package/dist/cli/commands/agents.js.map +1 -1
  50. package/dist/cli/commands/derive.d.ts.map +1 -1
  51. package/dist/cli/commands/derive.js +118 -3
  52. package/dist/cli/commands/derive.js.map +1 -1
  53. package/dist/cli/commands/guard.d.ts.map +1 -1
  54. package/dist/cli/commands/guard.js +8 -6
  55. package/dist/cli/commands/guard.js.map +1 -1
  56. package/dist/cli/commands/index.d.ts +1 -0
  57. package/dist/cli/commands/index.d.ts.map +1 -1
  58. package/dist/cli/commands/index.js +1 -0
  59. package/dist/cli/commands/index.js.map +1 -1
  60. package/dist/cli/commands/init.d.ts.map +1 -1
  61. package/dist/cli/commands/init.js +20 -0
  62. package/dist/cli/commands/init.js.map +1 -1
  63. package/dist/cli/commands/item.d.ts.map +1 -1
  64. package/dist/cli/commands/item.js +205 -47
  65. package/dist/cli/commands/item.js.map +1 -1
  66. package/dist/cli/commands/log.d.ts.map +1 -1
  67. package/dist/cli/commands/log.js +24 -10
  68. package/dist/cli/commands/log.js.map +1 -1
  69. package/dist/cli/commands/plan-import.d.ts +3 -3
  70. package/dist/cli/commands/plan-import.d.ts.map +1 -1
  71. package/dist/cli/commands/plan-import.js +213 -528
  72. package/dist/cli/commands/plan-import.js.map +1 -1
  73. package/dist/cli/commands/plan.d.ts.map +1 -1
  74. package/dist/cli/commands/plan.js +533 -83
  75. package/dist/cli/commands/plan.js.map +1 -1
  76. package/dist/cli/commands/review.d.ts +14 -0
  77. package/dist/cli/commands/review.d.ts.map +1 -0
  78. package/dist/cli/commands/review.js +1142 -0
  79. package/dist/cli/commands/review.js.map +1 -0
  80. package/dist/cli/commands/serve.d.ts +1 -0
  81. package/dist/cli/commands/serve.d.ts.map +1 -1
  82. package/dist/cli/commands/serve.js +33 -10
  83. package/dist/cli/commands/serve.js.map +1 -1
  84. package/dist/cli/commands/session/checkpoint.d.ts +2 -4
  85. package/dist/cli/commands/session/checkpoint.d.ts.map +1 -1
  86. package/dist/cli/commands/session/checkpoint.js +6 -107
  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 +33 -23
  90. package/dist/cli/commands/session/commands.js.map +1 -1
  91. package/dist/cli/commands/session/compact.js +4 -4
  92. package/dist/cli/commands/session/compact.js.map +1 -1
  93. package/dist/cli/commands/session/create.js +2 -2
  94. package/dist/cli/commands/session/create.js.map +1 -1
  95. package/dist/cli/commands/session/format.d.ts.map +1 -1
  96. package/dist/cli/commands/session/format.js +1 -6
  97. package/dist/cli/commands/session/format.js.map +1 -1
  98. package/dist/cli/commands/session/log.d.ts +32 -7
  99. package/dist/cli/commands/session/log.d.ts.map +1 -1
  100. package/dist/cli/commands/session/log.js +166 -60
  101. package/dist/cli/commands/session/log.js.map +1 -1
  102. package/dist/cli/commands/session/migrate.d.ts +9 -0
  103. package/dist/cli/commands/session/migrate.d.ts.map +1 -0
  104. package/dist/cli/commands/session/migrate.js +46 -0
  105. package/dist/cli/commands/session/migrate.js.map +1 -0
  106. package/dist/cli/commands/session/stale-close.d.ts.map +1 -1
  107. package/dist/cli/commands/session/stale-close.js +5 -8
  108. package/dist/cli/commands/session/stale-close.js.map +1 -1
  109. package/dist/cli/commands/session/types.d.ts +1 -1
  110. package/dist/cli/commands/session/types.d.ts.map +1 -1
  111. package/dist/cli/commands/setup.d.ts +2 -2
  112. package/dist/cli/commands/setup.d.ts.map +1 -1
  113. package/dist/cli/commands/setup.js +287 -257
  114. package/dist/cli/commands/setup.js.map +1 -1
  115. package/dist/cli/commands/shadow.d.ts.map +1 -1
  116. package/dist/cli/commands/shadow.js +147 -31
  117. package/dist/cli/commands/shadow.js.map +1 -1
  118. package/dist/cli/commands/skill-crud.d.ts +7 -0
  119. package/dist/cli/commands/skill-crud.d.ts.map +1 -1
  120. package/dist/cli/commands/skill-crud.js +41 -18
  121. package/dist/cli/commands/skill-crud.js.map +1 -1
  122. package/dist/cli/commands/skill-diff.d.ts.map +1 -1
  123. package/dist/cli/commands/skill-diff.js +29 -3
  124. package/dist/cli/commands/skill-diff.js.map +1 -1
  125. package/dist/cli/commands/skill-install.d.ts.map +1 -1
  126. package/dist/cli/commands/skill-install.js +5 -4
  127. package/dist/cli/commands/skill-install.js.map +1 -1
  128. package/dist/cli/commands/task.d.ts.map +1 -1
  129. package/dist/cli/commands/task.js +359 -49
  130. package/dist/cli/commands/task.js.map +1 -1
  131. package/dist/cli/commands/trait.d.ts.map +1 -1
  132. package/dist/cli/commands/trait.js +5 -27
  133. package/dist/cli/commands/trait.js.map +1 -1
  134. package/dist/cli/commands/validate.d.ts.map +1 -1
  135. package/dist/cli/commands/validate.js +113 -52
  136. package/dist/cli/commands/validate.js.map +1 -1
  137. package/dist/cli/index.d.ts.map +1 -1
  138. package/dist/cli/index.js +69 -2
  139. package/dist/cli/index.js.map +1 -1
  140. package/dist/cli/output.d.ts +26 -0
  141. package/dist/cli/output.d.ts.map +1 -1
  142. package/dist/cli/output.js +108 -1
  143. package/dist/cli/output.js.map +1 -1
  144. package/dist/cli/sync-mode.d.ts +44 -0
  145. package/dist/cli/sync-mode.d.ts.map +1 -0
  146. package/dist/cli/sync-mode.js +64 -0
  147. package/dist/cli/sync-mode.js.map +1 -0
  148. package/dist/daemon/middleware/project-context.ts +25 -7
  149. package/dist/daemon/project-context.ts +18 -0
  150. package/dist/daemon/routes/agent-dispatch.ts +99 -22
  151. package/dist/daemon/routes/aggregation.ts +184 -0
  152. package/dist/daemon/routes/inbox.ts +5 -0
  153. package/dist/daemon/routes/items.ts +145 -0
  154. package/dist/daemon/routes/meta.ts +1 -1
  155. package/dist/daemon/routes/projects.ts +28 -6
  156. package/dist/daemon/routes/ref-resolution.ts +119 -0
  157. package/dist/daemon/routes/refs.ts +42 -0
  158. package/dist/daemon/routes/session-related.ts +140 -0
  159. package/dist/daemon/routes/sessions.ts +420 -19
  160. package/dist/daemon/routes/tasks.ts +62 -5
  161. package/dist/daemon/routes/triage.ts +40 -1
  162. package/dist/daemon/server.ts +143 -49
  163. package/dist/daemon/session-sync.ts +11 -0
  164. package/dist/daemon/shadow-sync.ts +11 -0
  165. package/dist/daemon/watcher.ts +56 -5
  166. package/dist/daemon/websocket/project-resolution.ts +77 -0
  167. package/dist/export/json.d.ts.map +1 -1
  168. package/dist/export/json.js +104 -1
  169. package/dist/export/json.js.map +1 -1
  170. package/dist/export/types.d.ts +52 -1
  171. package/dist/export/types.d.ts.map +1 -1
  172. package/dist/index.d.ts +1 -0
  173. package/dist/index.d.ts.map +1 -1
  174. package/dist/index.js +1 -0
  175. package/dist/index.js.map +1 -1
  176. package/dist/parser/agent-detection.d.ts +1 -1
  177. package/dist/parser/agent-detection.d.ts.map +1 -1
  178. package/dist/parser/agent-detection.js +10 -0
  179. package/dist/parser/agent-detection.js.map +1 -1
  180. package/dist/parser/config.d.ts +397 -2
  181. package/dist/parser/config.d.ts.map +1 -1
  182. package/dist/parser/config.js +125 -3
  183. package/dist/parser/config.js.map +1 -1
  184. package/dist/parser/dispatch-workspaces.d.ts +18 -0
  185. package/dist/parser/dispatch-workspaces.d.ts.map +1 -0
  186. package/dist/parser/dispatch-workspaces.js +209 -0
  187. package/dist/parser/dispatch-workspaces.js.map +1 -0
  188. package/dist/parser/doctor.d.ts.map +1 -1
  189. package/dist/parser/doctor.js +27 -8
  190. package/dist/parser/doctor.js.map +1 -1
  191. package/dist/parser/file-lock.d.ts.map +1 -1
  192. package/dist/parser/file-lock.js +9 -2
  193. package/dist/parser/file-lock.js.map +1 -1
  194. package/dist/parser/index.d.ts +6 -0
  195. package/dist/parser/index.d.ts.map +1 -1
  196. package/dist/parser/index.js +6 -0
  197. package/dist/parser/index.js.map +1 -1
  198. package/dist/parser/plans.d.ts.map +1 -1
  199. package/dist/parser/plans.js +1 -0
  200. package/dist/parser/plans.js.map +1 -1
  201. package/dist/parser/refs.d.ts +8 -1
  202. package/dist/parser/refs.d.ts.map +1 -1
  203. package/dist/parser/refs.js +27 -1
  204. package/dist/parser/refs.js.map +1 -1
  205. package/dist/parser/review-operations.d.ts +72 -0
  206. package/dist/parser/review-operations.d.ts.map +1 -0
  207. package/dist/parser/review-operations.js +185 -0
  208. package/dist/parser/review-operations.js.map +1 -0
  209. package/dist/parser/review-task-integration.d.ts +78 -0
  210. package/dist/parser/review-task-integration.d.ts.map +1 -0
  211. package/dist/parser/review-task-integration.js +173 -0
  212. package/dist/parser/review-task-integration.js.map +1 -0
  213. package/dist/parser/review-threads.d.ts +101 -0
  214. package/dist/parser/review-threads.d.ts.map +1 -0
  215. package/dist/parser/review-threads.js +222 -0
  216. package/dist/parser/review-threads.js.map +1 -0
  217. package/dist/parser/review-validation.d.ts +69 -0
  218. package/dist/parser/review-validation.d.ts.map +1 -0
  219. package/dist/parser/review-validation.js +207 -0
  220. package/dist/parser/review-validation.js.map +1 -0
  221. package/dist/parser/reviews.d.ts +58 -0
  222. package/dist/parser/reviews.d.ts.map +1 -0
  223. package/dist/parser/reviews.js +230 -0
  224. package/dist/parser/reviews.js.map +1 -0
  225. package/dist/parser/session-branch.d.ts +91 -0
  226. package/dist/parser/session-branch.d.ts.map +1 -0
  227. package/dist/parser/session-branch.js +565 -0
  228. package/dist/parser/session-branch.js.map +1 -0
  229. package/dist/parser/session-sync-scheduler.d.ts +53 -0
  230. package/dist/parser/session-sync-scheduler.d.ts.map +1 -0
  231. package/dist/parser/session-sync-scheduler.js +100 -0
  232. package/dist/parser/session-sync-scheduler.js.map +1 -0
  233. package/dist/parser/setup-status.d.ts +7 -1
  234. package/dist/parser/setup-status.d.ts.map +1 -1
  235. package/dist/parser/setup-status.js +104 -39
  236. package/dist/parser/setup-status.js.map +1 -1
  237. package/dist/parser/shadow-sync-scheduler.d.ts +71 -0
  238. package/dist/parser/shadow-sync-scheduler.d.ts.map +1 -0
  239. package/dist/parser/shadow-sync-scheduler.js +139 -0
  240. package/dist/parser/shadow-sync-scheduler.js.map +1 -0
  241. package/dist/parser/shadow.d.ts +121 -14
  242. package/dist/parser/shadow.d.ts.map +1 -1
  243. package/dist/parser/shadow.js +752 -27
  244. package/dist/parser/shadow.js.map +1 -1
  245. package/dist/parser/skill-render.d.ts +24 -0
  246. package/dist/parser/skill-render.d.ts.map +1 -1
  247. package/dist/parser/skill-render.js +98 -26
  248. package/dist/parser/skill-render.js.map +1 -1
  249. package/dist/parser/validate.d.ts +43 -3
  250. package/dist/parser/validate.d.ts.map +1 -1
  251. package/dist/parser/validate.js +204 -30
  252. package/dist/parser/validate.js.map +1 -1
  253. package/dist/parser/yaml.d.ts +47 -11
  254. package/dist/parser/yaml.d.ts.map +1 -1
  255. package/dist/parser/yaml.js +329 -149
  256. package/dist/parser/yaml.js.map +1 -1
  257. package/dist/review/checks.d.ts +97 -0
  258. package/dist/review/checks.d.ts.map +1 -0
  259. package/dist/review/checks.js +175 -0
  260. package/dist/review/checks.js.map +1 -0
  261. package/dist/review/index.d.ts +3 -0
  262. package/dist/review/index.d.ts.map +1 -0
  263. package/dist/review/index.js +3 -0
  264. package/dist/review/index.js.map +1 -0
  265. package/dist/review/subject-bindings.d.ts +83 -0
  266. package/dist/review/subject-bindings.d.ts.map +1 -0
  267. package/dist/review/subject-bindings.js +175 -0
  268. package/dist/review/subject-bindings.js.map +1 -0
  269. package/dist/schema/common.d.ts +26 -0
  270. package/dist/schema/common.d.ts.map +1 -1
  271. package/dist/schema/common.js +13 -0
  272. package/dist/schema/common.js.map +1 -1
  273. package/dist/schema/dispatch-workspace.d.ts +2643 -0
  274. package/dist/schema/dispatch-workspace.d.ts.map +1 -0
  275. package/dist/schema/dispatch-workspace.js +187 -0
  276. package/dist/schema/dispatch-workspace.js.map +1 -0
  277. package/dist/schema/inbox.d.ts +8 -8
  278. package/dist/schema/index.d.ts +2 -0
  279. package/dist/schema/index.d.ts.map +1 -1
  280. package/dist/schema/index.js +2 -0
  281. package/dist/schema/index.js.map +1 -1
  282. package/dist/schema/meta.d.ts +648 -116
  283. package/dist/schema/meta.d.ts.map +1 -1
  284. package/dist/schema/meta.js +27 -0
  285. package/dist/schema/meta.js.map +1 -1
  286. package/dist/schema/plan.d.ts +30 -19
  287. package/dist/schema/plan.d.ts.map +1 -1
  288. package/dist/schema/plan.js +3 -1
  289. package/dist/schema/plan.js.map +1 -1
  290. package/dist/schema/review-records.d.ts +2676 -0
  291. package/dist/schema/review-records.d.ts.map +1 -0
  292. package/dist/schema/review-records.js +232 -0
  293. package/dist/schema/review-records.js.map +1 -0
  294. package/dist/schema/spec.d.ts +32 -14
  295. package/dist/schema/spec.d.ts.map +1 -1
  296. package/dist/schema/spec.js +5 -0
  297. package/dist/schema/spec.js.map +1 -1
  298. package/dist/schema/task.d.ts +187 -29
  299. package/dist/schema/task.d.ts.map +1 -1
  300. package/dist/schema/task.js +12 -2
  301. package/dist/schema/task.js.map +1 -1
  302. package/dist/schema/triage.d.ts +22 -22
  303. package/dist/sessions/cache.d.ts +119 -0
  304. package/dist/sessions/cache.d.ts.map +1 -0
  305. package/dist/sessions/cache.js +284 -0
  306. package/dist/sessions/cache.js.map +1 -0
  307. package/dist/sessions/index.d.ts +1 -0
  308. package/dist/sessions/index.d.ts.map +1 -1
  309. package/dist/sessions/index.js +2 -0
  310. package/dist/sessions/index.js.map +1 -1
  311. package/dist/sessions/legacy.d.ts +77 -0
  312. package/dist/sessions/legacy.d.ts.map +1 -0
  313. package/dist/sessions/legacy.js +146 -0
  314. package/dist/sessions/legacy.js.map +1 -0
  315. package/dist/sessions/store.d.ts +103 -73
  316. package/dist/sessions/store.d.ts.map +1 -1
  317. package/dist/sessions/store.js +335 -186
  318. package/dist/sessions/store.js.map +1 -1
  319. package/dist/sessions/types.d.ts +44 -16
  320. package/dist/sessions/types.d.ts.map +1 -1
  321. package/dist/sessions/types.js +11 -2
  322. package/dist/sessions/types.js.map +1 -1
  323. package/dist/strings/errors.d.ts +32 -0
  324. package/dist/strings/errors.d.ts.map +1 -1
  325. package/dist/strings/errors.js +17 -0
  326. package/dist/strings/errors.js.map +1 -1
  327. package/dist/strings/labels.d.ts +1 -0
  328. package/dist/strings/labels.d.ts.map +1 -1
  329. package/dist/strings/labels.js +1 -0
  330. package/dist/strings/labels.js.map +1 -1
  331. package/dist/utils/activity.d.ts +101 -0
  332. package/dist/utils/activity.d.ts.map +1 -0
  333. package/dist/utils/activity.js +408 -0
  334. package/dist/utils/activity.js.map +1 -0
  335. package/dist/utils/git.d.ts +31 -0
  336. package/dist/utils/git.d.ts.map +1 -1
  337. package/dist/utils/git.js +87 -0
  338. package/dist/utils/git.js.map +1 -1
  339. package/dist/utils/index.d.ts +2 -0
  340. package/dist/utils/index.d.ts.map +1 -1
  341. package/dist/utils/index.js +1 -0
  342. package/dist/utils/index.js.map +1 -1
  343. package/dist/web-ui/_app/immutable/assets/0.tmlwn-Ih.css +1 -0
  344. package/dist/web-ui/_app/immutable/assets/9.BwwJybWx.css +1 -0
  345. package/dist/web-ui/_app/immutable/chunks/2KqE8gtn.js +1 -0
  346. package/dist/web-ui/_app/immutable/chunks/70-t_QvE.js +1 -0
  347. package/dist/web-ui/_app/immutable/chunks/AiWQj974.js +1 -0
  348. package/dist/web-ui/_app/immutable/chunks/{CPPfDSei.js → B25nWFyA.js} +4 -4
  349. package/dist/web-ui/_app/immutable/chunks/{DBYE9jOd.js → B2bcA_Q_.js} +1 -1
  350. package/dist/web-ui/_app/immutable/chunks/B5e5HYyB.js +1 -0
  351. package/dist/web-ui/_app/immutable/chunks/B7-5z6eA.js +1 -0
  352. package/dist/web-ui/_app/immutable/chunks/B7bGmhK0.js +1 -0
  353. package/dist/web-ui/_app/immutable/chunks/{DzO4hlg9.js → B8tYZKAE.js} +1 -1
  354. package/dist/web-ui/_app/immutable/chunks/{B5LJFxqa.js → BFGAyJjD.js} +1 -1
  355. package/dist/web-ui/_app/immutable/chunks/BG0850zf.js +1 -0
  356. package/dist/web-ui/_app/immutable/chunks/{DAMmvwn4.js → BG8eSzAd.js} +1 -1
  357. package/dist/web-ui/_app/immutable/chunks/BIMxXS8I.js +1 -0
  358. package/dist/web-ui/_app/immutable/chunks/BSzL1fpU.js +1 -0
  359. package/dist/web-ui/_app/immutable/chunks/BYtjHfeq.js +1 -0
  360. package/dist/web-ui/_app/immutable/chunks/{DxCk-KHc.js → Bp5pFYXL.js} +1 -1
  361. package/dist/web-ui/_app/immutable/chunks/{B8a0xDxR.js → BsJFsuAT.js} +1 -1
  362. package/dist/web-ui/_app/immutable/chunks/BvpNHcD6.js +1 -0
  363. package/dist/web-ui/_app/immutable/chunks/BypqA25-.js +1 -0
  364. package/dist/web-ui/_app/immutable/chunks/{BVA9Exy-.js → C0w6WDm5.js} +1 -1
  365. package/dist/web-ui/_app/immutable/chunks/C5_PAZ0y.js +1 -0
  366. package/dist/web-ui/_app/immutable/chunks/CDRO15Iv.js +1 -0
  367. package/dist/web-ui/_app/immutable/chunks/CF1CoqD5.js +1 -0
  368. package/dist/web-ui/_app/immutable/chunks/CS2sa4_m.js +1 -0
  369. package/dist/web-ui/_app/immutable/chunks/{BJ0JX3ea.js → CWUQwB9H.js} +1 -1
  370. package/dist/web-ui/_app/immutable/chunks/CY5FDdSU.js +1 -0
  371. package/dist/web-ui/_app/immutable/chunks/C_7MTDoj.js +1 -0
  372. package/dist/web-ui/_app/immutable/chunks/{D3vxvonu.js → CaAJD3dl.js} +1 -1
  373. package/dist/web-ui/_app/immutable/chunks/{BP352uRn.js → ChB5iyEL.js} +1 -1
  374. package/dist/web-ui/_app/immutable/chunks/{pE6cYWlS.js → ChQD-6N8.js} +1 -1
  375. package/dist/web-ui/_app/immutable/chunks/{Eo4gF7ih.js → CqbsoCwA.js} +1 -1
  376. package/dist/web-ui/_app/immutable/chunks/DCeJW50p.js +1 -0
  377. package/dist/web-ui/_app/immutable/chunks/{Cncwi6fQ.js → DJtZNgcs.js} +1 -1
  378. package/dist/web-ui/_app/immutable/chunks/DKIeaprD.js +1 -0
  379. package/dist/web-ui/_app/immutable/chunks/DLd2uVIA.js +1 -0
  380. package/dist/web-ui/_app/immutable/chunks/{DjcCz-PU.js → DW_subyT.js} +2 -2
  381. package/dist/web-ui/_app/immutable/chunks/DbU6lVn0.js +1 -0
  382. package/dist/web-ui/_app/immutable/chunks/Dc7ZCC5m.js +1 -0
  383. package/dist/web-ui/_app/immutable/chunks/Dd5umPsk.js +2 -0
  384. package/dist/web-ui/_app/immutable/chunks/{BysXJlZb.js → Dg_zDpDS.js} +1 -1
  385. package/dist/web-ui/_app/immutable/chunks/Dgqu8Yuc.js +1 -0
  386. package/dist/web-ui/_app/immutable/chunks/DmxsPZTB.js +1 -0
  387. package/dist/web-ui/_app/immutable/chunks/DphTaFUB.js +1 -0
  388. package/dist/web-ui/_app/immutable/chunks/DqK4iHp0.js +1 -0
  389. package/dist/web-ui/_app/immutable/chunks/{D9QNBZM2.js → DqT6OH_u.js} +2 -2
  390. package/dist/web-ui/_app/immutable/chunks/Ds9I9wQb.js +1 -0
  391. package/dist/web-ui/_app/immutable/chunks/Du5ng3u4.js +1 -0
  392. package/dist/web-ui/_app/immutable/chunks/DxJw79Wi.js +1 -0
  393. package/dist/web-ui/_app/immutable/chunks/GFTX8GgV.js +1 -0
  394. package/dist/web-ui/_app/immutable/chunks/{C076q4JN.js → HNjs76Zz.js} +1 -1
  395. package/dist/web-ui/_app/immutable/chunks/HVMjDi4_.js +1 -0
  396. package/dist/web-ui/_app/immutable/chunks/{BkOJ8DkV.js → P0A_fJvS.js} +1 -1
  397. package/dist/web-ui/_app/immutable/chunks/T3vGWjIL.js +1 -0
  398. package/dist/web-ui/_app/immutable/chunks/VTmrX9Qu.js +1 -0
  399. package/dist/web-ui/_app/immutable/chunks/{k_Qegko0.js → Xvwhx_F1.js} +1 -1
  400. package/dist/web-ui/_app/immutable/chunks/Yyz1XMQA.js +1 -0
  401. package/dist/web-ui/_app/immutable/chunks/{62JVKtnb.js → dh5HeqUr.js} +1 -1
  402. package/dist/web-ui/_app/immutable/chunks/fZMteyca.js +62 -0
  403. package/dist/web-ui/_app/immutable/chunks/{D82RulSH.js → gPrj-hqC.js} +1 -1
  404. package/dist/web-ui/_app/immutable/chunks/htcWMiYN.js +1 -0
  405. package/dist/web-ui/_app/immutable/chunks/{CwELQvbx.js → oTsvd9y4.js} +1 -1
  406. package/dist/web-ui/_app/immutable/chunks/qJfLUwU4.js +1 -0
  407. package/dist/web-ui/_app/immutable/chunks/xCtiO_JE.js +1 -0
  408. package/dist/web-ui/_app/immutable/chunks/{DvA-KON-.js → y4GeEH6k.js} +1 -1
  409. package/dist/web-ui/_app/immutable/entry/app.C4h_eOn6.js +2 -0
  410. package/dist/web-ui/_app/immutable/entry/start.CQFTf9ep.js +1 -0
  411. package/dist/web-ui/_app/immutable/nodes/0.Dh1xO970.js +1 -0
  412. package/dist/web-ui/_app/immutable/nodes/1.l75D3Opx.js +1 -0
  413. package/dist/web-ui/_app/immutable/nodes/10.DBidBPc-.js +1 -0
  414. package/dist/web-ui/_app/immutable/nodes/11.Ab0gUKWe.js +1 -0
  415. package/dist/web-ui/_app/immutable/nodes/12.CMsnoxfs.js +1 -0
  416. package/dist/web-ui/_app/immutable/nodes/13.D8YKuknB.js +1 -0
  417. package/dist/web-ui/_app/immutable/nodes/14.DZ0aan7y.js +1 -0
  418. package/dist/web-ui/_app/immutable/nodes/15.CUIKreDL.js +2 -0
  419. package/dist/web-ui/_app/immutable/nodes/16.BWc8--BO.js +1 -0
  420. package/dist/web-ui/_app/immutable/nodes/2.CDUonbuh.js +1 -0
  421. package/dist/web-ui/_app/immutable/nodes/3.Ctg3M00i.js +1 -0
  422. package/dist/web-ui/_app/immutable/nodes/4.Ci-JDwbA.js +2 -0
  423. package/dist/web-ui/_app/immutable/nodes/5.CTyEDAq0.js +1 -0
  424. package/dist/web-ui/_app/immutable/nodes/6.BTZZqsAb.js +1 -0
  425. package/dist/web-ui/_app/immutable/nodes/7.BI52g_Jo.js +137 -0
  426. package/dist/web-ui/_app/immutable/nodes/8.3hZPaB9x.js +1 -0
  427. package/dist/web-ui/_app/immutable/nodes/9.DS49kvwl.js +29 -0
  428. package/dist/web-ui/_app/version.json +1 -1
  429. package/dist/web-ui/favicon-192.png +0 -0
  430. package/dist/web-ui/favicon-32.png +0 -0
  431. package/dist/web-ui/favicon.ico +0 -0
  432. package/dist/web-ui/index.html +14 -14
  433. package/package.json +12 -6
  434. package/plugin/.claude-plugin/marketplace.json +1 -1
  435. package/plugin/.claude-plugin/plugin.json +1 -1
  436. package/plugin/plugins/kspec/skills/merge/SKILL.md +127 -0
  437. package/plugin/plugins/kspec/skills/plan/SKILL.md +55 -26
  438. package/plugin/plugins/kspec/skills/review/SKILL.md +350 -133
  439. package/plugin/plugins/kspec/skills/task-work/SKILL.md +96 -106
  440. package/templates/agents-sections/04-pr-workflow.md +15 -12
  441. package/templates/agents-sections/06-ralph-loop.md +15 -10
  442. package/templates/skills/manifest.yaml +25 -7
  443. package/templates/skills/merge/SKILL.md +120 -0
  444. package/templates/skills/plan/SKILL.md +55 -26
  445. package/templates/skills/review/SKILL.md +346 -130
  446. package/templates/skills/task-work/SKILL.md +93 -103
  447. package/dist/web-ui/_app/immutable/assets/0.BJaYkGW2.css +0 -1
  448. package/dist/web-ui/_app/immutable/assets/9.SzGLxi4x.css +0 -1
  449. package/dist/web-ui/_app/immutable/chunks/-lc0BifF.js +0 -1
  450. package/dist/web-ui/_app/immutable/chunks/8RBjHMN1.js +0 -1
  451. package/dist/web-ui/_app/immutable/chunks/B5wTVqxm.js +0 -1
  452. package/dist/web-ui/_app/immutable/chunks/B6VSmczZ.js +0 -1
  453. package/dist/web-ui/_app/immutable/chunks/BEOQc37C.js +0 -1
  454. package/dist/web-ui/_app/immutable/chunks/BHtYorjv.js +0 -1
  455. package/dist/web-ui/_app/immutable/chunks/BMuCqDX8.js +0 -1
  456. package/dist/web-ui/_app/immutable/chunks/BUZujXJ2.js +0 -1
  457. package/dist/web-ui/_app/immutable/chunks/BWET-efb.js +0 -1
  458. package/dist/web-ui/_app/immutable/chunks/BXkNecpt.js +0 -1
  459. package/dist/web-ui/_app/immutable/chunks/BYzrIfX8.js +0 -1
  460. package/dist/web-ui/_app/immutable/chunks/BpuwufMc.js +0 -1
  461. package/dist/web-ui/_app/immutable/chunks/BwMO4RrG.js +0 -1
  462. package/dist/web-ui/_app/immutable/chunks/C33JaVbg.js +0 -1
  463. package/dist/web-ui/_app/immutable/chunks/CGtqifKp.js +0 -1
  464. package/dist/web-ui/_app/immutable/chunks/CHDZZ7OG.js +0 -1
  465. package/dist/web-ui/_app/immutable/chunks/CUir3f4J.js +0 -60
  466. package/dist/web-ui/_app/immutable/chunks/CrCIbn0C.js +0 -1
  467. package/dist/web-ui/_app/immutable/chunks/D6TVmR9T.js +0 -1
  468. package/dist/web-ui/_app/immutable/chunks/D7LTux4W.js +0 -1
  469. package/dist/web-ui/_app/immutable/chunks/DAh4Wfku.js +0 -1
  470. package/dist/web-ui/_app/immutable/chunks/DAx07bEQ.js +0 -1
  471. package/dist/web-ui/_app/immutable/chunks/DOno4cA2.js +0 -1
  472. package/dist/web-ui/_app/immutable/chunks/DQA8NZIH.js +0 -2
  473. package/dist/web-ui/_app/immutable/chunks/DRfPm2bo.js +0 -1
  474. package/dist/web-ui/_app/immutable/chunks/DhQhksaB.js +0 -1
  475. package/dist/web-ui/_app/immutable/chunks/DjG7s6hm.js +0 -1
  476. package/dist/web-ui/_app/immutable/chunks/DkltRNvh.js +0 -1
  477. package/dist/web-ui/_app/immutable/chunks/DlaTnPKL.js +0 -1
  478. package/dist/web-ui/_app/immutable/chunks/ExCq5swK.js +0 -1
  479. package/dist/web-ui/_app/immutable/chunks/T3zZGv51.js +0 -1
  480. package/dist/web-ui/_app/immutable/chunks/XZumBYeP.js +0 -1
  481. package/dist/web-ui/_app/immutable/chunks/_ySfNjkF.js +0 -1
  482. package/dist/web-ui/_app/immutable/chunks/iEtR5cV6.js +0 -1
  483. package/dist/web-ui/_app/immutable/entry/app.Cgu6uKeS.js +0 -2
  484. package/dist/web-ui/_app/immutable/entry/start.9XifnLoB.js +0 -1
  485. package/dist/web-ui/_app/immutable/nodes/0.DISwcKSK.js +0 -1
  486. package/dist/web-ui/_app/immutable/nodes/1.Cx2Ufqp1.js +0 -1
  487. package/dist/web-ui/_app/immutable/nodes/10.C3z8ijXL.js +0 -1
  488. package/dist/web-ui/_app/immutable/nodes/11.DZdIjZmM.js +0 -1
  489. package/dist/web-ui/_app/immutable/nodes/12.FsIGfAOa.js +0 -1
  490. package/dist/web-ui/_app/immutable/nodes/13.DZoFwagf.js +0 -1
  491. package/dist/web-ui/_app/immutable/nodes/14.DaIzDKbQ.js +0 -1
  492. package/dist/web-ui/_app/immutable/nodes/15.BYyt4XWF.js +0 -2
  493. package/dist/web-ui/_app/immutable/nodes/16.CQkSqpOe.js +0 -1
  494. package/dist/web-ui/_app/immutable/nodes/2.Bkf_j2UJ.js +0 -1
  495. package/dist/web-ui/_app/immutable/nodes/3.kaMCurJG.js +0 -1
  496. package/dist/web-ui/_app/immutable/nodes/4.BSsFPTHG.js +0 -2
  497. package/dist/web-ui/_app/immutable/nodes/5.CpPlcCEZ.js +0 -1
  498. package/dist/web-ui/_app/immutable/nodes/6.BN4FqQmY.js +0 -1
  499. package/dist/web-ui/_app/immutable/nodes/7.9kBYIZik.js +0 -1
  500. package/dist/web-ui/_app/immutable/nodes/8.BuijtZ6B.js +0 -1
  501. package/dist/web-ui/_app/immutable/nodes/9.C-Weba8R.js +0 -1
@@ -1,13 +1,13 @@
1
1
  ---
2
2
  name: task-work
3
- description: Structured task lifecycle — start, work, note, submit, complete.
4
- Fix cycle handling, scope management, loop mode for automation, and quality
5
- gates.
3
+ description: Structured task lifecycle — start, work, note, submit, complete. AC
4
+ annotations, fix cycle handling via review records, scope management, and
5
+ quality checks.
6
6
  ---
7
7
  <!-- kspec-managed -->
8
8
  # Task Work
9
9
 
10
- Structured workflow for working on tasks. Full lifecycle from start through PR merge.
10
+ Structured workflow for working on tasks. Full lifecycle from start through completion.
11
11
 
12
12
  ## When to Use
13
13
 
@@ -44,8 +44,8 @@ pending → in_progress → pending_review → completed
44
44
  | Command | Transition | When |
45
45
  |---------|-----------|------|
46
46
  | `kspec task start @ref` | → in_progress | Beginning work |
47
- | `kspec task submit @ref` | → pending_review | Code done, PR created |
48
- | `kspec task complete @ref --reason "..."` | → completed | PR merged |
47
+ | `kspec task submit @ref` | → pending_review | Work done, ready for review |
48
+ | `kspec task complete @ref --reason "..."` | → completed | Reviewed and merged |
49
49
  | `kspec task block @ref --reason "..."` | → blocked | External blocker |
50
50
 
51
51
  ## CLI Lookups
@@ -62,6 +62,7 @@ Use CLI commands to find information. **Do NOT search `.kspec/` YAML files manua
62
62
  | All traits | `kspec trait list` |
63
63
  | Task's linked spec | `kspec task get @ref` → read `spec_ref` field |
64
64
  | Task's linked plan | `kspec task get @ref` → if `plan_ref` is non-null, run `kspec plan get @plan-ref` |
65
+ | Reviews for a task | `kspec review for-task @ref` |
65
66
 
66
67
  **Key pattern:** When `kspec item get` output shows "Inherited from @trait-slug", run `kspec item get @trait-slug` to see the trait's ACs. One command — do not grep YAML files.
67
68
 
@@ -71,7 +72,7 @@ Use CLI commands to find information. **Do NOT search `.kspec/` YAML files manua
71
72
 
72
73
  ```bash
73
74
  kspec tasks ready # All ready tasks
74
- kspec tasks ready --eligible # Automation-eligible only (loop mode)
75
+ kspec tasks ready --eligible # Automation-eligible only
75
76
  ```
76
77
 
77
78
  ### 2. Verify Work Is Needed
@@ -104,21 +105,24 @@ kspec plan get @plan-ref
104
105
  kspec task start @ref
105
106
  ```
106
107
 
107
- ### 3.5 Branch Isolation (Required Before Edits)
108
+ ### 4. Branch Isolation (Required Before Edits)
108
109
 
109
- Immediately after `kspec task start` and before any file edits, create or switch to a dedicated branch for that task. Do not keep implementing on a branch that is tied to another pending-review task.
110
+ Immediately after starting and before any file edits, create or switch to a dedicated branch.
110
111
 
111
112
  ```bash
112
- # Example naming from task intent/slug
113
- TASK_BRANCH="fix/<task-slug>"
114
-
115
- # Create the branch if missing, otherwise switch to it
116
- git checkout -b "$TASK_BRANCH" 2>/dev/null || git checkout "$TASK_BRANCH"
113
+ # Preferred: deterministic dispatch-compatible branch
114
+ kspec task branch @ref
117
115
  ```
118
116
 
119
- This keeps each task's commits scoped to its own PR and prevents cross-task contamination.
117
+ `kspec task branch` creates or resumes the branch `dispatch/task/<normalized-slug>/<short-task-ref>`. This ensures:
118
+
119
+ - **Dispatch continuity** — reviewer and fix-cycle agents can find and resume the branch
120
+ - **No naming collisions** — the branch name is deterministic from the task identity
121
+ - **Remote rehydration** — if the branch exists only on the remote, the command fetches it
122
+
123
+ If you need a non-dispatch branch (e.g., for work not tied to a task), use conventional prefixes (`feat/`, `fix/`, etc.) instead.
120
124
 
121
- ### 4. Work and Note
125
+ ### 5. Work and Note
122
126
 
123
127
  Read all ACs (own + trait) before implementing:
124
128
 
@@ -142,17 +146,58 @@ Note when you:
142
146
  - Encounter a blocker
143
147
  - Complete a significant piece
144
148
 
145
- For tasks that are missing standalone context (for example, generic derived notes), add one structured note before deep implementation work:
149
+ ### 6. AC Test Annotations
146
150
 
147
- ```bash
148
- kspec task note @ref "Execution context:
149
- - Background: why this task matters
150
- - Scope: what is in/out for this task
151
- - Files: exact files expected to change
152
- - Verification: tests/commands that prove completion"
151
+ Every acceptance criterion should have at least one test annotated with a comment linking it to the AC. Use the comment syntax appropriate for the language:
152
+
153
+ ```javascript
154
+ // AC: @spec-ref ac-1
155
+ it('should validate input when given invalid data', () => { ... });
153
156
  ```
154
157
 
155
- ### 5. Commit
158
+ ```python
159
+ # AC: @spec-ref ac-1
160
+ def test_validates_input():
161
+ ...
162
+ ```
163
+
164
+ ```sql
165
+ -- AC: @spec-ref ac-1
166
+ ```
167
+
168
+ ```html
169
+ <!-- AC: @spec-ref ac-1 -->
170
+ ```
171
+
172
+ The pattern is always: language-appropriate comment + `AC: @spec-ref ac-N`.
173
+
174
+ For **inherited trait ACs**, use the trait's ref, not the spec's ref:
175
+
176
+ ```javascript
177
+ // AC: @trait-json-output ac-1
178
+ it('should output valid JSON with --json flag', () => { ... });
179
+ ```
180
+
181
+ If a trait AC genuinely doesn't apply, annotate it with a reason:
182
+
183
+ ```javascript
184
+ // AC: @trait-json-output ac-3 — N/A: this command has no tabular output to format
185
+ ```
186
+
187
+ Annotations must be standalone line comments, not embedded inside block comments or docstrings.
188
+
189
+ ### 7. Regenerate Derived Files
190
+
191
+ If your task modified any of these source files, regenerate before committing:
192
+
193
+ | Modified | Regenerate with |
194
+ |----------|----------------|
195
+ | `templates/skills/` or `.kspec/skills/` | `kspec skill render` |
196
+ | `templates/agents-sections/`, conventions, or workflows | `kspec agents generate` |
197
+
198
+ Commit the regenerated output alongside your source changes.
199
+
200
+ ### 8. Commit
156
201
 
157
202
  Include task and spec trailers:
158
203
 
@@ -167,12 +212,12 @@ Spec: @auth-feature
167
212
 
168
213
  Trailers enable `kspec log @ref` to find related commits.
169
214
 
170
- ### 6. Local Review
215
+ ### 9. Quality Check
171
216
 
172
- Run quality checks before submitting. Verify:
217
+ Before submitting, verify:
173
218
 
174
- - **Own AC coverage** — Each spec AC has a test annotated `// AC: @spec-ref ac-N`
175
- - **Trait AC coverage** — Each inherited trait AC has a test annotated `// AC: @trait-slug ac-N`
219
+ - **Own AC coverage** — Each spec AC has an annotated test
220
+ - **Trait AC coverage** — Each inherited trait AC has an annotated test (or N/A annotation)
176
221
  - **Tests pass** — Full test suite, not just new tests
177
222
  - **Code quality** — Matches existing patterns, no duplicated utilities
178
223
  - **No regressions** — Existing tests still pass
@@ -181,43 +226,41 @@ Run quality checks before submitting. Verify:
181
226
  kspec validate # Reports uncovered trait ACs as warnings
182
227
  ```
183
228
 
184
- ### 7. Submit Task
229
+ ### 10. Submit
230
+
231
+ Submit transitions the task to `pending_review`. This signals that work is complete and ready for review.
185
232
 
186
233
  ```bash
187
234
  kspec task submit @ref
188
235
  ```
189
236
 
190
- Moves task to `pending_review`. Create PR after submitting.
191
-
192
- ### 8. Complete Task
193
-
194
- After PR is merged:
195
-
196
- ```bash
197
- kspec task complete @ref --reason "Merged in PR #N. Summary of what was done."
198
- ```
237
+ The reviewer (human or agent) takes over from here. See `/kspec:review` for the review process and `/kspec:merge` for the merge process.
199
238
 
200
239
  ## Fix Cycle
201
240
 
202
- When inheriting a `needs_work` task:
241
+ When inheriting a `needs_work` task, the review feedback lives in kspec review records. Each fix cycle creates a new review record — the reviewer does not reopen the prior review.
203
242
 
204
- 1. **Find the PR** — Check for review comments
243
+ 1. **Read the review** — Find and read review threads
205
244
  ```bash
206
- gh pr list --search "Task: @task-ref" --json number,url
207
- gh api repos/{owner}/{repo}/pulls/{number}/comments --jq '.[] | {path, line, body}'
245
+ kspec review for-task @ref # Find all reviews (current + historical)
246
+ kspec review get @review-ref # Read full review with threads
208
247
  ```
209
248
 
210
- 2. **Fix findings** — Address MUST-FIX and SHOULD-FIX items
249
+ 2. **Address blocker threads** — Blockers must be resolved before re-approval. Questions and nits are non-blocking but should be addressed.
211
250
 
212
251
  3. **Push fixes** — Commit with descriptive message
213
252
  ```bash
214
253
  git add <files> && git commit -m "fix: address review feedback
215
254
 
216
255
  Task: @task-slug"
217
- git push
218
256
  ```
219
257
 
220
- 4. **Re-submit** — `kspec task submit @ref` (back to pending_review)
258
+ 4. **Note what changed** — Before resubmitting, add a task note summarizing what was fixed and why. This note becomes a key entry in the activity timeline and gives the next reviewer context on what changed since the prior review.
259
+ ```bash
260
+ kspec task note @ref "Fixed auth token validation: added null check before decode, updated test to cover expired token edge case. Addresses blocker thread on missing error handling."
261
+ ```
262
+
263
+ 5. **Re-submit** — `kspec task submit @ref` (back to pending_review, reviewer creates a new review record)
221
264
 
222
265
  You do NOT merge in a fix cycle. The reviewer handles merge decisions.
223
266
 
@@ -244,56 +287,7 @@ Tasks describe expected outcomes, not rigid boundaries:
244
287
 
245
288
  **When you notice something outside your task:** Capture it separately (`kspec inbox add` or `kspec task note`). Don't fix it inline — even small detours compound into drift.
246
289
 
247
- ## AC Test Annotations
248
-
249
- Link tests to acceptance criteria:
250
-
251
- ```javascript
252
- // AC: @spec-item ac-N
253
- it('should validate input', () => { ... });
254
- ```
255
-
256
- ```python
257
- # AC: @spec-item ac-N
258
- def test_validates_input():
259
- ...
260
- ```
261
-
262
- Every AC should have at least one test with this annotation.
263
-
264
- ## Implementation Quality
265
-
266
- Before submitting:
267
-
268
- - **Search for existing utilities** — Don't duplicate helpers that already exist
269
- - **Match neighboring file style** — Naming conventions, error handling, imports
270
- - **Run full test suite** — Not just your new tests
271
- - **Validate** — `kspec validate` for spec alignment
272
-
273
- ## Loop Mode
274
-
275
- Autonomous task execution without human confirmation.
276
-
277
- ```bash
278
- kspec tasks ready --eligible # Only automation-eligible tasks
279
- ```
280
-
281
- ### Task Selection Priority
282
-
283
- 1. `needs_work` — Fix review feedback
284
- 2. `in_progress` — Continue existing work
285
- 3. Tasks that unblock others
286
- 4. Highest priority ready task
287
-
288
- ### Key Behaviors
289
-
290
- - Verify work is needed before starting (prevent duplicates)
291
- - Create/switch to a dedicated task branch before making code edits
292
- - Decisions auto-resolve without prompts
293
- - PR review handled externally (not this workflow)
294
- - All actions are logged and auditable
295
-
296
- ### Blocking Rules
290
+ ## Blocking Rules
297
291
 
298
292
  **Block only for genuine external blockers:**
299
293
  - Human architectural decision needed
@@ -314,17 +308,12 @@ kspec tasks ready --eligible # Check for other work
314
308
  # If empty: stop responding (agent dispatch exits automatically)
315
309
  ```
316
310
 
317
- ### Turn Completion
318
-
319
- After creating a PR, **stop responding**. The agent dispatch engine continues automatically — it checks for remaining eligible tasks and exits when none remain.
320
-
321
- **Do NOT call `end-loop`** after creating a PR. That ends ALL remaining iterations. It's a rare escape hatch for when work is stalling across multiple iterations.
322
-
323
311
  ## Command Reference
324
312
 
325
313
  ```bash
326
314
  # Task lifecycle
327
315
  kspec task start @ref
316
+ kspec task branch @ref # Create/resume dispatch-compatible branch
328
317
  kspec task note @ref "..."
329
318
  kspec task submit @ref
330
319
  kspec task complete @ref --reason "..."
@@ -335,18 +324,19 @@ kspec tasks ready
335
324
  kspec tasks ready --eligible
336
325
  kspec task get @ref
337
326
 
327
+ # Review integration
328
+ kspec review for-task @ref # Find linked reviews
329
+ kspec review get @review-ref # Read review details
330
+
338
331
  # Validation
339
332
  kspec validate
340
333
  kspec validate --alignment
341
-
342
- # Session context
343
- kspec session start
344
334
  ```
345
335
 
346
336
  ## Integration
347
337
 
338
+ - **`/kspec:review`** — Review process for submitted work
339
+ - **`/kspec:merge`** — Merge approved work into integration branch
348
340
  - **`/kspec:writing-specs`** — Create specs before deriving tasks
349
341
  - **`/kspec:plan`** — Plans create specs that become tasks
350
- - **`/kspec:review`** — Review checks AC coverage and code quality
351
342
  - **`/kspec:observe`** — Capture friction found during task work
352
- - **`/kspec:reflect`** — Session reflection after completing tasks
@@ -1,17 +1,20 @@
1
- ## PR Workflow
1
+ ## Work and Review Lifecycle
2
2
 
3
- Before creating a PR, mark the task: `kspec task submit @ref` (transitions to `pending_review`).
3
+ Before submitting work for review: `kspec task submit @ref` (transitions to `pending_review`).
4
4
 
5
- The full PR lifecycle has three steps — **all required, in order:**
5
+ The full lifecycle:
6
6
 
7
- 1. **Local review** — Quality gates: AC coverage, test quality, test isolation. Run this FIRST.
8
- 2. **Create PR** — Push branch and open pull request.
9
- 3. **Review and merge** — `kspec workflow start @pr-review-merge`.
7
+ 1. **Work** — Implement, test, annotate ACs. See the kspec task-work skill.
8
+ 2. **Submit** — `kspec task submit @ref` signals work is ready for review.
9
+ 3. **Review** — Reviewer creates a kspec review record, investigates, submits verdict. See the kspec review skill.
10
+ 4. **Merge** — After review approval, merge to integration branch. See the kspec merge skill.
10
11
 
11
- **Quality gates (never skip without explicit approval):**
12
- - All CI checks passing
13
- - All review comments addressed
14
- - All review threads resolved
15
- - AC coverage verified
12
+ **Review gates (from kspec review disposition):**
13
+ - Review disposition = `approved`
14
+ - All required checks passing
15
+ - No unresolved blocker threads
16
+ - AC coverage verified (own + trait)
16
17
 
17
- **After merge:** `kspec task complete @ref --reason "Merged in PR #N. Summary..."`
18
+ **After merge:** `kspec task complete @ref --reason "Merged. Summary..."`
19
+
20
+ **Fix cycle:** If review requests changes, task transitions to `needs_work`. Worker reads review threads via `kspec review for-task @ref`, addresses blockers, resubmits.
@@ -23,7 +23,7 @@ kspec agent dispatch stop
23
23
  `kspec setup` ensures default worker/reviewer agent definitions exist in `kynetic.meta.yaml`:
24
24
 
25
25
  - `task-worker` — handles automation-eligible `task.ready`, `task.in_progress`, and `task.needs_work`
26
- - `pr-reviewer` — handles `task.pending_review`
26
+ - `pr-reviewer` — handles `task.pending_review` (review and local merge)
27
27
 
28
28
  Inspect current definitions with:
29
29
 
@@ -38,7 +38,7 @@ kspec agent list
38
38
  | `task.ready` | `task-worker` | Worker picks up newly ready automation-eligible tasks |
39
39
  | `task.in_progress` | `task-worker` | Worker can continue existing automation-eligible tasks |
40
40
  | `task.needs_work` | `task-worker` | Fix-cycle tasks return to worker |
41
- | `task.pending_review` | `pr-reviewer` | Review/merge workflow runs in separate invocation |
41
+ | `task.pending_review` | `pr-reviewer` | Review and local merge in separate invocation |
42
42
 
43
43
  ### One-Shot Invocation
44
44
 
@@ -60,18 +60,23 @@ Common flags:
60
60
  ```
61
61
  for each dispatched invocation:
62
62
  1. Agent runtime checks eligible tasks — if none, invocation ends
63
- 2. Agent works on tasks, may create PR(s)
64
- - Before editing files on a selected task, create/switch to a dedicated task branch
65
- 3. Agent stops responding (turn complete)
66
- 4. pr-reviewer agent handles pending_review tasks via separate dispatch
67
- 5. Continue
63
+ 2. Agent works on tasks
64
+ - Before editing files, use `kspec task branch @ref` for the deterministic
65
+ dispatch-compatible branch (dispatch/task/<slug>/<short-id>)
66
+ 3. Agent submits task (kspec task submit @ref) when work is complete
67
+ 4. Agent stops responding (turn complete)
68
+ 5. Reviewer agent picks up pending_review tasks: creates kspec review,
69
+ investigates, submits verdict, merges locally if approved
70
+ 6. Continue
68
71
  ```
69
72
 
70
- **When you stop responding, the dispatch engine continues automatically.** Do NOT call `kspec agent end-loop` after creating a PR.
73
+ **Do NOT create GitHub PRs for dispatched work.** Agent work is reviewed via kspec review records and merged locally to the integration branch. GitHub PRs are a human-directed activity for merging feature groups into main.
74
+
75
+ **When you stop responding, the dispatch engine continues automatically.** Do NOT call `kspec agent end-loop` after submitting a task.
71
76
 
72
77
  ### Task Inheritance
73
78
 
74
- Priority: `needs_work` > `in_progress` > `pending`. Always inherit existing work before starting new tasks. (`pending_review` tasks are handled by the pr-reviewer agent, not the worker.)
79
+ Priority: `needs_work` > `in_progress` > `pending`. Always inherit existing work before starting new tasks. (`pending_review` tasks are handled by the reviewer agent, not the worker.)
75
80
 
76
81
  ### Blocking Rules
77
82
 
@@ -85,7 +90,7 @@ Priority: `needs_work` > `in_progress` > `pending`. Always inherit existing work
85
90
  - Task seems complex (do the work)
86
91
  - Tests are failing (fix them)
87
92
  - Service needs running (start it)
88
- - Another task's PR is in CI (not a formal dependency)
93
+ - Another task is in review (not a formal dependency)
89
94
 
90
95
  **After blocking a task:**
91
96
  ```bash
@@ -9,63 +9,81 @@ skills:
9
9
  platforms:
10
10
  - claude-code
11
11
  - codex
12
+ - droid
12
13
  - id: observe
13
14
  name: Observations
14
15
  description: Capture and act on systemic patterns — friction, successes, questions, and ideas. The feedback loop that drives process improvement.
15
16
  platforms:
16
17
  - claude-code
17
18
  - codex
19
+ - droid
18
20
  - id: reflect
19
21
  name: Session Reflection
20
22
  description: Structured reflection at the end of work sessions. Identifies learnings, friction points, and improvements for system evolution.
21
23
  platforms:
22
24
  - claude-code
23
25
  - codex
26
+ - droid
24
27
  - id: triage
25
28
  name: Triage
26
29
  description: Triage inbox items systematically. Records decisions with audit trail, then executes actions. Supports inbox, observations, and automation eligibility triage.
27
30
  platforms:
28
31
  - claude-code
29
32
  - codex
33
+ - droid
30
34
  - id: triage-inbox
31
35
  name: Inbox Triage
32
36
  description: Process inbox items using the record-act pattern. Categorize, promote to spec/task, merge duplicates, defer, or delete stale items with full audit trail.
33
37
  platforms:
34
38
  - claude-code
35
39
  - codex
40
+ - droid
36
41
  - id: triage-automation
37
42
  name: Automation Triage
38
43
  description: Assess and prepare tasks for automation eligibility. Verify spec coverage, acceptance criteria, and task readiness for automated agents.
39
44
  platforms:
40
45
  - claude-code
41
46
  - codex
47
+ - droid
42
48
  - id: writing-specs
43
49
  name: Writing Specs
44
50
  description: Create and maintain specification items — modules, features, requirements, acceptance criteria, and traits. The source of truth for what to build.
45
51
  platforms:
46
52
  - claude-code
47
53
  - codex
54
+ - droid
48
55
  - id: plan
49
56
  name: Plan to Spec
50
57
  description: Translate approved plans into specs and tasks. Import structured documents or create incrementally. Plans persist as durable artifacts with audit trail.
51
58
  platforms:
52
59
  - claude-code
53
60
  - codex
61
+ - droid
54
62
  - id: task-work
55
63
  name: Task Work
56
- description: Structured task lifecycle — start, work, note, submit, complete. Fix cycle handling, scope management, loop mode for automation, and quality gates.
64
+ description: Structured task lifecycle — start, work, note, submit, complete. AC annotations, fix cycle handling via review records, scope management, and quality checks.
57
65
  platforms:
58
66
  - claude-code
59
67
  - codex
60
- - id: create-workflow
61
- name: Create Workflow
62
- description: Formalize repeatable patterns into trackable kspec workflows. Design steps, choose triggers, create loop variants, and integrate with skills.
68
+ - droid
69
+ - id: review
70
+ name: Review
71
+ description: How to review work and use kspec review records. Covers both reviewer and worker perspectives — creating reviews, structuring findings, AC coverage verification, review principles, and the full review record interface.
63
72
  platforms:
64
73
  - claude-code
65
74
  - codex
66
- - id: review
67
- name: Review
68
- description: Kspec-specific review gates — spec alignment, own AC coverage, trait AC coverage, and validation integration. Building block for project-specific review workflows.
75
+ - droid
76
+ - id: merge
77
+ name: Merge
78
+ description: Merge approved work into an integration branch. Local-first git merge with gates based on kspec review disposition — approved status, passing checks, and resolved blocker threads.
79
+ platforms:
80
+ - claude-code
81
+ - codex
82
+ - droid
83
+ - id: create-workflow
84
+ name: Create Workflow
85
+ description: Formalize repeatable patterns into trackable kspec workflows. Design steps, choose triggers, create loop variants, and integrate with skills.
69
86
  platforms:
70
87
  - claude-code
71
88
  - codex
89
+ - droid
@@ -0,0 +1,120 @@
1
+ # Merge
2
+
3
+ Merge approved work into an integration branch. Local-first — uses git merge directly, with merge gates based on kspec review disposition.
4
+
5
+ ## When to Use
6
+
7
+ - After work has been reviewed and approved via `{skill:review}`
8
+ - Merging a task branch into a dev or integration branch
9
+ - Completing the work lifecycle after review approval
10
+
11
+ **Not for:** Creating pull requests to remote repositories (that's a human-directed activity for feature-level merges into main).
12
+
13
+ ## Merge Gate
14
+
15
+ Before merging, verify all gates pass:
16
+
17
+ ```bash
18
+ # 1. Check review disposition
19
+ kspec review for-task @ref
20
+ kspec review get @review-ref
21
+ # Disposition must be "approved"
22
+
23
+ # 2. Required checks passing
24
+ # Review checks should show all required checks as "pass"
25
+
26
+ # 3. No unresolved blocker threads
27
+ # Review should have no open blocker threads
28
+ ```
29
+
30
+ **All three must be satisfied:**
31
+ - Review disposition = `approved`
32
+ - All required checks passing (not stale)
33
+ - No unresolved blocker threads
34
+
35
+ If any gate fails, do not merge. Address the issue first:
36
+ - `changes_requested` → worker fixes issues, resubmits
37
+ - Required check failing → fix and re-run
38
+ - Unresolved blocker → resolve the thread or fix the issue
39
+
40
+ ## Merge Process
41
+
42
+ ### 1. Verify Branch State
43
+
44
+ ```bash
45
+ # Confirm current branch
46
+ git branch --show-current
47
+
48
+ # Ensure branch is up to date with target
49
+ git fetch origin
50
+ git log --oneline origin/dev..HEAD # What will be merged
51
+ ```
52
+
53
+ ### 2. Merge to Integration Branch
54
+
55
+ ```bash
56
+ # Switch to target branch
57
+ git checkout dev
58
+
59
+ # Merge with merge commit (preserves trailers)
60
+ git merge --no-ff <task-branch>
61
+
62
+ # Verify merge succeeded
63
+ git log --oneline -3
64
+ ```
65
+
66
+ **Use merge commits, not squash.** Merge commits preserve individual commit messages with their `Task:` and `Spec:` trailers, enabling `kspec log @ref` to find related commits.
67
+
68
+ ### 3. Handle Conflicts
69
+
70
+ If a merge conflict occurs:
71
+
72
+ **Assess the conflict:**
73
+ - Is it a simple textual conflict (parallel edits to the same lines)?
74
+ - Or a semantic conflict (incompatible changes to behavior)?
75
+
76
+ **For simple conflicts:**
77
+ ```bash
78
+ # View conflicting files
79
+ git diff --name-only --diff-filter=U
80
+
81
+ # Resolve conflicts in each file
82
+ # Then mark resolved
83
+ git add <resolved-files>
84
+ git commit # Completes the merge
85
+ ```
86
+
87
+ **For complex/semantic conflicts:**
88
+ - Do not force-merge
89
+ - Escalate: `kspec inbox add "Merge conflict between @task-a and @task-b — needs human review"`
90
+ - Or block the task: `kspec task block @ref --reason "Merge conflict with ..."`
91
+
92
+ ### 4. Complete the Task
93
+
94
+ After successful merge:
95
+
96
+ ```bash
97
+ kspec task complete @ref --reason "Merged to dev. Summary of what was done."
98
+ ```
99
+
100
+ ### 5. Close the Review
101
+
102
+ ```bash
103
+ kspec review close @review-ref
104
+ ```
105
+
106
+ ## Post-Merge Cleanup
107
+
108
+ ```bash
109
+ # Delete the task branch locally
110
+ git branch -d <task-branch>
111
+
112
+ # Optionally delete remote branch
113
+ git push origin --delete <task-branch>
114
+ ```
115
+
116
+ ## Integration
117
+
118
+ - **`{skill:task-work}`** — Work lifecycle leads to merge after review
119
+ - **`{skill:review}`** — Review disposition gates the merge
120
+ - **`kspec task complete`** — Final step after merge