@lwelliott/cortex-cli 1.0.3

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 (335) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +159 -0
  3. package/dist/cli/audit.d.ts +3 -0
  4. package/dist/cli/audit.d.ts.map +1 -0
  5. package/dist/cli/audit.js +78 -0
  6. package/dist/cli/audit.js.map +1 -0
  7. package/dist/cli/doc.d.ts +3 -0
  8. package/dist/cli/doc.d.ts.map +1 -0
  9. package/dist/cli/doc.js +291 -0
  10. package/dist/cli/doc.js.map +1 -0
  11. package/dist/cli/entity.d.ts +3 -0
  12. package/dist/cli/entity.d.ts.map +1 -0
  13. package/dist/cli/entity.js +135 -0
  14. package/dist/cli/entity.js.map +1 -0
  15. package/dist/cli/format-selector.d.ts +30 -0
  16. package/dist/cli/format-selector.d.ts.map +1 -0
  17. package/dist/cli/format-selector.js +101 -0
  18. package/dist/cli/format-selector.js.map +1 -0
  19. package/dist/cli/formatters/audit-formatter.d.ts +33 -0
  20. package/dist/cli/formatters/audit-formatter.d.ts.map +1 -0
  21. package/dist/cli/formatters/audit-formatter.js +204 -0
  22. package/dist/cli/formatters/audit-formatter.js.map +1 -0
  23. package/dist/cli/formatters/json.d.ts +10 -0
  24. package/dist/cli/formatters/json.d.ts.map +1 -0
  25. package/dist/cli/formatters/json.js +31 -0
  26. package/dist/cli/formatters/json.js.map +1 -0
  27. package/dist/cli/formatters/markdown.d.ts +12 -0
  28. package/dist/cli/formatters/markdown.d.ts.map +1 -0
  29. package/dist/cli/formatters/markdown.js +341 -0
  30. package/dist/cli/formatters/markdown.js.map +1 -0
  31. package/dist/cli/formatters/quiet.d.ts +15 -0
  32. package/dist/cli/formatters/quiet.d.ts.map +1 -0
  33. package/dist/cli/formatters/quiet.js +75 -0
  34. package/dist/cli/formatters/quiet.js.map +1 -0
  35. package/dist/cli/formatters/table.d.ts +11 -0
  36. package/dist/cli/formatters/table.d.ts.map +1 -0
  37. package/dist/cli/formatters/table.js +726 -0
  38. package/dist/cli/formatters/table.js.map +1 -0
  39. package/dist/cli/graph.d.ts +3 -0
  40. package/dist/cli/graph.d.ts.map +1 -0
  41. package/dist/cli/graph.js +209 -0
  42. package/dist/cli/graph.js.map +1 -0
  43. package/dist/cli/index.d.ts +3 -0
  44. package/dist/cli/index.d.ts.map +1 -0
  45. package/dist/cli/index.js +144 -0
  46. package/dist/cli/index.js.map +1 -0
  47. package/dist/cli/lesson.d.ts +3 -0
  48. package/dist/cli/lesson.d.ts.map +1 -0
  49. package/dist/cli/lesson.js +85 -0
  50. package/dist/cli/lesson.js.map +1 -0
  51. package/dist/cli/project-resolver.d.ts +17 -0
  52. package/dist/cli/project-resolver.d.ts.map +1 -0
  53. package/dist/cli/project-resolver.js +25 -0
  54. package/dist/cli/project-resolver.js.map +1 -0
  55. package/dist/cli/project.d.ts +12 -0
  56. package/dist/cli/project.d.ts.map +1 -0
  57. package/dist/cli/project.js +169 -0
  58. package/dist/cli/project.js.map +1 -0
  59. package/dist/cli/relation.d.ts +3 -0
  60. package/dist/cli/relation.d.ts.map +1 -0
  61. package/dist/cli/relation.js +128 -0
  62. package/dist/cli/relation.js.map +1 -0
  63. package/dist/cli/review.d.ts +3 -0
  64. package/dist/cli/review.d.ts.map +1 -0
  65. package/dist/cli/review.js +131 -0
  66. package/dist/cli/review.js.map +1 -0
  67. package/dist/cli/router.d.ts +38 -0
  68. package/dist/cli/router.d.ts.map +1 -0
  69. package/dist/cli/router.js +49 -0
  70. package/dist/cli/router.js.map +1 -0
  71. package/dist/cli/schema.d.ts +3 -0
  72. package/dist/cli/schema.d.ts.map +1 -0
  73. package/dist/cli/schema.js +94 -0
  74. package/dist/cli/schema.js.map +1 -0
  75. package/dist/cli/sprint.d.ts +12 -0
  76. package/dist/cli/sprint.d.ts.map +1 -0
  77. package/dist/cli/sprint.js +200 -0
  78. package/dist/cli/sprint.js.map +1 -0
  79. package/dist/cli/task.d.ts +12 -0
  80. package/dist/cli/task.d.ts.map +1 -0
  81. package/dist/cli/task.js +252 -0
  82. package/dist/cli/task.js.map +1 -0
  83. package/dist/cli/test-report.d.ts +3 -0
  84. package/dist/cli/test-report.d.ts.map +1 -0
  85. package/dist/cli/test-report.js +134 -0
  86. package/dist/cli/test-report.js.map +1 -0
  87. package/dist/cli/validate.d.ts +8 -0
  88. package/dist/cli/validate.d.ts.map +1 -0
  89. package/dist/cli/validate.js +86 -0
  90. package/dist/cli/validate.js.map +1 -0
  91. package/dist/config/config.d.ts +18 -0
  92. package/dist/config/config.d.ts.map +1 -0
  93. package/dist/config/config.js +70 -0
  94. package/dist/config/config.js.map +1 -0
  95. package/dist/config/registry.d.ts +52 -0
  96. package/dist/config/registry.d.ts.map +1 -0
  97. package/dist/config/registry.js +193 -0
  98. package/dist/config/registry.js.map +1 -0
  99. package/dist/config/resolver.d.ts +26 -0
  100. package/dist/config/resolver.d.ts.map +1 -0
  101. package/dist/config/resolver.js +87 -0
  102. package/dist/config/resolver.js.map +1 -0
  103. package/dist/db/builtin-schema-constants.d.ts +109 -0
  104. package/dist/db/builtin-schema-constants.d.ts.map +1 -0
  105. package/dist/db/builtin-schema-constants.js +32 -0
  106. package/dist/db/builtin-schema-constants.js.map +1 -0
  107. package/dist/db/connection.d.ts +34 -0
  108. package/dist/db/connection.d.ts.map +1 -0
  109. package/dist/db/connection.js +140 -0
  110. package/dist/db/connection.js.map +1 -0
  111. package/dist/db/generated/schema-types.d.ts +134 -0
  112. package/dist/db/generated/schema-types.d.ts.map +1 -0
  113. package/dist/db/generated/schema-types.js +31 -0
  114. package/dist/db/generated/schema-types.js.map +1 -0
  115. package/dist/db/locks.d.ts +106 -0
  116. package/dist/db/locks.d.ts.map +1 -0
  117. package/dist/db/locks.js +211 -0
  118. package/dist/db/locks.js.map +1 -0
  119. package/dist/db/migration.d.ts +65 -0
  120. package/dist/db/migration.d.ts.map +1 -0
  121. package/dist/db/migration.js +233 -0
  122. package/dist/db/migration.js.map +1 -0
  123. package/dist/db/retry.d.ts +26 -0
  124. package/dist/db/retry.d.ts.map +1 -0
  125. package/dist/db/retry.js +71 -0
  126. package/dist/db/retry.js.map +1 -0
  127. package/dist/db/schema.d.ts +21 -0
  128. package/dist/db/schema.d.ts.map +1 -0
  129. package/dist/db/schema.js +830 -0
  130. package/dist/db/schema.js.map +1 -0
  131. package/dist/models/common.d.ts +27 -0
  132. package/dist/models/common.d.ts.map +1 -0
  133. package/dist/models/common.js +4 -0
  134. package/dist/models/common.js.map +1 -0
  135. package/dist/models/document.d.ts +89 -0
  136. package/dist/models/document.d.ts.map +1 -0
  137. package/dist/models/document.js +5 -0
  138. package/dist/models/document.js.map +1 -0
  139. package/dist/models/entity-model.d.ts +30 -0
  140. package/dist/models/entity-model.d.ts.map +1 -0
  141. package/dist/models/entity-model.js +99 -0
  142. package/dist/models/entity-model.js.map +1 -0
  143. package/dist/models/entity.d.ts +88 -0
  144. package/dist/models/entity.d.ts.map +1 -0
  145. package/dist/models/entity.js +5 -0
  146. package/dist/models/entity.js.map +1 -0
  147. package/dist/models/graph-schema.d.ts +43 -0
  148. package/dist/models/graph-schema.d.ts.map +1 -0
  149. package/dist/models/graph-schema.js +76 -0
  150. package/dist/models/graph-schema.js.map +1 -0
  151. package/dist/models/project.d.ts +49 -0
  152. package/dist/models/project.d.ts.map +1 -0
  153. package/dist/models/project.js +18 -0
  154. package/dist/models/project.js.map +1 -0
  155. package/dist/models/relation.d.ts +35 -0
  156. package/dist/models/relation.d.ts.map +1 -0
  157. package/dist/models/relation.js +212 -0
  158. package/dist/models/relation.js.map +1 -0
  159. package/dist/models/review.d.ts +86 -0
  160. package/dist/models/review.d.ts.map +1 -0
  161. package/dist/models/review.js +5 -0
  162. package/dist/models/review.js.map +1 -0
  163. package/dist/models/sprint.d.ts +38 -0
  164. package/dist/models/sprint.d.ts.map +1 -0
  165. package/dist/models/sprint.js +4 -0
  166. package/dist/models/sprint.js.map +1 -0
  167. package/dist/models/task.d.ts +75 -0
  168. package/dist/models/task.d.ts.map +1 -0
  169. package/dist/models/task.js +4 -0
  170. package/dist/models/task.js.map +1 -0
  171. package/dist/models/validation.d.ts +25 -0
  172. package/dist/models/validation.d.ts.map +1 -0
  173. package/dist/models/validation.js +4 -0
  174. package/dist/models/validation.js.map +1 -0
  175. package/dist/services/audit-check-service.d.ts +16 -0
  176. package/dist/services/audit-check-service.d.ts.map +1 -0
  177. package/dist/services/audit-check-service.js +137 -0
  178. package/dist/services/audit-check-service.js.map +1 -0
  179. package/dist/services/audit-checks/dangling-relations-check.d.ts +7 -0
  180. package/dist/services/audit-checks/dangling-relations-check.d.ts.map +1 -0
  181. package/dist/services/audit-checks/dangling-relations-check.js +52 -0
  182. package/dist/services/audit-checks/dangling-relations-check.js.map +1 -0
  183. package/dist/services/audit-checks/duplicate-ids-check.d.ts +4 -0
  184. package/dist/services/audit-checks/duplicate-ids-check.d.ts.map +1 -0
  185. package/dist/services/audit-checks/duplicate-ids-check.js +49 -0
  186. package/dist/services/audit-checks/duplicate-ids-check.js.map +1 -0
  187. package/dist/services/audit-checks/fix-engine.d.ts +24 -0
  188. package/dist/services/audit-checks/fix-engine.d.ts.map +1 -0
  189. package/dist/services/audit-checks/fix-engine.js +114 -0
  190. package/dist/services/audit-checks/fix-engine.js.map +1 -0
  191. package/dist/services/audit-checks/fr-nfr-to-fs-nfs-check.d.ts +9 -0
  192. package/dist/services/audit-checks/fr-nfr-to-fs-nfs-check.d.ts.map +1 -0
  193. package/dist/services/audit-checks/fr-nfr-to-fs-nfs-check.js +56 -0
  194. package/dist/services/audit-checks/fr-nfr-to-fs-nfs-check.js.map +1 -0
  195. package/dist/services/audit-checks/fs-nfs-to-sad-ad-qa-check.d.ts +10 -0
  196. package/dist/services/audit-checks/fs-nfs-to-sad-ad-qa-check.d.ts.map +1 -0
  197. package/dist/services/audit-checks/fs-nfs-to-sad-ad-qa-check.js +57 -0
  198. package/dist/services/audit-checks/fs-nfs-to-sad-ad-qa-check.js.map +1 -0
  199. package/dist/services/audit-checks/fs-nfs-to-ts-check.d.ts +9 -0
  200. package/dist/services/audit-checks/fs-nfs-to-ts-check.d.ts.map +1 -0
  201. package/dist/services/audit-checks/fs-nfs-to-ts-check.js +56 -0
  202. package/dist/services/audit-checks/fs-nfs-to-ts-check.js.map +1 -0
  203. package/dist/services/audit-checks/inverse-consistency-check.d.ts +7 -0
  204. package/dist/services/audit-checks/inverse-consistency-check.d.ts.map +1 -0
  205. package/dist/services/audit-checks/inverse-consistency-check.js +54 -0
  206. package/dist/services/audit-checks/inverse-consistency-check.js.map +1 -0
  207. package/dist/services/audit-checks/mapping-check.d.ts +4 -0
  208. package/dist/services/audit-checks/mapping-check.d.ts.map +1 -0
  209. package/dist/services/audit-checks/mapping-check.js +74 -0
  210. package/dist/services/audit-checks/mapping-check.js.map +1 -0
  211. package/dist/services/audit-checks/orphan-documents-check.d.ts +9 -0
  212. package/dist/services/audit-checks/orphan-documents-check.d.ts.map +1 -0
  213. package/dist/services/audit-checks/orphan-documents-check.js +54 -0
  214. package/dist/services/audit-checks/orphan-documents-check.js.map +1 -0
  215. package/dist/services/audit-checks/orphan-entities-check.d.ts +4 -0
  216. package/dist/services/audit-checks/orphan-entities-check.d.ts.map +1 -0
  217. package/dist/services/audit-checks/orphan-entities-check.js +39 -0
  218. package/dist/services/audit-checks/orphan-entities-check.js.map +1 -0
  219. package/dist/services/audit-checks/sad-ad-qa-tc-to-src-check.d.ts +9 -0
  220. package/dist/services/audit-checks/sad-ad-qa-tc-to-src-check.d.ts.map +1 -0
  221. package/dist/services/audit-checks/sad-ad-qa-tc-to-src-check.js +56 -0
  222. package/dist/services/audit-checks/sad-ad-qa-tc-to-src-check.js.map +1 -0
  223. package/dist/services/audit-checks/sprint-consistency-check.d.ts +4 -0
  224. package/dist/services/audit-checks/sprint-consistency-check.d.ts.map +1 -0
  225. package/dist/services/audit-checks/sprint-consistency-check.js +80 -0
  226. package/dist/services/audit-checks/sprint-consistency-check.js.map +1 -0
  227. package/dist/services/audit-checks/src-filesystem-only-check.d.ts +10 -0
  228. package/dist/services/audit-checks/src-filesystem-only-check.d.ts.map +1 -0
  229. package/dist/services/audit-checks/src-filesystem-only-check.js +106 -0
  230. package/dist/services/audit-checks/src-filesystem-only-check.js.map +1 -0
  231. package/dist/services/audit-checks/ts-to-tc-check.d.ts +10 -0
  232. package/dist/services/audit-checks/ts-to-tc-check.d.ts.map +1 -0
  233. package/dist/services/audit-checks/ts-to-tc-check.js +58 -0
  234. package/dist/services/audit-checks/ts-to-tc-check.js.map +1 -0
  235. package/dist/services/audit-checks/type-mismatch-check.d.ts +4 -0
  236. package/dist/services/audit-checks/type-mismatch-check.d.ts.map +1 -0
  237. package/dist/services/audit-checks/type-mismatch-check.js +55 -0
  238. package/dist/services/audit-checks/type-mismatch-check.js.map +1 -0
  239. package/dist/services/audit-checks/types.d.ts +66 -0
  240. package/dist/services/audit-checks/types.d.ts.map +1 -0
  241. package/dist/services/audit-checks/types.js +30 -0
  242. package/dist/services/audit-checks/types.js.map +1 -0
  243. package/dist/services/audit-checks/us-to-fr-nfr-check.d.ts +9 -0
  244. package/dist/services/audit-checks/us-to-fr-nfr-check.d.ts.map +1 -0
  245. package/dist/services/audit-checks/us-to-fr-nfr-check.js +56 -0
  246. package/dist/services/audit-checks/us-to-fr-nfr-check.js.map +1 -0
  247. package/dist/services/doc-entity-mapping.d.ts +19 -0
  248. package/dist/services/doc-entity-mapping.d.ts.map +1 -0
  249. package/dist/services/doc-entity-mapping.js +35 -0
  250. package/dist/services/doc-entity-mapping.js.map +1 -0
  251. package/dist/services/document-service.d.ts +58 -0
  252. package/dist/services/document-service.d.ts.map +1 -0
  253. package/dist/services/document-service.js +409 -0
  254. package/dist/services/document-service.js.map +1 -0
  255. package/dist/services/graph-export-service.d.ts +12 -0
  256. package/dist/services/graph-export-service.d.ts.map +1 -0
  257. package/dist/services/graph-export-service.js +112 -0
  258. package/dist/services/graph-export-service.js.map +1 -0
  259. package/dist/services/graph-service.d.ts +21 -0
  260. package/dist/services/graph-service.d.ts.map +1 -0
  261. package/dist/services/graph-service.js +49 -0
  262. package/dist/services/graph-service.js.map +1 -0
  263. package/dist/services/graph-validation-service.d.ts +13 -0
  264. package/dist/services/graph-validation-service.d.ts.map +1 -0
  265. package/dist/services/graph-validation-service.js +171 -0
  266. package/dist/services/graph-validation-service.js.map +1 -0
  267. package/dist/services/project.d.ts +80 -0
  268. package/dist/services/project.d.ts.map +1 -0
  269. package/dist/services/project.js +256 -0
  270. package/dist/services/project.js.map +1 -0
  271. package/dist/services/review-service.d.ts +81 -0
  272. package/dist/services/review-service.d.ts.map +1 -0
  273. package/dist/services/review-service.js +242 -0
  274. package/dist/services/review-service.js.map +1 -0
  275. package/dist/services/schema-migration-service.d.ts +44 -0
  276. package/dist/services/schema-migration-service.d.ts.map +1 -0
  277. package/dist/services/schema-migration-service.js +894 -0
  278. package/dist/services/schema-migration-service.js.map +1 -0
  279. package/dist/services/sprint.d.ts +71 -0
  280. package/dist/services/sprint.d.ts.map +1 -0
  281. package/dist/services/sprint.js +238 -0
  282. package/dist/services/sprint.js.map +1 -0
  283. package/dist/services/stage-validator.d.ts +36 -0
  284. package/dist/services/stage-validator.d.ts.map +1 -0
  285. package/dist/services/stage-validator.js +78 -0
  286. package/dist/services/stage-validator.js.map +1 -0
  287. package/dist/services/task.d.ts +75 -0
  288. package/dist/services/task.d.ts.map +1 -0
  289. package/dist/services/task.js +487 -0
  290. package/dist/services/task.js.map +1 -0
  291. package/dist/services/validation.d.ts +24 -0
  292. package/dist/services/validation.d.ts.map +1 -0
  293. package/dist/services/validation.js +53 -0
  294. package/dist/services/validation.js.map +1 -0
  295. package/dist/state-machines/sprint-state.d.ts +25 -0
  296. package/dist/state-machines/sprint-state.d.ts.map +1 -0
  297. package/dist/state-machines/sprint-state.js +64 -0
  298. package/dist/state-machines/sprint-state.js.map +1 -0
  299. package/dist/state-machines/task-state.d.ts +31 -0
  300. package/dist/state-machines/task-state.d.ts.map +1 -0
  301. package/dist/state-machines/task-state.js +83 -0
  302. package/dist/state-machines/task-state.js.map +1 -0
  303. package/dist/utils/errors.d.ts +673 -0
  304. package/dist/utils/errors.d.ts.map +1 -0
  305. package/dist/utils/errors.js +1447 -0
  306. package/dist/utils/errors.js.map +1 -0
  307. package/dist/utils/format.d.ts +52 -0
  308. package/dist/utils/format.d.ts.map +1 -0
  309. package/dist/utils/format.js +65 -0
  310. package/dist/utils/format.js.map +1 -0
  311. package/dist/validators/board-integrity.d.ts +25 -0
  312. package/dist/validators/board-integrity.d.ts.map +1 -0
  313. package/dist/validators/board-integrity.js +102 -0
  314. package/dist/validators/board-integrity.js.map +1 -0
  315. package/dist/validators/board-shape.d.ts +13 -0
  316. package/dist/validators/board-shape.d.ts.map +1 -0
  317. package/dist/validators/board-shape.js +74 -0
  318. package/dist/validators/board-shape.js.map +1 -0
  319. package/dist/validators/owner-validator.d.ts +30 -0
  320. package/dist/validators/owner-validator.d.ts.map +1 -0
  321. package/dist/validators/owner-validator.js +70 -0
  322. package/dist/validators/owner-validator.js.map +1 -0
  323. package/dist/validators/spawn-legality.d.ts +19 -0
  324. package/dist/validators/spawn-legality.d.ts.map +1 -0
  325. package/dist/validators/spawn-legality.js +77 -0
  326. package/dist/validators/spawn-legality.js.map +1 -0
  327. package/dist/validators/state-field-checker.d.ts +8 -0
  328. package/dist/validators/state-field-checker.d.ts.map +1 -0
  329. package/dist/validators/state-field-checker.js +47 -0
  330. package/dist/validators/state-field-checker.js.map +1 -0
  331. package/dist/validators/state-field-recorder.d.ts +39 -0
  332. package/dist/validators/state-field-recorder.d.ts.map +1 -0
  333. package/dist/validators/state-field-recorder.js +62 -0
  334. package/dist/validators/state-field-recorder.js.map +1 -0
  335. package/package.json +53 -0
@@ -0,0 +1,1447 @@
1
+ "use strict";
2
+ // Typed error classes for cortex-cli
3
+ // Error code prefix convention per approved SS specifications:
4
+ // ERR-DB-* — Database layer errors (FS-SS-001-0001)
5
+ // ERR-CONN-* — Connection errors (FS-SS-001-0003)
6
+ // ERR-MIG-* — Database-level migration errors (FS-SS-001-0002)
7
+ // ERR-SCHEMA-* — Schema validation errors (SAD-0012)
8
+ // ERR-MIGRATION-* — Schema migration orchestration errors (SAD-0012, MOD-022/022a-d)
9
+ // ERR-LOCK-* — Lock/concurrency errors (FS-SS-003-0007)
10
+ // ERR-PROJ-* — Project management errors (FS-SS-002-0001..0008)
11
+ // ERR-SPRINT-* — Sprint lifecycle errors (MOD-004)
12
+ // ERR-TASK-* — Task/kanban lifecycle errors (MOD-005)
13
+ // ERR-SPAWN-* — Spawn validation errors (MOD-006)
14
+ // ERR-CLI-* — CLI routing/format errors (MOD-007)
15
+ // ERR-REG-* — Registry errors (FS-SS-002-0010)
16
+ // ERR-AUDIT-* — Audit command errors (MOD-023)
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.StageLockedError = exports.StageInvalidError = exports.StageBackwardError = exports.StageNoProgressError = exports.TaskBadStatusError = exports.TaskTransitionError = exports.TaskParentError = exports.TaskInvalidPriorityError = exports.TaskInvalidTypeError = exports.TaskInvalidOwnerError = exports.TaskOwnerRequiredError = exports.TaskBadSprintError = exports.TaskNotFoundError = exports.SprintNoneError = exports.SprintBadStatusError = exports.SprintTransitionError = exports.SprintInvalidError = exports.SprintNotFoundError = exports.SprintDuplicateError = exports.ProjectPathNotDirectoryError = exports.ProjectDbInaccessibleError = exports.ProjectResolutionError = exports.ProjectEnvNotFoundError = exports.ProjectFlagNotFoundError = exports.ProjectInvalidNameError = exports.ProjectNotFoundError = exports.ProjectCorruptDbError = exports.ProjectFolderNotFoundError = exports.ProjectFolderCreateError = exports.ProjectEmptyNameError = exports.ProjectPathExistsError = exports.DuplicateProjectError = exports.LockOrderingError = exports.LockRetryExhaustedError = exports.LockTimeoutError = exports.DatabaseBusyError = exports.MigrationValidationError = exports.MigrationScriptError = exports.MigrationYamlWriteError = exports.SchemaRelationArrayEmptyError = exports.MigrationChecksumMismatchError = exports.MigrationIntegrityError = exports.MigrationError = exports.ConnectionBusyError = exports.ConnectionError = exports.DatabaseCorruptError = exports.DatabaseDiskFullError = exports.DatabasePermissionDeniedError = exports.DatabaseParentDirMissingError = exports.CortexError = void 0;
19
+ exports.DocSrcStorageError = exports.DocumentTypeUnknownError = exports.DocumentScanError = exports.DocumentNotFoundError = exports.DocumentMissingFieldError = exports.DocumentInvalidJsonError = exports.DocumentFileError = exports.DocumentDuplicateError = exports.GraphExportFormatError = exports.GraphDocTypeMappingNotFoundError = exports.GraphRelationNotFoundError = exports.GraphDuplicateRelationError = exports.GraphCardinalityError = exports.GraphTypeConstraintError = exports.GraphSelfRelationError = exports.GraphRelationTypeNotFoundError = exports.GraphEntityDuplicateError = exports.GraphEntityNotFoundError = exports.ConfigError = exports.RegistryReadError = exports.RegistryInvalidJsonError = exports.RegistryWriteError = exports.RegistryInvalidStructureError = exports.RegistryDirCreateError = exports.RegistryError = exports.CliShowFormatError = exports.CliFormatError = exports.CliActionError = exports.CliCmdError = exports.SpawnRoleError = exports.SpawnStateError = exports.SpawnSprintError = exports.TaskNotInActiveSprintError = exports.TaskNoActiveSprintError = exports.TaskInvalidFieldError = exports.TaskDbWriteFilePreservedError = exports.TestReportNotInSprintError = exports.TestReportBadSprintError = exports.TestReportNoSprintError = exports.TaskMissingIdError = exports.TaskDuplicateIdError = exports.TaskBadIdError = exports.TaskBadSprintRequiredError = exports.TaskNoSprintError = exports.TaskContentFileError = exports.TaskInlineFieldsRemovedError = exports.TaskOwnerReleaseError = exports.TaskOwnerPlanningError = exports.TaskNoopError = exports.StageOwnerError = void 0;
20
+ exports.AuditFixError = exports.AuditReportFileError = exports.AuditSprintNotFoundError = exports.AuditCheckFailedError = exports.AuditUnknownCheckError = exports.InvalidProjectFolderError = exports.LockConflictError = exports.MigrationVersionError = exports.TaskOwnerReviewError = exports.TaskOwnerBacklogError = exports.LessonFileError = exports.LessonInvalidSeverityError = exports.LessonInvalidCategoryError = exports.LessonNoUpdateFieldsError = exports.LessonNotFoundError = exports.TestReportDuplicateIdError = exports.TestReportMissingIdError = exports.TestReportBadIdError = exports.TestReportContentFileError = exports.ReportNotFoundError = exports.ReportModuleNotFoundError = exports.TestReportReportPathRejectedError = exports.ReviewContentFileError = exports.ReviewContentRemovedError = exports.ReviewSprintRequiredError = exports.ReviewNotInSprintError = exports.ReviewDuplicateIdError = exports.ReviewMissingIdError = exports.ReviewBadIdError = exports.ReviewContentFileNotFoundError = exports.ReviewNotFoundError = exports.ReviewSprintNotFoundError = exports.DocumentInvalidSearchQueryError = exports.DocumentUnknownOptionError = exports.DocumentInvalidOrderByError = exports.DocSprintRequiredError = void 0;
21
+ /** Base error class for all cortex-cli errors */
22
+ class CortexError extends Error {
23
+ code;
24
+ details;
25
+ constructor(code, message, details) {
26
+ super(message);
27
+ this.name = 'CortexError';
28
+ this.code = code;
29
+ this.details = details;
30
+ }
31
+ }
32
+ exports.CortexError = CortexError;
33
+ // ─── Database Layer Errors (FS-SS-001-0001) ───
34
+ /** ERR-DB-001: Parent directory does not exist */
35
+ class DatabaseParentDirMissingError extends CortexError {
36
+ constructor(path) {
37
+ super('ERR-DB-001', `Parent directory does not exist: ${path}`, { path });
38
+ this.name = 'DatabaseParentDirMissingError';
39
+ }
40
+ }
41
+ exports.DatabaseParentDirMissingError = DatabaseParentDirMissingError;
42
+ /** ERR-DB-002: Permission denied */
43
+ class DatabasePermissionDeniedError extends CortexError {
44
+ constructor(path, reason) {
45
+ super('ERR-DB-002', `Permission denied: cannot create ${path}${reason ? `: ${reason}` : ''}`, { path, reason });
46
+ this.name = 'DatabasePermissionDeniedError';
47
+ }
48
+ }
49
+ exports.DatabasePermissionDeniedError = DatabasePermissionDeniedError;
50
+ /** ERR-DB-003: Disk full */
51
+ class DatabaseDiskFullError extends CortexError {
52
+ constructor(path) {
53
+ super('ERR-DB-003', `Cannot create database: disk full`, { path });
54
+ this.name = 'DatabaseDiskFullError';
55
+ }
56
+ }
57
+ exports.DatabaseDiskFullError = DatabaseDiskFullError;
58
+ /** ERR-DB-004: Database file exists but is not valid */
59
+ class DatabaseCorruptError extends CortexError {
60
+ constructor(path) {
61
+ super('ERR-DB-004', `Database file exists but is not valid: ${path}`, { path });
62
+ this.name = 'DatabaseCorruptError';
63
+ }
64
+ }
65
+ exports.DatabaseCorruptError = DatabaseCorruptError;
66
+ // ─── Connection Errors (FS-SS-001-0003) ───
67
+ /** ERR-CONN-001: Cannot enable WAL mode */
68
+ class ConnectionError extends CortexError {
69
+ constructor(message, details) {
70
+ super('ERR-CONN-001', message, details);
71
+ this.name = 'ConnectionError';
72
+ }
73
+ }
74
+ exports.ConnectionError = ConnectionError;
75
+ /** ERR-CONN-002: Database busy at open time */
76
+ class ConnectionBusyError extends CortexError {
77
+ constructor(dbPath) {
78
+ super('ERR-CONN-002', `Database busy at open: ${dbPath}`, { dbPath });
79
+ this.name = 'ConnectionBusyError';
80
+ }
81
+ }
82
+ exports.ConnectionBusyError = ConnectionBusyError;
83
+ // ─── Migration Errors (FS-SS-001-0002) ───
84
+ /** ERR-MIG-001: Migration SQL fails */
85
+ class MigrationError extends CortexError {
86
+ constructor(message, details) {
87
+ super('ERR-MIG-001', message, details);
88
+ this.name = 'MigrationError';
89
+ }
90
+ }
91
+ exports.MigrationError = MigrationError;
92
+ /** ERR-MIG-002: Schema integrity check failed after migration */
93
+ class MigrationIntegrityError extends CortexError {
94
+ version;
95
+ missing;
96
+ constructor(versionOrMessage, missing) {
97
+ let message;
98
+ let details;
99
+ if (typeof versionOrMessage === 'string') {
100
+ // Legacy call: new MigrationIntegrityError('message')
101
+ message = versionOrMessage;
102
+ details = {};
103
+ }
104
+ else {
105
+ // Spec call: new MigrationIntegrityError(version, missing)
106
+ message = `Schema integrity check failed after migration v${versionOrMessage}: missing ${missing?.join(', ') ?? 'unknown'}`;
107
+ details = { version: versionOrMessage, missing };
108
+ }
109
+ super('ERR-MIG-002', message, details);
110
+ this.name = 'MigrationIntegrityError';
111
+ if (typeof versionOrMessage === 'number') {
112
+ this.version = versionOrMessage;
113
+ this.missing = missing;
114
+ }
115
+ }
116
+ }
117
+ exports.MigrationIntegrityError = MigrationIntegrityError;
118
+ /** ERR-MIG-003: Checksum mismatch — blocked state */
119
+ class MigrationChecksumMismatchError extends CortexError {
120
+ constructor(version, expected, actual) {
121
+ super('ERR-MIG-003', `Migration v${version} checksum mismatch: expected ${expected}, got ${actual}. Database is in a blocked state — no further operations are allowed. Restore from backup or re-initialize the project.`, { version, expected, actual });
122
+ this.name = 'MigrationChecksumMismatchError';
123
+ }
124
+ }
125
+ exports.MigrationChecksumMismatchError = MigrationChecksumMismatchError;
126
+ // ─── Schema Validation Errors (SAD-0012) ───
127
+ /** ERR-SCHEMA-006: Relation type would have empty from_types or to_types after array update */
128
+ class SchemaRelationArrayEmptyError extends CortexError {
129
+ relationTypeName;
130
+ constructor(relationTypeName) {
131
+ super('ERR-SCHEMA-006', `Relation type "${relationTypeName}" would have empty from_types or to_types after update`, { relationTypeName });
132
+ this.name = 'SchemaRelationArrayEmptyError';
133
+ this.relationTypeName = relationTypeName;
134
+ }
135
+ }
136
+ exports.SchemaRelationArrayEmptyError = SchemaRelationArrayEmptyError;
137
+ // ─── Schema Migration Orchestration Errors (SAD-0012, MOD-022/022a-d) ───
138
+ /** ERR-MIGRATION-010: Cannot write YAML file during schema migration */
139
+ class MigrationYamlWriteError extends CortexError {
140
+ filePath;
141
+ constructor(filePath, reason) {
142
+ super('ERR-MIGRATION-010', `Cannot write ${filePath}: ${reason}`, { filePath, reason });
143
+ this.name = 'MigrationYamlWriteError';
144
+ this.filePath = filePath;
145
+ }
146
+ }
147
+ exports.MigrationYamlWriteError = MigrationYamlWriteError;
148
+ /** ERR-MIGRATION-011: Script execution failed during migration */
149
+ class MigrationScriptError extends CortexError {
150
+ scriptPath;
151
+ constructor(scriptPath, reason) {
152
+ super('ERR-MIGRATION-011', `Migration script failed: ${scriptPath}: ${reason}`, { scriptPath, reason });
153
+ this.name = 'MigrationScriptError';
154
+ this.scriptPath = scriptPath;
155
+ }
156
+ }
157
+ exports.MigrationScriptError = MigrationScriptError;
158
+ /** ERR-MIGRATION-012: Post-migration validation failed */
159
+ class MigrationValidationError extends CortexError {
160
+ constructor(message) {
161
+ super('ERR-MIGRATION-012', message, {});
162
+ this.name = 'MigrationValidationError';
163
+ }
164
+ }
165
+ exports.MigrationValidationError = MigrationValidationError;
166
+ // ─── Lock/Concurrency Errors (FS-SS-003-0007) ───
167
+ /** ERR-LOCK-001: SQLite busy-level contention (DB-level write contention) */
168
+ class DatabaseBusyError extends CortexError {
169
+ constructor(message, details) {
170
+ super('ERR-LOCK-001', message, details);
171
+ this.name = 'DatabaseBusyError';
172
+ }
173
+ }
174
+ exports.DatabaseBusyError = DatabaseBusyError;
175
+ /** ERR-LOCK-002: Advisory lock timeout (held by another owner) */
176
+ class LockTimeoutError extends CortexError {
177
+ lockName;
178
+ owner;
179
+ totalWaitMs;
180
+ constructor(lockName, owner, totalWaitMs) {
181
+ super('ERR-LOCK-002', `Lock timeout on "${lockName}": held by ${owner}`, { lockName, owner, totalWaitMs });
182
+ this.name = 'LockTimeoutError';
183
+ this.lockName = lockName;
184
+ this.owner = owner;
185
+ this.totalWaitMs = totalWaitMs;
186
+ }
187
+ }
188
+ exports.LockTimeoutError = LockTimeoutError;
189
+ /** ERR-LOCK-003: Retry exhaustion */
190
+ class LockRetryExhaustedError extends CortexError {
191
+ lockName;
192
+ owner;
193
+ retries;
194
+ totalWaitMs;
195
+ constructor(lockName, owner, retries, totalWaitMs) {
196
+ const message = `Failed to acquire "${lockName}" after ${retries} retries over ${totalWaitMs}ms (held by ${owner})`;
197
+ super('ERR-LOCK-003', message, { lockName, owner, retries, totalWaitMs });
198
+ this.name = 'LockRetryExhaustedError';
199
+ this.lockName = lockName;
200
+ this.owner = owner;
201
+ this.retries = retries;
202
+ this.totalWaitMs = totalWaitMs;
203
+ }
204
+ }
205
+ exports.LockRetryExhaustedError = LockRetryExhaustedError;
206
+ /** ERR-LOCK-004: Lock ordering violation */
207
+ class LockOrderingError extends CortexError {
208
+ lockName;
209
+ earlierName;
210
+ constructor(lockName, earlierName) {
211
+ super('ERR-LOCK-004', `Lock ordering violation: "${lockName}" must be acquired before "${earlierName}" per alphabetical ordering rule`, { lockName, earlierName });
212
+ this.name = 'LockOrderingError';
213
+ this.lockName = lockName;
214
+ this.earlierName = earlierName;
215
+ }
216
+ }
217
+ exports.LockOrderingError = LockOrderingError;
218
+ // ─── Project Management Errors (FS-SS-002-0001..0008) ───
219
+ /** ERR-PROJ-001: Duplicate project name in registry */
220
+ class DuplicateProjectError extends CortexError {
221
+ projectName;
222
+ constructor(projectName) {
223
+ super('ERR-PROJ-001', `Project "${projectName}" already exists in the registry`, { projectName });
224
+ this.name = 'DuplicateProjectError';
225
+ this.projectName = projectName;
226
+ }
227
+ }
228
+ exports.DuplicateProjectError = DuplicateProjectError;
229
+ /** ERR-PROJ-002: Path already exists (directory) */
230
+ class ProjectPathExistsError extends CortexError {
231
+ path;
232
+ constructor(path) {
233
+ super('ERR-PROJ-002', `Path already exists: ${path}. Use 'register' for existing directories.`, { path });
234
+ this.name = 'ProjectPathExistsError';
235
+ this.path = path;
236
+ }
237
+ }
238
+ exports.ProjectPathExistsError = ProjectPathExistsError;
239
+ /** ERR-PROJ-003: Empty or whitespace-only project name */
240
+ class ProjectEmptyNameError extends CortexError {
241
+ constructor() {
242
+ super('ERR-PROJ-003', 'Project name cannot be empty');
243
+ this.name = 'ProjectEmptyNameError';
244
+ }
245
+ }
246
+ exports.ProjectEmptyNameError = ProjectEmptyNameError;
247
+ /** ERR-PROJ-004: Cannot create folder */
248
+ class ProjectFolderCreateError extends CortexError {
249
+ folder;
250
+ constructor(folder, reason) {
251
+ super('ERR-PROJ-004', `Cannot create folder: ${folder}${reason ? `: ${reason}` : ''}`, { folder, reason });
252
+ this.name = 'ProjectFolderCreateError';
253
+ this.folder = folder;
254
+ }
255
+ }
256
+ exports.ProjectFolderCreateError = ProjectFolderCreateError;
257
+ /** ERR-PROJ-005: Folder does not exist */
258
+ class ProjectFolderNotFoundError extends CortexError {
259
+ path;
260
+ constructor(path) {
261
+ super('ERR-PROJ-005', `Folder does not exist: ${path}`, { path });
262
+ this.name = 'ProjectFolderNotFoundError';
263
+ this.path = path;
264
+ }
265
+ }
266
+ exports.ProjectFolderNotFoundError = ProjectFolderNotFoundError;
267
+ /** ERR-PROJ-006: Existing database is corrupt */
268
+ class ProjectCorruptDbError extends CortexError {
269
+ path;
270
+ constructor(path) {
271
+ super('ERR-PROJ-006', `Existing database at ${path} is not valid`, { path });
272
+ this.name = 'ProjectCorruptDbError';
273
+ this.path = path;
274
+ }
275
+ }
276
+ exports.ProjectCorruptDbError = ProjectCorruptDbError;
277
+ /** ERR-PROJ-007: Project not found in registry */
278
+ class ProjectNotFoundError extends CortexError {
279
+ projectName;
280
+ constructor(projectName) {
281
+ super('ERR-PROJ-007', `Project "${projectName}" not found in registry`, { projectName });
282
+ this.name = 'ProjectNotFoundError';
283
+ this.projectName = projectName;
284
+ }
285
+ }
286
+ exports.ProjectNotFoundError = ProjectNotFoundError;
287
+ /** ERR-PROJ-008: Invalid project name format */
288
+ class ProjectInvalidNameError extends CortexError {
289
+ projectName;
290
+ constructor(projectName) {
291
+ super('ERR-PROJ-008', `Invalid project name "${projectName}": must be lowercase alphanumeric and hyphens, start with a letter, end with a letter or digit, no consecutive hyphens, 1–64 characters`, { projectName });
292
+ this.name = 'ProjectInvalidNameError';
293
+ this.projectName = projectName;
294
+ }
295
+ }
296
+ exports.ProjectInvalidNameError = ProjectInvalidNameError;
297
+ /** ERR-PROJ-009: --project name not found in registry */
298
+ class ProjectFlagNotFoundError extends ProjectNotFoundError {
299
+ constructor(projectName) {
300
+ // ProjectNotFoundError uses ERR-PROJ-007; we override in body
301
+ super(projectName);
302
+ this.code = 'ERR-PROJ-009';
303
+ this.message = `Project "${projectName}" specified via --project not found in registry`;
304
+ this.name = 'ProjectFlagNotFoundError';
305
+ }
306
+ }
307
+ exports.ProjectFlagNotFoundError = ProjectFlagNotFoundError;
308
+ /** ERR-PROJ-010: Env var value not found in registry */
309
+ class ProjectEnvNotFoundError extends ProjectNotFoundError {
310
+ constructor(projectName) {
311
+ super(projectName);
312
+ this.code = 'ERR-PROJ-010';
313
+ this.message = `Project "${projectName}" from CORTEX_CLI_PROJECT not found in registry`;
314
+ this.name = 'ProjectEnvNotFoundError';
315
+ }
316
+ }
317
+ exports.ProjectEnvNotFoundError = ProjectEnvNotFoundError;
318
+ /** ERR-PROJ-011: No project could be resolved */
319
+ class ProjectResolutionError extends CortexError {
320
+ attemptedMethods;
321
+ constructor(attemptedMethodsOrMessage) {
322
+ let message;
323
+ let methods;
324
+ if (typeof attemptedMethodsOrMessage === 'string') {
325
+ // Legacy call: new ProjectResolutionError('message')
326
+ message = attemptedMethodsOrMessage;
327
+ methods = [];
328
+ }
329
+ else {
330
+ // Spec call: new ProjectResolutionError(attemptedMethods)
331
+ methods = attemptedMethodsOrMessage;
332
+ const methodsList = methods.length > 0
333
+ ? ` Checked: ${methods.join('; ')}.`
334
+ : '';
335
+ message = `No project could be resolved.${methodsList} Use --project <name>, set CORTEX_CLI_PROJECT, configure a default with 'cortex-cli project default <name>', or run from a registered project directory.`;
336
+ }
337
+ super('ERR-PROJ-011', message, { attemptedMethods: methods });
338
+ this.name = 'ProjectResolutionError';
339
+ this.attemptedMethods = methods;
340
+ }
341
+ }
342
+ exports.ProjectResolutionError = ProjectResolutionError;
343
+ /** ERR-PROJ-012: Database inaccessible for project */
344
+ class ProjectDbInaccessibleError extends CortexError {
345
+ path;
346
+ constructor(path, reason) {
347
+ super('ERR-PROJ-012', `Project database is not accessible: ${path}${reason ? `: ${reason}` : ''}`, { path, reason });
348
+ this.name = 'ProjectDbInaccessibleError';
349
+ this.path = path;
350
+ }
351
+ }
352
+ exports.ProjectDbInaccessibleError = ProjectDbInaccessibleError;
353
+ /** ERR-PROJ-013: Path exists but is not a directory (file or symlink) */
354
+ class ProjectPathNotDirectoryError extends CortexError {
355
+ path;
356
+ constructor(path) {
357
+ super('ERR-PROJ-013', `Path exists but is not a directory: ${path}`, { path });
358
+ this.name = 'ProjectPathNotDirectoryError';
359
+ this.path = path;
360
+ }
361
+ }
362
+ exports.ProjectPathNotDirectoryError = ProjectPathNotDirectoryError;
363
+ // ─── Sprint Lifecycle Errors (MOD-004) ───
364
+ /** ERR-SPRINT-001: Duplicate sprint ID - sprint already exists */
365
+ class SprintDuplicateError extends CortexError {
366
+ sprintId;
367
+ constructor(sprintId) {
368
+ super('ERR-SPRINT-001', `Sprint "${sprintId}" already exists`, { sprintId });
369
+ this.name = 'SprintDuplicateError';
370
+ this.sprintId = sprintId;
371
+ }
372
+ }
373
+ exports.SprintDuplicateError = SprintDuplicateError;
374
+ /** ERR-SPRINT-002: Sprint not found */
375
+ class SprintNotFoundError extends CortexError {
376
+ sprintId;
377
+ constructor(sprintId) {
378
+ super('ERR-SPRINT-002', `Sprint "${sprintId}" not found`, { sprintId });
379
+ this.name = 'SprintNotFoundError';
380
+ this.sprintId = sprintId;
381
+ }
382
+ }
383
+ exports.SprintNotFoundError = SprintNotFoundError;
384
+ /** ERR-SPRINT-003: Sprint parameter is invalid (e.g. empty ID) */
385
+ class SprintInvalidError extends CortexError {
386
+ constructor(reason) {
387
+ super('ERR-SPRINT-003', `Invalid sprint parameter: ${reason}`, { reason });
388
+ this.name = 'SprintInvalidError';
389
+ }
390
+ }
391
+ exports.SprintInvalidError = SprintInvalidError;
392
+ /** ERR-SPRINT-004: Invalid sprint status transition */
393
+ class SprintTransitionError extends CortexError {
394
+ currentStatus;
395
+ targetStatus;
396
+ allowedTransitions;
397
+ constructor(currentStatus, targetStatus, allowedTransitions) {
398
+ const allowed = allowedTransitions.join(', ');
399
+ super('ERR-SPRINT-004', `Invalid sprint transition: cannot move from "${currentStatus}" to "${targetStatus}". Allowed: ${allowed}`, { currentStatus, targetStatus, allowedTransitions });
400
+ this.name = 'SprintTransitionError';
401
+ this.currentStatus = currentStatus;
402
+ this.targetStatus = targetStatus;
403
+ this.allowedTransitions = allowedTransitions;
404
+ }
405
+ }
406
+ exports.SprintTransitionError = SprintTransitionError;
407
+ /** ERR-SPRINT-005: Target sprint status is not a valid sprint status value */
408
+ class SprintBadStatusError extends CortexError {
409
+ targetStatus;
410
+ constructor(targetStatus) {
411
+ super('ERR-SPRINT-005', `Invalid sprint status value: "${targetStatus}". Valid: PLANNING, IN EXECUTION, CLOSING, CLOSED`, { targetStatus });
412
+ this.name = 'SprintBadStatusError';
413
+ this.targetStatus = targetStatus;
414
+ }
415
+ }
416
+ exports.SprintBadStatusError = SprintBadStatusError;
417
+ /** ERR-SPRINT-006: No sprint could be resolved (no sprints exist in the project) */
418
+ class SprintNoneError extends CortexError {
419
+ constructor() {
420
+ super('ERR-SPRINT-006', 'No sprints found in this project. Use `cortex-cli sprint init <id>` to create one.', {});
421
+ this.name = 'SprintNoneError';
422
+ }
423
+ }
424
+ exports.SprintNoneError = SprintNoneError;
425
+ // ─── Task/Kanban Lifecycle Errors (MOD-005) ───
426
+ /** ERR-TASK-001: Task not found */
427
+ class TaskNotFoundError extends CortexError {
428
+ taskId;
429
+ constructor(taskId, sprintId) {
430
+ const msg = sprintId
431
+ ? `Task "${taskId}" not found in sprint "${sprintId}"`
432
+ : `Task "${taskId}" not found`;
433
+ super('ERR-TASK-001', msg, { taskId, sprintId });
434
+ this.name = 'TaskNotFoundError';
435
+ this.taskId = taskId;
436
+ }
437
+ }
438
+ exports.TaskNotFoundError = TaskNotFoundError;
439
+ /** ERR-TASK-002: Sprint does not exist or is closed when adding a task */
440
+ class TaskBadSprintError extends CortexError {
441
+ sprintId;
442
+ reason;
443
+ constructor(sprintId, reason) {
444
+ const msg = reason
445
+ ? `Cannot add task to sprint "${sprintId}": ${reason}`
446
+ : `Cannot add task to sprint "${sprintId}": sprint not found or closed`;
447
+ super('ERR-TASK-002', msg, { sprintId, reason });
448
+ this.name = 'TaskBadSprintError';
449
+ this.sprintId = sprintId;
450
+ this.reason = reason;
451
+ }
452
+ }
453
+ exports.TaskBadSprintError = TaskBadSprintError;
454
+ /** ERR-TASK-003: Owner role is required (empty/null) */
455
+ class TaskOwnerRequiredError extends CortexError {
456
+ constructor() {
457
+ super('ERR-TASK-003', 'Task owner role is required', {});
458
+ this.name = 'TaskOwnerRequiredError';
459
+ }
460
+ }
461
+ exports.TaskOwnerRequiredError = TaskOwnerRequiredError;
462
+ /** ERR-TASK-004: Owner role is not a valid role name */
463
+ class TaskInvalidOwnerError extends CortexError {
464
+ owner;
465
+ validRoles;
466
+ constructor(owner, validRoles) {
467
+ const valid = validRoles.join(', ');
468
+ super('ERR-TASK-004', `Invalid owner role "${owner}". Valid roles: ${valid}`, { owner, validRoles });
469
+ this.name = 'TaskInvalidOwnerError';
470
+ this.owner = owner;
471
+ this.validRoles = validRoles;
472
+ }
473
+ }
474
+ exports.TaskInvalidOwnerError = TaskInvalidOwnerError;
475
+ /** ERR-TASK-005: Task type is not a valid enum value */
476
+ class TaskInvalidTypeError extends CortexError {
477
+ typeValue;
478
+ constructor(typeValue) {
479
+ super('ERR-TASK-005', `Invalid task type "${typeValue}". Valid: Feature, Bug, Chore`, { typeValue });
480
+ this.name = 'TaskInvalidTypeError';
481
+ this.typeValue = typeValue;
482
+ }
483
+ }
484
+ exports.TaskInvalidTypeError = TaskInvalidTypeError;
485
+ /** ERR-TASK-006: Task priority is not a valid enum value */
486
+ class TaskInvalidPriorityError extends CortexError {
487
+ priorityValue;
488
+ constructor(priorityValue) {
489
+ super('ERR-TASK-006', `Invalid priority "${priorityValue}". Valid: P0, P1, P2`, { priorityValue });
490
+ this.name = 'TaskInvalidPriorityError';
491
+ this.priorityValue = priorityValue;
492
+ }
493
+ }
494
+ exports.TaskInvalidPriorityError = TaskInvalidPriorityError;
495
+ /** ERR-TASK-007: Parent task not found or invalid */
496
+ class TaskParentError extends CortexError {
497
+ parentId;
498
+ reason;
499
+ constructor(parentId, reason) {
500
+ const msg = reason
501
+ ? `Invalid parent task "${parentId}": ${reason}`
502
+ : `Parent task "${parentId}" not found`;
503
+ super('ERR-TASK-007', msg, { parentId, reason });
504
+ this.name = 'TaskParentError';
505
+ this.parentId = parentId;
506
+ this.reason = reason;
507
+ }
508
+ }
509
+ exports.TaskParentError = TaskParentError;
510
+ /** ERR-TASK-008: Invalid task state transition */
511
+ class TaskTransitionError extends CortexError {
512
+ taskId;
513
+ currentState;
514
+ targetState;
515
+ allowedTransitions;
516
+ constructor(taskId, currentState, targetState, allowedTransitions) {
517
+ const allowed = allowedTransitions.join(', ');
518
+ super('ERR-TASK-008', `Invalid task transition for "${taskId}": cannot move from "${currentState}" to "${targetState}". Allowed: ${allowed}`, { taskId, currentState, targetState, allowedTransitions });
519
+ this.name = 'TaskTransitionError';
520
+ this.taskId = taskId;
521
+ this.currentState = currentState;
522
+ this.targetState = targetState;
523
+ this.allowedTransitions = allowedTransitions;
524
+ }
525
+ }
526
+ exports.TaskTransitionError = TaskTransitionError;
527
+ /** ERR-TASK-009: Target status is not a valid task status value */
528
+ class TaskBadStatusError extends CortexError {
529
+ targetStatus;
530
+ constructor(targetStatus) {
531
+ super('ERR-TASK-009', `Invalid task status "${targetStatus}". Valid: Backlog, To Do, In Progress, In Review, Done, Dropped`, { targetStatus });
532
+ this.name = 'TaskBadStatusError';
533
+ this.targetStatus = targetStatus;
534
+ }
535
+ }
536
+ exports.TaskBadStatusError = TaskBadStatusError;
537
+ // ─── Stage Progression Errors (MOD-005, FS-SS-030-0001) ───
538
+ /** ERR-STAGE-NOPROGRESS: Target stage is same as current */
539
+ class StageNoProgressError extends CortexError {
540
+ taskId;
541
+ stage;
542
+ constructor(taskId, stage) {
543
+ super('ERR-STAGE-NOPROGRESS', `Task "${taskId}" is already in ${stage} stage`, { taskId, stage });
544
+ this.name = 'StageNoProgressError';
545
+ this.taskId = taskId;
546
+ this.stage = stage;
547
+ }
548
+ }
549
+ exports.StageNoProgressError = StageNoProgressError;
550
+ /** ERR-STAGE-BACKWARD: Target stage is backward of current */
551
+ class StageBackwardError extends CortexError {
552
+ currentStage;
553
+ targetStage;
554
+ constructor(currentStage, targetStage) {
555
+ super('ERR-STAGE-BACKWARD', `Cannot regress stage from ${currentStage} to ${targetStage}. Stage is forward-only.`, { currentStage, targetStage });
556
+ this.name = 'StageBackwardError';
557
+ this.currentStage = currentStage;
558
+ this.targetStage = targetStage;
559
+ }
560
+ }
561
+ exports.StageBackwardError = StageBackwardError;
562
+ /** ERR-STAGE-INVALID: Target stage is not a valid stage value */
563
+ class StageInvalidError extends CortexError {
564
+ stage;
565
+ constructor(stage) {
566
+ const valid = 'Planning, Requirement, Specification, Design, Test Plan, Implementation, Testing, Release';
567
+ super('ERR-STAGE-INVALID', `Invalid stage value "${stage}". Valid: ${valid}`, { stage });
568
+ this.name = 'StageInvalidError';
569
+ this.stage = stage;
570
+ }
571
+ }
572
+ exports.StageInvalidError = StageInvalidError;
573
+ /** ERR-STAGE-LOCKED: Task is in Dropped status and cannot change stage */
574
+ class StageLockedError extends CortexError {
575
+ taskId;
576
+ constructor(taskId) {
577
+ super('ERR-STAGE-LOCKED', `Task "${taskId}" is Dropped. Stage changes are not permitted.`, { taskId });
578
+ this.name = 'StageLockedError';
579
+ this.taskId = taskId;
580
+ }
581
+ }
582
+ exports.StageLockedError = StageLockedError;
583
+ /** ERR-STAGE-OWNER: Owner validation failed for destination stage */
584
+ class StageOwnerError extends CortexError {
585
+ stage;
586
+ owner;
587
+ constructor(stage, owner) {
588
+ super('ERR-STAGE-OWNER', `Owner must be captain for ${stage} stage. Update owner to captain first.`, { stage, owner });
589
+ this.name = 'StageOwnerError';
590
+ this.stage = stage;
591
+ this.owner = owner;
592
+ }
593
+ }
594
+ exports.StageOwnerError = StageOwnerError;
595
+ /** ERR-TASK-010: No-op move (task is already in the target state) */
596
+ class TaskNoopError extends CortexError {
597
+ taskId;
598
+ status;
599
+ constructor(taskId, status) {
600
+ super('ERR-TASK-010', `Task "${taskId}" is already in state "${status}"`, { taskId, status });
601
+ this.name = 'TaskNoopError';
602
+ this.taskId = taskId;
603
+ this.status = status;
604
+ }
605
+ }
606
+ exports.TaskNoopError = TaskNoopError;
607
+ /** ERR-TASK-011: Captain-only restriction — only captain can own tasks in Planning stage */
608
+ class TaskOwnerPlanningError extends CortexError {
609
+ owner;
610
+ constructor(owner) {
611
+ super('ERR-TASK-011', `Only "captain" can own tasks in Planning stage. Current owner: "${owner}"`, { owner });
612
+ this.name = 'TaskOwnerPlanningError';
613
+ this.owner = owner;
614
+ }
615
+ }
616
+ exports.TaskOwnerPlanningError = TaskOwnerPlanningError;
617
+ /** ERR-TASK-012: Captain-only restriction — only captain can own tasks in Release stage */
618
+ class TaskOwnerReleaseError extends CortexError {
619
+ owner;
620
+ constructor(owner) {
621
+ super('ERR-TASK-012', `Only "captain" can own tasks in Release stage. Current owner: "${owner}"`, { owner });
622
+ this.name = 'TaskOwnerReleaseError';
623
+ this.owner = owner;
624
+ }
625
+ }
626
+ exports.TaskOwnerReleaseError = TaskOwnerReleaseError;
627
+ /** ERR-TASK-013: Inline content fields removed; use --content-file */
628
+ class TaskInlineFieldsRemovedError extends CortexError {
629
+ constructor() {
630
+ super('ERR-TASK-013', '--description/--scope-in/--scope-out/--acceptance/--decisions/--dependencies are no longer supported; use --content-file');
631
+ this.name = 'TaskInlineFieldsRemovedError';
632
+ }
633
+ }
634
+ exports.TaskInlineFieldsRemovedError = TaskInlineFieldsRemovedError;
635
+ /** ERR-TASK-014: Content file not found for task */
636
+ class TaskContentFileError extends CortexError {
637
+ path;
638
+ constructor(path) {
639
+ super('ERR-TASK-014', `Content file not found: ${path}`, { path });
640
+ this.name = 'TaskContentFileError';
641
+ this.path = path;
642
+ }
643
+ }
644
+ exports.TaskContentFileError = TaskContentFileError;
645
+ /** ERR-TASK-NOSPRINT: --sprint required for task show */
646
+ class TaskNoSprintError extends CortexError {
647
+ constructor() {
648
+ super('ERR-TASK-NOSPRINT', '--sprint <sprint-id> is required');
649
+ this.name = 'TaskNoSprintError';
650
+ }
651
+ }
652
+ exports.TaskNoSprintError = TaskNoSprintError;
653
+ /** ERR-TASK-BADSPRINT: Sprint not found for task show */
654
+ class TaskBadSprintRequiredError extends CortexError {
655
+ sprintId;
656
+ constructor(sprintId) {
657
+ super('ERR-TASK-BADSPRINT', `Sprint "${sprintId}" not found`, { sprintId });
658
+ this.name = 'TaskBadSprintRequiredError';
659
+ this.sprintId = sprintId;
660
+ }
661
+ }
662
+ exports.TaskBadSprintRequiredError = TaskBadSprintRequiredError;
663
+ /** ERR-TASK-BADID: Invalid task ID format (not 4-digit NNNN) */
664
+ class TaskBadIdError extends CortexError {
665
+ taskId;
666
+ constructor(taskId) {
667
+ super('ERR-TASK-BADID', `Invalid task ID "${taskId}". Expected 4-digit zero-padded format (e.g., 0001).`, { taskId });
668
+ this.name = 'TaskBadIdError';
669
+ this.taskId = taskId;
670
+ }
671
+ }
672
+ exports.TaskBadIdError = TaskBadIdError;
673
+ /** ERR-TASK-DUPID: Duplicate task ID */
674
+ class TaskDuplicateIdError extends CortexError {
675
+ taskId;
676
+ constructor(taskId) {
677
+ super('ERR-TASK-DUPID', `Task "${taskId}" already exists`, { taskId });
678
+ this.name = 'TaskDuplicateIdError';
679
+ this.taskId = taskId;
680
+ }
681
+ }
682
+ exports.TaskDuplicateIdError = TaskDuplicateIdError;
683
+ /** ERR-TASK-MISSINGID: Missing task ID (required for task add with positional <id>) */
684
+ class TaskMissingIdError extends CortexError {
685
+ constructor() {
686
+ super('ERR-TASK-MISSINGID', '<id> is required (4-digit zero-padded, e.g., 0001)');
687
+ this.name = 'TaskMissingIdError';
688
+ }
689
+ }
690
+ exports.TaskMissingIdError = TaskMissingIdError;
691
+ /** ERR-TESTREPORT-NOSPRINT: --sprint required for test-report show */
692
+ class TestReportNoSprintError extends CortexError {
693
+ constructor() {
694
+ super('ERR-TESTREPORT-NOSPRINT', '--sprint <sprint-id> is required');
695
+ this.name = 'TestReportNoSprintError';
696
+ }
697
+ }
698
+ exports.TestReportNoSprintError = TestReportNoSprintError;
699
+ /** ERR-TESTREPORT-BADSPRINT: Sprint not found for test-report show */
700
+ class TestReportBadSprintError extends CortexError {
701
+ sprintId;
702
+ constructor(sprintId) {
703
+ super('ERR-TESTREPORT-BADSPRINT', `Sprint "${sprintId}" not found`, { sprintId });
704
+ this.name = 'TestReportBadSprintError';
705
+ this.sprintId = sprintId;
706
+ }
707
+ }
708
+ exports.TestReportBadSprintError = TestReportBadSprintError;
709
+ /** ERR-TESTREPORT-004: Test report not found in sprint */
710
+ class TestReportNotInSprintError extends CortexError {
711
+ reportId;
712
+ sprintId;
713
+ constructor(reportId, sprintId) {
714
+ const idStr = String(reportId);
715
+ super('ERR-TESTREPORT-004', `Test report "${idStr}" not found in sprint "${sprintId}"`, { reportId, sprintId });
716
+ this.name = 'TestReportNotInSprintError';
717
+ this.reportId = reportId;
718
+ this.sprintId = sprintId;
719
+ }
720
+ }
721
+ exports.TestReportNotInSprintError = TestReportNotInSprintError;
722
+ /** ERR-TASK-015: DB write failed; file preserved */
723
+ class TaskDbWriteFilePreservedError extends CortexError {
724
+ path;
725
+ constructor(path) {
726
+ super('ERR-TASK-015', `DB write failed; file preserved: ${path}`, { path });
727
+ this.name = 'TaskDbWriteFilePreservedError';
728
+ this.path = path;
729
+ }
730
+ }
731
+ exports.TaskDbWriteFilePreservedError = TaskDbWriteFilePreservedError;
732
+ /** ERR-TASK-INVALID-FIELD: Prohibited field passed to task update — use task move instead */
733
+ class TaskInvalidFieldError extends CortexError {
734
+ fieldName;
735
+ constructor(fieldName) {
736
+ super('ERR-TASK-INVALID-FIELD', `Field --${fieldName} is not permitted via task update. Use task move for ${fieldName} changes.`, { fieldName });
737
+ this.name = 'TaskInvalidFieldError';
738
+ this.fieldName = fieldName;
739
+ }
740
+ }
741
+ exports.TaskInvalidFieldError = TaskInvalidFieldError;
742
+ /** ERR-TASK-NOACTIVESPRINT: No active sprint — task move requires active sprint */
743
+ class TaskNoActiveSprintError extends CortexError {
744
+ constructor() {
745
+ super('ERR-TASK-NOACTIVESPRINT', 'No active sprint. task move requires an active sprint.');
746
+ this.name = 'TaskNoActiveSprintError';
747
+ }
748
+ }
749
+ exports.TaskNoActiveSprintError = TaskNoActiveSprintError;
750
+ /** ERR-TASK-NOTINACTIVESPRINT: Task does not belong to the active sprint */
751
+ class TaskNotInActiveSprintError extends CortexError {
752
+ taskId;
753
+ constructor(taskId) {
754
+ super('ERR-TASK-NOTINACTIVESPRINT', `Task ${taskId} does not belong to the active sprint.`, { taskId });
755
+ this.name = 'TaskNotInActiveSprintError';
756
+ this.taskId = taskId;
757
+ }
758
+ }
759
+ exports.TaskNotInActiveSprintError = TaskNotInActiveSprintError;
760
+ // ─── Spawn Validation Errors (MOD-006) ───
761
+ /** ERR-SPAWN-SPRINT: Sprint phase does not permit spawning (not IN EXECUTION) */
762
+ class SpawnSprintError extends CortexError {
763
+ sprintId;
764
+ sprintStatus;
765
+ constructor(sprintId, sprintStatus) {
766
+ super('ERR-SPAWN-SPRINT', `Cannot spawn in sprint "${sprintId}": sprint must be IN EXECUTION, but is "${sprintStatus}"`, { sprintId, sprintStatus });
767
+ this.name = 'SpawnSprintError';
768
+ this.sprintId = sprintId;
769
+ this.sprintStatus = sprintStatus;
770
+ }
771
+ }
772
+ exports.SpawnSprintError = SpawnSprintError;
773
+ /** ERR-SPAWN-STATE: Task state does not permit spawning (not In Progress) */
774
+ class SpawnStateError extends CortexError {
775
+ taskId;
776
+ taskStatus;
777
+ constructor(taskId, taskStatus) {
778
+ super('ERR-SPAWN-STATE', `Cannot spawn from task "${taskId}": task must be In Progress, but is "${taskStatus}"`, { taskId, taskStatus });
779
+ this.name = 'SpawnStateError';
780
+ this.taskId = taskId;
781
+ this.taskStatus = taskStatus;
782
+ }
783
+ }
784
+ exports.SpawnStateError = SpawnStateError;
785
+ /** ERR-SPAWN-ROLE: Role mismatch for spawn operation */
786
+ class SpawnRoleError extends CortexError {
787
+ requiredRole;
788
+ providedRole;
789
+ constructor(requiredRole, providedRole) {
790
+ super('ERR-SPAWN-ROLE', `Spawn requires role "${requiredRole}", but "${providedRole}" was provided`, { requiredRole, providedRole });
791
+ this.name = 'SpawnRoleError';
792
+ this.requiredRole = requiredRole;
793
+ this.providedRole = providedRole;
794
+ }
795
+ }
796
+ exports.SpawnRoleError = SpawnRoleError;
797
+ // ─── CLI Errors (MOD-007) ───
798
+ /** ERR-CLI-001: Unknown subcommand */
799
+ class CliCmdError extends CortexError {
800
+ subcommand;
801
+ constructor(subcommand, availableCommands) {
802
+ super('ERR-CLI-001', `Unknown command "${subcommand}". Available: ${availableCommands.join(', ')}`, { subcommand, availableCommands });
803
+ this.name = 'CliCmdError';
804
+ this.subcommand = subcommand;
805
+ }
806
+ }
807
+ exports.CliCmdError = CliCmdError;
808
+ /** ERR-CLI-002: Unknown action for a subcommand */
809
+ class CliActionError extends CortexError {
810
+ subcommand;
811
+ action;
812
+ constructor(subcommand, action, availableActions) {
813
+ super('ERR-CLI-002', `Unknown action "${action}" for ${subcommand}. Available: ${availableActions.join(', ')}`, { subcommand, action, availableActions });
814
+ this.name = 'CliActionError';
815
+ this.subcommand = subcommand;
816
+ this.action = action;
817
+ }
818
+ }
819
+ exports.CliActionError = CliActionError;
820
+ /** ERR-CLI-003: Invalid format option */
821
+ class CliFormatError extends CortexError {
822
+ format;
823
+ constructor(format) {
824
+ super('ERR-CLI-003', `Invalid format "${format}". Valid: table, json, markdown, quiet`, { format });
825
+ this.name = 'CliFormatError';
826
+ this.format = format;
827
+ }
828
+ }
829
+ exports.CliFormatError = CliFormatError;
830
+ /** ERR-CLI-FORMAT: --format table is not valid for show commands */
831
+ class CliShowFormatError extends CortexError {
832
+ format;
833
+ constructor(format) {
834
+ super('ERR-CLI-FORMAT', `--format ${format} is not valid for show commands`, { format });
835
+ this.name = 'CliShowFormatError';
836
+ this.format = format;
837
+ }
838
+ }
839
+ exports.CliShowFormatError = CliShowFormatError;
840
+ // ─── Registry Errors (FS-SS-002-0010) ───
841
+ /** Base registry error (ERR-REG-*) — legacy compat base class */
842
+ class RegistryError extends CortexError {
843
+ constructor(reason, code = 'ERR-REG-003') {
844
+ super(code, `Registry error: ${reason}`, { reason });
845
+ this.name = 'RegistryError';
846
+ }
847
+ }
848
+ exports.RegistryError = RegistryError;
849
+ /** ERR-REG-001: Cannot create config directory */
850
+ class RegistryDirCreateError extends RegistryError {
851
+ constructor(reason) {
852
+ super(reason, 'ERR-REG-001');
853
+ this.code = 'ERR-REG-001';
854
+ this.message = `Cannot create config directory: ${reason}`;
855
+ this.name = 'RegistryDirCreateError';
856
+ }
857
+ }
858
+ exports.RegistryDirCreateError = RegistryDirCreateError;
859
+ /** ERR-REG-002: Registry file has invalid structure */
860
+ class RegistryInvalidStructureError extends RegistryError {
861
+ constructor(reason) {
862
+ super(reason, 'ERR-REG-002');
863
+ this.message = `Registry file has invalid structure: ${reason}`;
864
+ this.name = 'RegistryInvalidStructureError';
865
+ }
866
+ }
867
+ exports.RegistryInvalidStructureError = RegistryInvalidStructureError;
868
+ /** ERR-REG-003: Cannot write registry file */
869
+ class RegistryWriteError extends RegistryError {
870
+ constructor(reason) {
871
+ super(reason, 'ERR-REG-003');
872
+ this.message = `Cannot write registry file: ${reason}`;
873
+ this.name = 'RegistryWriteError';
874
+ }
875
+ }
876
+ exports.RegistryWriteError = RegistryWriteError;
877
+ /** ERR-REG-004: Registry file is not valid JSON */
878
+ class RegistryInvalidJsonError extends RegistryError {
879
+ constructor(reason) {
880
+ super(reason, 'ERR-REG-004');
881
+ this.message = `Registry file is not valid JSON: ${reason}`;
882
+ this.name = 'RegistryInvalidJsonError';
883
+ }
884
+ }
885
+ exports.RegistryInvalidJsonError = RegistryInvalidJsonError;
886
+ /** ERR-REG-005: Cannot read registry file */
887
+ class RegistryReadError extends RegistryError {
888
+ constructor(reason) {
889
+ super(reason, 'ERR-REG-005');
890
+ this.message = `Cannot read registry file: ${reason}`;
891
+ this.name = 'RegistryReadError';
892
+ }
893
+ }
894
+ exports.RegistryReadError = RegistryReadError;
895
+ // ─── Config Errors (config.json — NOT registry) ───
896
+ // ConfigError is for config.json operations.
897
+ // Registry errors use the ERR-REG-* codes above.
898
+ /** Config file is corrupt or invalid */
899
+ class ConfigError extends CortexError {
900
+ constructor(message, details) {
901
+ super('ERR-CFG-001', message, details);
902
+ this.name = 'ConfigError';
903
+ }
904
+ }
905
+ exports.ConfigError = ConfigError;
906
+ // ─── Graph Errors (MOD-008/009/010/011) ───
907
+ /** ERR-GRAPH-002: Entity not found */
908
+ class GraphEntityNotFoundError extends CortexError {
909
+ entityId;
910
+ constructor(entityId) {
911
+ super('ERR-GRAPH-002', `Entity "${entityId}" not found`, { entityId });
912
+ this.name = 'GraphEntityNotFoundError';
913
+ this.entityId = entityId;
914
+ }
915
+ }
916
+ exports.GraphEntityNotFoundError = GraphEntityNotFoundError;
917
+ /** ERR-GRAPH-003: Duplicate entity ID */
918
+ class GraphEntityDuplicateError extends CortexError {
919
+ entityId;
920
+ constructor(entityId) {
921
+ super('ERR-GRAPH-003', `Entity "${entityId}" already exists`, { entityId });
922
+ this.name = 'GraphEntityDuplicateError';
923
+ this.entityId = entityId;
924
+ }
925
+ }
926
+ exports.GraphEntityDuplicateError = GraphEntityDuplicateError;
927
+ /** ERR-GRAPH-004: Relation type not found */
928
+ class GraphRelationTypeNotFoundError extends CortexError {
929
+ typeName;
930
+ constructor(typeName) {
931
+ super('ERR-GRAPH-004', `Relation type "${typeName}" not found`, { typeName });
932
+ this.name = 'GraphRelationTypeNotFoundError';
933
+ this.typeName = typeName;
934
+ }
935
+ }
936
+ exports.GraphRelationTypeNotFoundError = GraphRelationTypeNotFoundError;
937
+ /** ERR-GRAPH-005: Self-relation not allowed */
938
+ class GraphSelfRelationError extends CortexError {
939
+ entityId;
940
+ relType;
941
+ constructor(entityId, relType) {
942
+ super('ERR-GRAPH-005', `Self-relation not allowed: entity "${entityId}" cannot relate to itself via "${relType}"`, { entityId, relType });
943
+ this.name = 'GraphSelfRelationError';
944
+ this.entityId = entityId;
945
+ this.relType = relType;
946
+ }
947
+ }
948
+ exports.GraphSelfRelationError = GraphSelfRelationError;
949
+ /** ERR-GRAPH-006: Type constraint violation */
950
+ class GraphTypeConstraintError extends CortexError {
951
+ relType;
952
+ direction;
953
+ actualType;
954
+ allowedTypes;
955
+ constructor(relType, direction, actualType, allowedTypes) {
956
+ super('ERR-GRAPH-006', `Type constraint violation on "${relType}": ${direction} entity type "${actualType}" not in allowed types [${allowedTypes.join(', ')}]`, { relType, direction, actualType, allowedTypes });
957
+ this.name = 'GraphTypeConstraintError';
958
+ this.relType = relType;
959
+ this.direction = direction;
960
+ this.actualType = actualType;
961
+ this.allowedTypes = allowedTypes;
962
+ }
963
+ }
964
+ exports.GraphTypeConstraintError = GraphTypeConstraintError;
965
+ /** ERR-GRAPH-007: Cardinality constraint violation */
966
+ class GraphCardinalityError extends CortexError {
967
+ relType;
968
+ cardinality;
969
+ entityId;
970
+ constructor(relType, cardinality, entityId) {
971
+ super('ERR-GRAPH-007', `Cardinality violation on "${relType}" (${cardinality}): entity "${entityId}" already has maximum allowed relations`, { relType, cardinality, entityId });
972
+ this.name = 'GraphCardinalityError';
973
+ this.relType = relType;
974
+ this.cardinality = cardinality;
975
+ this.entityId = entityId;
976
+ }
977
+ }
978
+ exports.GraphCardinalityError = GraphCardinalityError;
979
+ /** ERR-GRAPH-008: Duplicate relation */
980
+ class GraphDuplicateRelationError extends CortexError {
981
+ fromId;
982
+ relType;
983
+ toId;
984
+ constructor(fromId, relType, toId) {
985
+ super('ERR-GRAPH-008', `Duplicate relation: ${fromId} -[${relType}]-> ${toId} already exists`, { fromId, relType, toId });
986
+ this.name = 'GraphDuplicateRelationError';
987
+ this.fromId = fromId;
988
+ this.relType = relType;
989
+ this.toId = toId;
990
+ }
991
+ }
992
+ exports.GraphDuplicateRelationError = GraphDuplicateRelationError;
993
+ /** ERR-GRAPH-009: Relation not found */
994
+ class GraphRelationNotFoundError extends CortexError {
995
+ relationId;
996
+ constructor(relationId) {
997
+ super('ERR-GRAPH-009', `Relation ${relationId} not found`, { relationId });
998
+ this.name = 'GraphRelationNotFoundError';
999
+ this.relationId = relationId;
1000
+ }
1001
+ }
1002
+ exports.GraphRelationNotFoundError = GraphRelationNotFoundError;
1003
+ /** ERR-GRAPH-010: No entity type mapping for document type (MOD-021) */
1004
+ class GraphDocTypeMappingNotFoundError extends CortexError {
1005
+ docType;
1006
+ constructor(docType) {
1007
+ super('ERR-GRAPH-010', `No entity type mapping for document type "${docType}". Valid document types are: AD, FR, FS, MDL, NFR, NFS, QA, SAD, SRC, TC, TR, TS, URD, US`, { docType });
1008
+ this.name = 'GraphDocTypeMappingNotFoundError';
1009
+ this.docType = docType;
1010
+ }
1011
+ }
1012
+ exports.GraphDocTypeMappingNotFoundError = GraphDocTypeMappingNotFoundError;
1013
+ /** ERR-GRAPH-EXPORT-FORMAT: Unsupported graph export format */
1014
+ class GraphExportFormatError extends CortexError {
1015
+ format;
1016
+ supported;
1017
+ constructor(format, supported) {
1018
+ super('ERR-GRAPH-EXPORT-FORMAT', `Unsupported export format: ${format}. Supported: ${supported.join(', ')}`, { format, supported });
1019
+ this.name = 'GraphExportFormatError';
1020
+ this.format = format;
1021
+ this.supported = supported;
1022
+ }
1023
+ }
1024
+ exports.GraphExportFormatError = GraphExportFormatError;
1025
+ // ─── Document Errors (MOD-012) ───
1026
+ /** ERR-DOC-001: Duplicate document ID */
1027
+ class DocumentDuplicateError extends CortexError {
1028
+ docId;
1029
+ constructor(docId) {
1030
+ super('ERR-DOC-001', `Document "${docId}" already exists`, { docId });
1031
+ this.name = 'DocumentDuplicateError';
1032
+ this.docId = docId;
1033
+ }
1034
+ }
1035
+ exports.DocumentDuplicateError = DocumentDuplicateError;
1036
+ /** ERR-DOC-002: Content file not found or unreadable */
1037
+ class DocumentFileError extends CortexError {
1038
+ path;
1039
+ constructor(path, reason) {
1040
+ super('ERR-DOC-002', `Cannot read file: ${path}${reason ? `: ${reason}` : ''}`, { path, reason });
1041
+ this.name = 'DocumentFileError';
1042
+ this.path = path;
1043
+ }
1044
+ }
1045
+ exports.DocumentFileError = DocumentFileError;
1046
+ /** ERR-DOC-003: Invalid JSON in metadata */
1047
+ class DocumentInvalidJsonError extends CortexError {
1048
+ constructor(field) {
1049
+ super('ERR-DOC-003', `Invalid JSON in ${field}`, { field });
1050
+ this.name = 'DocumentInvalidJsonError';
1051
+ }
1052
+ }
1053
+ exports.DocumentInvalidJsonError = DocumentInvalidJsonError;
1054
+ /** ERR-DOC-004: Missing required field */
1055
+ class DocumentMissingFieldError extends CortexError {
1056
+ field;
1057
+ constructor(field) {
1058
+ super('ERR-DOC-004', `Missing required field: ${field}`, { field });
1059
+ this.name = 'DocumentMissingFieldError';
1060
+ this.field = field;
1061
+ }
1062
+ }
1063
+ exports.DocumentMissingFieldError = DocumentMissingFieldError;
1064
+ /** ERR-DOC-005: Document not found */
1065
+ class DocumentNotFoundError extends CortexError {
1066
+ docId;
1067
+ constructor(docId) {
1068
+ super('ERR-DOC-005', `Document "${docId}" not found`, { docId });
1069
+ this.name = 'DocumentNotFoundError';
1070
+ this.docId = docId;
1071
+ }
1072
+ }
1073
+ exports.DocumentNotFoundError = DocumentNotFoundError;
1074
+ /** ERR-DOC-006: Vault scan error */
1075
+ class DocumentScanError extends CortexError {
1076
+ vaultPath;
1077
+ constructor(vaultPath, reason) {
1078
+ super('ERR-DOC-006', `Vault scan error: ${reason}`, { vaultPath, reason });
1079
+ this.name = 'DocumentScanError';
1080
+ this.vaultPath = vaultPath;
1081
+ }
1082
+ }
1083
+ exports.DocumentScanError = DocumentScanError;
1084
+ /** ERR-DOC-TYPE-UNKNOWN: Unknown document type rejected pre-transaction (FS-SS-012-0011 v2) */
1085
+ class DocumentTypeUnknownError extends CortexError {
1086
+ invalidType;
1087
+ constructor(invalidType) {
1088
+ const validTypes = ['AD', 'FR', 'FS', 'MDL', 'NFR', 'NFS', 'QA', 'SAD', 'SRC', 'TC', 'TR', 'TS', 'URD', 'US'];
1089
+ super('ERR-DOC-TYPE-UNKNOWN', `Document type "${invalidType}" is not a valid document type. Valid types are: ${validTypes.join(', ')}`, { invalidType, validTypes });
1090
+ this.name = 'DocumentTypeUnknownError';
1091
+ this.invalidType = invalidType;
1092
+ }
1093
+ }
1094
+ exports.DocumentTypeUnknownError = DocumentTypeUnknownError;
1095
+ /** ERR-DOC-SRC-STORAGE: SRC documents require filesystem storage (reject --content-file) */
1096
+ class DocSrcStorageError extends CortexError {
1097
+ constructor() {
1098
+ super('ERR-DOC-SRC-STORAGE', 'SRC documents require filesystem storage (omit --content-file for SRC documents)', {});
1099
+ this.name = 'DocSrcStorageError';
1100
+ }
1101
+ }
1102
+ exports.DocSrcStorageError = DocSrcStorageError;
1103
+ /** ERR-DOC-SPRINT-REQUIRED: Sprint-scoped doc type registered without --sprint */
1104
+ class DocSprintRequiredError extends CortexError {
1105
+ docType;
1106
+ constructor(docType) {
1107
+ super('ERR-DOC-SPRINT-REQUIRED', `Document type "${docType}" requires --sprint`, { docType });
1108
+ this.name = 'DocSprintRequiredError';
1109
+ this.docType = docType;
1110
+ }
1111
+ }
1112
+ exports.DocSprintRequiredError = DocSprintRequiredError;
1113
+ /** ERR-DOC-012: Invalid order-by field for doc list/search */
1114
+ class DocumentInvalidOrderByError extends CortexError {
1115
+ field;
1116
+ validFields;
1117
+ constructor(field) {
1118
+ const validFields = ['id', 'type', 'title', 'created', 'updated'];
1119
+ super('ERR-DOC-012', `Invalid order-by field "${field}". Valid fields: ${validFields.join(', ')}`, { field, validFields });
1120
+ this.name = 'DocumentInvalidOrderByError';
1121
+ this.field = field;
1122
+ this.validFields = validFields;
1123
+ }
1124
+ }
1125
+ exports.DocumentInvalidOrderByError = DocumentInvalidOrderByError;
1126
+ /** ERR-DOC-UNKNOWN-OPTION: Unsupported option rejected per URD-G001 */
1127
+ class DocumentUnknownOptionError extends CortexError {
1128
+ optionName;
1129
+ commandName;
1130
+ constructor(optionName, commandName) {
1131
+ super('ERR-DOC-UNKNOWN-OPTION', `--${optionName} is no longer supported for doc ${commandName} (removed by URD-G001)`, { optionName, commandName });
1132
+ this.name = 'DocumentUnknownOptionError';
1133
+ this.optionName = optionName;
1134
+ this.commandName = commandName;
1135
+ }
1136
+ }
1137
+ exports.DocumentUnknownOptionError = DocumentUnknownOptionError;
1138
+ /** ERR-DOC-011: Invalid search query (malformed FTS5 syntax) */
1139
+ class DocumentInvalidSearchQueryError extends CortexError {
1140
+ query;
1141
+ constructor(query, reason) {
1142
+ super('ERR-DOC-011', `Invalid search query: ${query}${reason ? `: ${reason}` : ''}`, { query, reason });
1143
+ this.name = 'DocumentInvalidSearchQueryError';
1144
+ this.query = query;
1145
+ }
1146
+ }
1147
+ exports.DocumentInvalidSearchQueryError = DocumentInvalidSearchQueryError;
1148
+ // ─── Review Errors (MOD-013) ───
1149
+ /** ERR-REVIEW-001: Sprint not found for review */
1150
+ class ReviewSprintNotFoundError extends CortexError {
1151
+ sprintId;
1152
+ constructor(sprintId) {
1153
+ super('ERR-REVIEW-001', `Sprint "${sprintId}" not found for review`, { sprintId });
1154
+ this.name = 'ReviewSprintNotFoundError';
1155
+ this.sprintId = sprintId;
1156
+ }
1157
+ }
1158
+ exports.ReviewSprintNotFoundError = ReviewSprintNotFoundError;
1159
+ /** ERR-REVIEW-002: Review not found */
1160
+ class ReviewNotFoundError extends CortexError {
1161
+ reviewId;
1162
+ constructor(reviewId) {
1163
+ super('ERR-REVIEW-002', `Review ${reviewId} not found`, { reviewId });
1164
+ this.name = 'ReviewNotFoundError';
1165
+ this.reviewId = reviewId;
1166
+ }
1167
+ }
1168
+ exports.ReviewNotFoundError = ReviewNotFoundError;
1169
+ /** ERR-REVIEW-004: Content file not found for review add */
1170
+ class ReviewContentFileNotFoundError extends CortexError {
1171
+ path;
1172
+ constructor(path) {
1173
+ super('ERR-REVIEW-004', `Content file not found: ${path}`, { path });
1174
+ this.name = 'ReviewContentFileNotFoundError';
1175
+ this.path = path;
1176
+ }
1177
+ }
1178
+ exports.ReviewContentFileNotFoundError = ReviewContentFileNotFoundError;
1179
+ /** ERR-REVIEW-BADID: Invalid review ID format (not 4 digits) */
1180
+ class ReviewBadIdError extends CortexError {
1181
+ reviewId;
1182
+ constructor(reviewId) {
1183
+ super('ERR-REVIEW-BADID', `Invalid ID format: ${reviewId}. ID must be exactly 4 digits (e.g., 0001).`, { reviewId });
1184
+ this.name = 'ReviewBadIdError';
1185
+ this.reviewId = reviewId;
1186
+ }
1187
+ }
1188
+ exports.ReviewBadIdError = ReviewBadIdError;
1189
+ /** ERR-REVIEW-MISSINGID: --id is required for review add */
1190
+ class ReviewMissingIdError extends CortexError {
1191
+ constructor() {
1192
+ super('ERR-REVIEW-MISSINGID', '--id is required');
1193
+ this.name = 'ReviewMissingIdError';
1194
+ }
1195
+ }
1196
+ exports.ReviewMissingIdError = ReviewMissingIdError;
1197
+ /** ERR-REVIEW-DUPID: Duplicate review ID in the same sprint */
1198
+ class ReviewDuplicateIdError extends CortexError {
1199
+ reviewId;
1200
+ sprintId;
1201
+ constructor(reviewId, sprintId) {
1202
+ super('ERR-REVIEW-DUPID', `Review ID ${reviewId} already exists in sprint ${sprintId}`, { reviewId, sprintId });
1203
+ this.name = 'ReviewDuplicateIdError';
1204
+ this.reviewId = reviewId;
1205
+ this.sprintId = sprintId;
1206
+ }
1207
+ }
1208
+ exports.ReviewDuplicateIdError = ReviewDuplicateIdError;
1209
+ /** ERR-REVIEW-006: Review not found in specified sprint */
1210
+ class ReviewNotInSprintError extends CortexError {
1211
+ reviewNum;
1212
+ sprintId;
1213
+ constructor(reviewNum, sprintId) {
1214
+ super('ERR-REVIEW-006', `Review ${reviewNum} not found in sprint "${sprintId}"`, { reviewNum, sprintId });
1215
+ this.name = 'ReviewNotInSprintError';
1216
+ this.reviewNum = reviewNum;
1217
+ this.sprintId = sprintId;
1218
+ }
1219
+ }
1220
+ exports.ReviewNotInSprintError = ReviewNotInSprintError;
1221
+ /** ERR-REVIEW-007: --sprint option required for review show */
1222
+ class ReviewSprintRequiredError extends CortexError {
1223
+ constructor() {
1224
+ super('ERR-REVIEW-007', '--sprint <sprint-id> is required for review show');
1225
+ this.name = 'ReviewSprintRequiredError';
1226
+ }
1227
+ }
1228
+ exports.ReviewSprintRequiredError = ReviewSprintRequiredError;
1229
+ /** ERR-REVIEW-008: --content is no longer supported */
1230
+ class ReviewContentRemovedError extends CortexError {
1231
+ constructor() {
1232
+ super('ERR-REVIEW-008', '--content is no longer supported; use --content-file');
1233
+ this.name = 'ReviewContentRemovedError';
1234
+ }
1235
+ }
1236
+ exports.ReviewContentRemovedError = ReviewContentRemovedError;
1237
+ /** ERR-REVIEW-009: Content file not found (legacy compat) */
1238
+ class ReviewContentFileError extends CortexError {
1239
+ path;
1240
+ constructor(path, reason) {
1241
+ super('ERR-REVIEW-009', `Content file not found: ${path}${reason ? `: ${reason}` : ''}`, { path, reason });
1242
+ this.name = 'ReviewContentFileError';
1243
+ this.path = path;
1244
+ }
1245
+ }
1246
+ exports.ReviewContentFileError = ReviewContentFileError;
1247
+ // ─── Test Report Errors (MOD-013) ───
1248
+ /** ERR-TESTREPORT-001: --report-path is no longer supported */
1249
+ class TestReportReportPathRejectedError extends CortexError {
1250
+ constructor() {
1251
+ super('ERR-TESTREPORT-001', '--report-path is no longer supported; use --content-file');
1252
+ this.name = 'TestReportReportPathRejectedError';
1253
+ }
1254
+ }
1255
+ exports.TestReportReportPathRejectedError = TestReportReportPathRejectedError;
1256
+ /** ERR-REPORT-001: Module not found */
1257
+ class ReportModuleNotFoundError extends CortexError {
1258
+ moduleId;
1259
+ constructor(moduleId) {
1260
+ super('ERR-REPORT-001', `Module "${moduleId}" not found`, { moduleId });
1261
+ this.name = 'ReportModuleNotFoundError';
1262
+ this.moduleId = moduleId;
1263
+ }
1264
+ }
1265
+ exports.ReportModuleNotFoundError = ReportModuleNotFoundError;
1266
+ /** ERR-REPORT-002: Test report not found */
1267
+ class ReportNotFoundError extends CortexError {
1268
+ reportId;
1269
+ constructor(reportId) {
1270
+ super('ERR-REPORT-002', `Test report ${reportId} not found`, { reportId });
1271
+ this.name = 'ReportNotFoundError';
1272
+ this.reportId = reportId;
1273
+ }
1274
+ }
1275
+ exports.ReportNotFoundError = ReportNotFoundError;
1276
+ /** ERR-TESTREPORT-002: Content file not found */
1277
+ class TestReportContentFileError extends CortexError {
1278
+ path;
1279
+ constructor(path) {
1280
+ super('ERR-TESTREPORT-002', `Content file not found: ${path}`, { path });
1281
+ this.name = 'TestReportContentFileError';
1282
+ this.path = path;
1283
+ }
1284
+ }
1285
+ exports.TestReportContentFileError = TestReportContentFileError;
1286
+ /** ERR-TESTREPORT-BADID: Invalid test-report ID format (not 4 digits) */
1287
+ class TestReportBadIdError extends CortexError {
1288
+ testReportId;
1289
+ constructor(testReportId) {
1290
+ super('ERR-TESTREPORT-BADID', `Invalid ID format: ${testReportId}. ID must be exactly 4 digits (e.g., 0001).`, { testReportId });
1291
+ this.name = 'TestReportBadIdError';
1292
+ this.testReportId = testReportId;
1293
+ }
1294
+ }
1295
+ exports.TestReportBadIdError = TestReportBadIdError;
1296
+ /** ERR-TESTREPORT-MISSINGID: --id is required for test-report add */
1297
+ class TestReportMissingIdError extends CortexError {
1298
+ constructor() {
1299
+ super('ERR-TESTREPORT-MISSINGID', '--id is required');
1300
+ this.name = 'TestReportMissingIdError';
1301
+ }
1302
+ }
1303
+ exports.TestReportMissingIdError = TestReportMissingIdError;
1304
+ /** ERR-TESTREPORT-DUPID: Duplicate test-report ID in the same sprint */
1305
+ class TestReportDuplicateIdError extends CortexError {
1306
+ testReportId;
1307
+ sprintId;
1308
+ constructor(testReportId, sprintId) {
1309
+ super('ERR-TESTREPORT-DUPID', `Test report ID ${testReportId} already exists in sprint ${sprintId}`, { testReportId, sprintId });
1310
+ this.name = 'TestReportDuplicateIdError';
1311
+ this.testReportId = testReportId;
1312
+ this.sprintId = sprintId;
1313
+ }
1314
+ }
1315
+ exports.TestReportDuplicateIdError = TestReportDuplicateIdError;
1316
+ // ─── Lesson Errors (MOD-013) ───
1317
+ /** ERR-LESSON-001: No lesson has been recorded for this project (singleton) */
1318
+ class LessonNotFoundError extends CortexError {
1319
+ constructor() {
1320
+ super('ERR-LESSON-001', 'No lesson has been recorded for this project');
1321
+ this.name = 'LessonNotFoundError';
1322
+ }
1323
+ }
1324
+ exports.LessonNotFoundError = LessonNotFoundError;
1325
+ /** ERR-LESSON-002: No update fields provided */
1326
+ class LessonNoUpdateFieldsError extends CortexError {
1327
+ constructor() {
1328
+ super('ERR-LESSON-002', 'No update fields provided');
1329
+ this.name = 'LessonNoUpdateFieldsError';
1330
+ }
1331
+ }
1332
+ exports.LessonNoUpdateFieldsError = LessonNoUpdateFieldsError;
1333
+ /** ERR-LESSON-005: Invalid category enum value */
1334
+ class LessonInvalidCategoryError extends CortexError {
1335
+ category;
1336
+ constructor(category) {
1337
+ super('ERR-LESSON-005', `Invalid category "${category}". Valid: Process, Technical, Tool, Model`, { category });
1338
+ this.name = 'LessonInvalidCategoryError';
1339
+ this.category = category;
1340
+ }
1341
+ }
1342
+ exports.LessonInvalidCategoryError = LessonInvalidCategoryError;
1343
+ /** ERR-LESSON-006: Invalid severity enum value */
1344
+ class LessonInvalidSeverityError extends CortexError {
1345
+ severity;
1346
+ constructor(severity) {
1347
+ super('ERR-LESSON-006', `Invalid severity "${severity}". Valid: critical, major, minor, suggestion`, { severity });
1348
+ this.name = 'LessonInvalidSeverityError';
1349
+ this.severity = severity;
1350
+ }
1351
+ }
1352
+ exports.LessonInvalidSeverityError = LessonInvalidSeverityError;
1353
+ /** ERR-LESSON-007: Content file not found */
1354
+ class LessonFileError extends CortexError {
1355
+ path;
1356
+ constructor(path, reason) {
1357
+ super('ERR-LESSON-007', `Content file not found: ${path}${reason ? `: ${reason}` : ''}`, { path, reason });
1358
+ this.name = 'LessonFileError';
1359
+ this.path = path;
1360
+ }
1361
+ }
1362
+ exports.LessonFileError = LessonFileError;
1363
+ // ─── Legacy aliases for backward compatibility ───
1364
+ // These are proper subclasses that preserve their .name for test compatibility.
1365
+ // New code must use the canonical names and ERR-* codes above.
1366
+ /** @deprecated Use TaskOwnerPlanningError instead */
1367
+ class TaskOwnerBacklogError extends TaskOwnerPlanningError {
1368
+ constructor(owner) {
1369
+ super(owner);
1370
+ this.name = 'TaskOwnerBacklogError';
1371
+ }
1372
+ }
1373
+ exports.TaskOwnerBacklogError = TaskOwnerBacklogError;
1374
+ /** @deprecated Use TaskOwnerReleaseError instead */
1375
+ class TaskOwnerReviewError extends TaskOwnerReleaseError {
1376
+ constructor(owner) {
1377
+ super(owner);
1378
+ this.name = 'TaskOwnerReviewError';
1379
+ }
1380
+ }
1381
+ exports.TaskOwnerReviewError = TaskOwnerReviewError;
1382
+ /** @deprecated Use MigrationIntegrityError instead */
1383
+ class MigrationVersionError extends MigrationIntegrityError {
1384
+ constructor(versionOrMessage, missing) {
1385
+ super(versionOrMessage, missing);
1386
+ this.name = 'MigrationVersionError';
1387
+ }
1388
+ }
1389
+ exports.MigrationVersionError = MigrationVersionError;
1390
+ /** @deprecated Use LockTimeoutError (ERR-LOCK-002) instead */
1391
+ class LockConflictError extends LockTimeoutError {
1392
+ constructor(lockName, owner, totalWaitMs = 0) {
1393
+ super(lockName, owner, totalWaitMs);
1394
+ this.name = 'LockConflictError';
1395
+ }
1396
+ }
1397
+ exports.LockConflictError = LockConflictError;
1398
+ /** @deprecated Use ProjectFolderNotFoundError (ERR-PROJ-005) or ProjectFolderCreateError (ERR-PROJ-004) instead */
1399
+ class InvalidProjectFolderError extends ProjectFolderCreateError {
1400
+ constructor(folder, reason) {
1401
+ super(folder, reason);
1402
+ this.name = 'InvalidProjectFolderError';
1403
+ }
1404
+ }
1405
+ exports.InvalidProjectFolderError = InvalidProjectFolderError;
1406
+ // ─── Audit Errors (MOD-023) ───
1407
+ /** ERR-AUDIT-001: Unknown check name in --checks list */
1408
+ class AuditUnknownCheckError extends CortexError {
1409
+ constructor(checkName, knownChecks) {
1410
+ super('ERR-AUDIT-001', `Unknown audit check: "${checkName}". Known checks: ${knownChecks.join(', ')}`, { checkName, knownChecks });
1411
+ this.name = 'AuditUnknownCheckError';
1412
+ }
1413
+ }
1414
+ exports.AuditUnknownCheckError = AuditUnknownCheckError;
1415
+ /** ERR-AUDIT-002: One or more audit checks failed */
1416
+ class AuditCheckFailedError extends CortexError {
1417
+ constructor(failedCount) {
1418
+ super('ERR-AUDIT-002', `${failedCount} audit check(s) failed`, { failedCount });
1419
+ this.name = 'AuditCheckFailedError';
1420
+ }
1421
+ }
1422
+ exports.AuditCheckFailedError = AuditCheckFailedError;
1423
+ /** ERR-AUDIT-003: --sprint ID does not exist */
1424
+ class AuditSprintNotFoundError extends CortexError {
1425
+ constructor(sprintId) {
1426
+ super('ERR-AUDIT-003', `Sprint not found: "${sprintId}"`, { sprintId });
1427
+ this.name = 'AuditSprintNotFoundError';
1428
+ }
1429
+ }
1430
+ exports.AuditSprintNotFoundError = AuditSprintNotFoundError;
1431
+ /** ERR-AUDIT-004: Cannot write report file */
1432
+ class AuditReportFileError extends CortexError {
1433
+ constructor(filePath, reason) {
1434
+ super('ERR-AUDIT-004', `Cannot write report file "${filePath}": ${reason}`, { filePath, reason });
1435
+ this.name = 'AuditReportFileError';
1436
+ }
1437
+ }
1438
+ exports.AuditReportFileError = AuditReportFileError;
1439
+ /** ERR-AUDIT-005: Fix transaction failed */
1440
+ class AuditFixError extends CortexError {
1441
+ constructor(reason) {
1442
+ super('ERR-AUDIT-005', `Fix transaction failed: ${reason}`, { reason });
1443
+ this.name = 'AuditFixError';
1444
+ }
1445
+ }
1446
+ exports.AuditFixError = AuditFixError;
1447
+ //# sourceMappingURL=errors.js.map