@seanmars/tospec 0.4.2

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 (402) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +114 -0
  3. package/assets/dashboard/app.js +1032 -0
  4. package/assets/dashboard/chart.umd.js +14 -0
  5. package/assets/dashboard/index.html +30 -0
  6. package/assets/dashboard/style.css +675 -0
  7. package/bin/tospec.js +5 -0
  8. package/dist/cli/index.d.ts +5 -0
  9. package/dist/cli/index.d.ts.map +1 -0
  10. package/dist/cli/index.js +330 -0
  11. package/dist/cli/index.js.map +1 -0
  12. package/dist/commands/config.d.ts +36 -0
  13. package/dist/commands/config.d.ts.map +1 -0
  14. package/dist/commands/config.js +486 -0
  15. package/dist/commands/config.js.map +1 -0
  16. package/dist/commands/dashboard.d.ts +40 -0
  17. package/dist/commands/dashboard.d.ts.map +1 -0
  18. package/dist/commands/dashboard.js +385 -0
  19. package/dist/commands/dashboard.js.map +1 -0
  20. package/dist/commands/shared-output.d.ts +24 -0
  21. package/dist/commands/shared-output.d.ts.map +1 -0
  22. package/dist/commands/shared-output.js +51 -0
  23. package/dist/commands/shared-output.js.map +1 -0
  24. package/dist/commands/show.d.ts +17 -0
  25. package/dist/commands/show.d.ts.map +1 -0
  26. package/dist/commands/show.js +164 -0
  27. package/dist/commands/show.js.map +1 -0
  28. package/dist/commands/validate.d.ts +51 -0
  29. package/dist/commands/validate.d.ts.map +1 -0
  30. package/dist/commands/validate.js +416 -0
  31. package/dist/commands/validate.js.map +1 -0
  32. package/dist/commands/workflow/index.d.ts +17 -0
  33. package/dist/commands/workflow/index.d.ts.map +1 -0
  34. package/dist/commands/workflow/index.js +12 -0
  35. package/dist/commands/workflow/index.js.map +1 -0
  36. package/dist/commands/workflow/instructions.d.ts +35 -0
  37. package/dist/commands/workflow/instructions.d.ts.map +1 -0
  38. package/dist/commands/workflow/instructions.js +359 -0
  39. package/dist/commands/workflow/instructions.js.map +1 -0
  40. package/dist/commands/workflow/new-change.d.ts +17 -0
  41. package/dist/commands/workflow/new-change.d.ts.map +1 -0
  42. package/dist/commands/workflow/new-change.js +97 -0
  43. package/dist/commands/workflow/new-change.js.map +1 -0
  44. package/dist/commands/workflow/schemas.d.ts +10 -0
  45. package/dist/commands/workflow/schemas.d.ts.map +1 -0
  46. package/dist/commands/workflow/schemas.js +33 -0
  47. package/dist/commands/workflow/schemas.js.map +1 -0
  48. package/dist/commands/workflow/shared.d.ts +63 -0
  49. package/dist/commands/workflow/shared.d.ts.map +1 -0
  50. package/dist/commands/workflow/shared.js +111 -0
  51. package/dist/commands/workflow/shared.js.map +1 -0
  52. package/dist/commands/workflow/status.d.ts +14 -0
  53. package/dist/commands/workflow/status.d.ts.map +1 -0
  54. package/dist/commands/workflow/status.js +77 -0
  55. package/dist/commands/workflow/status.js.map +1 -0
  56. package/dist/commands/workflow/templates.d.ts +16 -0
  57. package/dist/commands/workflow/templates.d.ts.map +1 -0
  58. package/dist/commands/workflow/templates.js +60 -0
  59. package/dist/commands/workflow/templates.js.map +1 -0
  60. package/dist/core/archive.d.ts +33 -0
  61. package/dist/core/archive.d.ts.map +1 -0
  62. package/dist/core/archive.js +585 -0
  63. package/dist/core/archive.js.map +1 -0
  64. package/dist/core/artifact-graph/graph.d.ts +56 -0
  65. package/dist/core/artifact-graph/graph.d.ts.map +1 -0
  66. package/dist/core/artifact-graph/graph.js +141 -0
  67. package/dist/core/artifact-graph/graph.js.map +1 -0
  68. package/dist/core/artifact-graph/index.d.ts +9 -0
  69. package/dist/core/artifact-graph/index.d.ts.map +1 -0
  70. package/dist/core/artifact-graph/index.js +14 -0
  71. package/dist/core/artifact-graph/index.js.map +1 -0
  72. package/dist/core/artifact-graph/instruction-loader.d.ts +188 -0
  73. package/dist/core/artifact-graph/instruction-loader.d.ts.map +1 -0
  74. package/dist/core/artifact-graph/instruction-loader.js +243 -0
  75. package/dist/core/artifact-graph/instruction-loader.js.map +1 -0
  76. package/dist/core/artifact-graph/outputs.d.ts +14 -0
  77. package/dist/core/artifact-graph/outputs.d.ts.map +1 -0
  78. package/dist/core/artifact-graph/outputs.js +39 -0
  79. package/dist/core/artifact-graph/outputs.js.map +1 -0
  80. package/dist/core/artifact-graph/resolver.d.ts +81 -0
  81. package/dist/core/artifact-graph/resolver.d.ts.map +1 -0
  82. package/dist/core/artifact-graph/resolver.js +257 -0
  83. package/dist/core/artifact-graph/resolver.js.map +1 -0
  84. package/dist/core/artifact-graph/schema.d.ts +13 -0
  85. package/dist/core/artifact-graph/schema.d.ts.map +1 -0
  86. package/dist/core/artifact-graph/schema.js +108 -0
  87. package/dist/core/artifact-graph/schema.js.map +1 -0
  88. package/dist/core/artifact-graph/state.d.ts +12 -0
  89. package/dist/core/artifact-graph/state.d.ts.map +1 -0
  90. package/dist/core/artifact-graph/state.js +31 -0
  91. package/dist/core/artifact-graph/state.js.map +1 -0
  92. package/dist/core/artifact-graph/types.d.ts +55 -0
  93. package/dist/core/artifact-graph/types.d.ts.map +1 -0
  94. package/dist/core/artifact-graph/types.js +38 -0
  95. package/dist/core/artifact-graph/types.js.map +1 -0
  96. package/dist/core/available-tools.d.ts +17 -0
  97. package/dist/core/available-tools.d.ts.map +1 -0
  98. package/dist/core/available-tools.js +43 -0
  99. package/dist/core/available-tools.js.map +1 -0
  100. package/dist/core/change-metadata/index.d.ts +2 -0
  101. package/dist/core/change-metadata/index.d.ts.map +1 -0
  102. package/dist/core/change-metadata/index.js +2 -0
  103. package/dist/core/change-metadata/index.js.map +1 -0
  104. package/dist/core/change-metadata/schema.d.ts +12 -0
  105. package/dist/core/change-metadata/schema.d.ts.map +1 -0
  106. package/dist/core/change-metadata/schema.js +15 -0
  107. package/dist/core/change-metadata/schema.js.map +1 -0
  108. package/dist/core/change-presenter.d.ts +24 -0
  109. package/dist/core/change-presenter.d.ts.map +1 -0
  110. package/dist/core/change-presenter.js +135 -0
  111. package/dist/core/change-presenter.js.map +1 -0
  112. package/dist/core/change-status-policy.d.ts +35 -0
  113. package/dist/core/change-status-policy.d.ts.map +1 -0
  114. package/dist/core/change-status-policy.js +34 -0
  115. package/dist/core/change-status-policy.js.map +1 -0
  116. package/dist/core/command-generation/adapters/claude.d.ts +14 -0
  117. package/dist/core/command-generation/adapters/claude.d.ts.map +1 -0
  118. package/dist/core/command-generation/adapters/claude.js +38 -0
  119. package/dist/core/command-generation/adapters/claude.js.map +1 -0
  120. package/dist/core/command-generation/adapters/cursor.d.ts +14 -0
  121. package/dist/core/command-generation/adapters/cursor.d.ts.map +1 -0
  122. package/dist/core/command-generation/adapters/cursor.js +31 -0
  123. package/dist/core/command-generation/adapters/cursor.js.map +1 -0
  124. package/dist/core/command-generation/adapters/index.d.ts +8 -0
  125. package/dist/core/command-generation/adapters/index.d.ts.map +1 -0
  126. package/dist/core/command-generation/adapters/index.js +8 -0
  127. package/dist/core/command-generation/adapters/index.js.map +1 -0
  128. package/dist/core/command-generation/generator.d.ts +21 -0
  129. package/dist/core/command-generation/generator.d.ts.map +1 -0
  130. package/dist/core/command-generation/generator.js +27 -0
  131. package/dist/core/command-generation/generator.js.map +1 -0
  132. package/dist/core/command-generation/index.d.ts +22 -0
  133. package/dist/core/command-generation/index.d.ts.map +1 -0
  134. package/dist/core/command-generation/index.js +24 -0
  135. package/dist/core/command-generation/index.js.map +1 -0
  136. package/dist/core/command-generation/registry.d.ts +24 -0
  137. package/dist/core/command-generation/registry.d.ts.map +1 -0
  138. package/dist/core/command-generation/registry.js +38 -0
  139. package/dist/core/command-generation/registry.js.map +1 -0
  140. package/dist/core/command-generation/types.d.ts +56 -0
  141. package/dist/core/command-generation/types.d.ts.map +1 -0
  142. package/dist/core/command-generation/types.js +8 -0
  143. package/dist/core/command-generation/types.js.map +1 -0
  144. package/dist/core/command-generation/yaml.d.ts +22 -0
  145. package/dist/core/command-generation/yaml.d.ts.map +1 -0
  146. package/dist/core/command-generation/yaml.js +38 -0
  147. package/dist/core/command-generation/yaml.js.map +1 -0
  148. package/dist/core/config-prompts.d.ts +9 -0
  149. package/dist/core/config-prompts.d.ts.map +1 -0
  150. package/dist/core/config-prompts.js +34 -0
  151. package/dist/core/config-prompts.js.map +1 -0
  152. package/dist/core/config-schema.d.ts +87 -0
  153. package/dist/core/config-schema.d.ts.map +1 -0
  154. package/dist/core/config-schema.js +239 -0
  155. package/dist/core/config-schema.js.map +1 -0
  156. package/dist/core/config.d.ts +19 -0
  157. package/dist/core/config.d.ts.map +1 -0
  158. package/dist/core/config.js +14 -0
  159. package/dist/core/config.js.map +1 -0
  160. package/dist/core/converters/json-converter.d.ts +6 -0
  161. package/dist/core/converters/json-converter.d.ts.map +1 -0
  162. package/dist/core/converters/json-converter.js +51 -0
  163. package/dist/core/converters/json-converter.js.map +1 -0
  164. package/dist/core/dashboard-activity.d.ts +50 -0
  165. package/dist/core/dashboard-activity.d.ts.map +1 -0
  166. package/dist/core/dashboard-activity.js +147 -0
  167. package/dist/core/dashboard-activity.js.map +1 -0
  168. package/dist/core/dashboard-data.d.ts +100 -0
  169. package/dist/core/dashboard-data.d.ts.map +1 -0
  170. package/dist/core/dashboard-data.js +368 -0
  171. package/dist/core/dashboard-data.js.map +1 -0
  172. package/dist/core/global-config.d.ts +51 -0
  173. package/dist/core/global-config.d.ts.map +1 -0
  174. package/dist/core/global-config.js +124 -0
  175. package/dist/core/global-config.js.map +1 -0
  176. package/dist/core/id.d.ts +17 -0
  177. package/dist/core/id.d.ts.map +1 -0
  178. package/dist/core/id.js +30 -0
  179. package/dist/core/id.js.map +1 -0
  180. package/dist/core/init.d.ts +34 -0
  181. package/dist/core/init.d.ts.map +1 -0
  182. package/dist/core/init.js +495 -0
  183. package/dist/core/init.js.map +1 -0
  184. package/dist/core/list.d.ts +12 -0
  185. package/dist/core/list.d.ts.map +1 -0
  186. package/dist/core/list.js +192 -0
  187. package/dist/core/list.js.map +1 -0
  188. package/dist/core/migrate.d.ts +52 -0
  189. package/dist/core/migrate.d.ts.map +1 -0
  190. package/dist/core/migrate.js +300 -0
  191. package/dist/core/migrate.js.map +1 -0
  192. package/dist/core/parsers/change-parser.d.ts +19 -0
  193. package/dist/core/parsers/change-parser.d.ts.map +1 -0
  194. package/dist/core/parsers/change-parser.js +204 -0
  195. package/dist/core/parsers/change-parser.js.map +1 -0
  196. package/dist/core/parsers/markdown-parser.d.ts +29 -0
  197. package/dist/core/parsers/markdown-parser.d.ts.map +1 -0
  198. package/dist/core/parsers/markdown-parser.js +181 -0
  199. package/dist/core/parsers/markdown-parser.js.map +1 -0
  200. package/dist/core/parsers/requirement-blocks.d.ts +37 -0
  201. package/dist/core/parsers/requirement-blocks.d.ts.map +1 -0
  202. package/dist/core/parsers/requirement-blocks.js +201 -0
  203. package/dist/core/parsers/requirement-blocks.js.map +1 -0
  204. package/dist/core/parsers/requirement-text.d.ts +55 -0
  205. package/dist/core/parsers/requirement-text.d.ts.map +1 -0
  206. package/dist/core/parsers/requirement-text.js +136 -0
  207. package/dist/core/parsers/requirement-text.js.map +1 -0
  208. package/dist/core/parsers/spec-structure.d.ts +9 -0
  209. package/dist/core/parsers/spec-structure.d.ts.map +1 -0
  210. package/dist/core/parsers/spec-structure.js +88 -0
  211. package/dist/core/parsers/spec-structure.js.map +1 -0
  212. package/dist/core/planning-home.d.ts +16 -0
  213. package/dist/core/planning-home.d.ts.map +1 -0
  214. package/dist/core/planning-home.js +67 -0
  215. package/dist/core/planning-home.js.map +1 -0
  216. package/dist/core/profiles.d.ts +24 -0
  217. package/dist/core/profiles.d.ts.map +1 -0
  218. package/dist/core/profiles.js +27 -0
  219. package/dist/core/profiles.js.map +1 -0
  220. package/dist/core/project-config.d.ts +100 -0
  221. package/dist/core/project-config.d.ts.map +1 -0
  222. package/dist/core/project-config.js +389 -0
  223. package/dist/core/project-config.js.map +1 -0
  224. package/dist/core/references.d.ts +40 -0
  225. package/dist/core/references.d.ts.map +1 -0
  226. package/dist/core/references.js +11 -0
  227. package/dist/core/references.js.map +1 -0
  228. package/dist/core/root-selection.d.ts +57 -0
  229. package/dist/core/root-selection.d.ts.map +1 -0
  230. package/dist/core/root-selection.js +98 -0
  231. package/dist/core/root-selection.js.map +1 -0
  232. package/dist/core/schemas/base.schema.d.ts +13 -0
  233. package/dist/core/schemas/base.schema.d.ts.map +1 -0
  234. package/dist/core/schemas/base.schema.js +18 -0
  235. package/dist/core/schemas/base.schema.js.map +1 -0
  236. package/dist/core/schemas/change.schema.d.ts +73 -0
  237. package/dist/core/schemas/change.schema.d.ts.map +1 -0
  238. package/dist/core/schemas/change.schema.js +31 -0
  239. package/dist/core/schemas/change.schema.js.map +1 -0
  240. package/dist/core/schemas/index.d.ts +4 -0
  241. package/dist/core/schemas/index.d.ts.map +1 -0
  242. package/dist/core/schemas/index.js +4 -0
  243. package/dist/core/schemas/index.js.map +1 -0
  244. package/dist/core/schemas/spec.schema.d.ts +18 -0
  245. package/dist/core/schemas/spec.schema.d.ts.map +1 -0
  246. package/dist/core/schemas/spec.schema.js +15 -0
  247. package/dist/core/schemas/spec.schema.js.map +1 -0
  248. package/dist/core/shared/index.d.ts +8 -0
  249. package/dist/core/shared/index.d.ts.map +1 -0
  250. package/dist/core/shared/index.js +8 -0
  251. package/dist/core/shared/index.js.map +1 -0
  252. package/dist/core/shared/skill-generation.d.ts +63 -0
  253. package/dist/core/shared/skill-generation.d.ts.map +1 -0
  254. package/dist/core/shared/skill-generation.js +125 -0
  255. package/dist/core/shared/skill-generation.js.map +1 -0
  256. package/dist/core/shared/tool-detection.d.ts +96 -0
  257. package/dist/core/shared/tool-detection.d.ts.map +1 -0
  258. package/dist/core/shared/tool-detection.js +207 -0
  259. package/dist/core/shared/tool-detection.js.map +1 -0
  260. package/dist/core/spec-presenter.d.ts +17 -0
  261. package/dist/core/spec-presenter.d.ts.map +1 -0
  262. package/dist/core/spec-presenter.js +98 -0
  263. package/dist/core/spec-presenter.js.map +1 -0
  264. package/dist/core/specs-apply.d.ts +78 -0
  265. package/dist/core/specs-apply.d.ts.map +1 -0
  266. package/dist/core/specs-apply.js +429 -0
  267. package/dist/core/specs-apply.js.map +1 -0
  268. package/dist/core/templates/index.d.ts +8 -0
  269. package/dist/core/templates/index.d.ts.map +1 -0
  270. package/dist/core/templates/index.js +9 -0
  271. package/dist/core/templates/index.js.map +1 -0
  272. package/dist/core/templates/skill-templates.d.ts +14 -0
  273. package/dist/core/templates/skill-templates.d.ts.map +1 -0
  274. package/dist/core/templates/skill-templates.js +13 -0
  275. package/dist/core/templates/skill-templates.js.map +1 -0
  276. package/dist/core/templates/types.d.ts +20 -0
  277. package/dist/core/templates/types.d.ts.map +1 -0
  278. package/dist/core/templates/types.js +5 -0
  279. package/dist/core/templates/types.js.map +1 -0
  280. package/dist/core/templates/workflows/apply.d.ts +10 -0
  281. package/dist/core/templates/workflows/apply.d.ts.map +1 -0
  282. package/dist/core/templates/workflows/apply.js +81 -0
  283. package/dist/core/templates/workflows/apply.js.map +1 -0
  284. package/dist/core/templates/workflows/archive.d.ts +10 -0
  285. package/dist/core/templates/workflows/archive.d.ts.map +1 -0
  286. package/dist/core/templates/workflows/archive.js +75 -0
  287. package/dist/core/templates/workflows/archive.js.map +1 -0
  288. package/dist/core/templates/workflows/explore.d.ts +10 -0
  289. package/dist/core/templates/workflows/explore.d.ts.map +1 -0
  290. package/dist/core/templates/workflows/explore.js +75 -0
  291. package/dist/core/templates/workflows/explore.js.map +1 -0
  292. package/dist/core/templates/workflows/issue.d.ts +10 -0
  293. package/dist/core/templates/workflows/issue.d.ts.map +1 -0
  294. package/dist/core/templates/workflows/issue.js +89 -0
  295. package/dist/core/templates/workflows/issue.js.map +1 -0
  296. package/dist/core/templates/workflows/propose.d.ts +10 -0
  297. package/dist/core/templates/workflows/propose.d.ts.map +1 -0
  298. package/dist/core/templates/workflows/propose.js +77 -0
  299. package/dist/core/templates/workflows/propose.js.map +1 -0
  300. package/dist/core/templates/workflows/sync.d.ts +14 -0
  301. package/dist/core/templates/workflows/sync.d.ts.map +1 -0
  302. package/dist/core/templates/workflows/sync.js +86 -0
  303. package/dist/core/templates/workflows/sync.js.map +1 -0
  304. package/dist/core/templates/workflows/update.d.ts +10 -0
  305. package/dist/core/templates/workflows/update.d.ts.map +1 -0
  306. package/dist/core/templates/workflows/update.js +99 -0
  307. package/dist/core/templates/workflows/update.js.map +1 -0
  308. package/dist/core/templates/workflows/verify.d.ts +9 -0
  309. package/dist/core/templates/workflows/verify.d.ts.map +1 -0
  310. package/dist/core/templates/workflows/verify.js +44 -0
  311. package/dist/core/templates/workflows/verify.js.map +1 -0
  312. package/dist/core/update.d.ts +46 -0
  313. package/dist/core/update.d.ts.map +1 -0
  314. package/dist/core/update.js +296 -0
  315. package/dist/core/update.js.map +1 -0
  316. package/dist/core/validation/constants.d.ts +34 -0
  317. package/dist/core/validation/constants.d.ts.map +1 -0
  318. package/dist/core/validation/constants.js +40 -0
  319. package/dist/core/validation/constants.js.map +1 -0
  320. package/dist/core/validation/section-validator.d.ts +19 -0
  321. package/dist/core/validation/section-validator.d.ts.map +1 -0
  322. package/dist/core/validation/section-validator.js +59 -0
  323. package/dist/core/validation/section-validator.js.map +1 -0
  324. package/dist/core/validation/types.d.ts +18 -0
  325. package/dist/core/validation/types.d.ts.map +1 -0
  326. package/dist/core/validation/types.js +2 -0
  327. package/dist/core/validation/types.js.map +1 -0
  328. package/dist/core/validation/validator.d.ts +51 -0
  329. package/dist/core/validation/validator.d.ts.map +1 -0
  330. package/dist/core/validation/validator.js +469 -0
  331. package/dist/core/validation/validator.js.map +1 -0
  332. package/dist/index.d.ts +2 -0
  333. package/dist/index.d.ts.map +1 -0
  334. package/dist/index.js +2 -0
  335. package/dist/index.js.map +1 -0
  336. package/dist/prompts/searchable-multi-select.d.ts +28 -0
  337. package/dist/prompts/searchable-multi-select.d.ts.map +1 -0
  338. package/dist/prompts/searchable-multi-select.js +158 -0
  339. package/dist/prompts/searchable-multi-select.js.map +1 -0
  340. package/dist/ui/welcome-screen.d.ts +5 -0
  341. package/dist/ui/welcome-screen.d.ts.map +1 -0
  342. package/dist/ui/welcome-screen.js +22 -0
  343. package/dist/ui/welcome-screen.js.map +1 -0
  344. package/dist/utils/change-metadata.d.ts +55 -0
  345. package/dist/utils/change-metadata.d.ts.map +1 -0
  346. package/dist/utils/change-metadata.js +141 -0
  347. package/dist/utils/change-metadata.js.map +1 -0
  348. package/dist/utils/change-utils.d.ts +73 -0
  349. package/dist/utils/change-utils.d.ts.map +1 -0
  350. package/dist/utils/change-utils.js +194 -0
  351. package/dist/utils/change-utils.js.map +1 -0
  352. package/dist/utils/command-references.d.ts +18 -0
  353. package/dist/utils/command-references.d.ts.map +1 -0
  354. package/dist/utils/command-references.js +20 -0
  355. package/dist/utils/command-references.js.map +1 -0
  356. package/dist/utils/file-system.d.ts +41 -0
  357. package/dist/utils/file-system.d.ts.map +1 -0
  358. package/dist/utils/file-system.js +320 -0
  359. package/dist/utils/file-system.js.map +1 -0
  360. package/dist/utils/index.d.ts +6 -0
  361. package/dist/utils/index.d.ts.map +1 -0
  362. package/dist/utils/index.js +9 -0
  363. package/dist/utils/index.js.map +1 -0
  364. package/dist/utils/interactive.d.ts +18 -0
  365. package/dist/utils/interactive.d.ts.map +1 -0
  366. package/dist/utils/interactive.js +21 -0
  367. package/dist/utils/interactive.js.map +1 -0
  368. package/dist/utils/item-discovery.d.ts +14 -0
  369. package/dist/utils/item-discovery.d.ts.map +1 -0
  370. package/dist/utils/item-discovery.js +104 -0
  371. package/dist/utils/item-discovery.js.map +1 -0
  372. package/dist/utils/link.d.ts +22 -0
  373. package/dist/utils/link.d.ts.map +1 -0
  374. package/dist/utils/link.js +85 -0
  375. package/dist/utils/link.js.map +1 -0
  376. package/dist/utils/match.d.ts +3 -0
  377. package/dist/utils/match.d.ts.map +1 -0
  378. package/dist/utils/match.js +22 -0
  379. package/dist/utils/match.js.map +1 -0
  380. package/dist/utils/shell-detection.d.ts +20 -0
  381. package/dist/utils/shell-detection.d.ts.map +1 -0
  382. package/dist/utils/shell-detection.js +41 -0
  383. package/dist/utils/shell-detection.js.map +1 -0
  384. package/dist/utils/task-progress.d.ts +32 -0
  385. package/dist/utils/task-progress.d.ts.map +1 -0
  386. package/dist/utils/task-progress.js +129 -0
  387. package/dist/utils/task-progress.js.map +1 -0
  388. package/dist/utils/timestamp.d.ts +9 -0
  389. package/dist/utils/timestamp.d.ts.map +1 -0
  390. package/dist/utils/timestamp.js +18 -0
  391. package/dist/utils/timestamp.js.map +1 -0
  392. package/package.json +55 -0
  393. package/schemas/issue/schema.yaml +34 -0
  394. package/schemas/issue/templates/spec.md +13 -0
  395. package/schemas/issue/templates/task.md +21 -0
  396. package/schemas/issue/templates/ticket.md +2 -0
  397. package/schemas/sdd/schema.yaml +55 -0
  398. package/schemas/sdd/templates/design.md +15 -0
  399. package/schemas/sdd/templates/proposal.md +15 -0
  400. package/schemas/sdd/templates/spec.md +13 -0
  401. package/schemas/sdd/templates/tasks.md +11 -0
  402. package/schemas/sdd/templates/ticket.md +2 -0
@@ -0,0 +1,81 @@
1
+ import { VERIFY_METHODOLOGY } from './verify.js';
2
+ const APPLY_BODY = `**Steps**
3
+
4
+ 1. **Confirm planning is done**
5
+ \`\`\`bash
6
+ tospec status --change "<name>" --json
7
+ \`\`\`
8
+ Every artifact in \`applyRequires\` must be \`done\` before you write any code. If one isn't, stop and send the user back to \`tospec-propose\` or \`tospec-issue\`. Note \`schemaName\` — it decides which branch below applies.
9
+
10
+ 2. **Work the tracks file one item at a time**
11
+
12
+ The tracks file is \`tasks.md\` (sdd) or \`task.md\` (issue). Take the next unchecked item, implement it, check it off (\`- [ ]\` → \`- [x]\`) only once its test is green, then move to the next. Never batch multiple items into one pass.
13
+
14
+ ### sdd branch — TDD per slice
15
+
16
+ For each tracer-bullet slice in \`tasks.md\`:
17
+ 1. Write the failing test first (red) — **only at the seam \`design.md\` named**. Don't test internals, don't add implementation-coupled assertions (mocking internal collaborators, reaching into private state, checking the database instead of the interface).
18
+ 2. Implement the minimum to pass (green). Don't anticipate future slices or add speculative flexibility.
19
+ 3. Verify the result matches the behavior the slice's specs describe.
20
+ 4. Check off the slice, then move to the next one — one slice per cycle. Refactoring is not part of this loop; it belongs to the verify step at the end of this workflow.
21
+
22
+ ### issue branch — three-way test split
23
+
24
+ Read \`task.md\`'s feedback loop. Then:
25
+ - **Existing test, failing** → the regression test from diagnosis already goes red. Find out why it fails and fix root cause (grep every caller of the function you're touching — the bug may hit more than the one path the ticket names).
26
+ - **Existing test, passing** → the bug is an edge case the existing test doesn't cover. Add a new failing test for that edge case first, then fix.
27
+ - **No existing test** → write the red regression test from \`task.md\`'s feedback loop first, then fix.
28
+
29
+ Fix root cause, not symptom — if the same defect is reachable through multiple callers of a shared function, the fix belongs in the shared function, not patched into just the caller the ticket named.
30
+
31
+ 3. **Re-validate artifacts**
32
+ \`\`\`bash
33
+ tospec validate "<name>" --json
34
+ \`\`\`
35
+ Implementation sometimes touches tasks.md/specs directly (adding a discovered edge case, correcting an estimate) — confirm the change's artifacts are still structurally valid before handing off. Fix and re-run until it passes.
36
+
37
+ ## Verify (automatic — apply's final step)
38
+
39
+ Once every task is checked off and \`tospec validate\` passes, run the two-axis review **automatically**. This is not a separate command the user has to invoke — verify is folded into apply and runs here as its last step, before the change is handed to \`tospec-archive\`.
40
+
41
+ ${VERIFY_METHODOLOGY}
42
+
43
+ **Output**
44
+
45
+ Report which tasks/checkboxes completed this pass, current progress (\`tospec status --change "<name>"\`), and whether all required artifacts are checked off. When everything is done, the verify review above has already run — if it came back clean, tell the user the change is ready for \`tospec-archive\`; if it surfaced blocking findings, keep working here to resolve them.
46
+
47
+ **Guardrails**
48
+ - Red before green, always — never write the implementation before its failing test
49
+ - One slice/task at a time — no batching
50
+ - Test only at the pre-agreed seam (design.md for sdd; the existing/new seam identified for issue) — never against internals
51
+ - Fix root cause: check every caller of a shared function before declaring a fix complete
52
+ - Don't hand off to archive until the automatic verify step is clean and the full test suite is green`;
53
+ export function getTospecApplySkillTemplate() {
54
+ return {
55
+ name: 'tospec-apply',
56
+ description: 'Implement a change test-first, one tracer-bullet slice or task at a time, checking off tasks.md/task.md as you go, then automatically run the two-axis verify review. Use when planning artifacts are complete (sdd: ticket/specs/design/tasks; issue: ticket/task) and the user wants to start or continue implementation.',
57
+ instructions: `Implement a change's tasks test-first (red → green), one slice at a time, branching by schema, then automatically run the two-axis verify review — ready for \`tospec-archive\` when done.
58
+
59
+ **Input**: The user's request should name the change to implement (or continue implementing).
60
+
61
+ ${APPLY_BODY}`,
62
+ license: 'MIT',
63
+ compatibility: 'Requires tospec CLI.',
64
+ metadata: { author: 'tospec', version: '1.0' },
65
+ allowedTools: ['Bash(tospec:*)', 'Bash', 'Read', 'Write', 'Edit', 'Grep', 'Glob', 'Agent'],
66
+ };
67
+ }
68
+ export function getTospecApplyCommandTemplate() {
69
+ return {
70
+ name: 'TOSPEC: Apply',
71
+ description: 'Implement a change test-first, one slice at a time, then auto-run the two-axis verify review',
72
+ category: 'Workflow',
73
+ tags: ['workflow', 'tdd', 'implementation'],
74
+ content: `Implement a change's tasks test-first (red → green), one slice at a time, branching by schema, then automatically run the two-axis verify review — ready for \`tospec-archive\` when done.
75
+
76
+ **Input**: The argument after \`tospec-apply\` is the change name to implement (or continue implementing).
77
+
78
+ ${APPLY_BODY}`,
79
+ };
80
+ }
81
+ //# sourceMappingURL=apply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../../src/core/templates/workflows/apply.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuCjB,kBAAkB;;;;;;;;;;;sGAWkF,CAAC;AAEvG,MAAM,UAAU,2BAA2B;IACzC,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,6TAA6T;QAC1U,YAAY,EAAE;;;;EAIhB,UAAU,EAAE;QACV,OAAO,EAAE,KAAK;QACd,aAAa,EAAE,sBAAsB;QACrC,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAC9C,YAAY,EAAE,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;KAC3F,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,8FAA8F;QAC3G,QAAQ,EAAE,UAAU;QACpB,IAAI,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,gBAAgB,CAAC;QAC3C,OAAO,EAAE;;;;EAIX,UAAU,EAAE;KACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Skill Template Workflow Modules
3
+ *
4
+ * This file is generated by splitting the legacy monolithic
5
+ * templates file into workflow-focused modules.
6
+ */
7
+ import type { SkillTemplate, CommandTemplate } from '../types.js';
8
+ export declare function getTospecArchiveSkillTemplate(): SkillTemplate;
9
+ export declare function getTospecArchiveCommandTemplate(): CommandTemplate;
10
+ //# sourceMappingURL=archive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../../src/core/templates/workflows/archive.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAiDlE,wBAAgB,6BAA6B,IAAI,aAAa,CAc7D;AAED,wBAAgB,+BAA+B,IAAI,eAAe,CAYjE"}
@@ -0,0 +1,75 @@
1
+ const ARCHIVE_BODY = `**Finishing a change: confirm verify, decide about sync, then archive — in that order.** Do not run \`tospec archive\` speculatively "to see what happens"; each step below must actually hold first.
2
+
3
+ **Step 0 — verify already happened in apply**
4
+
5
+ verify is not a separate command anymore — it runs automatically at the end of \`tospec-apply\`. Before archiving, confirm apply's verify step came back clean (both Standards and Spec axes clear of blocking findings, full test suite green). If apply's verify surfaced blocking issues, **stop** and go back to \`tospec-apply\` to fix them — do not archive over them.
6
+
7
+ **Step 1 — judge whether a sync is needed, and only ask if it is**
8
+
9
+ Archive merges the change's delta specs into \`tospec/specs/\`, so if those specs have drifted from what the code actually does, archiving would lock in a spec that no longer matches reality. Decide **proactively** whether that risk applies here:
10
+
11
+ - **Sync is warranted** when the change produced delta specs (a non-empty \`specs/<capability>/spec.md\` under the change dir) — i.e. behavior was added or changed, so spec-vs-code drift is possible.
12
+ - **Sync is not needed** when there are no delta specs at all (e.g. a purely cosmetic issue fix with no behavior change). In that case skip straight to Step 2 and archive directly — don't ask a pointless question.
13
+
14
+ If a sync is warranted, **ask the user one question** (make clear both answers are fine):
15
+
16
+ > "This change has spec deltas. Run \`tospec-sync\` to reconcile the specs against the code before archiving? (recommended, but you can archive without it.)"
17
+
18
+ - **User says yes** → run the \`tospec-sync\` workflow now. It reconciles each Requirement against the code (code wins) and writes \`sync-report.md\` with \`結論: PASS\`. If it ends in \`結論: FAIL\` (a real CODE-BUG), **stop** and return to \`tospec-apply\` to fix the code — do not archive. On PASS, archive **with** \`--require-sync\` (Step 2, synced branch).
19
+ - **User says no** → that's allowed. Skip the sync and archive **without** \`--require-sync\` (Step 2, not-synced branch). Declining does not block archiving.
20
+
21
+ **Step 2 — archive**
22
+
23
+ Synced branch (user chose to sync and \`sync-report.md\` says \`結論: PASS\`):
24
+ \`\`\`bash
25
+ tospec archive "<name>" --require-sync
26
+ \`\`\`
27
+ \`--require-sync\` is the CLI's own machine-checkable half of the sync gate: it refuses unless \`sync-report.md\` exists with a \`結論: PASS\` line (\`SYNC_REPORT_MISSING\` / \`SYNC_REPORT_FAILED\`). If \`tospec-sync\` actually ran and passed, this succeeds for free — a CLI-enforced backstop behind the instruction-level order above. Only pass \`--require-sync\` when a sync actually ran; otherwise the CLI will (correctly) refuse.
28
+
29
+ Not-synced branch (sync wasn't needed, or the user declined):
30
+ \`\`\`bash
31
+ tospec archive "<name>"
32
+ \`\`\`
33
+
34
+ Either way, the CLI then: re-validates the delta specs (blocking), checks tasks/task completion (asks for confirmation if incomplete), does a two-phase atomic merge into \`tospec/specs/\` (dry-run + re-validate every target first, writes only if all pass), and moves the change directory — including \`sync-report.md\` when present — into \`tospec/changes/archive/\` under a \`yyyyMMdd_HHmmss-<name>\` timestamp the CLI generates itself.
35
+
36
+ **Guardrails — explicit and non-negotiable**
37
+ - Judge whether a sync is warranted before archiving; only ask the user when the change has spec deltas — and honor a "no" (archive still proceeds, just without \`--require-sync\`)
38
+ - Only pass \`--require-sync\` when \`tospec-sync\` actually produced a passing \`sync-report.md\` this run
39
+ - **Never** construct an archive directory name yourself (the \`yyyyMMdd_HHmmss-<name>\` timestamp is generated by \`tospec archive\`'s internals — you have no way to reproduce it correctly, and guessing risks a collision or a wrong sort order)
40
+ - **Never** create the archive directory yourself
41
+ - **Never** manually move, copy, or rename the change directory
42
+ - If \`tospec archive\` reports a validation failure or asks for confirmation on incomplete tasks, resolve the underlying issue (or explicitly confirm with the user) — do not route around it with manual file operations
43
+
44
+ **Output**
45
+
46
+ Report the archived name and path from \`tospec archive\`'s output, whether a sync ran, and confirm \`tospec/specs/\` now reflects the merged change.`;
47
+ export function getTospecArchiveSkillTemplate() {
48
+ return {
49
+ name: 'tospec-archive',
50
+ description: 'Finish and archive a completed change: confirm apply\'s verify was clean, judge whether a spec/code sync is needed (asking the user first when it is), then run the one true tospec archive command. Use when the user wants to finalize an implemented change — never to manually move change directories or invent archive folder names.',
51
+ instructions: `Finish a completed change: confirm verify (done in apply), decide about sync (run \`tospec-sync\` if warranted and the user agrees), then \`tospec archive\` — the only path to a merged, archived change.
52
+
53
+ **Input**: The user's request should name the change to archive.
54
+
55
+ ${ARCHIVE_BODY}`,
56
+ license: 'MIT',
57
+ compatibility: 'Requires tospec CLI.',
58
+ metadata: { author: 'tospec', version: '1.0' },
59
+ allowedTools: ['Bash(tospec:*)', 'Read', 'Write', 'Edit', 'Grep', 'Glob', 'AskUserQuestion'],
60
+ };
61
+ }
62
+ export function getTospecArchiveCommandTemplate() {
63
+ return {
64
+ name: 'TOSPEC: Archive',
65
+ description: 'Judge whether a spec/code sync is needed (ask if so), then finalize and archive a completed change',
66
+ category: 'Workflow',
67
+ tags: ['workflow', 'archive'],
68
+ content: `Finish a completed change: confirm verify (done in apply), decide about sync (run \`tospec-sync\` if warranted and the user agrees), then \`tospec archive\` — the only path to a merged, archived change.
69
+
70
+ **Input**: The argument after \`tospec-archive\` is the change name to archive.
71
+
72
+ ${ARCHIVE_BODY}`,
73
+ };
74
+ }
75
+ //# sourceMappingURL=archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../../../src/core/templates/workflows/archive.ts"],"names":[],"mappings":"AAQA,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sJA6CiI,CAAC;AAEvJ,MAAM,UAAU,6BAA6B;IAC3C,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,4UAA4U;QACzV,YAAY,EAAE;;;;EAIhB,YAAY,EAAE;QACZ,OAAO,EAAE,KAAK;QACd,aAAa,EAAE,sBAAsB;QACrC,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAC9C,YAAY,EAAE,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,CAAC;KAC7F,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,+BAA+B;IAC7C,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,oGAAoG;QACjH,QAAQ,EAAE,UAAU;QACpB,IAAI,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;QAC7B,OAAO,EAAE;;;;EAIX,YAAY,EAAE;KACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Skill Template Workflow Modules
3
+ *
4
+ * This file is generated by splitting the legacy monolithic
5
+ * templates file into workflow-focused modules.
6
+ */
7
+ import type { SkillTemplate, CommandTemplate } from '../types.js';
8
+ export declare function getExploreSkillTemplate(): SkillTemplate;
9
+ export declare function getTospecExploreCommandTemplate(): CommandTemplate;
10
+ //# sourceMappingURL=explore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explore.d.ts","sourceRoot":"","sources":["../../../../src/core/templates/workflows/explore.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAiDlE,wBAAgB,uBAAuB,IAAI,aAAa,CAcvD;AAED,wBAAgB,+BAA+B,IAAI,eAAe,CAYjE"}
@@ -0,0 +1,75 @@
1
+ const EXPLORE_BODY = `**IMPORTANT: Explore mode is for thinking, not implementing.** You may read files, search code, and run \`tospec\` read-only commands, but you must NEVER write code or create artifact files during explore. When the requirement converges, hand off to \`tospec-propose\` or \`tospec-issue\` — those write the files.
2
+
3
+ This is a grilling interview, not a freeform chat. Interview the user relentlessly about the idea or problem until you both share the same understanding, walking every branch of the decision tree — batching questions that stand on their own, but following dependent threads one question at a time.
4
+
5
+ **Steps**
6
+
7
+ 1. **Build known boundaries first**
8
+ \`\`\`bash
9
+ tospec list --json
10
+ \`\`\`
11
+ Read \`tospec/specs/\` for the capabilities this touches and \`tospec/config.yaml\` for project context. Do this BEFORE asking anything — questions you can answer yourself by reading the codebase are questions you should never ask the user.
12
+
13
+ 2. **Batch independent questions; sequence dependent ones**
14
+
15
+ Ask unrelated questions together in a single turn (use \`AskUserQuestion\` — up to 4 at once) so the user answers in one pass instead of a slow drip. Only when one question's answer changes what you'd ask next — A decides B — drop back to one at a time and wait for the answer before continuing. Each question carries your suggested answer and the reasoning, so the user can just say "yes" instead of writing an essay.
16
+
17
+ Work through this priority order, skipping anything already answered by the conversation or the codebase:
18
+ 1. Goal and success condition — what does "done" look like?
19
+ 2. Who the user/actor is
20
+ 3. Boundaries — what's explicitly out of scope
21
+ 4. Exceptions and error paths
22
+ 5. Data and state — what persists, what's transient
23
+ 6. Unstated assumptions — the things nobody said out loud
24
+
25
+ 3. **Probe every answer for hidden premises**
26
+
27
+ After each answer, ask what it implies that hasn't been said yet. This is the core of the interview — surface-level answers hide the decisions that actually matter. Keep pulling on a thread until it stops giving you new information, then move to the next branch.
28
+
29
+ 4. **Route by question type**
30
+ - **Factual** ("does X already exist", "what does Y currently do") → look it up in the codebase yourself, never ask the user
31
+ - **Decision** (behavior, scope, tradeoffs) → always ask, and wait for the answer before proceeding
32
+
33
+ 5. **Converge**
34
+
35
+ You're done when you can fully restate the requirement back to the user in your own words and they confirm it's correct — not when you run out of questions. If they correct your restatement, that's a sign there's still a hidden branch; keep grilling.
36
+
37
+ 6. **Restate and hand off**
38
+
39
+ Deliver the converged understanding back in the conversation — the problem, the decisions made (with reasoning), and anything explicitly ruled out — so \`tospec-propose\`/\`tospec-issue\` can synthesize it straight from context (that's exactly the input they expect). Explore persists nothing itself; the decisions get written into \`proposal.md\`/\`task.md\` by whichever skill you hand off to. Then ask whether to proceed to \`tospec-propose\` (new requirement) or \`tospec-issue\` (something is broken) — or keep exploring if the user isn't ready.
40
+
41
+ **Guardrails**
42
+ - **Don't implement** — never write application code or edit source files during explore
43
+ - **Batch what's independent, sequence what's dependent** — ask unrelated questions together in one turn; split to one at a time only when A's answer decides B
44
+ - **Don't ask what you can look up** — codebase facts are yours to find, not the user's to recite
45
+ - **Don't stop at the first plausible answer** — dig for the implied premise behind it
46
+ - **Don't force convergence** — if the user wants to keep exploring after you've restated where things stand, keep going`;
47
+ export function getExploreSkillTemplate() {
48
+ return {
49
+ name: 'tospec-explore',
50
+ description: 'Grill the user through a focused interview to converge on a requirement or a problem before it becomes a change. Use when the idea is still fuzzy, before creating a proposal or issue, or whenever the user wants to think something through rather than build it yet.',
51
+ instructions: `Grill the user about their idea or problem — batching independent questions, sequencing dependent ones — until it converges into something concrete enough to become a \`tospec-propose\` or \`tospec-issue\`.
52
+
53
+ **Input**: The user's request is whatever they want to think through — a vague idea, a specific problem, or a change name to explore in context of.
54
+
55
+ ${EXPLORE_BODY}`,
56
+ license: 'MIT',
57
+ compatibility: 'Requires tospec CLI.',
58
+ metadata: { author: 'tospec', version: '1.0' },
59
+ allowedTools: ['Bash(tospec:*)', 'Read', 'Grep', 'Glob', 'AskUserQuestion'],
60
+ };
61
+ }
62
+ export function getTospecExploreCommandTemplate() {
63
+ return {
64
+ name: 'TOSPEC: Explore',
65
+ description: 'Grill the user through a focused interview to converge on a requirement or a problem',
66
+ category: 'Workflow',
67
+ tags: ['workflow', 'explore'],
68
+ content: `Grill the user about their idea or problem — batching independent questions, sequencing dependent ones — until it converges into something concrete enough to become a \`tospec-propose\` or \`tospec-issue\`.
69
+
70
+ **Input**: The argument after \`tospec-explore\` is whatever the user wants to think through — a vague idea, a specific problem, or a change name to explore in context of. May be empty.
71
+
72
+ ${EXPLORE_BODY}`,
73
+ };
74
+ }
75
+ //# sourceMappingURL=explore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explore.js","sourceRoot":"","sources":["../../../../src/core/templates/workflows/explore.ts"],"names":[],"mappings":"AAQA,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yHA6CoG,CAAC;AAE1H,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,yQAAyQ;QACtR,YAAY,EAAE;;;;EAIhB,YAAY,EAAE;QACZ,OAAO,EAAE,KAAK;QACd,aAAa,EAAE,sBAAsB;QACrC,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAC9C,YAAY,EAAE,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,CAAC;KAC5E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,+BAA+B;IAC7C,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,sFAAsF;QACnG,QAAQ,EAAE,UAAU;QACpB,IAAI,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC;QAC7B,OAAO,EAAE;;;;EAIX,YAAY,EAAE;KACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Skill Template Workflow Modules
3
+ *
4
+ * This file is generated by splitting the legacy monolithic
5
+ * templates file into workflow-focused modules.
6
+ */
7
+ import type { SkillTemplate, CommandTemplate } from '../types.js';
8
+ export declare function getTospecIssueSkillTemplate(): SkillTemplate;
9
+ export declare function getTospecIssueCommandTemplate(): CommandTemplate;
10
+ //# sourceMappingURL=issue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../../../src/core/templates/workflows/issue.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA+DlE,wBAAgB,2BAA2B,IAAI,aAAa,CAc3D;AAED,wBAAgB,6BAA6B,IAAI,eAAe,CAY/D"}
@@ -0,0 +1,89 @@
1
+ const ISSUE_BODY = `Diagnose before you propose a fix. Jumping to a hypothesis before you can reproduce the bug on command is the exact failure this workflow prevents.
2
+
3
+ **Steps**
4
+
5
+ 1. **Create the change**
6
+ \`\`\`bash
7
+ tospec new change "<name>" --schema issue
8
+ \`\`\`
9
+ Derive a kebab-case name from the symptom if none was given. This also **auto-generates the ticket stub** in the global index at \`tospec/tickets/<yyyyMMdd_HHmmss>-<name>.md\` (yaml header + a short Summary, \`ref\` pointing at \`task.md\`) — the CLI owns that timestamped filename, so **never create or rename ticket files yourself**.
10
+
11
+ 2. **Refine the ticket summary**
12
+ \`\`\`bash
13
+ tospec status --change "<name>" --json
14
+ \`\`\`
15
+ The ticket stub already exists in \`tospec/tickets/\` (CLI-written; not a \`status\` artifact). Edit its one-line \`## Summary\` to name the symptom in a sentence. Keep it thin — the full symptom/reproduction/expected-vs-actual and the whole diagnosis go into \`task.md\` (step 6), not the ticket.
16
+
17
+ 3. **Build a tight feedback loop before hypothesizing**
18
+
19
+ This is the core of the workflow. Find or build **one command** that reliably goes red on this exact bug: a failing test at the right seam, a CLI invocation diffed against expected output, a curl against a running dev server — whatever's fastest. It must be:
20
+ - **Red-capable** — actually drives the bug's code path and catches the user's exact symptom, not "runs without erroring"
21
+ - **Deterministic** — same verdict every run (flaky bugs: raise the reproduction rate until it's debuggable)
22
+ - **Fast** — seconds, not minutes
23
+ - **Already run at least once** — you have pasted its invocation and output before moving on
24
+
25
+ Do not skip this to go read code and form a theory. No red-capable command, no hypotheses.
26
+
27
+ 4. **Rank 3-5 falsifiable hypotheses**
28
+
29
+ Each hypothesis must predict something checkable: "if X is the cause, changing Y makes the bug disappear." A hypothesis you can't falsify is a vibe — sharpen it or drop it. Show the ranked list to the user before testing; they often have context that instantly re-ranks it ("we just touched that module").
30
+
31
+ 5. **Verify hypotheses one at a time**
32
+
33
+ Change one variable per probe. Prefer a debugger/REPL breakpoint over logs; if you must log, tag every debug line with a unique prefix (\`[DEBUG-xxxx]\`) so cleanup is one grep. Stop at the first hypothesis the loop from step 3 confirms.
34
+
35
+ 6. **Write the diagnosis into task.md**
36
+ \`\`\`bash
37
+ tospec instructions task --change "<name>" --json
38
+ \`\`\`
39
+ Include: the symptom and how to reproduce it, the verified root cause (not a guess — how you verified it), why existing tests didn't already catch this, the fix plan, the test plan, and a checkbox task list for \`tospec-apply\`. This is where the issue's detail lives (the ticket only summarizes).
40
+
41
+ 7. **Delta specs — only if behavior changes**
42
+
43
+ \`specs\` is optional in the issue schema. Only produce it if the fix changes externally observable behavior (skip it and \`status\` will show \`skipped\`, not \`blocked\`). If the bug is the spec itself being wrong, use MODIFIED to correct the Requirement instead of writing new tests against a wrong spec.
44
+
45
+ 8. **Validate and auto-fix**
46
+ \`\`\`bash
47
+ tospec validate "<name>" --json
48
+ \`\`\`
49
+ Fix whatever the report points at and re-run until it passes.
50
+
51
+ **Output**
52
+
53
+ Summarize the confirmed root cause, the fix plan, and prompt: "Run \`tospec-apply\` to fix it."
54
+
55
+ **Guardrails**
56
+ - The ticket file and its timestamp are CLI-generated — never create, rename, or move ticket files; only edit the Summary in the existing stub
57
+ - No hypotheses before a red-capable feedback loop exists
58
+ - 3-5 ranked, falsifiable hypotheses — never a single guess
59
+ - Root cause must be verified, not assumed — state how you confirmed it
60
+ - Don't write \`specs\` unless the fix actually changes external behavior`;
61
+ export function getTospecIssueSkillTemplate() {
62
+ return {
63
+ name: 'tospec-issue',
64
+ description: 'Diagnose a reported bug down to a verified root cause and turn it into an issue change (ticket stub + task). Use when the user reports something broken, throwing, or behaving unexpectedly and wants it tracked and fixed.',
65
+ instructions: `Diagnose a bug to a verified root cause and produce an issue change (ticket stub + task) — ready for \`tospec-apply\`.
66
+
67
+ **Input**: The user's request should describe the symptom (what's broken) and, ideally, how to reproduce it.
68
+
69
+ ${ISSUE_BODY}`,
70
+ license: 'MIT',
71
+ compatibility: 'Requires tospec CLI.',
72
+ metadata: { author: 'tospec', version: '1.0' },
73
+ allowedTools: ['Bash(tospec:*)', 'Bash', 'Read', 'Write', 'Edit', 'Grep', 'Glob', 'AskUserQuestion'],
74
+ };
75
+ }
76
+ export function getTospecIssueCommandTemplate() {
77
+ return {
78
+ name: 'TOSPEC: Issue',
79
+ description: 'Diagnose a reported bug to a verified root cause and produce an issue change',
80
+ category: 'Workflow',
81
+ tags: ['workflow', 'issue', 'debugging'],
82
+ content: `Diagnose a bug to a verified root cause and produce an issue change (ticket stub + task) — ready for \`tospec-apply\`.
83
+
84
+ **Input**: The argument after \`tospec-issue\` describes the symptom (what's broken) and, ideally, how to reproduce it.
85
+
86
+ ${ISSUE_BODY}`,
87
+ };
88
+ }
89
+ //# sourceMappingURL=issue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue.js","sourceRoot":"","sources":["../../../../src/core/templates/workflows/issue.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0EA2DuD,CAAC;AAE3E,MAAM,UAAU,2BAA2B;IACzC,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,6NAA6N;QAC1O,YAAY,EAAE;;;;EAIhB,UAAU,EAAE;QACV,OAAO,EAAE,KAAK;QACd,aAAa,EAAE,sBAAsB;QACrC,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAC9C,YAAY,EAAE,CAAC,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,CAAC;KACrG,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B;IAC3C,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,8EAA8E;QAC3F,QAAQ,EAAE,UAAU;QACpB,IAAI,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,WAAW,CAAC;QACxC,OAAO,EAAE;;;;EAIX,UAAU,EAAE;KACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Skill Template Workflow Modules
3
+ *
4
+ * This file is generated by splitting the legacy monolithic
5
+ * templates file into workflow-focused modules.
6
+ */
7
+ import type { SkillTemplate, CommandTemplate } from '../types.js';
8
+ export declare function getTospecProposeSkillTemplate(): SkillTemplate;
9
+ export declare function getTospecProposeCommandTemplate(): CommandTemplate;
10
+ //# sourceMappingURL=propose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propose.d.ts","sourceRoot":"","sources":["../../../../src/core/templates/workflows/propose.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAmDlE,wBAAgB,6BAA6B,IAAI,aAAa,CAc7D;AAED,wBAAgB,+BAA+B,IAAI,eAAe,CAYjE"}
@@ -0,0 +1,77 @@
1
+ const PROPOSE_BODY = `Do NOT re-interview the user — synthesize what's already in the conversation (or from a prior \`tospec-explore\`). If the requirement is still fuzzy, send them to \`tospec-explore\` first instead of guessing.
2
+
3
+ **Steps**
4
+
5
+ 1. **Create the change**
6
+ \`\`\`bash
7
+ tospec new change "<name>" --schema sdd
8
+ \`\`\`
9
+ Derive a kebab-case name from the request if none was given. This also **auto-generates the ticket stub** in the global index at \`tospec/tickets/<yyyyMMdd_HHmmss>-<name>.md\` (yaml header + a short Summary) — the CLI owns that timestamped filename, so **never create or rename ticket files yourself**.
10
+
11
+ 2. **Get the artifact build order**
12
+ \`\`\`bash
13
+ tospec status --change "<name>" --json
14
+ \`\`\`
15
+ Use \`applyRequires\`, \`artifacts\`, and \`actionContext\` to drive the loop below — never assume paths. The ticket stub already exists in \`tospec/tickets/\` (the CLI wrote it; it's not a \`status\` artifact), so \`proposal\` is the first artifact to build.
16
+
17
+ 3. **Produce each ready artifact in dependency order** (\`proposal\` -> \`specs\`/\`design\` -> \`tasks\`)
18
+
19
+ For each artifact whose status is \`ready\`:
20
+ \`\`\`bash
21
+ tospec instructions <artifact-id> --change "<name>" --json
22
+ \`\`\`
23
+ Read \`template\` and \`instruction\` from the response, write \`resolvedOutputPath\`, then re-run \`status --json\` and continue until every \`applyRequires\` artifact is \`done\`.
24
+
25
+ Artifact-specific rules on top of what \`instructions\` returns:
26
+ - **ticket** (already created): keep it thin — just refine the one-line \`## Summary\` so it names what this change does. All the detail (why, what, scope, decisions) lives in \`proposal.md\`, not here. Don't duplicate proposal content into the ticket, and don't add a timestamp or filename yourself.
27
+ - **proposal**: the main document — Why (motivation, why now), What Changes (concrete add/modify/remove), Capabilities (New/Modified, each pointing at its \`specs/<name>/spec.md\`), Impact (affected code/API/deps/systems). **Never include file paths or code snippets** in the prose — they go stale fast. Exception: a snippet from an actual prototype that encodes a decision more precisely than prose (a state machine, a schema shape) — inline it, trimmed to the decision, and note it came from a prototype.
28
+ - **design**: pick the testing seam before writing anything else — prefer an existing seam over a new one, the highest layer that still catches the behavior, and as few seams as possible (ideally one). State the seam explicitly in "Testing Seams" so \`tospec-apply\` knows exactly where to test.
29
+ - **tasks**: cut the work into **tracer-bullet vertical slices** — each slice cuts a complete path through every layer touched (not "all the schema changes, then all the UI"), is independently demoable, and fits a single implementation pass. Every slice's implementation step is preceded by its own "write the failing test" step (red before green). A **wide mechanical refactor** (rename a shared symbol, retype a column) is the one exception to vertical slicing — sequence it as expand -> migrate-in-batches -> contract instead of forcing it into a tracer bullet.
30
+
31
+ 4. **Validate and auto-fix**
32
+ \`\`\`bash
33
+ tospec validate "<name>" --json
34
+ \`\`\`
35
+ If invalid, fix the artifact(s) the report points at and re-run until it passes.
36
+
37
+ **Output**
38
+
39
+ Summarize the change name and location, the artifacts created, and prompt: "Run \`tospec-apply\` to start implementing."
40
+
41
+ **Guardrails**
42
+ - Create every artifact \`apply.requires\` needs — don't stop at \`proposal\`
43
+ - The ticket file and its timestamp are CLI-generated — never create, rename, or move ticket files; only edit the Summary in the existing stub
44
+ - Detailed why/what goes in \`proposal.md\`; the ticket stays a thin index
45
+ - Read dependency artifacts before writing the next one
46
+ - \`context\`/\`rules\` from \`instructions\` are constraints for you, never content to copy into the file
47
+ - If a change with that name already exists, ask whether to continue it or pick a new name
48
+ - If context is critically unclear even after checking the conversation, ask — but prefer a reasonable default to keep momentum`;
49
+ export function getTospecProposeSkillTemplate() {
50
+ return {
51
+ name: 'tospec-propose',
52
+ description: 'Synthesize an already-discussed requirement into a complete sdd change (ticket stub, proposal, specs, design, tasks). Use when the user wants a proposal written up from context you already have, not a fresh interview — if the idea is still fuzzy, use tospec-explore first.',
53
+ instructions: `Turn a converged requirement into a complete sdd change: proposal, delta specs, design, and tracer-bullet tasks (the ticket stub is auto-generated) — ready for \`tospec-apply\`.
54
+
55
+ **Input**: The user's request should include a change name (kebab-case) OR enough of a description to derive one, plus whatever requirement context already exists in the conversation.
56
+
57
+ ${PROPOSE_BODY}`,
58
+ license: 'MIT',
59
+ compatibility: 'Requires tospec CLI.',
60
+ metadata: { author: 'tospec', version: '1.0' },
61
+ allowedTools: ['Bash(tospec:*)', 'Read', 'Write', 'Edit', 'Grep', 'Glob', 'AskUserQuestion'],
62
+ };
63
+ }
64
+ export function getTospecProposeCommandTemplate() {
65
+ return {
66
+ name: 'TOSPEC: Propose',
67
+ description: 'Synthesize an already-discussed requirement into a complete sdd change',
68
+ category: 'Workflow',
69
+ tags: ['workflow', 'sdd', 'artifacts'],
70
+ content: `Turn a converged requirement into a complete sdd change: proposal, delta specs, design, and tracer-bullet tasks (the ticket stub is auto-generated) — ready for \`tospec-apply\`.
71
+
72
+ **Input**: The argument after \`tospec-propose\` is the change name (kebab-case), or a description to derive one from. Relies on requirement context already in the conversation — if that's missing, run \`tospec-explore\` first.
73
+
74
+ ${PROPOSE_BODY}`,
75
+ };
76
+ }
77
+ //# sourceMappingURL=propose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"propose.js","sourceRoot":"","sources":["../../../../src/core/templates/workflows/propose.ts"],"names":[],"mappings":"AAQA,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gIA+C2G,CAAC;AAEjI,MAAM,UAAU,6BAA6B;IAC3C,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,kRAAkR;QAC/R,YAAY,EAAE;;;;EAIhB,YAAY,EAAE;QACZ,OAAO,EAAE,KAAK;QACd,aAAa,EAAE,sBAAsB;QACrC,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAC9C,YAAY,EAAE,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,CAAC;KAC7F,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,+BAA+B;IAC7C,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,wEAAwE;QACrF,QAAQ,EAAE,UAAU;QACpB,IAAI,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,WAAW,CAAC;QACtC,OAAO,EAAE;;;;EAIX,YAAY,EAAE;KACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Skill Template Workflow Modules
3
+ *
4
+ * This file is generated by splitting the legacy monolithic
5
+ * templates file into workflow-focused modules.
6
+ *
7
+ * sync is a standalone skill again. The archive workflow proactively decides
8
+ * whether a sync is warranted and asks the user before archiving; when the
9
+ * user agrees, this is the procedure that runs.
10
+ */
11
+ import type { SkillTemplate, CommandTemplate } from '../types.js';
12
+ export declare function getTospecSyncSkillTemplate(): SkillTemplate;
13
+ export declare function getTospecSyncCommandTemplate(): CommandTemplate;
14
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../../src/core/templates/workflows/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA4DlE,wBAAgB,0BAA0B,IAAI,aAAa,CAc1D;AAED,wBAAgB,4BAA4B,IAAI,eAAe,CAY9D"}
@@ -0,0 +1,86 @@
1
+ const SYNC_BODY = `Whether a spec still matches the source code is a semantic judgment no CLI can make — that's why this is agent work, not a \`tospec\` subcommand. The CLI's job is the part that IS machine-checkable: the synced spec must still pass full validation, and \`tospec archive --require-sync\` refuses unless \`sync-report.md\` reports PASS.
2
+
3
+ **Steps**
4
+
5
+ 1. **List the Requirements this change touches**
6
+
7
+ For sdd: every Requirement in \`specs/<capability>/spec.md\` under the change directory. For issue: the Requirement(s) referenced in the ticket/\`task.md\`, plus any delta specs the change produced.
8
+
9
+ **No-delta case**: an issue fix with no behavior change has no delta specs at all. Don't invent Requirements to check — instead confirm \`task.md\`'s described fix matches what the code actually does, and note this as the no-delta case in the report (see format below).
10
+
11
+ 2. **Compare each Requirement against the actual implementation**
12
+
13
+ For each Requirement, locate the corresponding code (the files apply touched are a good starting point) and judge: does the implemented behavior match what the Requirement's scenarios describe?
14
+
15
+ **Can't find any corresponding implementation at all**: that's a CODE-BUG, same severity as a behavioral mismatch — the Requirement was agreed to and never built. Don't wave it through as MATCH.
16
+
17
+ 3. **Resolve every mismatch — code wins**
18
+
19
+ - If the spec is stale relative to the code (the code is correct, the spec described the old behavior): update the delta spec's Requirement with **MODIFIED**, pasting the complete, corrected Requirement block. Then:
20
+ \`\`\`bash
21
+ tospec validate "<name>" --json
22
+ \`\`\`
23
+ Must pass before moving to the next Requirement — record the validate result in that Requirement's report entry.
24
+ - If the code itself is wrong (it doesn't do what was actually agreed in ticket/design, or is missing entirely): **stop**. Do not touch the spec to paper over a bug. Report the mismatch to the user and suggest returning to \`tospec-apply\` to fix the code before archiving.
25
+
26
+ 4. **Write the sync report**
27
+
28
+ Create \`sync-report.md\` in the change directory in exactly this format — \`tospec archive --require-sync\` parses the first \`結論:\` line, so the heading and label text must match:
29
+
30
+ \`\`\`markdown
31
+ # Sync Report: <change-name>
32
+ ## Summary
33
+ 結論: <PASS 或 FAIL>
34
+ ## Requirements
35
+ ### <Requirement 名稱>
36
+ - 對應實作: <模組/函式描述, 非硬路徑>
37
+ - 判定: MATCH | SPEC-UPDATED (以 code 為準已更新) | CODE-BUG (停止歸檔)
38
+ - 說明: <差異與處置; SPEC-UPDATED 需附上 validate 結果>
39
+ \`\`\`
40
+
41
+ Fill the \`結論:\` line with exactly one literal — \`結論: PASS\` or \`結論: FAIL\` (FAIL may append a \`(原因)\` note); never leave both options in one line, or \`tospec archive --require-sync\` can't parse it. \`結論:\` is **FAIL** if even one Requirement is CODE-BUG — a single unresolved defect blocks the whole change, not just that Requirement. It's **PASS** only when every Requirement resolved to MATCH or SPEC-UPDATED (with validate passing). For the no-delta case, still emit the Summary and a single Requirements entry describing the task.md-vs-code comparison (module described, not a Requirement name).
42
+
43
+ 5. **Final artifact validation**
44
+ \`\`\`bash
45
+ tospec validate "<name>" --json
46
+ \`\`\`
47
+ Even when no spec needed updating, run the full change validation before finishing. If it reports an artifact problem, fix the affected artifact and re-run until it passes. Do not write \`結論: PASS\` while validation is failing.
48
+
49
+ **Output**
50
+
51
+ Summarize how many Requirements were in sync, how many specs were updated, and whether anything was flagged as a code defect. If \`結論: PASS\`, prompt: "Run \`tospec-archive\` to finish up — it passes \`--require-sync\` for free now that \`sync-report.md\` reports PASS." If \`結論: FAIL\`, prompt to return to \`tospec-apply\` first — do not proceed to archive.
52
+
53
+ **Guardrails**
54
+ - Code is the source of truth for behavior — spec updates always follow code, never the other way around
55
+ - Never edit source code from this workflow — a code-side mismatch is diagnosis, not a license to patch here
56
+ - Every MODIFIED delta must re-pass \`tospec validate\` before moving to the next Requirement
57
+ - \`sync-report.md\` is required output, in the exact format above — \`tospec archive --require-sync\` depends on both its existence and its \`結論:\` line`;
58
+ export function getTospecSyncSkillTemplate() {
59
+ return {
60
+ name: 'tospec-sync',
61
+ description: 'Compare each Requirement a change touched against the actual implementation and reconcile drift, with the source code as the source of truth, producing sync-report.md. Use before archiving a change with spec deltas — the tospec-archive workflow will offer to run this when it judges a sync is warranted.',
62
+ instructions: `Reconcile \`specs/\` against the implementation for every Requirement this change touched — code wins on any mismatch. Run this before \`tospec-archive\` when the change's specs may have drifted from the code.
63
+
64
+ **Input**: The user's request should name the change to sync.
65
+
66
+ ${SYNC_BODY}`,
67
+ license: 'MIT',
68
+ compatibility: 'Requires tospec CLI.',
69
+ metadata: { author: 'tospec', version: '1.0' },
70
+ allowedTools: ['Bash(tospec:*)', 'Read', 'Write', 'Edit', 'Grep', 'Glob'],
71
+ };
72
+ }
73
+ export function getTospecSyncCommandTemplate() {
74
+ return {
75
+ name: 'TOSPEC: Sync',
76
+ description: 'Reconcile specs against the implementation, code as source of truth',
77
+ category: 'Workflow',
78
+ tags: ['workflow', 'sync', 'archive-gate'],
79
+ content: `Reconcile \`specs/\` against the implementation for every Requirement this change touched — code wins on any mismatch. Run this before \`tospec-archive\` when the change's specs may have drifted from the code.
80
+
81
+ **Input**: The argument after \`tospec-sync\` is the change name to sync.
82
+
83
+ ${SYNC_BODY}`,
84
+ };
85
+ }
86
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../../src/core/templates/workflows/sync.ts"],"names":[],"mappings":"AAYA,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0JAwDwI,CAAC;AAE3J,MAAM,UAAU,0BAA0B;IACxC,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,iTAAiT;QAC9T,YAAY,EAAE;;;;EAIhB,SAAS,EAAE;QACT,OAAO,EAAE,KAAK;QACd,aAAa,EAAE,sBAAsB;QACrC,QAAQ,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAC9C,YAAY,EAAE,CAAC,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KAC1E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC1C,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,qEAAqE;QAClF,QAAQ,EAAE,UAAU;QACpB,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,cAAc,CAAC;QAC1C,OAAO,EAAE;;;;EAIX,SAAS,EAAE;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Skill Template Workflow Modules
3
+ *
4
+ * This file is generated by splitting the legacy monolithic
5
+ * templates file into workflow-focused modules.
6
+ */
7
+ import type { SkillTemplate, CommandTemplate } from '../types.js';
8
+ export declare function getTospecUpdateSkillTemplate(): SkillTemplate;
9
+ export declare function getTospecUpdateCommandTemplate(): CommandTemplate;
10
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/core/templates/workflows/update.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAyElE,wBAAgB,4BAA4B,IAAI,aAAa,CAc5D;AAED,wBAAgB,8BAA8B,IAAI,eAAe,CAYhE"}