@kynetic-ai/spec 0.1.2 → 0.4.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 (540) hide show
  1. package/README.md +250 -17
  2. package/dist/acp/client.d.ts +18 -4
  3. package/dist/acp/client.d.ts.map +1 -1
  4. package/dist/acp/client.js +44 -26
  5. package/dist/acp/client.js.map +1 -1
  6. package/dist/acp/framing.d.ts +2 -2
  7. package/dist/acp/framing.d.ts.map +1 -1
  8. package/dist/acp/framing.js +37 -29
  9. package/dist/acp/framing.js.map +1 -1
  10. package/dist/acp/index.d.ts +6 -7
  11. package/dist/acp/index.d.ts.map +1 -1
  12. package/dist/acp/index.js +3 -3
  13. package/dist/acp/index.js.map +1 -1
  14. package/dist/acp/types.d.ts +5 -5
  15. package/dist/acp/types.d.ts.map +1 -1
  16. package/dist/acp/types.js +18 -18
  17. package/dist/acp/types.js.map +1 -1
  18. package/dist/agents/adapters.d.ts.map +1 -1
  19. package/dist/agents/adapters.js +24 -13
  20. package/dist/agents/adapters.js.map +1 -1
  21. package/dist/agents/index.d.ts +2 -2
  22. package/dist/agents/index.js +2 -2
  23. package/dist/agents/spawner.d.ts +4 -4
  24. package/dist/agents/spawner.d.ts.map +1 -1
  25. package/dist/agents/spawner.js +6 -6
  26. package/dist/agents/spawner.js.map +1 -1
  27. package/dist/cli/batch-context.d.ts +43 -0
  28. package/dist/cli/batch-context.d.ts.map +1 -0
  29. package/dist/cli/batch-context.js +93 -0
  30. package/dist/cli/batch-context.js.map +1 -0
  31. package/dist/cli/batch-exec.d.ts +107 -0
  32. package/dist/cli/batch-exec.d.ts.map +1 -0
  33. package/dist/cli/batch-exec.js +706 -0
  34. package/dist/cli/batch-exec.js.map +1 -0
  35. package/dist/cli/batch.d.ts +4 -2
  36. package/dist/cli/batch.d.ts.map +1 -1
  37. package/dist/cli/batch.js +15 -14
  38. package/dist/cli/batch.js.map +1 -1
  39. package/dist/cli/command-annotations.d.ts +23 -0
  40. package/dist/cli/command-annotations.d.ts.map +1 -0
  41. package/dist/cli/command-annotations.js +27 -0
  42. package/dist/cli/command-annotations.js.map +1 -0
  43. package/dist/cli/commands/agents.d.ts +46 -0
  44. package/dist/cli/commands/agents.d.ts.map +1 -0
  45. package/dist/cli/commands/agents.js +377 -0
  46. package/dist/cli/commands/agents.js.map +1 -0
  47. package/dist/cli/commands/batch.d.ts +20 -0
  48. package/dist/cli/commands/batch.d.ts.map +1 -0
  49. package/dist/cli/commands/batch.js +214 -0
  50. package/dist/cli/commands/batch.js.map +1 -0
  51. package/dist/cli/commands/clone-for-testing.d.ts +1 -1
  52. package/dist/cli/commands/clone-for-testing.d.ts.map +1 -1
  53. package/dist/cli/commands/clone-for-testing.js +37 -47
  54. package/dist/cli/commands/clone-for-testing.js.map +1 -1
  55. package/dist/cli/commands/derive.d.ts +1 -1
  56. package/dist/cli/commands/derive.d.ts.map +1 -1
  57. package/dist/cli/commands/derive.js +141 -88
  58. package/dist/cli/commands/derive.js.map +1 -1
  59. package/dist/cli/commands/doctor.d.ts +11 -0
  60. package/dist/cli/commands/doctor.d.ts.map +1 -0
  61. package/dist/cli/commands/doctor.js +152 -0
  62. package/dist/cli/commands/doctor.js.map +1 -0
  63. package/dist/cli/commands/export.d.ts +12 -0
  64. package/dist/cli/commands/export.d.ts.map +1 -0
  65. package/dist/cli/commands/export.js +134 -0
  66. package/dist/cli/commands/export.js.map +1 -0
  67. package/dist/cli/commands/help.d.ts +1 -1
  68. package/dist/cli/commands/help.d.ts.map +1 -1
  69. package/dist/cli/commands/help.js +163 -37
  70. package/dist/cli/commands/help.js.map +1 -1
  71. package/dist/cli/commands/inbox.d.ts +1 -1
  72. package/dist/cli/commands/inbox.d.ts.map +1 -1
  73. package/dist/cli/commands/inbox.js +178 -56
  74. package/dist/cli/commands/inbox.js.map +1 -1
  75. package/dist/cli/commands/index.d.ts +31 -19
  76. package/dist/cli/commands/index.d.ts.map +1 -1
  77. package/dist/cli/commands/index.js +31 -19
  78. package/dist/cli/commands/index.js.map +1 -1
  79. package/dist/cli/commands/init.d.ts +5 -1
  80. package/dist/cli/commands/init.d.ts.map +1 -1
  81. package/dist/cli/commands/init.js +108 -57
  82. package/dist/cli/commands/init.js.map +1 -1
  83. package/dist/cli/commands/item.d.ts +1 -1
  84. package/dist/cli/commands/item.d.ts.map +1 -1
  85. package/dist/cli/commands/item.js +557 -274
  86. package/dist/cli/commands/item.js.map +1 -1
  87. package/dist/cli/commands/link.d.ts +1 -1
  88. package/dist/cli/commands/link.d.ts.map +1 -1
  89. package/dist/cli/commands/link.js +55 -46
  90. package/dist/cli/commands/link.js.map +1 -1
  91. package/dist/cli/commands/log.d.ts +1 -1
  92. package/dist/cli/commands/log.d.ts.map +1 -1
  93. package/dist/cli/commands/log.js +58 -51
  94. package/dist/cli/commands/log.js.map +1 -1
  95. package/dist/cli/commands/merge-driver.d.ts +19 -0
  96. package/dist/cli/commands/merge-driver.d.ts.map +1 -0
  97. package/dist/cli/commands/merge-driver.js +398 -0
  98. package/dist/cli/commands/merge-driver.js.map +1 -0
  99. package/dist/cli/commands/meta.d.ts +1 -1
  100. package/dist/cli/commands/meta.d.ts.map +1 -1
  101. package/dist/cli/commands/meta.js +534 -399
  102. package/dist/cli/commands/meta.js.map +1 -1
  103. package/dist/cli/commands/module.d.ts +1 -1
  104. package/dist/cli/commands/module.d.ts.map +1 -1
  105. package/dist/cli/commands/module.js +30 -25
  106. package/dist/cli/commands/module.js.map +1 -1
  107. package/dist/cli/commands/plan-import.d.ts +11 -0
  108. package/dist/cli/commands/plan-import.d.ts.map +1 -0
  109. package/dist/cli/commands/plan-import.js +547 -0
  110. package/dist/cli/commands/plan-import.js.map +1 -0
  111. package/dist/cli/commands/plan.d.ts +10 -0
  112. package/dist/cli/commands/plan.d.ts.map +1 -0
  113. package/dist/cli/commands/plan.js +421 -0
  114. package/dist/cli/commands/plan.js.map +1 -0
  115. package/dist/cli/commands/ralph.d.ts +1 -1
  116. package/dist/cli/commands/ralph.d.ts.map +1 -1
  117. package/dist/cli/commands/ralph.js +1109 -170
  118. package/dist/cli/commands/ralph.js.map +1 -1
  119. package/dist/cli/commands/refs.d.ts +13 -0
  120. package/dist/cli/commands/refs.d.ts.map +1 -0
  121. package/dist/cli/commands/refs.js +283 -0
  122. package/dist/cli/commands/refs.js.map +1 -0
  123. package/dist/cli/commands/search.d.ts +1 -1
  124. package/dist/cli/commands/search.d.ts.map +1 -1
  125. package/dist/cli/commands/search.js +199 -37
  126. package/dist/cli/commands/search.js.map +1 -1
  127. package/dist/cli/commands/serve.d.ts +10 -0
  128. package/dist/cli/commands/serve.d.ts.map +1 -0
  129. package/dist/cli/commands/serve.js +491 -0
  130. package/dist/cli/commands/serve.js.map +1 -0
  131. package/dist/cli/commands/session.d.ts +25 -6
  132. package/dist/cli/commands/session.d.ts.map +1 -1
  133. package/dist/cli/commands/session.js +810 -127
  134. package/dist/cli/commands/session.js.map +1 -1
  135. package/dist/cli/commands/setup-seeding.d.ts +81 -0
  136. package/dist/cli/commands/setup-seeding.d.ts.map +1 -0
  137. package/dist/cli/commands/setup-seeding.js +292 -0
  138. package/dist/cli/commands/setup-seeding.js.map +1 -0
  139. package/dist/cli/commands/setup.d.ts +77 -3
  140. package/dist/cli/commands/setup.d.ts.map +1 -1
  141. package/dist/cli/commands/setup.js +1267 -274
  142. package/dist/cli/commands/setup.js.map +1 -1
  143. package/dist/cli/commands/shadow.d.ts +1 -1
  144. package/dist/cli/commands/shadow.d.ts.map +1 -1
  145. package/dist/cli/commands/shadow.js +70 -50
  146. package/dist/cli/commands/shadow.js.map +1 -1
  147. package/dist/cli/commands/skill-crud.d.ts +58 -0
  148. package/dist/cli/commands/skill-crud.d.ts.map +1 -0
  149. package/dist/cli/commands/skill-crud.js +753 -0
  150. package/dist/cli/commands/skill-crud.js.map +1 -0
  151. package/dist/cli/commands/skill-diff.d.ts +27 -0
  152. package/dist/cli/commands/skill-diff.d.ts.map +1 -0
  153. package/dist/cli/commands/skill-diff.js +840 -0
  154. package/dist/cli/commands/skill-diff.js.map +1 -0
  155. package/dist/cli/commands/skill-install.d.ts +56 -0
  156. package/dist/cli/commands/skill-install.d.ts.map +1 -0
  157. package/dist/cli/commands/skill-install.js +509 -0
  158. package/dist/cli/commands/skill-install.js.map +1 -0
  159. package/dist/cli/commands/skill.d.ts +20 -0
  160. package/dist/cli/commands/skill.d.ts.map +1 -0
  161. package/dist/cli/commands/skill.js +36 -0
  162. package/dist/cli/commands/skill.js.map +1 -0
  163. package/dist/cli/commands/task.d.ts +1 -1
  164. package/dist/cli/commands/task.d.ts.map +1 -1
  165. package/dist/cli/commands/task.js +584 -350
  166. package/dist/cli/commands/task.js.map +1 -1
  167. package/dist/cli/commands/tasks.d.ts +26 -1
  168. package/dist/cli/commands/tasks.d.ts.map +1 -1
  169. package/dist/cli/commands/tasks.js +225 -122
  170. package/dist/cli/commands/tasks.js.map +1 -1
  171. package/dist/cli/commands/trait.d.ts +1 -1
  172. package/dist/cli/commands/trait.d.ts.map +1 -1
  173. package/dist/cli/commands/trait.js +166 -101
  174. package/dist/cli/commands/trait.js.map +1 -1
  175. package/dist/cli/commands/triage.d.ts +7 -0
  176. package/dist/cli/commands/triage.d.ts.map +1 -0
  177. package/dist/cli/commands/triage.js +483 -0
  178. package/dist/cli/commands/triage.js.map +1 -0
  179. package/dist/cli/commands/util.d.ts +7 -0
  180. package/dist/cli/commands/util.d.ts.map +1 -0
  181. package/dist/cli/commands/util.js +30 -0
  182. package/dist/cli/commands/util.js.map +1 -0
  183. package/dist/cli/commands/validate.d.ts +1 -1
  184. package/dist/cli/commands/validate.d.ts.map +1 -1
  185. package/dist/cli/commands/validate.js +264 -83
  186. package/dist/cli/commands/validate.js.map +1 -1
  187. package/dist/cli/commands/workflow.d.ts +16 -0
  188. package/dist/cli/commands/workflow.d.ts.map +1 -0
  189. package/dist/cli/commands/workflow.js +851 -0
  190. package/dist/cli/commands/workflow.js.map +1 -0
  191. package/dist/cli/exit-codes.d.ts +7 -0
  192. package/dist/cli/exit-codes.d.ts.map +1 -1
  193. package/dist/cli/exit-codes.js +26 -18
  194. package/dist/cli/exit-codes.js.map +1 -1
  195. package/dist/cli/help/content.d.ts.map +1 -1
  196. package/dist/cli/help/content.js +86 -71
  197. package/dist/cli/help/content.js.map +1 -1
  198. package/dist/cli/index.d.ts +1 -1
  199. package/dist/cli/index.d.ts.map +1 -1
  200. package/dist/cli/index.js +131 -19
  201. package/dist/cli/index.js.map +1 -1
  202. package/dist/cli/introspection.d.ts +6 -2
  203. package/dist/cli/introspection.d.ts.map +1 -1
  204. package/dist/cli/introspection.js +11 -8
  205. package/dist/cli/introspection.js.map +1 -1
  206. package/dist/cli/output.d.ts +64 -4
  207. package/dist/cli/output.d.ts.map +1 -1
  208. package/dist/cli/output.js +237 -85
  209. package/dist/cli/output.js.map +1 -1
  210. package/dist/cli/parse-utils.d.ts +21 -0
  211. package/dist/cli/parse-utils.d.ts.map +1 -0
  212. package/dist/cli/parse-utils.js +32 -0
  213. package/dist/cli/parse-utils.js.map +1 -0
  214. package/dist/cli/pid-utils.d.ts +72 -0
  215. package/dist/cli/pid-utils.d.ts.map +1 -0
  216. package/dist/cli/pid-utils.js +174 -0
  217. package/dist/cli/pid-utils.js.map +1 -0
  218. package/dist/cli/suggest.d.ts.map +1 -1
  219. package/dist/cli/suggest.js +1 -2
  220. package/dist/cli/suggest.js.map +1 -1
  221. package/dist/cli/validators.d.ts +43 -0
  222. package/dist/cli/validators.d.ts.map +1 -0
  223. package/dist/cli/validators.js +84 -0
  224. package/dist/cli/validators.js.map +1 -0
  225. package/dist/daemon/index.ts +52 -0
  226. package/dist/daemon/middleware/project-context.ts +126 -0
  227. package/dist/daemon/pid.ts +179 -0
  228. package/dist/daemon/project-context.ts +343 -0
  229. package/dist/daemon/routes/inbox.ts +164 -0
  230. package/dist/daemon/routes/items.ts +322 -0
  231. package/dist/daemon/routes/meta.ts +118 -0
  232. package/dist/daemon/routes/projects.ts +162 -0
  233. package/dist/daemon/routes/tasks.ts +327 -0
  234. package/dist/daemon/routes/triage.ts +402 -0
  235. package/dist/daemon/routes/validation.ts +248 -0
  236. package/dist/daemon/server.ts +408 -0
  237. package/dist/daemon/watcher.ts +195 -0
  238. package/dist/daemon/websocket/handler.ts +138 -0
  239. package/dist/daemon/websocket/heartbeat.ts +71 -0
  240. package/dist/daemon/websocket/pubsub.ts +125 -0
  241. package/dist/daemon/websocket/types.ts +66 -0
  242. package/dist/export/html.d.ts +19 -0
  243. package/dist/export/html.d.ts.map +1 -0
  244. package/dist/export/html.js +239 -0
  245. package/dist/export/html.js.map +1 -0
  246. package/dist/export/index.d.ts +10 -0
  247. package/dist/export/index.d.ts.map +1 -0
  248. package/dist/export/index.js +10 -0
  249. package/dist/export/index.js.map +1 -0
  250. package/dist/export/json.d.ts +24 -0
  251. package/dist/export/json.d.ts.map +1 -0
  252. package/dist/export/json.js +198 -0
  253. package/dist/export/json.js.map +1 -0
  254. package/dist/export/triage.d.ts +51 -0
  255. package/dist/export/triage.d.ts.map +1 -0
  256. package/dist/export/triage.js +83 -0
  257. package/dist/export/triage.js.map +1 -0
  258. package/dist/export/types.d.ts +122 -0
  259. package/dist/export/types.d.ts.map +1 -0
  260. package/dist/export/types.js +9 -0
  261. package/dist/export/types.js.map +1 -0
  262. package/dist/index.d.ts +2 -2
  263. package/dist/index.js +2 -2
  264. package/dist/lib/claude-plugin-registry.d.ts +66 -0
  265. package/dist/lib/claude-plugin-registry.d.ts.map +1 -0
  266. package/dist/lib/claude-plugin-registry.js +318 -0
  267. package/dist/lib/claude-plugin-registry.js.map +1 -0
  268. package/dist/merge/arrays.d.ts +87 -0
  269. package/dist/merge/arrays.d.ts.map +1 -0
  270. package/dist/merge/arrays.js +164 -0
  271. package/dist/merge/arrays.js.map +1 -0
  272. package/dist/merge/file-type.d.ts +32 -0
  273. package/dist/merge/file-type.d.ts.map +1 -0
  274. package/dist/merge/file-type.js +70 -0
  275. package/dist/merge/file-type.js.map +1 -0
  276. package/dist/merge/index.d.ts +14 -0
  277. package/dist/merge/index.d.ts.map +1 -0
  278. package/dist/merge/index.js +11 -0
  279. package/dist/merge/index.js.map +1 -0
  280. package/dist/merge/objects.d.ts +46 -0
  281. package/dist/merge/objects.d.ts.map +1 -0
  282. package/dist/merge/objects.js +193 -0
  283. package/dist/merge/objects.js.map +1 -0
  284. package/dist/merge/parse.d.ts +23 -0
  285. package/dist/merge/parse.d.ts.map +1 -0
  286. package/dist/merge/parse.js +78 -0
  287. package/dist/merge/parse.js.map +1 -0
  288. package/dist/merge/resolve.d.ts +66 -0
  289. package/dist/merge/resolve.d.ts.map +1 -0
  290. package/dist/merge/resolve.js +189 -0
  291. package/dist/merge/resolve.js.map +1 -0
  292. package/dist/merge/types.d.ts +82 -0
  293. package/dist/merge/types.d.ts.map +1 -0
  294. package/dist/merge/types.js +8 -0
  295. package/dist/merge/types.js.map +1 -0
  296. package/dist/parser/agent-data-sections.d.ts +53 -0
  297. package/dist/parser/agent-data-sections.d.ts.map +1 -0
  298. package/dist/parser/agent-data-sections.js +118 -0
  299. package/dist/parser/agent-data-sections.js.map +1 -0
  300. package/dist/parser/alignment.d.ts +4 -4
  301. package/dist/parser/alignment.d.ts.map +1 -1
  302. package/dist/parser/alignment.js +27 -22
  303. package/dist/parser/alignment.js.map +1 -1
  304. package/dist/parser/assess.d.ts +5 -5
  305. package/dist/parser/assess.d.ts.map +1 -1
  306. package/dist/parser/assess.js +36 -32
  307. package/dist/parser/assess.js.map +1 -1
  308. package/dist/parser/config.d.ts +457 -0
  309. package/dist/parser/config.d.ts.map +1 -0
  310. package/dist/parser/config.js +373 -0
  311. package/dist/parser/config.js.map +1 -0
  312. package/dist/parser/convention-validation.d.ts +1 -1
  313. package/dist/parser/convention-validation.d.ts.map +1 -1
  314. package/dist/parser/convention-validation.js +21 -16
  315. package/dist/parser/convention-validation.js.map +1 -1
  316. package/dist/parser/coverage-cache.d.ts +49 -0
  317. package/dist/parser/coverage-cache.d.ts.map +1 -0
  318. package/dist/parser/coverage-cache.js +123 -0
  319. package/dist/parser/coverage-cache.js.map +1 -0
  320. package/dist/parser/daemon-status.d.ts +37 -0
  321. package/dist/parser/daemon-status.d.ts.map +1 -0
  322. package/dist/parser/daemon-status.js +67 -0
  323. package/dist/parser/daemon-status.js.map +1 -0
  324. package/dist/parser/doctor.d.ts +107 -0
  325. package/dist/parser/doctor.d.ts.map +1 -0
  326. package/dist/parser/doctor.js +366 -0
  327. package/dist/parser/doctor.js.map +1 -0
  328. package/dist/parser/fix.d.ts +1 -1
  329. package/dist/parser/fix.d.ts.map +1 -1
  330. package/dist/parser/fix.js +31 -27
  331. package/dist/parser/fix.js.map +1 -1
  332. package/dist/parser/index.d.ts +16 -11
  333. package/dist/parser/index.d.ts.map +1 -1
  334. package/dist/parser/index.js +16 -11
  335. package/dist/parser/index.js.map +1 -1
  336. package/dist/parser/items.d.ts +8 -2
  337. package/dist/parser/items.d.ts.map +1 -1
  338. package/dist/parser/items.js +71 -35
  339. package/dist/parser/items.js.map +1 -1
  340. package/dist/parser/meta.d.ts +167 -9
  341. package/dist/parser/meta.d.ts.map +1 -1
  342. package/dist/parser/meta.js +379 -46
  343. package/dist/parser/meta.js.map +1 -1
  344. package/dist/parser/plan-document.d.ts +197 -0
  345. package/dist/parser/plan-document.d.ts.map +1 -0
  346. package/dist/parser/plan-document.js +341 -0
  347. package/dist/parser/plan-document.js.map +1 -0
  348. package/dist/parser/plans.d.ts +59 -0
  349. package/dist/parser/plans.d.ts.map +1 -0
  350. package/dist/parser/plans.js +239 -0
  351. package/dist/parser/plans.js.map +1 -0
  352. package/dist/parser/refs.d.ts +22 -9
  353. package/dist/parser/refs.d.ts.map +1 -1
  354. package/dist/parser/refs.js +102 -50
  355. package/dist/parser/refs.js.map +1 -1
  356. package/dist/parser/setup-status.d.ts +71 -0
  357. package/dist/parser/setup-status.d.ts.map +1 -0
  358. package/dist/parser/setup-status.js +269 -0
  359. package/dist/parser/setup-status.js.map +1 -0
  360. package/dist/parser/shadow.d.ts +150 -19
  361. package/dist/parser/shadow.d.ts.map +1 -1
  362. package/dist/parser/shadow.js +548 -187
  363. package/dist/parser/shadow.js.map +1 -1
  364. package/dist/parser/skill-render.d.ts +317 -0
  365. package/dist/parser/skill-render.d.ts.map +1 -0
  366. package/dist/parser/skill-render.js +943 -0
  367. package/dist/parser/skill-render.js.map +1 -0
  368. package/dist/parser/traits.d.ts +3 -3
  369. package/dist/parser/traits.d.ts.map +1 -1
  370. package/dist/parser/traits.js +2 -2
  371. package/dist/parser/traits.js.map +1 -1
  372. package/dist/parser/validate-skills.d.ts +32 -0
  373. package/dist/parser/validate-skills.d.ts.map +1 -0
  374. package/dist/parser/validate-skills.js +202 -0
  375. package/dist/parser/validate-skills.js.map +1 -0
  376. package/dist/parser/validate.d.ts +45 -3
  377. package/dist/parser/validate.d.ts.map +1 -1
  378. package/dist/parser/validate.js +622 -105
  379. package/dist/parser/validate.js.map +1 -1
  380. package/dist/parser/yaml.d.ts +83 -19
  381. package/dist/parser/yaml.d.ts.map +1 -1
  382. package/dist/parser/yaml.js +478 -173
  383. package/dist/parser/yaml.js.map +1 -1
  384. package/dist/ralph/cli-renderer.d.ts +8 -1
  385. package/dist/ralph/cli-renderer.d.ts.map +1 -1
  386. package/dist/ralph/cli-renderer.js +105 -34
  387. package/dist/ralph/cli-renderer.js.map +1 -1
  388. package/dist/ralph/events.d.ts +10 -10
  389. package/dist/ralph/events.d.ts.map +1 -1
  390. package/dist/ralph/events.js +301 -98
  391. package/dist/ralph/events.js.map +1 -1
  392. package/dist/ralph/index.d.ts +5 -2
  393. package/dist/ralph/index.d.ts.map +1 -1
  394. package/dist/ralph/index.js +9 -3
  395. package/dist/ralph/index.js.map +1 -1
  396. package/dist/ralph/loop-errors.d.ts +83 -0
  397. package/dist/ralph/loop-errors.d.ts.map +1 -0
  398. package/dist/ralph/loop-errors.js +150 -0
  399. package/dist/ralph/loop-errors.js.map +1 -0
  400. package/dist/ralph/subagent.d.ts +94 -0
  401. package/dist/ralph/subagent.d.ts.map +1 -0
  402. package/dist/ralph/subagent.js +193 -0
  403. package/dist/ralph/subagent.js.map +1 -0
  404. package/dist/ralph/wrap-up.d.ts +125 -0
  405. package/dist/ralph/wrap-up.d.ts.map +1 -0
  406. package/dist/ralph/wrap-up.js +270 -0
  407. package/dist/ralph/wrap-up.js.map +1 -0
  408. package/dist/schema/batch.d.ts +97 -0
  409. package/dist/schema/batch.d.ts.map +1 -0
  410. package/dist/schema/batch.js +24 -0
  411. package/dist/schema/batch.js.map +1 -0
  412. package/dist/schema/common.d.ts +8 -2
  413. package/dist/schema/common.d.ts.map +1 -1
  414. package/dist/schema/common.js +42 -31
  415. package/dist/schema/common.js.map +1 -1
  416. package/dist/schema/inbox.d.ts +12 -12
  417. package/dist/schema/inbox.js +4 -4
  418. package/dist/schema/inbox.js.map +1 -1
  419. package/dist/schema/index.d.ts +8 -5
  420. package/dist/schema/index.d.ts.map +1 -1
  421. package/dist/schema/index.js +8 -5
  422. package/dist/schema/index.js.map +1 -1
  423. package/dist/schema/meta.d.ts +1454 -27
  424. package/dist/schema/meta.d.ts.map +1 -1
  425. package/dist/schema/meta.js +198 -21
  426. package/dist/schema/meta.js.map +1 -1
  427. package/dist/schema/plan.d.ts +285 -0
  428. package/dist/schema/plan.d.ts.map +1 -0
  429. package/dist/schema/plan.js +81 -0
  430. package/dist/schema/plan.js.map +1 -0
  431. package/dist/schema/spec.d.ts +72 -33
  432. package/dist/schema/spec.d.ts.map +1 -1
  433. package/dist/schema/spec.js +22 -9
  434. package/dist/schema/spec.js.map +1 -1
  435. package/dist/schema/task.d.ts +172 -161
  436. package/dist/schema/task.d.ts.map +1 -1
  437. package/dist/schema/task.js +21 -12
  438. package/dist/schema/task.js.map +1 -1
  439. package/dist/schema/triage.d.ts +266 -0
  440. package/dist/schema/triage.d.ts.map +1 -0
  441. package/dist/schema/triage.js +134 -0
  442. package/dist/schema/triage.js.map +1 -0
  443. package/dist/sessions/index.d.ts +2 -2
  444. package/dist/sessions/index.d.ts.map +1 -1
  445. package/dist/sessions/index.js +3 -3
  446. package/dist/sessions/index.js.map +1 -1
  447. package/dist/sessions/store.d.ts +241 -1
  448. package/dist/sessions/store.d.ts.map +1 -1
  449. package/dist/sessions/store.js +810 -31
  450. package/dist/sessions/store.js.map +1 -1
  451. package/dist/sessions/types.d.ts +10 -10
  452. package/dist/sessions/types.d.ts.map +1 -1
  453. package/dist/sessions/types.js +10 -9
  454. package/dist/sessions/types.js.map +1 -1
  455. package/dist/strings/errors.d.ts +55 -0
  456. package/dist/strings/errors.d.ts.map +1 -1
  457. package/dist/strings/errors.js +138 -106
  458. package/dist/strings/errors.js.map +1 -1
  459. package/dist/strings/guidance.d.ts.map +1 -1
  460. package/dist/strings/guidance.js +16 -16
  461. package/dist/strings/guidance.js.map +1 -1
  462. package/dist/strings/index.d.ts +4 -4
  463. package/dist/strings/index.d.ts.map +1 -1
  464. package/dist/strings/index.js +4 -4
  465. package/dist/strings/index.js.map +1 -1
  466. package/dist/strings/labels.d.ts +4 -0
  467. package/dist/strings/labels.d.ts.map +1 -1
  468. package/dist/strings/labels.js +45 -41
  469. package/dist/strings/labels.js.map +1 -1
  470. package/dist/strings/validation.d.ts.map +1 -1
  471. package/dist/strings/validation.js +71 -71
  472. package/dist/strings/validation.js.map +1 -1
  473. package/dist/triage/actions.d.ts +27 -0
  474. package/dist/triage/actions.d.ts.map +1 -0
  475. package/dist/triage/actions.js +95 -0
  476. package/dist/triage/actions.js.map +1 -0
  477. package/dist/triage/constants.d.ts +6 -0
  478. package/dist/triage/constants.d.ts.map +1 -0
  479. package/dist/triage/constants.js +7 -0
  480. package/dist/triage/constants.js.map +1 -0
  481. package/dist/triage/index.d.ts +3 -0
  482. package/dist/triage/index.d.ts.map +1 -0
  483. package/dist/triage/index.js +3 -0
  484. package/dist/triage/index.js.map +1 -0
  485. package/dist/utils/commit.d.ts +1 -1
  486. package/dist/utils/commit.d.ts.map +1 -1
  487. package/dist/utils/commit.js +28 -26
  488. package/dist/utils/commit.js.map +1 -1
  489. package/dist/utils/git.d.ts +1 -1
  490. package/dist/utils/git.d.ts.map +1 -1
  491. package/dist/utils/git.js +40 -38
  492. package/dist/utils/git.js.map +1 -1
  493. package/dist/utils/grep.js +11 -11
  494. package/dist/utils/grep.js.map +1 -1
  495. package/dist/utils/index.d.ts +7 -7
  496. package/dist/utils/index.d.ts.map +1 -1
  497. package/dist/utils/index.js +4 -4
  498. package/dist/utils/index.js.map +1 -1
  499. package/dist/utils/time.d.ts.map +1 -1
  500. package/dist/utils/time.js +10 -10
  501. package/dist/utils/time.js.map +1 -1
  502. package/package.json +28 -5
  503. package/plugin/.claude-plugin/marketplace.json +17 -0
  504. package/plugin/.claude-plugin/plugin.json +5 -0
  505. package/plugin/plugins/kspec/skills/create-workflow/SKILL.md +235 -0
  506. package/plugin/plugins/kspec/skills/help/SKILL.md +42 -0
  507. package/plugin/plugins/kspec/skills/observations/SKILL.md +143 -0
  508. package/plugin/plugins/kspec/skills/plan/SKILL.md +343 -0
  509. package/plugin/plugins/kspec/skills/reflect/SKILL.md +161 -0
  510. package/plugin/plugins/kspec/skills/review/SKILL.md +193 -0
  511. package/plugin/plugins/kspec/skills/task-work/SKILL.md +303 -0
  512. package/plugin/plugins/kspec/skills/triage/SKILL.md +206 -0
  513. package/plugin/plugins/kspec/skills/triage/docs/automation.md +120 -0
  514. package/plugin/plugins/kspec/skills/triage/docs/inbox.md +144 -0
  515. package/plugin/plugins/kspec/skills/triage/docs/observations.md +85 -0
  516. package/plugin/plugins/kspec/skills/triage-automation/SKILL.md +140 -0
  517. package/plugin/plugins/kspec/skills/triage-inbox/SKILL.md +232 -0
  518. package/plugin/plugins/kspec/skills/writing-specs/SKILL.md +340 -0
  519. package/templates/agents-sections/01-quick-start.md +22 -0
  520. package/templates/agents-sections/02-shadow-branch.md +34 -0
  521. package/templates/agents-sections/03-task-lifecycle.md +48 -0
  522. package/templates/agents-sections/04-pr-workflow.md +17 -0
  523. package/templates/agents-sections/05-commit-convention.md +27 -0
  524. package/templates/agents-sections/06-ralph-loop.md +45 -0
  525. package/templates/hooks/pre-commit +34 -0
  526. package/templates/skills/create-workflow/SKILL.md +228 -0
  527. package/templates/skills/help/SKILL.md +37 -0
  528. package/templates/skills/manifest.yaml +60 -0
  529. package/templates/skills/observations/SKILL.md +137 -0
  530. package/templates/skills/plan/SKILL.md +336 -0
  531. package/templates/skills/reflect/SKILL.md +155 -0
  532. package/templates/skills/review/SKILL.md +186 -0
  533. package/templates/skills/task-work/SKILL.md +296 -0
  534. package/templates/skills/triage/SKILL.md +199 -0
  535. package/templates/skills/triage/docs/automation.md +120 -0
  536. package/templates/skills/triage/docs/inbox.md +144 -0
  537. package/templates/skills/triage/docs/observations.md +85 -0
  538. package/templates/skills/triage-automation/SKILL.md +134 -0
  539. package/templates/skills/triage-inbox/SKILL.md +225 -0
  540. package/templates/skills/writing-specs/SKILL.md +333 -0
@@ -0,0 +1,343 @@
1
+ ---
2
+ name: plan
3
+ description: Translate approved plans into specs and tasks. Import structured
4
+ documents or create incrementally. Plans persist as durable artifacts with
5
+ audit trail.
6
+ ---
7
+ <!-- kspec-managed -->
8
+ # Plan to Spec Translation
9
+
10
+ Translate approved plans into specs and tasks. Plans are durable artifacts — they persist in the shadow branch, link to derived work, and provide auditable planning history across sessions.
11
+
12
+ ## When to Use
13
+
14
+ - After plan mode approval — turning an approved plan into trackable specs and tasks
15
+ - Creating specs for new features or multi-spec capabilities
16
+ - Translating design documents into the spec hierarchy
17
+
18
+ **Not for:** Raw ideas (use `kspec inbox add`), single spec creation (use `/kspec:writing-specs`), or triage (use `/kspec:triage`).
19
+
20
+ ## Two Paths
21
+
22
+ ### Import Path (Recommended for 3+ Specs)
23
+
24
+ Write a structured markdown document, then import it. All specs, tasks, and notes created atomically.
25
+
26
+ ```bash
27
+ kspec plan import ./plan.md --module @target-module --dry-run # Preview
28
+ kspec plan import ./plan.md --module @target-module # Execute
29
+ ```
30
+
31
+ ### Manual Path (1-2 Specs)
32
+
33
+ Create plan record and specs incrementally via CLI.
34
+
35
+ ```bash
36
+ kspec plan add --title "Plan Title" --content "Description" --status approved
37
+ kspec item add --under @parent --title "Feature" --type feature --slug slug
38
+ kspec item ac add @slug --given "..." --when "..." --then "..."
39
+ kspec derive @slug
40
+ ```
41
+
42
+ ### When to Use Which
43
+
44
+ | Situation | Path |
45
+ |-----------|------|
46
+ | Plan mode just approved, complex feature | Import |
47
+ | Adding a requirement to existing feature | Manual |
48
+ | Multiple related specs with parent/child | Import |
49
+ | Quick bug fix that needs spec coverage | Manual |
50
+ | Translating design doc with many specs | Import |
51
+ | Iterating on previously imported plan | Import (`--update`) |
52
+
53
+ ## Three-Phase Workflow
54
+
55
+ ### Phase 1: Design
56
+
57
+ Always start here — never skip research.
58
+
59
+ ```bash
60
+ kspec workflow start @spec-plan-design
61
+ ```
62
+
63
+ 1. **Explore** — Read relevant code, understand current state
64
+ 2. **Clarify** — Identify ambiguities, resolve with user
65
+ 3. **Design** — Spec structure, AC coverage, trait selection
66
+ 4. **Review** — Check for completeness and gaps
67
+
68
+ Design concludes by choosing import or manual path.
69
+
70
+ ### Phase 2: Execute
71
+
72
+ Run the chosen workflow:
73
+
74
+ ```bash
75
+ # Import path
76
+ kspec workflow start @spec-plan-import
77
+
78
+ # Manual path
79
+ kspec workflow start @spec-plan-manual
80
+ ```
81
+
82
+ ### Phase 3: Validate
83
+
84
+ After creating specs:
85
+
86
+ ```bash
87
+ kspec validate # Check spec quality
88
+ kspec validate --alignment # Verify spec-task links
89
+ ```
90
+
91
+ ## Plan Document Format
92
+
93
+ The import parser extracts specs, tasks, and notes from this markdown structure:
94
+
95
+ ````markdown
96
+ # Plan Title
97
+
98
+ ## Specs
99
+
100
+ ```yaml
101
+ - title: OAuth Provider Support
102
+ slug: oauth-provider
103
+ type: feature
104
+ parent: "@auth"
105
+ description: Support third-party OAuth providers for authentication
106
+ traits:
107
+ - trait-error-guidance
108
+ acceptance_criteria:
109
+ - id: ac-1
110
+ given: User clicks sign-in with Google
111
+ when: OAuth flow completes successfully
112
+ then: User session is created with provider metadata
113
+ - id: ac-2
114
+ given: OAuth provider returns an error
115
+ when: Error callback is received
116
+ then: User sees descriptive error with retry option
117
+ implementation_notes: |
118
+ Use passport.js for OAuth. Per-spec notes go to this spec's derived task.
119
+
120
+ - title: Token Refresh
121
+ slug: token-refresh
122
+ type: requirement
123
+ parent: "@oauth-provider"
124
+ acceptance_criteria:
125
+ - id: ac-1
126
+ given: Access token is within 5 minutes of expiry
127
+ when: User makes an API request
128
+ then: Token is silently refreshed before the request proceeds
129
+ ```
130
+
131
+ ## Tasks
132
+
133
+ derive_from_specs: true
134
+
135
+ ```yaml
136
+ - title: Write migration guide
137
+ slug: migration-guide
138
+ priority: 2
139
+ tags:
140
+ - docs
141
+ ```
142
+
143
+ ## Implementation Notes
144
+
145
+ General architecture notes. Attached to the plan record.
146
+ Use passport.js for OAuth, following existing auth patterns.
147
+ ````
148
+
149
+ ### Section Reference
150
+
151
+ | Section | Content | Notes |
152
+ |---------|---------|-------|
153
+ | `## Specs` | YAML code block — array of spec objects | **Must** use fenced code block (triple-backtick yaml) |
154
+ | `## Tasks` | `derive_from_specs: true` + optional manual tasks | Manual tasks get `plan_ref` but no `spec_ref` |
155
+ | `## Implementation Notes` | Plain text | Attached to plan record; per-spec notes use `implementation_notes` field |
156
+
157
+ ### Spec Fields
158
+
159
+ | Field | Required | Description |
160
+ |-------|----------|-------------|
161
+ | `title` | Yes | Spec title |
162
+ | `slug` | No | Human-friendly ID (auto-generated if omitted) |
163
+ | `type` | No | `feature`, `requirement`, `constraint`, `decision` (default: `feature`) |
164
+ | `parent` | No | Parent ref (e.g., `"@parent-slug"`) |
165
+ | `description` | No | What and why |
166
+ | `acceptance_criteria` | No | Array of `{id, given, when, then}` |
167
+ | `traits` | No | Array of trait slugs (e.g., `trait-json-output`) |
168
+ | `implementation_notes` | No | Scoped to this spec's derived task |
169
+
170
+ ## Trait Selection
171
+
172
+ Before writing specs, review available traits:
173
+
174
+ ```bash
175
+ kspec trait list
176
+ kspec trait get @trait-json-output # See inherited ACs
177
+ ```
178
+
179
+ ### Common Trait Applications
180
+
181
+ | Building... | Consider these traits |
182
+ |-------------|---------------------|
183
+ | CLI command with output | `@trait-json-output`, `@trait-semantic-exit-codes` |
184
+ | Destructive operation | `@trait-confirmation-prompt`, `@trait-dry-run` |
185
+ | List/search command | `@trait-filterable-list`, `@trait-json-output` |
186
+ | Shadow branch mutation | `@trait-shadow-commit` |
187
+ | User-facing error paths | `@trait-error-guidance` |
188
+ | Batch operations | `@trait-multi-ref-batch` |
189
+ | API endpoint | `@trait-api-endpoint`, `@trait-localhost-security` |
190
+ | WebSocket feature | `@trait-websocket-protocol` |
191
+
192
+ ### Trait Naming in Plan Documents
193
+
194
+ Use the **full trait slug** — import only auto-prefixes `@`, not `@trait-`:
195
+
196
+ ```yaml
197
+ # Wrong — resolves to nonexistent item
198
+ traits:
199
+ - json-output
200
+
201
+ # Correct — full slug
202
+ traits:
203
+ - trait-json-output
204
+ ```
205
+
206
+ ## YAML Pitfalls
207
+
208
+ Plan documents embed YAML that is parsed as structured data. Common issues:
209
+
210
+ ### Block Scalars for Complex Text
211
+
212
+ Use `|` (literal block scalar) when AC text contains quotes, colons, or special characters:
213
+
214
+ ```yaml
215
+ # Problem — mixed quoting breaks parser
216
+ acceptance_criteria:
217
+ - id: ac-1
218
+ when: "kspec foo" is run
219
+
220
+ # Solution — block scalar preserves content literally
221
+ acceptance_criteria:
222
+ - id: ac-1
223
+ when: |
224
+ "kspec foo" is run
225
+ ```
226
+
227
+ ### Colons in Values
228
+
229
+ YAML treats `: ` (colon-space) as a key-value separator:
230
+
231
+ ```yaml
232
+ # Problem — parsed as nested key
233
+ then: output shows time: 10:30
234
+
235
+ # Solution — quote the value
236
+ then: "output shows time: 10:30"
237
+ ```
238
+
239
+ ### Best Practice
240
+
241
+ Use block scalars (`|`) for ALL given/when/then text. This avoids every quoting issue:
242
+
243
+ ```yaml
244
+ acceptance_criteria:
245
+ - id: ac-1
246
+ given: |
247
+ user has an existing session
248
+ when: |
249
+ user runs "kspec session start"
250
+ then: |
251
+ session context shows: active tasks, recent notes, inbox count
252
+ ```
253
+
254
+ ## Always Dry-Run First
255
+
256
+ ```bash
257
+ kspec plan import ./plan.md --module @target --dry-run
258
+ ```
259
+
260
+ Dry-run catches:
261
+ - YAML syntax errors before partial state is created
262
+ - Missing parent refs
263
+ - Invalid trait references
264
+ - Duplicate slugs
265
+
266
+ ## Post-Import Checklist
267
+
268
+ After importing, verify the results:
269
+
270
+ ```bash
271
+ # Verify each spec has ACs
272
+ kspec item get @spec-slug
273
+
274
+ # Check trait coverage
275
+ kspec validate
276
+
277
+ # Set task dependencies (import doesn't infer these)
278
+ kspec task set @task-slug --depends-on @other-task
279
+
280
+ # Review plan record
281
+ kspec plan get @plan-slug
282
+ ```
283
+
284
+ ## Plan Lifecycle
285
+
286
+ ```
287
+ draft → approved → active → completed
288
+
289
+ rejected
290
+ ```
291
+
292
+ - **Import** auto-creates plan as `active`
293
+ - **Manual** creates plan as `approved`
294
+ - Mark completed when all derived work is done:
295
+
296
+ ```bash
297
+ kspec plan set @plan --status completed
298
+ ```
299
+
300
+ ## Programmatic Alternative: Batch
301
+
302
+ For fully programmatic creation (scripts, agent pipelines):
303
+
304
+ ```bash
305
+ kspec batch --commands '[
306
+ {"command":"item add","args":{"under":"@parent","title":"Feature X","type":"feature","slug":"feature-x"}},
307
+ {"command":"item ac add","args":{"ref":"@feature-x","given":"...","when":"...","then":"..."}},
308
+ {"command":"derive","args":{"ref":"@feature-x"}}
309
+ ]'
310
+ ```
311
+
312
+ Atomic — all succeed or all roll back. Use `--dry-run` to preview.
313
+
314
+ ## Command Reference
315
+
316
+ ```bash
317
+ # Design phase
318
+ kspec workflow start @spec-plan-design
319
+
320
+ # Import path
321
+ kspec plan import <path> --module @module --dry-run # Preview
322
+ kspec plan import <path> --module @module # Create
323
+ kspec plan import <path> --module @module --update # Re-import
324
+
325
+ # Manual path
326
+ kspec plan add --title "..." --content "..." --status approved
327
+ kspec plan get <ref>
328
+ kspec plan set <ref> --status <status>
329
+ kspec plan note <ref> "..."
330
+ kspec plan list
331
+
332
+ # Validation
333
+ kspec validate
334
+ kspec validate --completeness
335
+ kspec validate --alignment
336
+ ```
337
+
338
+ ## Integration
339
+
340
+ - **`/kspec:writing-specs`** — Spec authoring details (types, AC format, traits)
341
+ - **`/kspec:task-work`** — After specs are created, work on derived tasks
342
+ - **`/kspec:triage`** — Inbox items may trigger plan creation
343
+ - **`/kspec:observations`** — Friction during planning becomes observations
@@ -0,0 +1,161 @@
1
+ ---
2
+ name: reflect
3
+ description: Structured reflection at the end of work sessions. Identifies
4
+ learnings, friction points, and improvements for system evolution.
5
+ ---
6
+ <!-- kspec-managed -->
7
+ # Session Reflection
8
+
9
+ Structured reflection at the end of a work session. Identifies learnings, friction points, and improvements — the raw material for system evolution.
10
+
11
+ ## When to Use
12
+
13
+ - End of a work session (interactive or automated)
14
+ - After completing a significant piece of work
15
+ - When you notice recurring patterns worth capturing
16
+
17
+ ## Workflow
18
+
19
+ ### Interactive Mode
20
+
21
+ ```bash
22
+ kspec workflow start @session-reflect
23
+ ```
24
+
25
+ Six steps, guided by the workflow engine:
26
+
27
+ 1. **What Worked Well** — Identify effective practices
28
+ 2. **Friction Points** — Where things were harder than needed
29
+ 3. **Check Coverage** — Search for existing tracking before proposing new items
30
+ 4. **Propose Improvements** — Concrete ideas for untracked friction
31
+ 5. **Discussion** — Present to user, get approval one at a time
32
+ 6. **Capture** — Add approved items to inbox/observations
33
+
34
+ Use `kspec workflow show` to see progress, `kspec workflow next --notes "..."` to advance.
35
+
36
+ ### Loop Mode (Automated)
37
+
38
+ ```bash
39
+ kspec workflow start @session-reflect-loop
40
+ ```
41
+
42
+ Key differences from interactive:
43
+ - **High confidence only** — Only capture what you're certain about
44
+ - **Search first** — MUST search before capturing anything
45
+ - **No user prompts** — Skip discussion, auto-resolve
46
+ - **Lower volume** — Better to capture nothing than capture noise
47
+ - **Higher bar for tasks** — Prefer `inbox add` over `task add` without user confirmation
48
+
49
+ ## Gate: Is There Anything to Reflect On?
50
+
51
+ Before starting, check if the session had meaningful work:
52
+
53
+ 1. **Tasks completed recently** — Any `completed_at` timestamps from the current session?
54
+ 2. **Code changes** — Any staged, unstaged, or untracked files?
55
+ 3. **Recent commits** — Any commits from the current session?
56
+
57
+ **Skip reflection if** no tasks completed, working tree is clean, and no commits made. Don't manufacture reflection from nothing.
58
+
59
+ ## The Reflection Process
60
+
61
+ ### Step 1: What Worked Well
62
+
63
+ Be specific — "categorizing items first" not "good planning."
64
+
65
+ - Workflows that flowed smoothly
66
+ - Tools or commands that helped
67
+ - Decisions that proved correct
68
+ - Patterns worth replicating
69
+
70
+ ### Step 2: Friction Points
71
+
72
+ Focus on systemic issues, not one-off mistakes.
73
+
74
+ - Repetitive manual steps
75
+ - Missing commands or options
76
+ - Context loss or re-explanation needed
77
+ - Workarounds used
78
+
79
+ ### Step 3: Check Existing Coverage
80
+
81
+ **Before proposing anything, search ALL sources:**
82
+
83
+ ```bash
84
+ kspec search "<keyword>" # Searches specs, tasks, AND inbox
85
+ ```
86
+
87
+ For each friction point:
88
+ - **Already tracked** — Reference the existing item, don't duplicate
89
+ - **Partially covered** — Note what's missing
90
+ - **Not tracked** — Candidate for capture
91
+
92
+ ### Step 4: Propose Improvements
93
+
94
+ For untracked friction, propose:
95
+ - What it would do
96
+ - How it would help
97
+ - Rough scope (small/medium/large)
98
+
99
+ ### Step 5: Discussion (Interactive Only)
100
+
101
+ Present findings one at a time:
102
+ - Is this worth capturing?
103
+ - Any refinements?
104
+ - Related ideas from user perspective?
105
+
106
+ ### Step 6: Capture
107
+
108
+ Route each item to the right destination:
109
+
110
+ | What you found | Where | Why |
111
+ |----------------|-------|-----|
112
+ | Clear scope (know what and where) | `task add` | Ready to implement |
113
+ | Unclear scope (vague, needs triage) | `inbox add` | Will be triaged later |
114
+ | Systemic friction pattern | `meta observe friction` | Informs process improvement |
115
+ | Success pattern | `meta observe success` | Worth documenting |
116
+ | Behavior change needing spec work | Ask user | May need spec-first workflow |
117
+
118
+ **Inbox vs Task:** Can you describe the change and where it goes? Use `task add`. Only use inbox when scope is genuinely unclear.
119
+
120
+ When capturing 2+ items, use `kspec batch`:
121
+
122
+ ```bash
123
+ kspec batch --commands '[
124
+ {"command":"inbox add","args":{"text":"Improvement idea","tag":["reflection"]}},
125
+ {"command":"meta observe","args":{"type":"friction","content":"Friction pattern"}},
126
+ {"command":"meta observe","args":{"type":"success","content":"Success pattern"}}
127
+ ]'
128
+ ```
129
+
130
+ ## Reflection Prompts
131
+
132
+ Use these to surface insights:
133
+
134
+ - **Process:** What did I repeat 3+ times? What workarounds did I use?
135
+ - **Tools:** What command or flag did I wish existed?
136
+ - **Communication:** Where was the user surprised? What should I have asked earlier?
137
+ - **Learning:** What do I know now that I didn't at session start?
138
+
139
+ ## Key Principles
140
+
141
+ - **Specific over general** — "No bulk AC add" not "CLI could be better"
142
+ - **Systemic over incidental** — Focus on repeatable friction
143
+ - **Ask don't assume** — User decides what's worth capturing (interactive mode)
144
+ - **Brief on successes** — Friction points are the primary value
145
+ - **Search before capture** — Never duplicate existing tracking
146
+
147
+ ## Workflow Commands
148
+
149
+ ```bash
150
+ kspec workflow show # Check current step
151
+ kspec workflow next --notes "..." # Advance with notes
152
+ kspec workflow next --skip --notes "reason" # Skip a step
153
+ kspec workflow pause # Pause for later
154
+ kspec workflow resume # Resume
155
+ ```
156
+
157
+ ## Integration
158
+
159
+ - Observations created during reflection feed into `/kspec:triage observations`
160
+ - Friction observations may be promoted to tasks via `kspec meta promote @ref`
161
+ - Success patterns may inform AGENTS.md or convention updates
@@ -0,0 +1,193 @@
1
+ ---
2
+ name: review
3
+ description: Kspec-specific review gates — spec alignment, own AC coverage,
4
+ trait AC coverage, and validation integration. Building block for
5
+ project-specific review workflows.
6
+ ---
7
+ <!-- kspec-managed -->
8
+ # Review
9
+
10
+ Kspec-specific review concerns for verifying spec alignment, AC coverage, and trait coverage. A building block that projects reference in their own review skills and workflows.
11
+
12
+ ## When to Use
13
+
14
+ - Before creating a PR — verify implementation meets spec
15
+ - As part of a project-specific local review workflow
16
+ - When reviewing code changes against acceptance criteria
17
+
18
+ **This is NOT a complete review workflow.** It covers kspec-specific quality gates (spec alignment, AC coverage, trait coverage, validation). Projects should wrap this in their own review skill that adds project-specific concerns (test commands, E2E patterns, coding standards).
19
+
20
+ ## Spec Alignment
21
+
22
+ Implementation must match spec intent, not just pass tests.
23
+
24
+ ### How to Verify
25
+
26
+ ```bash
27
+ # Read the spec — all ACs (own + inherited)
28
+ kspec item get @spec-ref
29
+ ```
30
+
31
+ For each AC, verify:
32
+ 1. **Implementation exists** — Code handles the described behavior
33
+ 2. **Test exists** — A test validates the behavior
34
+ 3. **Behavior matches** — The test actually proves the AC, not just syntactically passes
35
+
36
+ ### What to Flag
37
+
38
+ | Issue | Severity |
39
+ |-------|----------|
40
+ | AC has no implementation | MUST-FIX |
41
+ | AC has no test | MUST-FIX |
42
+ | Implementation deviates from spec | MUST-FIX |
43
+ | Undocumented behavior (not in any AC) | SHOULD-FIX |
44
+ | Spec is vague, implementation chose reasonable interpretation | Note it |
45
+
46
+ ## Own AC Coverage
47
+
48
+ Every acceptance criterion on the spec MUST have at least one annotated test.
49
+
50
+ ### Annotation Format
51
+
52
+ ```javascript
53
+ // AC: @spec-ref ac-N
54
+ it('should validate input when given invalid data', () => { ... });
55
+ ```
56
+
57
+ ```python
58
+ # AC: @spec-ref ac-N
59
+ def test_validates_input():
60
+ ...
61
+ ```
62
+
63
+ ### Checking Coverage
64
+
65
+ ```bash
66
+ # Get all ACs for the spec
67
+ kspec item get @spec-ref
68
+
69
+ # Search for annotations in test files
70
+ # (adapt grep path to your project's test directories)
71
+ grep -rn "// AC: @spec-ref" tests/
72
+ ```
73
+
74
+ Each AC listed in the spec output must have a corresponding annotation. Missing annotations are MUST-FIX.
75
+
76
+ ## Trait AC Coverage
77
+
78
+ When a spec implements traits, it inherits their ACs. Every inherited trait AC must also have test coverage.
79
+
80
+ ### How It Works
81
+
82
+ ```bash
83
+ # kspec item get shows inherited ACs under "Inherited from @trait-slug" sections
84
+ kspec item get @spec-ref
85
+ ```
86
+
87
+ Each inherited AC needs a test annotated with the **trait's** ref, not the spec's ref:
88
+
89
+ ```javascript
90
+ // AC: @trait-json-output ac-1
91
+ it('should output valid JSON with --json flag', () => { ... });
92
+ ```
93
+
94
+ ### Checking Coverage
95
+
96
+ ```bash
97
+ # kspec validate reports uncovered trait ACs
98
+ kspec validate
99
+
100
+ # Search for specific trait annotations
101
+ grep -rn "// AC: @trait-json-output" tests/
102
+ ```
103
+
104
+ Any "inherited trait AC(s) without test coverage" warning from `kspec validate` is a MUST-FIX blocker.
105
+
106
+ ### When a Trait AC Doesn't Apply
107
+
108
+ If a trait AC genuinely doesn't apply to this spec, annotate it with a reason:
109
+
110
+ ```javascript
111
+ // AC: @trait-json-output ac-3 — N/A: this command has no tabular output to format
112
+ ```
113
+
114
+ The annotation must exist so coverage tooling can track it.
115
+
116
+ ### No Traits?
117
+
118
+ If the spec has no traits (`kspec item get` shows no "Inherited from" sections), skip this step entirely.
119
+
120
+ ## Validation Integration
121
+
122
+ ```bash
123
+ kspec validate
124
+ ```
125
+
126
+ Validation catches spec-level issues:
127
+ - Missing acceptance criteria on specs
128
+ - Broken references (dangling `@slug`)
129
+ - Missing descriptions
130
+ - Uncovered trait ACs (the most common review finding)
131
+ - Orphaned specs (no linked tasks)
132
+
133
+ **Exit codes:** `0` = clean, `4` = errors, `6` = warnings only.
134
+
135
+ Treat errors as MUST-FIX. Treat warnings as SHOULD-FIX (especially trait AC warnings).
136
+
137
+ ## Review Checklist
138
+
139
+ Use this checklist when reviewing implementation against a spec:
140
+
141
+ ### MUST-FIX (Blocks PR)
142
+
143
+ - [ ] Every own AC has at least one annotated test
144
+ - [ ] Every inherited trait AC has at least one annotated test (or N/A annotation)
145
+ - [ ] `kspec validate` reports no errors for this spec
146
+ - [ ] Implementation matches spec behavior (not just syntactically correct tests)
147
+ - [ ] No regressions — existing tests still pass
148
+
149
+ ### SHOULD-FIX
150
+
151
+ - [ ] `kspec validate` warnings addressed (especially trait AC coverage)
152
+ - [ ] Undocumented behavior has spec coverage or is flagged
153
+ - [ ] Test annotations reference correct spec/trait refs
154
+
155
+ ### SUGGESTION
156
+
157
+ - [ ] Tests are meaningful (would fail if feature breaks)
158
+ - [ ] Prefer E2E over unit where practical
159
+ - [ ] Tests run in isolation (temp dirs, not project repo)
160
+
161
+ ## Severity Guide
162
+
163
+ | Finding | Severity | Action |
164
+ |---------|----------|--------|
165
+ | Missing own AC test annotation | MUST-FIX | Add test with `// AC: @spec-ref ac-N` |
166
+ | Missing trait AC test annotation | MUST-FIX | Add test with `// AC: @trait-slug ac-N` |
167
+ | `kspec validate` error | MUST-FIX | Fix the validation error |
168
+ | Implementation doesn't match spec | MUST-FIX | Fix implementation or update spec |
169
+ | `kspec validate` warning | SHOULD-FIX | Address warning |
170
+ | Undocumented behavior | SHOULD-FIX | Add AC or note deviation |
171
+ | Test doesn't prove its AC | SHOULD-FIX | Rewrite test |
172
+ | No E2E tests | SUGGESTION | Consider adding |
173
+
174
+ ## Using in Project Reviews
175
+
176
+ This skill provides the kspec-specific gates. Wrap it in your project's review:
177
+
178
+ ```
179
+ Project Review = kspec:review gates + project-specific gates
180
+ ```
181
+
182
+ Project-specific gates to add in your own review skill:
183
+ - **Test commands** — How to run your test suite
184
+ - **Test patterns** — Project-specific test helpers and isolation patterns
185
+ - **Code style** — Naming, error handling, import conventions
186
+ - **E2E specifics** — How E2E tests work in your project
187
+ - **Regression check** — Full suite command and expectations
188
+
189
+ ## Integration
190
+
191
+ - **`/kspec:task-work`** — Run review before submitting tasks
192
+ - **`/kspec:writing-specs`** — If review reveals spec gaps, update specs first
193
+ - **`kspec validate`** — Automated validation complements manual review