@seanmars/tospec 0.19.0-beta.0 → 0.19.0-beta.13

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 (431) hide show
  1. package/CHANGELOG.md +578 -0
  2. package/README.md +71 -77
  3. package/assets/dashboard/app.js +14 -3
  4. package/assets/dashboard/style.css +7 -0
  5. package/assets/metrics/app.js +22 -0
  6. package/assets/metrics/style.css +8 -0
  7. package/assets/rules/tospec/decision.md +3 -0
  8. package/assets/rules/tospec/single-source-of-truth.md +19 -0
  9. package/dist/cli/index.d.ts.map +1 -1
  10. package/dist/cli/index.js +266 -82
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/commands/config.d.ts +9 -17
  13. package/dist/commands/config.d.ts.map +1 -1
  14. package/dist/commands/config.js +374 -95
  15. package/dist/commands/config.js.map +1 -1
  16. package/dist/commands/dashboard.d.ts +64 -81
  17. package/dist/commands/dashboard.d.ts.map +1 -1
  18. package/dist/commands/dashboard.js +350 -218
  19. package/dist/commands/dashboard.js.map +1 -1
  20. package/dist/commands/decision.d.ts +41 -19
  21. package/dist/commands/decision.d.ts.map +1 -1
  22. package/dist/commands/decision.js +400 -70
  23. package/dist/commands/decision.js.map +1 -1
  24. package/dist/commands/metrics.d.ts +34 -48
  25. package/dist/commands/metrics.d.ts.map +1 -1
  26. package/dist/commands/metrics.js +74 -84
  27. package/dist/commands/metrics.js.map +1 -1
  28. package/dist/commands/shared-output.d.ts +24 -10
  29. package/dist/commands/shared-output.d.ts.map +1 -1
  30. package/dist/commands/shared-output.js +62 -11
  31. package/dist/commands/shared-output.js.map +1 -1
  32. package/dist/commands/show.d.ts +7 -0
  33. package/dist/commands/show.d.ts.map +1 -1
  34. package/dist/commands/show.js +39 -8
  35. package/dist/commands/show.js.map +1 -1
  36. package/dist/commands/validate.d.ts +47 -30
  37. package/dist/commands/validate.d.ts.map +1 -1
  38. package/dist/commands/validate.js +282 -108
  39. package/dist/commands/validate.js.map +1 -1
  40. package/dist/commands/workflow/index.d.ts +6 -10
  41. package/dist/commands/workflow/index.d.ts.map +1 -1
  42. package/dist/commands/workflow/index.js +6 -10
  43. package/dist/commands/workflow/index.js.map +1 -1
  44. package/dist/commands/workflow/instructions.d.ts +21 -8
  45. package/dist/commands/workflow/instructions.d.ts.map +1 -1
  46. package/dist/commands/workflow/instructions.js +254 -95
  47. package/dist/commands/workflow/instructions.js.map +1 -1
  48. package/dist/commands/workflow/new-change.d.ts +4 -5
  49. package/dist/commands/workflow/new-change.d.ts.map +1 -1
  50. package/dist/commands/workflow/new-change.js +90 -25
  51. package/dist/commands/workflow/new-change.js.map +1 -1
  52. package/dist/commands/workflow/schemas.d.ts +3 -5
  53. package/dist/commands/workflow/schemas.d.ts.map +1 -1
  54. package/dist/commands/workflow/schemas.js +37 -11
  55. package/dist/commands/workflow/schemas.js.map +1 -1
  56. package/dist/commands/workflow/shared.d.ts +48 -21
  57. package/dist/commands/workflow/shared.d.ts.map +1 -1
  58. package/dist/commands/workflow/shared.js +36 -33
  59. package/dist/commands/workflow/shared.js.map +1 -1
  60. package/dist/commands/workflow/status.d.ts +10 -6
  61. package/dist/commands/workflow/status.d.ts.map +1 -1
  62. package/dist/commands/workflow/status.js +84 -42
  63. package/dist/commands/workflow/status.js.map +1 -1
  64. package/dist/commands/workflow/templates.d.ts +10 -3
  65. package/dist/commands/workflow/templates.d.ts.map +1 -1
  66. package/dist/commands/workflow/templates.js +39 -40
  67. package/dist/commands/workflow/templates.js.map +1 -1
  68. package/dist/core/archive.d.ts +26 -21
  69. package/dist/core/archive.d.ts.map +1 -1
  70. package/dist/core/archive.js +415 -201
  71. package/dist/core/archive.js.map +1 -1
  72. package/dist/core/artifact-graph/graph.d.ts +29 -36
  73. package/dist/core/artifact-graph/graph.d.ts.map +1 -1
  74. package/dist/core/artifact-graph/graph.js +50 -58
  75. package/dist/core/artifact-graph/graph.js.map +1 -1
  76. package/dist/core/artifact-graph/index.d.ts +2 -2
  77. package/dist/core/artifact-graph/index.d.ts.map +1 -1
  78. package/dist/core/artifact-graph/index.js +2 -2
  79. package/dist/core/artifact-graph/index.js.map +1 -1
  80. package/dist/core/artifact-graph/instruction-loader.d.ts +105 -100
  81. package/dist/core/artifact-graph/instruction-loader.d.ts.map +1 -1
  82. package/dist/core/artifact-graph/instruction-loader.js +176 -110
  83. package/dist/core/artifact-graph/instruction-loader.js.map +1 -1
  84. package/dist/core/artifact-graph/outputs.d.ts +13 -6
  85. package/dist/core/artifact-graph/outputs.d.ts.map +1 -1
  86. package/dist/core/artifact-graph/outputs.js +146 -8
  87. package/dist/core/artifact-graph/outputs.js.map +1 -1
  88. package/dist/core/artifact-graph/resolver.d.ts +44 -63
  89. package/dist/core/artifact-graph/resolver.d.ts.map +1 -1
  90. package/dist/core/artifact-graph/resolver.js +85 -86
  91. package/dist/core/artifact-graph/resolver.js.map +1 -1
  92. package/dist/core/artifact-graph/schema.d.ts +0 -6
  93. package/dist/core/artifact-graph/schema.d.ts.map +1 -1
  94. package/dist/core/artifact-graph/schema.js +7 -32
  95. package/dist/core/artifact-graph/schema.js.map +1 -1
  96. package/dist/core/artifact-graph/state.d.ts +1 -8
  97. package/dist/core/artifact-graph/state.d.ts.map +1 -1
  98. package/dist/core/artifact-graph/state.js +2 -17
  99. package/dist/core/artifact-graph/state.js.map +1 -1
  100. package/dist/core/artifact-graph/stub-detection.d.ts +12 -0
  101. package/dist/core/artifact-graph/stub-detection.d.ts.map +1 -0
  102. package/dist/core/artifact-graph/stub-detection.js +39 -0
  103. package/dist/core/artifact-graph/stub-detection.js.map +1 -0
  104. package/dist/core/artifact-graph/types.d.ts +4 -0
  105. package/dist/core/artifact-graph/types.d.ts.map +1 -1
  106. package/dist/core/artifact-graph/types.js +30 -10
  107. package/dist/core/artifact-graph/types.js.map +1 -1
  108. package/dist/core/available-tools.d.ts +3 -12
  109. package/dist/core/available-tools.d.ts.map +1 -1
  110. package/dist/core/available-tools.js +4 -13
  111. package/dist/core/available-tools.js.map +1 -1
  112. package/dist/core/change-metadata/schema.d.ts +1 -1
  113. package/dist/core/change-metadata/schema.d.ts.map +1 -1
  114. package/dist/core/change-metadata/schema.js +10 -7
  115. package/dist/core/change-metadata/schema.js.map +1 -1
  116. package/dist/core/change-presenter.d.ts +23 -18
  117. package/dist/core/change-presenter.d.ts.map +1 -1
  118. package/dist/core/change-presenter.js +102 -43
  119. package/dist/core/change-presenter.js.map +1 -1
  120. package/dist/core/change-status-policy.d.ts +8 -1
  121. package/dist/core/change-status-policy.d.ts.map +1 -1
  122. package/dist/core/change-status-policy.js +25 -1
  123. package/dist/core/change-status-policy.js.map +1 -1
  124. package/dist/core/codex-metrics.d.ts +25 -45
  125. package/dist/core/codex-metrics.d.ts.map +1 -1
  126. package/dist/core/codex-metrics.js +44 -88
  127. package/dist/core/codex-metrics.js.map +1 -1
  128. package/dist/core/codex-residue.d.ts +22 -0
  129. package/dist/core/codex-residue.d.ts.map +1 -0
  130. package/dist/core/codex-residue.js +61 -0
  131. package/dist/core/codex-residue.js.map +1 -0
  132. package/dist/core/command-generation/adapters/claude.d.ts +2 -9
  133. package/dist/core/command-generation/adapters/claude.d.ts.map +1 -1
  134. package/dist/core/command-generation/adapters/claude.js +2 -12
  135. package/dist/core/command-generation/adapters/claude.js.map +1 -1
  136. package/dist/core/command-generation/adapters/index.d.ts +1 -9
  137. package/dist/core/command-generation/adapters/index.d.ts.map +1 -1
  138. package/dist/core/command-generation/adapters/index.js +1 -9
  139. package/dist/core/command-generation/adapters/index.js.map +1 -1
  140. package/dist/core/command-generation/generator.d.ts +0 -17
  141. package/dist/core/command-generation/generator.d.ts.map +1 -1
  142. package/dist/core/command-generation/generator.js +0 -17
  143. package/dist/core/command-generation/generator.js.map +1 -1
  144. package/dist/core/command-generation/index.d.ts +2 -5
  145. package/dist/core/command-generation/index.d.ts.map +1 -1
  146. package/dist/core/command-generation/index.js +0 -9
  147. package/dist/core/command-generation/index.js.map +1 -1
  148. package/dist/core/command-generation/types.d.ts +10 -36
  149. package/dist/core/command-generation/types.d.ts.map +1 -1
  150. package/dist/core/command-generation/types.js +0 -6
  151. package/dist/core/command-generation/types.js.map +1 -1
  152. package/dist/core/command-generation/yaml.d.ts +3 -18
  153. package/dist/core/command-generation/yaml.d.ts.map +1 -1
  154. package/dist/core/command-generation/yaml.js +5 -23
  155. package/dist/core/command-generation/yaml.js.map +1 -1
  156. package/dist/core/config-prompts.d.ts +2 -4
  157. package/dist/core/config-prompts.d.ts.map +1 -1
  158. package/dist/core/config-prompts.js +2 -7
  159. package/dist/core/config-prompts.js.map +1 -1
  160. package/dist/core/config-schema.d.ts +8 -53
  161. package/dist/core/config-schema.d.ts.map +1 -1
  162. package/dist/core/config-schema.js +49 -62
  163. package/dist/core/config-schema.js.map +1 -1
  164. package/dist/core/config.d.ts +56 -0
  165. package/dist/core/config.d.ts.map +1 -1
  166. package/dist/core/config.js +73 -2
  167. package/dist/core/config.js.map +1 -1
  168. package/dist/core/converters/json-converter.d.ts.map +1 -1
  169. package/dist/core/dashboard-activity.d.ts +7 -9
  170. package/dist/core/dashboard-activity.d.ts.map +1 -1
  171. package/dist/core/dashboard-activity.js +26 -24
  172. package/dist/core/dashboard-activity.js.map +1 -1
  173. package/dist/core/dashboard-data.d.ts +40 -22
  174. package/dist/core/dashboard-data.d.ts.map +1 -1
  175. package/dist/core/dashboard-data.js +84 -68
  176. package/dist/core/dashboard-data.js.map +1 -1
  177. package/dist/core/global-config.d.ts +24 -53
  178. package/dist/core/global-config.d.ts.map +1 -1
  179. package/dist/core/global-config.js +43 -62
  180. package/dist/core/global-config.js.map +1 -1
  181. package/dist/core/init.d.ts +29 -11
  182. package/dist/core/init.d.ts.map +1 -1
  183. package/dist/core/init.js +232 -164
  184. package/dist/core/init.js.map +1 -1
  185. package/dist/core/list.d.ts +1 -1
  186. package/dist/core/list.d.ts.map +1 -1
  187. package/dist/core/list.js +121 -28
  188. package/dist/core/list.js.map +1 -1
  189. package/dist/core/local-server.d.ts +63 -39
  190. package/dist/core/local-server.d.ts.map +1 -1
  191. package/dist/core/local-server.js +99 -53
  192. package/dist/core/local-server.js.map +1 -1
  193. package/dist/core/markdown-render.d.ts +25 -0
  194. package/dist/core/markdown-render.d.ts.map +1 -0
  195. package/dist/core/markdown-render.js +94 -0
  196. package/dist/core/markdown-render.js.map +1 -0
  197. package/dist/core/migrate.d.ts +32 -15
  198. package/dist/core/migrate.d.ts.map +1 -1
  199. package/dist/core/migrate.js +220 -108
  200. package/dist/core/migrate.js.map +1 -1
  201. package/dist/core/parsers/change-parser.d.ts +7 -10
  202. package/dist/core/parsers/change-parser.d.ts.map +1 -1
  203. package/dist/core/parsers/change-parser.js +48 -56
  204. package/dist/core/parsers/change-parser.js.map +1 -1
  205. package/dist/core/parsers/markdown-parser.d.ts +8 -9
  206. package/dist/core/parsers/markdown-parser.d.ts.map +1 -1
  207. package/dist/core/parsers/markdown-parser.js +31 -22
  208. package/dist/core/parsers/markdown-parser.js.map +1 -1
  209. package/dist/core/parsers/requirement-blocks.d.ts +53 -11
  210. package/dist/core/parsers/requirement-blocks.d.ts.map +1 -1
  211. package/dist/core/parsers/requirement-blocks.js +200 -60
  212. package/dist/core/parsers/requirement-blocks.js.map +1 -1
  213. package/dist/core/parsers/requirement-text.d.ts +73 -79
  214. package/dist/core/parsers/requirement-text.d.ts.map +1 -1
  215. package/dist/core/parsers/requirement-text.js +137 -79
  216. package/dist/core/parsers/requirement-text.js.map +1 -1
  217. package/dist/core/parsers/spec-structure.d.ts +1 -1
  218. package/dist/core/parsers/spec-structure.d.ts.map +1 -1
  219. package/dist/core/parsers/spec-structure.js +30 -3
  220. package/dist/core/parsers/spec-structure.js.map +1 -1
  221. package/dist/core/planning-home.js.map +1 -1
  222. package/dist/core/profiles.d.ts +3 -10
  223. package/dist/core/profiles.d.ts.map +1 -1
  224. package/dist/core/profiles.js +5 -12
  225. package/dist/core/profiles.js.map +1 -1
  226. package/dist/core/project-config.d.ts +43 -44
  227. package/dist/core/project-config.d.ts.map +1 -1
  228. package/dist/core/project-config.js +107 -82
  229. package/dist/core/project-config.js.map +1 -1
  230. package/dist/core/project-layout.d.ts +10 -18
  231. package/dist/core/project-layout.d.ts.map +1 -1
  232. package/dist/core/project-layout.js +16 -26
  233. package/dist/core/project-layout.js.map +1 -1
  234. package/dist/core/root-selection.d.ts +11 -7
  235. package/dist/core/root-selection.d.ts.map +1 -1
  236. package/dist/core/root-selection.js +7 -8
  237. package/dist/core/root-selection.js.map +1 -1
  238. package/dist/core/rules.d.ts +10 -0
  239. package/dist/core/rules.d.ts.map +1 -0
  240. package/dist/core/rules.js +43 -0
  241. package/dist/core/rules.js.map +1 -0
  242. package/dist/core/schema-names.d.ts +16 -0
  243. package/dist/core/schema-names.d.ts.map +1 -0
  244. package/dist/core/schema-names.js +16 -0
  245. package/dist/core/schema-names.js.map +1 -0
  246. package/dist/core/schemas/base.schema.d.ts +3 -0
  247. package/dist/core/schemas/base.schema.d.ts.map +1 -1
  248. package/dist/core/schemas/base.schema.js +22 -6
  249. package/dist/core/schemas/base.schema.js.map +1 -1
  250. package/dist/core/schemas/change.schema.d.ts +16 -0
  251. package/dist/core/schemas/change.schema.d.ts.map +1 -1
  252. package/dist/core/schemas/change.schema.js +41 -10
  253. package/dist/core/schemas/change.schema.js.map +1 -1
  254. package/dist/core/schemas/spec.schema.d.ts +2 -0
  255. package/dist/core/schemas/spec.schema.d.ts.map +1 -1
  256. package/dist/core/shared/index.d.ts +3 -8
  257. package/dist/core/shared/index.d.ts.map +1 -1
  258. package/dist/core/shared/index.js +3 -8
  259. package/dist/core/shared/index.js.map +1 -1
  260. package/dist/core/shared/rules-generation.d.ts +27 -8
  261. package/dist/core/shared/rules-generation.d.ts.map +1 -1
  262. package/dist/core/shared/rules-generation.js +151 -16
  263. package/dist/core/shared/rules-generation.js.map +1 -1
  264. package/dist/core/shared/skill-generation.d.ts +38 -53
  265. package/dist/core/shared/skill-generation.d.ts.map +1 -1
  266. package/dist/core/shared/skill-generation.js +82 -51
  267. package/dist/core/shared/skill-generation.js.map +1 -1
  268. package/dist/core/shared/tool-detection.d.ts +40 -62
  269. package/dist/core/shared/tool-detection.d.ts.map +1 -1
  270. package/dist/core/shared/tool-detection.js +88 -80
  271. package/dist/core/shared/tool-detection.js.map +1 -1
  272. package/dist/core/skill-metrics.d.ts +36 -63
  273. package/dist/core/skill-metrics.d.ts.map +1 -1
  274. package/dist/core/skill-metrics.js +34 -73
  275. package/dist/core/skill-metrics.js.map +1 -1
  276. package/dist/core/spec-presenter.d.ts.map +1 -1
  277. package/dist/core/spec-presenter.js +6 -6
  278. package/dist/core/spec-presenter.js.map +1 -1
  279. package/dist/core/specs-apply.d.ts +24 -23
  280. package/dist/core/specs-apply.d.ts.map +1 -1
  281. package/dist/core/specs-apply.js +188 -173
  282. package/dist/core/specs-apply.js.map +1 -1
  283. package/dist/core/templates/fragments/interview.d.ts +2 -6
  284. package/dist/core/templates/fragments/interview.d.ts.map +1 -1
  285. package/dist/core/templates/fragments/interview.js +2 -6
  286. package/dist/core/templates/fragments/interview.js.map +1 -1
  287. package/dist/core/templates/fragments/next-step.d.ts +4 -8
  288. package/dist/core/templates/fragments/next-step.d.ts.map +1 -1
  289. package/dist/core/templates/fragments/next-step.js +4 -8
  290. package/dist/core/templates/fragments/next-step.js.map +1 -1
  291. package/dist/core/templates/fragments/verify.d.ts +9 -12
  292. package/dist/core/templates/fragments/verify.d.ts.map +1 -1
  293. package/dist/core/templates/fragments/verify.js +9 -12
  294. package/dist/core/templates/fragments/verify.js.map +1 -1
  295. package/dist/core/templates/index.d.ts +0 -6
  296. package/dist/core/templates/index.d.ts.map +1 -1
  297. package/dist/core/templates/index.js +0 -7
  298. package/dist/core/templates/index.js.map +1 -1
  299. package/dist/core/templates/skill-templates.d.ts +1 -5
  300. package/dist/core/templates/skill-templates.d.ts.map +1 -1
  301. package/dist/core/templates/skill-templates.js +0 -5
  302. package/dist/core/templates/skill-templates.js.map +1 -1
  303. package/dist/core/templates/types.d.ts +3 -7
  304. package/dist/core/templates/types.d.ts.map +1 -1
  305. package/dist/core/templates/types.js +0 -3
  306. package/dist/core/templates/types.js.map +1 -1
  307. package/dist/core/templates/workflows/apply.d.ts +3 -9
  308. package/dist/core/templates/workflows/apply.d.ts.map +1 -1
  309. package/dist/core/templates/workflows/apply.js +9 -12
  310. package/dist/core/templates/workflows/apply.js.map +1 -1
  311. package/dist/core/templates/workflows/archive.d.ts +0 -6
  312. package/dist/core/templates/workflows/archive.d.ts.map +1 -1
  313. package/dist/core/templates/workflows/archive.js +7 -5
  314. package/dist/core/templates/workflows/archive.js.map +1 -1
  315. package/dist/core/templates/workflows/decision.js +4 -4
  316. package/dist/core/templates/workflows/decision.js.map +1 -1
  317. package/dist/core/templates/workflows/explore.js +1 -1
  318. package/dist/core/templates/workflows/grill.d.ts.map +1 -1
  319. package/dist/core/templates/workflows/grill.js +0 -2
  320. package/dist/core/templates/workflows/grill.js.map +1 -1
  321. package/dist/core/templates/workflows/issue.d.ts +0 -6
  322. package/dist/core/templates/workflows/issue.d.ts.map +1 -1
  323. package/dist/core/templates/workflows/issue.js +3 -0
  324. package/dist/core/templates/workflows/issue.js.map +1 -1
  325. package/dist/core/templates/workflows/propose.d.ts +0 -6
  326. package/dist/core/templates/workflows/propose.d.ts.map +1 -1
  327. package/dist/core/templates/workflows/propose.js +0 -1
  328. package/dist/core/templates/workflows/propose.js.map +1 -1
  329. package/dist/core/templates/workflows/sync.d.ts +2 -8
  330. package/dist/core/templates/workflows/sync.d.ts.map +1 -1
  331. package/dist/core/templates/workflows/sync.js +2 -2
  332. package/dist/core/templates/workflows/sync.js.map +1 -1
  333. package/dist/core/templates/workflows/update.d.ts +0 -6
  334. package/dist/core/templates/workflows/update.d.ts.map +1 -1
  335. package/dist/core/templates/workflows/update.js.map +1 -1
  336. package/dist/core/update.d.ts +26 -21
  337. package/dist/core/update.d.ts.map +1 -1
  338. package/dist/core/update.js +165 -116
  339. package/dist/core/update.js.map +1 -1
  340. package/dist/core/user-state-migration.d.ts +13 -15
  341. package/dist/core/user-state-migration.d.ts.map +1 -1
  342. package/dist/core/user-state-migration.js +16 -20
  343. package/dist/core/user-state-migration.js.map +1 -1
  344. package/dist/core/validation/constants.d.ts +19 -25
  345. package/dist/core/validation/constants.d.ts.map +1 -1
  346. package/dist/core/validation/constants.js +25 -20
  347. package/dist/core/validation/constants.js.map +1 -1
  348. package/dist/core/validation/prose-length.d.ts +15 -0
  349. package/dist/core/validation/prose-length.d.ts.map +1 -0
  350. package/dist/core/validation/prose-length.js +29 -0
  351. package/dist/core/validation/prose-length.js.map +1 -0
  352. package/dist/core/validation/purpose-placeholder.d.ts +9 -16
  353. package/dist/core/validation/purpose-placeholder.d.ts.map +1 -1
  354. package/dist/core/validation/purpose-placeholder.js +30 -44
  355. package/dist/core/validation/purpose-placeholder.js.map +1 -1
  356. package/dist/core/validation/section-validator.d.ts +4 -4
  357. package/dist/core/validation/section-validator.d.ts.map +1 -1
  358. package/dist/core/validation/section-validator.js +43 -7
  359. package/dist/core/validation/section-validator.js.map +1 -1
  360. package/dist/core/validation/task-numbering.d.ts +6 -3
  361. package/dist/core/validation/task-numbering.d.ts.map +1 -1
  362. package/dist/core/validation/task-numbering.js +23 -11
  363. package/dist/core/validation/task-numbering.js.map +1 -1
  364. package/dist/core/validation/types.d.ts +18 -0
  365. package/dist/core/validation/types.d.ts.map +1 -1
  366. package/dist/core/validation/types.js +12 -1
  367. package/dist/core/validation/types.js.map +1 -1
  368. package/dist/core/validation/validator.d.ts +50 -51
  369. package/dist/core/validation/validator.d.ts.map +1 -1
  370. package/dist/core/validation/validator.js +486 -263
  371. package/dist/core/validation/validator.js.map +1 -1
  372. package/dist/prompts/searchable-multi-select.d.ts +3 -8
  373. package/dist/prompts/searchable-multi-select.d.ts.map +1 -1
  374. package/dist/prompts/searchable-multi-select.js +16 -39
  375. package/dist/prompts/searchable-multi-select.js.map +1 -1
  376. package/dist/utils/change-metadata.d.ts +11 -50
  377. package/dist/utils/change-metadata.d.ts.map +1 -1
  378. package/dist/utils/change-metadata.js +48 -67
  379. package/dist/utils/change-metadata.js.map +1 -1
  380. package/dist/utils/change-utils.d.ts +31 -54
  381. package/dist/utils/change-utils.d.ts.map +1 -1
  382. package/dist/utils/change-utils.js +143 -100
  383. package/dist/utils/change-utils.js.map +1 -1
  384. package/dist/utils/file-lock.d.ts +39 -0
  385. package/dist/utils/file-lock.d.ts.map +1 -0
  386. package/dist/utils/file-lock.js +149 -0
  387. package/dist/utils/file-lock.js.map +1 -0
  388. package/dist/utils/file-system.d.ts +12 -32
  389. package/dist/utils/file-system.d.ts.map +1 -1
  390. package/dist/utils/file-system.js +16 -40
  391. package/dist/utils/file-system.js.map +1 -1
  392. package/dist/utils/frontmatter.d.ts +7 -11
  393. package/dist/utils/frontmatter.d.ts.map +1 -1
  394. package/dist/utils/frontmatter.js +11 -11
  395. package/dist/utils/frontmatter.js.map +1 -1
  396. package/dist/utils/interactive.d.ts +4 -9
  397. package/dist/utils/interactive.d.ts.map +1 -1
  398. package/dist/utils/interactive.js +2 -4
  399. package/dist/utils/interactive.js.map +1 -1
  400. package/dist/utils/item-discovery.d.ts +15 -10
  401. package/dist/utils/item-discovery.d.ts.map +1 -1
  402. package/dist/utils/item-discovery.js +42 -47
  403. package/dist/utils/item-discovery.js.map +1 -1
  404. package/dist/utils/link.d.ts +13 -4
  405. package/dist/utils/link.d.ts.map +1 -1
  406. package/dist/utils/link.js +13 -4
  407. package/dist/utils/link.js.map +1 -1
  408. package/dist/utils/match.js.map +1 -1
  409. package/dist/utils/requirement-diff.d.ts +13 -23
  410. package/dist/utils/requirement-diff.d.ts.map +1 -1
  411. package/dist/utils/requirement-diff.js +13 -23
  412. package/dist/utils/requirement-diff.js.map +1 -1
  413. package/dist/utils/spec-files.d.ts +10 -11
  414. package/dist/utils/spec-files.d.ts.map +1 -1
  415. package/dist/utils/spec-files.js +31 -22
  416. package/dist/utils/spec-files.js.map +1 -1
  417. package/dist/utils/task-progress.d.ts +11 -9
  418. package/dist/utils/task-progress.d.ts.map +1 -1
  419. package/dist/utils/task-progress.js +53 -32
  420. package/dist/utils/task-progress.js.map +1 -1
  421. package/dist/utils/timestamp.d.ts +5 -8
  422. package/dist/utils/timestamp.d.ts.map +1 -1
  423. package/dist/utils/timestamp.js +5 -8
  424. package/dist/utils/timestamp.js.map +1 -1
  425. package/package.json +9 -10
  426. package/schemas/decision/templates/decision.md +3 -1
  427. package/schemas/decision/templates/index.md +2 -2
  428. package/schemas/issue/schema.yaml +11 -2
  429. package/schemas/issue/templates/spec.md +37 -3
  430. package/schemas/sdd/schema.yaml +24 -1
  431. package/schemas/sdd/templates/spec.md +37 -3
@@ -1 +1 @@
1
- {"version":3,"file":"spec-structure.js","sourceRoot":"","sources":["../../../src/core/parsers/spec-structure.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec-structure.js","sourceRoot":"","sources":["../../../src/core/parsers/spec-structure.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"planning-home.js","sourceRoot":"","sources":["../../src/core/planning-home.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"planning-home.js","sourceRoot":"","sources":["../../src/core/planning-home.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,9 @@
1
- /**
2
- * Profile System
3
- *
4
- * Defines workflow profiles that control which workflows are installed.
5
- * Profiles determine WHICH workflows are installed.
6
- */
1
+ /** Workflow profiles: which workflows an install writes. */
7
2
  import type { Profile } from './global-config.js';
8
3
  export { ALL_WORKFLOWS, type WorkflowId } from './shared/skill-generation.js';
9
4
  /**
10
- * Resolves which workflows should be active for a given profile configuration.
11
- *
12
- * - 'core' profile always returns ALL_WORKFLOWS (the only profile's worth of workflows)
13
- * - 'custom' profile returns the provided customWorkflows, or empty array if not provided
5
+ * The workflows a profile resolves to: `core` is always ALL_WORKFLOWS, `custom`
6
+ * is `customWorkflows`, or empty when none was given.
14
7
  */
15
8
  export declare function getProfileWorkflows(profile: Profile, customWorkflows?: string[]): readonly string[];
16
9
  //# sourceMappingURL=profiles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/core/profiles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAIlD,OAAO,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG9E;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,eAAe,CAAC,EAAE,MAAM,EAAE,GACzB,SAAS,MAAM,EAAE,CAKnB"}
1
+ {"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../../src/core/profiles.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAE5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAIlD,OAAO,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG9E;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,eAAe,CAAC,EAAE,MAAM,EAAE,GACzB,SAAS,MAAM,EAAE,CAKnB"}
@@ -1,18 +1,11 @@
1
- /**
2
- * Profile System
3
- *
4
- * Defines workflow profiles that control which workflows are installed.
5
- * Profiles determine WHICH workflows are installed.
6
- */
7
- // The workflow id list lives in the single workflow registry
8
- // (shared/skill-generation.ts) — re-exported here for existing importers.
1
+ /** Workflow profiles: which workflows an install writes. */
2
+ // The workflow id list lives in the one registry (shared/skill-generation.ts);
3
+ // re-exported here for existing importers.
9
4
  export { ALL_WORKFLOWS } from './shared/skill-generation.js';
10
5
  import { ALL_WORKFLOWS } from './shared/skill-generation.js';
11
6
  /**
12
- * Resolves which workflows should be active for a given profile configuration.
13
- *
14
- * - 'core' profile always returns ALL_WORKFLOWS (the only profile's worth of workflows)
15
- * - 'custom' profile returns the provided customWorkflows, or empty array if not provided
7
+ * The workflows a profile resolves to: `core` is always ALL_WORKFLOWS, `custom`
8
+ * is `customWorkflows`, or empty when none was given.
16
9
  */
17
10
  export function getProfileWorkflows(profile, customWorkflows) {
18
11
  if (profile === 'custom') {
@@ -1 +1 @@
1
- {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/core/profiles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,6DAA6D;AAC7D,0EAA0E;AAC1E,OAAO,EAAE,aAAa,EAAmB,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAgB,EAChB,eAA0B;IAE1B,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,eAAe,IAAI,EAAE,CAAC;IAC/B,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"profiles.js","sourceRoot":"","sources":["../../src/core/profiles.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAI5D,+EAA+E;AAC/E,2CAA2C;AAC3C,OAAO,EAAE,aAAa,EAAmB,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAgB,EAChB,eAA0B;IAE1B,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,eAAe,IAAI,EAAE,CAAC;IAC/B,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC"}
@@ -1,17 +1,5 @@
1
1
  import { z } from 'zod';
2
- /**
3
- * Zod schema for project configuration.
4
- *
5
- * Purpose:
6
- * 1. Documentation - clearly defines the config file structure
7
- * 2. Type safety - TypeScript infers ProjectConfig type from schema
8
- * 3. Runtime validation - uses safeParse() for resilient field-by-field validation
9
- *
10
- * Why Zod over manual validation:
11
- * - Helps understand Tospec's data interfaces at a glance
12
- * - Single source of truth for type and validation
13
- * - Consistent with other Tospec schemas
14
- */
2
+ /** Single source of truth for both `ProjectConfig` and its runtime validation. */
15
3
  export declare const ProjectConfigSchema: z.ZodObject<{
16
4
  schema: z.ZodString;
17
5
  context: z.ZodOptional<z.ZodString>;
@@ -23,45 +11,56 @@ export declare const ProjectConfigSchema: z.ZodObject<{
23
11
  export type ProjectConfig = z.infer<typeof ProjectConfigSchema>;
24
12
  export declare const MAX_CONTEXT_SIZE: number;
25
13
  /**
26
- * Read and parse tospec/config.yaml from project root.
27
- * Uses resilient parsing - validates each field independently using Zod safeParse.
28
- * Returns null if file doesn't exist.
29
- * Returns partial config if some fields are invalid (with warnings).
30
- *
31
- * Performance note (Jan 2025):
32
- * Benchmarks showed direct file reads are fast enough without caching:
33
- * - Typical config (1KB): ~0.5ms per read
34
- * - Large config (50KB): ~1.6ms per read
35
- * - Missing config: ~0.01ms per read
36
- * Config is read 1-2 times per command (schema resolution + instruction loading),
37
- * adding ~1-3ms total overhead. Caching would add complexity (mtime checks,
38
- * invalidation logic) for negligible benefit. Direct reads also ensure config
39
- * changes are reflected immediately without stale cache issues.
14
+ * A field this reader could not use, and therefore dropped. Returned rather than
15
+ * `console.warn`ed so it can reach `status[]`: "sets no context" and "your
16
+ * context was thrown away" are different facts.
17
+ */
18
+ export interface ProjectConfigDiagnostic {
19
+ code: string;
20
+ message: string;
21
+ }
22
+ export interface ProjectConfigResult {
23
+ config: ProjectConfig | null;
24
+ diagnostics: ProjectConfigDiagnostic[];
25
+ }
26
+ /**
27
+ * Reads `tospec/config.yaml`, validating each field independently so one bad
28
+ * field does not discard the rest. Uncached on purpose: ~0.5 ms for a typical
29
+ * config and 1-2 reads per command, so mtime invalidation would buy nothing.
40
30
  *
41
- * @param projectRoot - The root directory of the project (where `tospec/` lives)
42
- * @returns Parsed config or null if file doesn't exist
31
+ * Diagnostics go to stderr here, for callers with no envelope to carry them;
32
+ * the ones that have an envelope call the variant below.
43
33
  */
44
34
  export declare function readProjectConfig(projectRoot: string): ProjectConfig | null;
45
35
  /**
46
- * Validate artifact IDs in rules against the artifacts of every available
47
- * schema, not just the one the current change happens to use.
48
- *
49
- * `rules:` is a single global map, but a change is always loaded under exactly
50
- * one schema. Checking the global map against one schema's artifacts made any
51
- * project that configures rules for two schemas (say `proposal` for sdd and
52
- * `task` for issue) emit a false warning on every command run under the other —
53
- * a warning that named a real, correctly-spelled artifact as unknown.
36
+ * Stderr copy of the config diagnostics, for commands that never read the
37
+ * config themselves. `list` and `status` resolve each change's schema from its
38
+ * own `.tospec.yaml` and consult the project config only when that field is
39
+ * absent, so a config that no longer parses went unmentioned by exactly the
40
+ * commands a user runs to look around. Stderr in both modes: a `--json` stdout
41
+ * stays one document, and a warning is not a failed command.
42
+ */
43
+ export declare function printProjectConfigDiagnostics(projectRoot: string): void;
44
+ /** The same read, with the dropped fields handed back instead of printed. */
45
+ export declare function readProjectConfigWithDiagnostics(projectRoot: string): ProjectConfigResult;
46
+ /**
47
+ * The one `rules:` key that is not an artifact: every other names a document to
48
+ * write, this one the phase that writes code. Without it a project can say how
49
+ * to write tasks.md but not how to implement it.
50
+ */
51
+ export declare const APPLY_RULES_KEY = "apply";
52
+ /**
53
+ * Checks rule keys against the artifacts of *every* available schema. `rules:`
54
+ * is one global map but a change loads under one schema, so checking against
55
+ * that schema alone warns about real, correctly-spelled artifacts.
54
56
  *
55
- * @param rules - The rules object from config
56
- * @param validArtifactIds - Union of artifact IDs across all available schemas
57
- * (see collectAllArtifactIds)
58
- * @returns Array of warning messages for artifact IDs that match no schema
57
+ * @param validArtifactIds Union across all schemas; see collectAllArtifactIds.
59
58
  */
60
59
  export declare function validateConfigRules(rules: Record<string, string[]>, validArtifactIds: Set<string>): string[];
61
60
  /**
62
- * Shared .yaml/.yml probe over an existing `tospec/` directory. The one place
63
- * that decides which config file a root has — init used to answer this
64
- * separately and could report "created" next to a config the reader was using.
61
+ * Shared .yaml/.yml probe over an existing `tospec/` directory: the one place
62
+ * that decides which config file a root has, so init cannot report "created"
63
+ * next to a config the reader is already using.
65
64
  */
66
65
  export declare function resolveConfigFileInDir(tospecDir: string): string | null;
67
66
  /** Shared .yaml/.yml probe used by project-config readers. */
@@ -1 +1 @@
1
- {"version":3,"file":"project-config.d.ts","sourceRoot":"","sources":["../../src/core/project-config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB;;;;;;;iBAmC9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAE1C;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAuG3E;AAMD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAC/B,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC5B,MAAM,EAAE,CAcV;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOvE;AAED,8DAA8D;AAC9D,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAExE"}
1
+ {"version":3,"file":"project-config.d.ts","sourceRoot":"","sources":["../../src/core/project-config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,kFAAkF;AAClF,eAAO,MAAM,mBAAmB;;;;;;;iBA6B9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,gBAAgB,QAAY,CAAC;AAE1C;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,uBAAuB,EAAE,CAAC;CACxC;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAM3E;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAIvE;AAED,6EAA6E;AAC7E,wBAAgB,gCAAgC,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,CAqIzF;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,UAAU,CAAC;AAEvC;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAC/B,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC5B,MAAM,EAAE,CAeV;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOvE;AAED,8DAA8D;AAC9D,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAExE"}
@@ -2,131 +2,143 @@ import { existsSync, readFileSync } from 'fs';
2
2
  import path from 'path';
3
3
  import { parse as parseYaml } from 'yaml';
4
4
  import { z } from 'zod';
5
- /**
6
- * Zod schema for project configuration.
7
- *
8
- * Purpose:
9
- * 1. Documentation - clearly defines the config file structure
10
- * 2. Type safety - TypeScript infers ProjectConfig type from schema
11
- * 3. Runtime validation - uses safeParse() for resilient field-by-field validation
12
- *
13
- * Why Zod over manual validation:
14
- * - Helps understand Tospec's data interfaces at a glance
15
- * - Single source of truth for type and validation
16
- * - Consistent with other Tospec schemas
17
- */
5
+ /** Single source of truth for both `ProjectConfig` and its runtime validation. */
18
6
  export const ProjectConfigSchema = z.object({
19
- // Required: which schema to use (e.g., "sdd", or project-local schema name)
20
7
  schema: z
21
8
  .string()
22
9
  .min(1)
23
10
  .describe('The workflow schema to use (e.g., "sdd")'),
24
- // Optional: project context (injected into all artifact instructions)
25
- // Max size: 50KB (enforced during parsing)
11
+ // Capped at MAX_CONTEXT_SIZE during parsing.
26
12
  context: z
27
13
  .string()
28
14
  .optional()
29
15
  .describe('Project context injected into all artifact instructions'),
30
- // Optional: per-artifact rules (additive to schema's built-in guidance)
16
+ // Additive to the schema's built-in guidance.
31
17
  rules: z
32
- .record(z.string(), // artifact ID
33
- z.array(z.string()) // list of rules
34
- )
18
+ .record(z.string(), z.array(z.string()))
35
19
  .optional()
36
20
  .describe('Per-artifact rules, keyed by artifact ID'),
37
- // Optional: dashboard tuning (ADR 001). staleDays: days without any file
38
- // change before an active change is flagged stale (default 14).
21
+ // ADR 001. staleDays: days without a file change before an active change is
22
+ // flagged stale (default 14).
39
23
  dashboard: z
40
24
  .object({
41
25
  staleDays: z.number().int().positive().optional(),
42
26
  })
43
27
  .optional()
44
28
  .describe('Dashboard settings (staleDays: stale-change threshold in days)'),
45
- // Note: the retired `agentsLinkMode` field (per-tool skill delivery mode)
46
- // is intentionally absent — existing config files that still carry it are
47
- // simply ignored, never an error.
29
+ // The retired `agentsLinkMode` field is absent on purpose: config files still
30
+ // carrying it are ignored, never an error.
48
31
  });
49
32
  export const MAX_CONTEXT_SIZE = 50 * 1024; // 50KB hard limit on inlined context
50
33
  /**
51
- * Read and parse tospec/config.yaml from project root.
52
- * Uses resilient parsing - validates each field independently using Zod safeParse.
53
- * Returns null if file doesn't exist.
54
- * Returns partial config if some fields are invalid (with warnings).
34
+ * Reads `tospec/config.yaml`, validating each field independently so one bad
35
+ * field does not discard the rest. Uncached on purpose: ~0.5 ms for a typical
36
+ * config and 1-2 reads per command, so mtime invalidation would buy nothing.
55
37
  *
56
- * Performance note (Jan 2025):
57
- * Benchmarks showed direct file reads are fast enough without caching:
58
- * - Typical config (1KB): ~0.5ms per read
59
- * - Large config (50KB): ~1.6ms per read
60
- * - Missing config: ~0.01ms per read
61
- * Config is read 1-2 times per command (schema resolution + instruction loading),
62
- * adding ~1-3ms total overhead. Caching would add complexity (mtime checks,
63
- * invalidation logic) for negligible benefit. Direct reads also ensure config
64
- * changes are reflected immediately without stale cache issues.
65
- *
66
- * @param projectRoot - The root directory of the project (where `tospec/` lives)
67
- * @returns Parsed config or null if file doesn't exist
38
+ * Diagnostics go to stderr here, for callers with no envelope to carry them;
39
+ * the ones that have an envelope call the variant below.
68
40
  */
69
41
  export function readProjectConfig(projectRoot) {
42
+ const { config, diagnostics } = readProjectConfigWithDiagnostics(projectRoot);
43
+ for (const diagnostic of diagnostics) {
44
+ console.warn(diagnostic.message);
45
+ }
46
+ return config;
47
+ }
48
+ /**
49
+ * Stderr copy of the config diagnostics, for commands that never read the
50
+ * config themselves. `list` and `status` resolve each change's schema from its
51
+ * own `.tospec.yaml` and consult the project config only when that field is
52
+ * absent, so a config that no longer parses went unmentioned by exactly the
53
+ * commands a user runs to look around. Stderr in both modes: a `--json` stdout
54
+ * stays one document, and a warning is not a failed command.
55
+ */
56
+ export function printProjectConfigDiagnostics(projectRoot) {
57
+ for (const diagnostic of readProjectConfigWithDiagnostics(projectRoot).diagnostics) {
58
+ console.error(diagnostic.message.startsWith('Warning:') ? diagnostic.message : `Warning: ${diagnostic.message}`);
59
+ }
60
+ }
61
+ /** The same read, with the dropped fields handed back instead of printed. */
62
+ export function readProjectConfigWithDiagnostics(projectRoot) {
70
63
  const configPath = resolveConfigFilePath(projectRoot);
71
64
  if (configPath === null) {
72
- return null; // No config is OK
65
+ return { config: null, diagnostics: [] }; // No config is OK
73
66
  }
67
+ const diagnostics = [];
68
+ const where = configPath;
74
69
  try {
75
70
  const content = readFileSync(configPath, 'utf-8');
76
71
  const raw = parseYaml(content);
77
72
  if (!raw || typeof raw !== 'object') {
78
- console.warn(`tospec/config.yaml is not a valid YAML object`);
79
- return null;
73
+ return {
74
+ config: null,
75
+ diagnostics: [
76
+ {
77
+ code: 'config_not_a_mapping',
78
+ message: `${where} is not a YAML mapping; ignoring it.`,
79
+ },
80
+ ],
81
+ };
80
82
  }
81
83
  const config = {};
82
- // Parse schema field using Zod
83
84
  const schemaField = z.string().min(1);
84
85
  const schemaResult = schemaField.safeParse(raw.schema);
85
86
  if (schemaResult.success) {
86
87
  config.schema = schemaResult.data;
87
88
  }
88
89
  else if (raw.schema !== undefined) {
89
- console.warn(`Invalid 'schema' field in config (must be non-empty string)`);
90
+ diagnostics.push({
91
+ code: 'config_field_invalid',
92
+ message: `Invalid 'schema' field in ${where} (must be a non-empty string); ignoring it.`,
93
+ });
90
94
  }
91
- // Parse context field with size limit
92
95
  if (raw.context !== undefined) {
93
96
  const contextField = z.string();
94
97
  const contextResult = contextField.safeParse(raw.context);
95
98
  if (contextResult.success) {
96
99
  const contextSize = Buffer.byteLength(contextResult.data, 'utf-8');
97
100
  if (contextSize > MAX_CONTEXT_SIZE) {
98
- console.warn(`Context too large (${(contextSize / 1024).toFixed(1)}KB, limit: ${MAX_CONTEXT_SIZE / 1024}KB)`);
99
- console.warn(`Ignoring context field`);
101
+ diagnostics.push({
102
+ code: 'config_context_too_large',
103
+ message: `Context too large (${(contextSize / 1024).toFixed(1)}KB, limit: ${MAX_CONTEXT_SIZE / 1024}KB); ignoring the context field in ${where}.`,
104
+ });
100
105
  }
101
106
  else {
102
107
  config.context = contextResult.data;
103
108
  }
104
109
  }
105
110
  else {
106
- console.warn(`Invalid 'context' field in config (must be string)`);
111
+ diagnostics.push({
112
+ code: 'config_field_invalid',
113
+ message: `Invalid 'context' field in ${where} (must be a string); ignoring it.`,
114
+ });
107
115
  }
108
116
  }
109
- // Parse rules field using Zod
110
117
  if (raw.rules !== undefined) {
111
- // First check if it's an object structure (guard against null since typeof null === 'object')
118
+ // The null guard matters: typeof null === 'object'.
112
119
  if (typeof raw.rules === 'object' && raw.rules !== null && !Array.isArray(raw.rules)) {
113
120
  const parsedRules = {};
114
121
  let hasValidRules = false;
115
122
  for (const [artifactId, rules] of Object.entries(raw.rules)) {
116
123
  const rulesArrayResult = z.array(z.string()).safeParse(rules);
117
124
  if (rulesArrayResult.success) {
118
- // Filter out empty strings
119
125
  const validRules = rulesArrayResult.data.filter((r) => r.length > 0);
120
126
  if (validRules.length > 0) {
121
127
  parsedRules[artifactId] = validRules;
122
128
  hasValidRules = true;
123
129
  }
124
130
  if (validRules.length < rulesArrayResult.data.length) {
125
- console.warn(`Some rules for '${artifactId}' are empty strings, ignoring them`);
131
+ diagnostics.push({
132
+ code: 'config_rules_empty_entries',
133
+ message: `Some rules for '${artifactId}' in ${where} are empty strings, ignoring them`,
134
+ });
126
135
  }
127
136
  }
128
137
  else {
129
- console.warn(`Rules for '${artifactId}' must be an array of strings, ignoring this artifact's rules`);
138
+ diagnostics.push({
139
+ code: 'config_field_invalid',
140
+ message: `Rules for '${artifactId}' in ${where} must be an array of strings, ignoring this artifact's rules`,
141
+ });
130
142
  }
131
143
  }
132
144
  if (hasValidRules) {
@@ -134,10 +146,12 @@ export function readProjectConfig(projectRoot) {
134
146
  }
135
147
  }
136
148
  else {
137
- console.warn(`Invalid 'rules' field in config (must be object)`);
149
+ diagnostics.push({
150
+ code: 'config_field_invalid',
151
+ message: `Invalid 'rules' field in ${where} (must be a mapping); ignoring it.`,
152
+ });
138
153
  }
139
154
  }
140
- // Parse dashboard field using Zod
141
155
  if (raw.dashboard !== undefined) {
142
156
  const dashboardField = z.object({ staleDays: z.number().int().positive().optional() });
143
157
  const dashboardResult = dashboardField.safeParse(raw.dashboard);
@@ -145,40 +159,51 @@ export function readProjectConfig(projectRoot) {
145
159
  config.dashboard = dashboardResult.data;
146
160
  }
147
161
  else {
148
- console.warn(`Invalid 'dashboard' field in config (staleDays must be a positive integer)`);
162
+ diagnostics.push({
163
+ code: 'config_field_invalid',
164
+ message: `Invalid 'dashboard' field in ${where} (staleDays must be a positive integer); ignoring it.`,
165
+ });
149
166
  }
150
167
  }
151
- // Return partial config even if some fields failed
152
- return Object.keys(config).length > 0 ? config : null;
168
+ // A partial config, even when some fields failed.
169
+ return {
170
+ config: Object.keys(config).length > 0 ? config : null,
171
+ diagnostics,
172
+ };
153
173
  }
154
174
  catch (error) {
155
- console.warn(`Warning: could not parse ${configPathForWarnings(projectRoot)} (${error instanceof Error ? error.message.split('\n')[0] : String(error)}); ignoring it.`);
156
- return null;
175
+ return {
176
+ config: null,
177
+ diagnostics: [
178
+ {
179
+ code: 'config_unparseable',
180
+ // First line only, minus the colon that introduces the yaml
181
+ // library's code frame on the lines that follow.
182
+ message: `Warning: could not parse ${where} (${error instanceof Error ? error.message.split('\n')[0].replace(/:\s*$/, '') : String(error)}); ignoring it.`,
183
+ },
184
+ ],
185
+ };
157
186
  }
158
187
  }
159
- function configPathForWarnings(projectRoot) {
160
- return resolveConfigFilePath(projectRoot) ?? path.join(projectRoot, 'tospec', 'config.yaml');
161
- }
162
188
  /**
163
- * Validate artifact IDs in rules against the artifacts of every available
164
- * schema, not just the one the current change happens to use.
165
- *
166
- * `rules:` is a single global map, but a change is always loaded under exactly
167
- * one schema. Checking the global map against one schema's artifacts made any
168
- * project that configures rules for two schemas (say `proposal` for sdd and
169
- * `task` for issue) emit a false warning on every command run under the other —
170
- * a warning that named a real, correctly-spelled artifact as unknown.
189
+ * The one `rules:` key that is not an artifact: every other names a document to
190
+ * write, this one the phase that writes code. Without it a project can say how
191
+ * to write tasks.md but not how to implement it.
192
+ */
193
+ export const APPLY_RULES_KEY = 'apply';
194
+ /**
195
+ * Checks rule keys against the artifacts of *every* available schema. `rules:`
196
+ * is one global map but a change loads under one schema, so checking against
197
+ * that schema alone warns about real, correctly-spelled artifacts.
171
198
  *
172
- * @param rules - The rules object from config
173
- * @param validArtifactIds - Union of artifact IDs across all available schemas
174
- * (see collectAllArtifactIds)
175
- * @returns Array of warning messages for artifact IDs that match no schema
199
+ * @param validArtifactIds Union across all schemas; see collectAllArtifactIds.
176
200
  */
177
201
  export function validateConfigRules(rules, validArtifactIds) {
178
202
  const warnings = [];
203
+ const validKeys = new Set([...validArtifactIds, APPLY_RULES_KEY]);
179
204
  for (const artifactId of Object.keys(rules)) {
180
- if (!validArtifactIds.has(artifactId)) {
181
- const validIds = Array.from(validArtifactIds).sort().join(', ');
205
+ if (!validKeys.has(artifactId)) {
206
+ const validIds = Array.from(validKeys).sort().join(', ');
182
207
  warnings.push(`Unknown artifact ID in rules: "${artifactId}". ` +
183
208
  `Valid IDs across all available schemas: ${validIds}`);
184
209
  }
@@ -186,9 +211,9 @@ export function validateConfigRules(rules, validArtifactIds) {
186
211
  return warnings;
187
212
  }
188
213
  /**
189
- * Shared .yaml/.yml probe over an existing `tospec/` directory. The one place
190
- * that decides which config file a root has — init used to answer this
191
- * separately and could report "created" next to a config the reader was using.
214
+ * Shared .yaml/.yml probe over an existing `tospec/` directory: the one place
215
+ * that decides which config file a root has, so init cannot report "created"
216
+ * next to a config the reader is already using.
192
217
  */
193
218
  export function resolveConfigFileInDir(tospecDir) {
194
219
  const yamlPath = path.join(tospecDir, 'config.yaml');
@@ -1 +1 @@
1
- {"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../src/core/project-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-config.js","sourceRoot":"","sources":["../../src/core/project-config.ts"],"names":[],"mappings":"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"}
@@ -1,29 +1,21 @@
1
1
  /**
2
2
  * The directory layout `tospec init` creates, and the anchors that make it
3
- * survive version control.
4
- *
5
- * Git does not track an empty directory, so a layout committed straight after
6
- * init is not the layout a collaborator clones: the directories are gone, and
7
- * the first command that looks for one reports the project as uninitialized.
8
- * Nothing is lost — every writer creates the directory it needs on demand — but
9
- * a diagnostic that sends the reader to re-run a command that will change
10
- * nothing is worse than a crash.
3
+ * survive version control. Git does not track an empty directory, so without
4
+ * them a collaborator clones a layout whose directories are gone and the first
5
+ * command reports the project as uninitialized — nothing is lost, but the
6
+ * diagnostic sends the reader to re-run a command that changes nothing.
11
7
  */
12
8
  /**
13
- * Relative to `tospec/`, in creation order.
14
- *
15
- * Not named for anchoring: whether a directory gets an anchor is computed from
16
- * whether it ends up empty, and `changes/` never does because it holds
17
- * `archive/`. A name asserting the property would be wrong for the next
18
- * directory that ships with content.
9
+ * Relative to `tospec/`, in creation order. Not named for anchoring: whether a
10
+ * directory gets an anchor is computed from whether it ends up empty, and
11
+ * `changes/` never does because it holds `archive/`.
19
12
  */
20
- export declare const TOSPEC_LAYOUT_DIRS: readonly ["specs", "changes", "changes/archive", "decisions"];
13
+ export declare const TOSPEC_LAYOUT_DIRS: readonly ['specs', 'changes', 'changes/archive', 'decisions'];
21
14
  /** The layout as absolute paths, so callers never re-derive the join. */
22
15
  export declare function tospecLayoutDirs(tospecPath: string): string[];
23
16
  /**
24
- * Anchor `directory` if it is empty. A directory that already holds content
25
- * needs no anchor — the anchor exists to make an empty directory representable,
26
- * and adding one beside real content leaves a file nobody asked for.
17
+ * Anchor `directory` if it is empty. An anchor exists to make an empty directory
18
+ * representable, so adding one beside real content leaves a file nobody wanted.
27
19
  */
28
20
  export declare function ensureDirectoryAnchor(directory: string): Promise<void>;
29
21
  //# sourceMappingURL=project-layout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-layout.d.ts","sourceRoot":"","sources":["../../src/core/project-layout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,+DAOrB,CAAC;AAIX,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAE7D;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB5E"}
1
+ {"version":3,"file":"project-layout.d.ts","sourceRoot":"","sources":["../../src/core/project-layout.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,YAC7B,OAAO,EACP,SAAS,EACT,iBAAiB,EAGjB,WAAW,CACH,CAAC;AAIX,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAE7D;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB5E"}