@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,212 @@
1
+ "use strict";
2
+ // Relation model: CRUD operations for graph relations
3
+ // MOD-010: Relations with constraint enforcement (AD-0017)
4
+ // + MOD-008: Schema dependency
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getRelationType = getRelationType;
7
+ exports.createRelation = createRelation;
8
+ exports.removeRelation = removeRelation;
9
+ exports.queryRelations = queryRelations;
10
+ exports.listRelationTypes = listRelationTypes;
11
+ const retry_1 = require("../db/retry");
12
+ const errors_1 = require("../utils/errors");
13
+ /** Parse JSON field safely */
14
+ function parseJson(raw, fallback) {
15
+ if (!raw)
16
+ return fallback;
17
+ try {
18
+ return JSON.parse(raw);
19
+ }
20
+ catch {
21
+ return fallback;
22
+ }
23
+ }
24
+ /**
25
+ * Get a relation type definition by name.
26
+ */
27
+ function getRelationType(db, name) {
28
+ const row = db.prepare(`
29
+ SELECT name, description, from_types, to_types, cardinality, inverse_of, created_at, updated_at
30
+ FROM relation_types WHERE name = ?
31
+ `).get(name);
32
+ return row;
33
+ }
34
+ /**
35
+ * Create a relation with full constraint enforcement (AD-0017).
36
+ * All checks run in a single transaction; inverse auto-created if defined.
37
+ *
38
+ * Validation order per AD-0017:
39
+ * 1. Self-relation check
40
+ * 2. Entity existence
41
+ * 3. Relation type existence
42
+ * 4. Type constraint
43
+ * 5. Cardinality constraint
44
+ * 6. Duplicate check
45
+ * 7. Insert primary
46
+ * 8. Insert inverse
47
+ */
48
+ function createRelation(db, fromId, relType, toId, properties) {
49
+ return (0, retry_1.withTransaction)(db, () => {
50
+ // 1. Self-relation check
51
+ if (fromId === toId) {
52
+ throw new errors_1.GraphSelfRelationError(fromId, relType);
53
+ }
54
+ // 2. Document existence (SAD-0035: entities table dropped, use documents)
55
+ const fromDoc = db.prepare('SELECT id, type AS type_name FROM documents WHERE id = ?').get(fromId);
56
+ if (!fromDoc)
57
+ throw new errors_1.GraphEntityNotFoundError(fromId);
58
+ const toDoc = db.prepare('SELECT id, type AS type_name FROM documents WHERE id = ?').get(toId);
59
+ if (!toDoc)
60
+ throw new errors_1.GraphEntityNotFoundError(toId);
61
+ // 3. Relation type existence
62
+ const rt = getRelationType(db, relType);
63
+ if (!rt)
64
+ throw new errors_1.GraphRelationTypeNotFoundError(relType);
65
+ // 4. Type constraint check
66
+ const fromTypes = parseJson(rt.from_types, []);
67
+ const toTypes = parseJson(rt.to_types, []);
68
+ if (fromTypes.length > 0 && !fromTypes.includes(fromDoc.type_name)) {
69
+ throw new errors_1.GraphTypeConstraintError(relType, 'from', fromDoc.type_name, fromTypes);
70
+ }
71
+ if (toTypes.length > 0 && !toTypes.includes(toDoc.type_name)) {
72
+ throw new errors_1.GraphTypeConstraintError(relType, 'to', toDoc.type_name, toTypes);
73
+ }
74
+ // 5. Cardinality constraint check
75
+ enforceCardinality(db, rt, fromId, toId, relType);
76
+ // 6. Duplicate check
77
+ const existing = db.prepare('SELECT id FROM relations WHERE from_id = ? AND rel_type = ? AND to_id = ?').get(fromId, relType, toId);
78
+ if (existing)
79
+ throw new errors_1.GraphDuplicateRelationError(fromId, relType, toId);
80
+ const now = new Date().toISOString();
81
+ const propsJson = JSON.stringify(properties ?? {});
82
+ // 7. Insert primary relation
83
+ const result = db.prepare(`
84
+ INSERT INTO relations (from_id, rel_type, to_id, properties, created_at, updated_at)
85
+ VALUES (?, ?, ?, ?, ?, ?)
86
+ `).run(fromId, relType, toId, propsJson, now, now);
87
+ const relation = {
88
+ id: Number(result.lastInsertRowid),
89
+ from_id: fromId,
90
+ rel_type: relType,
91
+ to_id: toId,
92
+ properties: propsJson,
93
+ created_at: now,
94
+ updated_at: now,
95
+ };
96
+ // 8. Insert inverse relation if defined
97
+ if (rt.inverse_of) {
98
+ const inverseRt = getRelationType(db, rt.inverse_of);
99
+ if (inverseRt) {
100
+ // Check cardinality for inverse too
101
+ enforceCardinality(db, inverseRt, toId, fromId, rt.inverse_of);
102
+ const existingInverse = db.prepare('SELECT id FROM relations WHERE from_id = ? AND rel_type = ? AND to_id = ?').get(toId, rt.inverse_of, fromId);
103
+ if (!existingInverse) {
104
+ db.prepare(`
105
+ INSERT INTO relations (from_id, rel_type, to_id, properties, created_at, updated_at)
106
+ VALUES (?, ?, ?, ?, ?, ?)
107
+ `).run(toId, rt.inverse_of, fromId, propsJson, now, now);
108
+ }
109
+ }
110
+ }
111
+ return relation;
112
+ });
113
+ }
114
+ /**
115
+ * Enforce cardinality constraints for a relation type.
116
+ */
117
+ function enforceCardinality(db, rt, fromId, toId, relType) {
118
+ const cardinality = (rt.cardinality ?? 'many_to_many');
119
+ switch (cardinality) {
120
+ case 'one_to_one': {
121
+ const fromCount = db.prepare('SELECT COUNT(*) as cnt FROM relations WHERE from_id = ? AND rel_type = ?').get(fromId, relType);
122
+ if (fromCount.cnt > 0) {
123
+ throw new errors_1.GraphCardinalityError(relType, cardinality, fromId);
124
+ }
125
+ const toCount = db.prepare('SELECT COUNT(*) as cnt FROM relations WHERE to_id = ? AND rel_type = ?').get(toId, relType);
126
+ if (toCount.cnt > 0) {
127
+ throw new errors_1.GraphCardinalityError(relType, cardinality, toId);
128
+ }
129
+ break;
130
+ }
131
+ case 'one_to_many': {
132
+ // one_to_many: each target (to_id) can have at most one incoming relation of this type
133
+ const toCount = db.prepare('SELECT COUNT(*) as cnt FROM relations WHERE to_id = ? AND rel_type = ?').get(toId, relType);
134
+ if (toCount.cnt > 0) {
135
+ throw new errors_1.GraphCardinalityError(relType, cardinality, toId);
136
+ }
137
+ break;
138
+ }
139
+ case 'many_to_one': {
140
+ // many_to_one: each source (from_id) can have at most one outgoing relation of this type
141
+ const fromCount = db.prepare('SELECT COUNT(*) as cnt FROM relations WHERE from_id = ? AND rel_type = ?').get(fromId, relType);
142
+ if (fromCount.cnt > 0) {
143
+ throw new errors_1.GraphCardinalityError(relType, cardinality, fromId);
144
+ }
145
+ break;
146
+ }
147
+ // many_to_many: no constraint
148
+ }
149
+ }
150
+ /**
151
+ * Remove a relation by ID.
152
+ * Also removes any inverse relation.
153
+ */
154
+ function removeRelation(db, relationId) {
155
+ (0, retry_1.withTransaction)(db, () => {
156
+ const rel = db.prepare('SELECT from_id, rel_type, to_id FROM relations WHERE id = ?')
157
+ .get(relationId);
158
+ if (!rel)
159
+ throw new errors_1.GraphRelationNotFoundError(relationId);
160
+ db.prepare('DELETE FROM relations WHERE id = ?').run(relationId);
161
+ // Remove inverse if defined
162
+ const rt = getRelationType(db, rel.rel_type);
163
+ if (rt?.inverse_of) {
164
+ db.prepare('DELETE FROM relations WHERE from_id = ? AND rel_type = ? AND to_id = ?')
165
+ .run(rel.to_id, rt.inverse_of, rel.from_id);
166
+ }
167
+ });
168
+ }
169
+ /**
170
+ * Query relations for an entity.
171
+ */
172
+ function queryRelations(db, options) {
173
+ const { entityId, relType, direction = 'both', limit = 100, offset = 0 } = options;
174
+ let sql;
175
+ const params = [];
176
+ if (relType) {
177
+ if (direction === 'outgoing') {
178
+ sql = 'SELECT * FROM relations WHERE from_id = ? AND rel_type = ? ORDER BY created_at DESC LIMIT ? OFFSET ?';
179
+ params.push(entityId, relType, limit, offset);
180
+ }
181
+ else if (direction === 'incoming') {
182
+ sql = 'SELECT * FROM relations WHERE to_id = ? AND rel_type = ? ORDER BY created_at DESC LIMIT ? OFFSET ?';
183
+ params.push(entityId, relType, limit, offset);
184
+ }
185
+ else {
186
+ sql = 'SELECT * FROM relations WHERE (from_id = ? OR to_id = ?) AND rel_type = ? ORDER BY created_at DESC LIMIT ? OFFSET ?';
187
+ params.push(entityId, entityId, relType, limit, offset);
188
+ }
189
+ }
190
+ else {
191
+ if (direction === 'outgoing') {
192
+ sql = 'SELECT * FROM relations WHERE from_id = ? ORDER BY created_at DESC LIMIT ? OFFSET ?';
193
+ params.push(entityId, limit, offset);
194
+ }
195
+ else if (direction === 'incoming') {
196
+ sql = 'SELECT * FROM relations WHERE to_id = ? ORDER BY created_at DESC LIMIT ? OFFSET ?';
197
+ params.push(entityId, limit, offset);
198
+ }
199
+ else {
200
+ sql = 'SELECT * FROM relations WHERE from_id = ? OR to_id = ? ORDER BY created_at DESC LIMIT ? OFFSET ?';
201
+ params.push(entityId, entityId, limit, offset);
202
+ }
203
+ }
204
+ return db.prepare(sql).all(...params);
205
+ }
206
+ /**
207
+ * Get all relation types.
208
+ */
209
+ function listRelationTypes(db) {
210
+ return db.prepare('SELECT * FROM relation_types ORDER BY name').all();
211
+ }
212
+ //# sourceMappingURL=relation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation.js","sourceRoot":"","sources":["../../src/models/relation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ import type { ReviewType, ReviewVerdict } from './common';
2
+ /** Review record */
3
+ export interface Review {
4
+ id: number;
5
+ review_num: string;
6
+ sprint_id: string;
7
+ asset_name: string;
8
+ review_type: ReviewType;
9
+ verdict: ReviewVerdict;
10
+ critical_count: number;
11
+ major_count: number;
12
+ minor_count: number;
13
+ suggestion_count: number;
14
+ open_questions_count: number;
15
+ content: string;
16
+ asset_ref: string | null;
17
+ updated_at: string;
18
+ created_at: string;
19
+ }
20
+ /** Review detail (full record) */
21
+ export interface ReviewDetail extends Review {
22
+ }
23
+ /** Review add options */
24
+ export interface ReviewAddOptions {
25
+ assetName?: string;
26
+ assetRef?: string;
27
+ critical?: number;
28
+ major?: number;
29
+ minor?: number;
30
+ suggestion?: number;
31
+ }
32
+ /** Test report record (SAD-0031: explicit caller-provided id, task removed) */
33
+ export interface TestReport {
34
+ id: string;
35
+ sprint_id: string;
36
+ module_id: string | null;
37
+ status: string;
38
+ content: string;
39
+ pass_count: number;
40
+ fail_count: number;
41
+ skip_count: number;
42
+ total: number;
43
+ passed: number;
44
+ failed: number;
45
+ skipped: number;
46
+ blocked: number;
47
+ result: string;
48
+ command: string | null;
49
+ duration_ms: number | null;
50
+ report_path: string | null;
51
+ updated_at: string;
52
+ created_at: string;
53
+ }
54
+ /** Test report detail */
55
+ export interface TestReportDetail extends TestReport {
56
+ }
57
+ /** Test report add options (SAD-0031: task removed, content via content-file) */
58
+ export interface TestReportAddOptions {
59
+ skipCount?: number;
60
+ command?: string;
61
+ duration?: number;
62
+ content?: string;
63
+ }
64
+ /** Lesson record (post-URD-026: metadata removed) */
65
+ export interface Lesson {
66
+ id: number;
67
+ text: string;
68
+ description: string;
69
+ updated_at: string;
70
+ created_at: string;
71
+ }
72
+ /** @deprecated Lesson add options removed per URD-026 */
73
+ export interface LessonAddOptions {
74
+ }
75
+ /** Lesson result (for show/update output) — content-only, no metadata */
76
+ export interface LessonResult {
77
+ project_id: string;
78
+ content: string;
79
+ created_at: string;
80
+ updated_at: string;
81
+ }
82
+ /** Lesson update fields — content only, no metadata */
83
+ export interface LessonUpdateFields {
84
+ content?: string;
85
+ }
86
+ //# sourceMappingURL=review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/models/review.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE1D,oBAAoB;AACpB,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,UAAU,CAAC;IACxB,OAAO,EAAE,aAAa,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,kCAAkC;AAClC,MAAM,WAAW,YAAa,SAAQ,MAAM;CAAG;AAE/C,yBAAyB;AACzB,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,yBAAyB;AACzB,MAAM,WAAW,gBAAiB,SAAQ,UAAU;CAAG;AAEvD,iFAAiF;AACjF,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qDAAqD;AACrD,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,yDAAyD;AACzD,MAAM,WAAW,gBAAgB;CAEhC;AAED,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,uDAAuD;AACvD,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ // Review-related type definitions
3
+ // SAD-0003: MOD-013 Review & Test Report Commands
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ //# sourceMappingURL=review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/models/review.ts"],"names":[],"mappings":";AAAA,kCAAkC;AAClC,kDAAkD"}
@@ -0,0 +1,38 @@
1
+ import type { SprintStatus, TaskStatus } from './common';
2
+ /** Sprint record from database */
3
+ export interface Sprint {
4
+ id: string;
5
+ name: string;
6
+ status: SprintStatus;
7
+ goal: string | null;
8
+ started_at: string | null;
9
+ closed_at: string | null;
10
+ created_at: string;
11
+ updated_at: string;
12
+ }
13
+ /** Result of sprint creation */
14
+ export interface SprintResult {
15
+ id: string;
16
+ name: string;
17
+ goal: string | null;
18
+ status: SprintStatus;
19
+ created_at: string;
20
+ }
21
+ /** Sprint overview with task counts by status */
22
+ export interface SprintOverview {
23
+ id: string;
24
+ name: string;
25
+ goal: string | null;
26
+ status: SprintStatus;
27
+ taskCounts: Record<TaskStatus, number>;
28
+ totalTasks: number;
29
+ created_at: string;
30
+ updated_at: string;
31
+ closed_at: string | null;
32
+ }
33
+ /** Options for sprint creation */
34
+ export interface SprintCreateOptions {
35
+ name?: string;
36
+ goal?: string;
37
+ }
38
+ //# sourceMappingURL=sprint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sprint.d.ts","sourceRoot":"","sources":["../../src/models/sprint.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEzD,kCAAkC;AAClC,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,gCAAgC;AAChC,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,iDAAiD;AACjD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,kCAAkC;AAClC,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ // Sprint-related type definitions
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ //# sourceMappingURL=sprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sprint.js","sourceRoot":"","sources":["../../src/models/sprint.ts"],"names":[],"mappings":";AAAA,kCAAkC"}
@@ -0,0 +1,75 @@
1
+ import type { TaskType, TaskPriority, TaskStatus, RoleName, TaskStage } from './common';
2
+ /** Task record from database */
3
+ export interface Task {
4
+ id: string;
5
+ sprint_id: string;
6
+ parent_id: string | null;
7
+ description: string;
8
+ task_type: TaskType;
9
+ priority: TaskPriority;
10
+ owner: RoleName;
11
+ points: number;
12
+ status: TaskStatus;
13
+ stage: TaskStage;
14
+ session_key: string | null;
15
+ started_at: string | null;
16
+ completed_at: string | null;
17
+ scope_in: string | null;
18
+ scope_out: string | null;
19
+ decisions: string | null;
20
+ dependencies: string | null;
21
+ acceptance: string | null;
22
+ created_at: string;
23
+ updated_at: string;
24
+ removed_at: string | null;
25
+ }
26
+ /** Result of task creation */
27
+ export interface TaskResult {
28
+ id: string;
29
+ sprint_id: string;
30
+ parent_id: string | null;
31
+ description: string;
32
+ task_type: TaskType;
33
+ priority: TaskPriority;
34
+ owner: RoleName;
35
+ points: number;
36
+ status: TaskStatus;
37
+ stage: TaskStage;
38
+ created_at: string;
39
+ }
40
+ /** Detailed task information for `task show` */
41
+ export interface TaskDetail extends Task {
42
+ sprint_name: string | null;
43
+ parent_description: string | null;
44
+ }
45
+ /** Options for task creation */
46
+ export interface TaskAddOptions {
47
+ /** Explicit task ID (4-digit zero-padded NNNN). If not provided, auto-generated. */
48
+ task_id?: string;
49
+ parent_id?: string;
50
+ task_type?: TaskType;
51
+ priority?: TaskPriority;
52
+ points?: number;
53
+ /** Initial stage (defaults to 'Planning') */
54
+ stage?: TaskStage;
55
+ }
56
+ /** Options for task move */
57
+ export interface TaskMoveContext {
58
+ session_key?: string;
59
+ owner?: string;
60
+ }
61
+ /** Fields that can be updated on a task (metadata only — no stage/owner/sprint) */
62
+ export interface TaskUpdateFields {
63
+ description?: string;
64
+ task_type?: TaskType;
65
+ priority?: TaskPriority;
66
+ points?: number;
67
+ scope_in?: string;
68
+ scope_out?: string;
69
+ acceptance?: string;
70
+ decisions?: string;
71
+ dependencies?: string;
72
+ /** Raw content from --content-file (frontmatter extraction handled by service) */
73
+ content_file_content?: string;
74
+ }
75
+ //# sourceMappingURL=task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/models/task.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAExF,gCAAgC;AAChC,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,QAAQ,CAAC;IACpB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,8BAA8B;AAC9B,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,QAAQ,CAAC;IACpB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,QAAQ,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,gDAAgD;AAChD,MAAM,WAAW,UAAW,SAAQ,IAAI;IACtC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,gCAAgC;AAChC,MAAM,WAAW,cAAc;IAC7B,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,4BAA4B;AAC5B,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,mFAAmF;AACnF,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,QAAQ,CAAC;IACrB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ // Task-related type definitions
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ //# sourceMappingURL=task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/models/task.ts"],"names":[],"mappings":";AAAA,gCAAgC"}
@@ -0,0 +1,25 @@
1
+ /** Severity of a validation issue */
2
+ export type IssueSeverity = 'error' | 'warning' | 'info';
3
+ /** A single validation issue */
4
+ export interface ValidationIssue {
5
+ category: string;
6
+ severity: IssueSeverity;
7
+ message: string;
8
+ entity?: string;
9
+ detail?: string;
10
+ }
11
+ /** Result of board validation */
12
+ export interface ValidationResult {
13
+ sprint_id: string;
14
+ isValid: boolean;
15
+ issues: ValidationIssue[];
16
+ }
17
+ /** Result of spawn legality check */
18
+ export interface SpawnResult {
19
+ sprint_id: string;
20
+ task_id: string;
21
+ isLegal: boolean;
22
+ verdict: 'OK' | 'ERR-SPAWN-SPRINT' | 'ERR-SPAWN-STATE' | 'ERR-SPAWN-ROLE';
23
+ reason?: string;
24
+ }
25
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/models/validation.ts"],"names":[],"mappings":"AAEA,qCAAqC;AACrC,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzD,gCAAgC;AAChC,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,aAAa,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,iCAAiC;AACjC,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,qCAAqC;AACrC,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,IAAI,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ // Validation-related type definitions
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/models/validation.ts"],"names":[],"mappings":";AAAA,sCAAsC"}
@@ -0,0 +1,16 @@
1
+ import type Database from 'better-sqlite3';
2
+ import type { AuditReport, AuditOptions } from './audit-checks/types';
3
+ import { ALL_CHECK_NAMES } from './audit-checks/types';
4
+ import { FixEngine } from './audit-checks/fix-engine';
5
+ /**
6
+ * Run a full audit with the given options.
7
+ *
8
+ * @param db - Database connection
9
+ * @param opts - Audit options (checks, sprintId, fix, fixDryRun)
10
+ * @returns AuditReport with results and exit code
11
+ * @throws AuditUnknownCheckError if unknown check name
12
+ * @throws AuditSprintNotFoundError if sprint not found
13
+ */
14
+ export declare function runAudit(db: Database.Database, opts: AuditOptions): AuditReport;
15
+ export { ALL_CHECK_NAMES, FixEngine };
16
+ //# sourceMappingURL=audit-check-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-check-service.d.ts","sourceRoot":"","sources":["../../src/services/audit-check-service.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAA+B,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAE,eAAe,EAAsB,MAAM,sBAAsB,CAAC;AAY3E,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAuBtD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,WAAW,CA0F/E;AAED,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC"}