@gitgov/core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (469) hide show
  1. package/README.md +303 -0
  2. package/dist/scripts/compile-json-to-types.d.ts +11 -0
  3. package/dist/scripts/compile-json-to-types.d.ts.map +1 -0
  4. package/dist/scripts/compile-json-to-types.js +129 -0
  5. package/dist/scripts/compile-json-to-types.js.map +1 -0
  6. package/dist/scripts/diagnose-duplicates.d.ts +7 -0
  7. package/dist/scripts/diagnose-duplicates.d.ts.map +1 -0
  8. package/dist/scripts/diagnose-duplicates.js +72 -0
  9. package/dist/scripts/diagnose-duplicates.js.map +1 -0
  10. package/dist/scripts/generate-indexes.d.ts +22 -0
  11. package/dist/scripts/generate-indexes.d.ts.map +1 -0
  12. package/dist/scripts/generate-indexes.js +168 -0
  13. package/dist/scripts/generate-indexes.js.map +1 -0
  14. package/dist/scripts/sync-schemas.d.ts +10 -0
  15. package/dist/scripts/sync-schemas.d.ts.map +1 -0
  16. package/dist/scripts/sync-schemas.js +84 -0
  17. package/dist/scripts/sync-schemas.js.map +1 -0
  18. package/dist/scripts/sync-workflow-configs.d.ts +11 -0
  19. package/dist/scripts/sync-workflow-configs.d.ts.map +1 -0
  20. package/dist/scripts/sync-workflow-configs.js +61 -0
  21. package/dist/scripts/sync-workflow-configs.js.map +1 -0
  22. package/dist/scripts/update-diagram.d.ts +7 -0
  23. package/dist/scripts/update-diagram.d.ts.map +1 -0
  24. package/dist/scripts/update-diagram.js +47 -0
  25. package/dist/scripts/update-diagram.js.map +1 -0
  26. package/dist/scripts/validate-schemas.d.ts +18 -0
  27. package/dist/scripts/validate-schemas.d.ts.map +1 -0
  28. package/dist/scripts/validate-schemas.js +313 -0
  29. package/dist/scripts/validate-schemas.js.map +1 -0
  30. package/dist/src/adapters/backlog_adapter/backlog_adapter.integration.test.d.ts +2 -0
  31. package/dist/src/adapters/backlog_adapter/backlog_adapter.integration.test.d.ts.map +1 -0
  32. package/dist/src/adapters/backlog_adapter/backlog_adapter.integration.test.js +507 -0
  33. package/dist/src/adapters/backlog_adapter/backlog_adapter.integration.test.js.map +1 -0
  34. package/dist/src/adapters/backlog_adapter/backlog_adapter.test.d.ts +2 -0
  35. package/dist/src/adapters/backlog_adapter/backlog_adapter.test.d.ts.map +1 -0
  36. package/dist/src/adapters/backlog_adapter/backlog_adapter.test.js +1282 -0
  37. package/dist/src/adapters/backlog_adapter/backlog_adapter.test.js.map +1 -0
  38. package/dist/src/adapters/backlog_adapter/backlog_adapter_e2e.test.d.ts +10 -0
  39. package/dist/src/adapters/backlog_adapter/backlog_adapter_e2e.test.d.ts.map +1 -0
  40. package/dist/src/adapters/backlog_adapter/backlog_adapter_e2e.test.js +144 -0
  41. package/dist/src/adapters/backlog_adapter/backlog_adapter_e2e.test.js.map +1 -0
  42. package/dist/src/adapters/backlog_adapter/index.d.ts +213 -0
  43. package/dist/src/adapters/backlog_adapter/index.d.ts.map +1 -0
  44. package/dist/src/adapters/backlog_adapter/index.js +924 -0
  45. package/dist/src/adapters/backlog_adapter/index.js.map +1 -0
  46. package/dist/src/adapters/changelog_adapter/changelog_adapter.test.d.ts +2 -0
  47. package/dist/src/adapters/changelog_adapter/changelog_adapter.test.d.ts.map +1 -0
  48. package/dist/src/adapters/changelog_adapter/changelog_adapter.test.js +505 -0
  49. package/dist/src/adapters/changelog_adapter/changelog_adapter.test.js.map +1 -0
  50. package/dist/src/adapters/changelog_adapter/index.d.ts +101 -0
  51. package/dist/src/adapters/changelog_adapter/index.d.ts.map +1 -0
  52. package/dist/src/adapters/changelog_adapter/index.js +197 -0
  53. package/dist/src/adapters/changelog_adapter/index.js.map +1 -0
  54. package/dist/src/adapters/execution_adapter/execution_adapter.test.d.ts +2 -0
  55. package/dist/src/adapters/execution_adapter/execution_adapter.test.d.ts.map +1 -0
  56. package/dist/src/adapters/execution_adapter/execution_adapter.test.js +266 -0
  57. package/dist/src/adapters/execution_adapter/execution_adapter.test.js.map +1 -0
  58. package/dist/src/adapters/execution_adapter/index.d.ts +90 -0
  59. package/dist/src/adapters/execution_adapter/index.d.ts.map +1 -0
  60. package/dist/src/adapters/execution_adapter/index.js +150 -0
  61. package/dist/src/adapters/execution_adapter/index.js.map +1 -0
  62. package/dist/src/adapters/feedback_adapter/feedback_adapter.test.d.ts +2 -0
  63. package/dist/src/adapters/feedback_adapter/feedback_adapter.test.d.ts.map +1 -0
  64. package/dist/src/adapters/feedback_adapter/feedback_adapter.test.js +256 -0
  65. package/dist/src/adapters/feedback_adapter/feedback_adapter.test.js.map +1 -0
  66. package/dist/src/adapters/feedback_adapter/index.d.ts +95 -0
  67. package/dist/src/adapters/feedback_adapter/index.d.ts.map +1 -0
  68. package/dist/src/adapters/feedback_adapter/index.js +192 -0
  69. package/dist/src/adapters/feedback_adapter/index.js.map +1 -0
  70. package/dist/src/adapters/identity_adapter/identity_adapter.test.d.ts +2 -0
  71. package/dist/src/adapters/identity_adapter/identity_adapter.test.d.ts.map +1 -0
  72. package/dist/src/adapters/identity_adapter/identity_adapter.test.js +624 -0
  73. package/dist/src/adapters/identity_adapter/identity_adapter.test.js.map +1 -0
  74. package/dist/src/adapters/identity_adapter/index.d.ts +82 -0
  75. package/dist/src/adapters/identity_adapter/index.d.ts.map +1 -0
  76. package/dist/src/adapters/identity_adapter/index.js +336 -0
  77. package/dist/src/adapters/identity_adapter/index.js.map +1 -0
  78. package/dist/src/adapters/index.d.ts +10 -0
  79. package/dist/src/adapters/index.d.ts.map +1 -0
  80. package/dist/src/adapters/index.js +10 -0
  81. package/dist/src/adapters/index.js.map +1 -0
  82. package/dist/src/adapters/indexer_adapter/index.d.ts +214 -0
  83. package/dist/src/adapters/indexer_adapter/index.d.ts.map +1 -0
  84. package/dist/src/adapters/indexer_adapter/index.js +643 -0
  85. package/dist/src/adapters/indexer_adapter/index.js.map +1 -0
  86. package/dist/src/adapters/indexer_adapter/indexer_adapter.test.d.ts +2 -0
  87. package/dist/src/adapters/indexer_adapter/indexer_adapter.test.d.ts.map +1 -0
  88. package/dist/src/adapters/indexer_adapter/indexer_adapter.test.js +409 -0
  89. package/dist/src/adapters/indexer_adapter/indexer_adapter.test.js.map +1 -0
  90. package/dist/src/adapters/metrics_adapter/index.d.ts +189 -0
  91. package/dist/src/adapters/metrics_adapter/index.d.ts.map +1 -0
  92. package/dist/src/adapters/metrics_adapter/index.js +592 -0
  93. package/dist/src/adapters/metrics_adapter/index.js.map +1 -0
  94. package/dist/src/adapters/metrics_adapter/metrics_adapter.test.d.ts +2 -0
  95. package/dist/src/adapters/metrics_adapter/metrics_adapter.test.d.ts.map +1 -0
  96. package/dist/src/adapters/metrics_adapter/metrics_adapter.test.js +558 -0
  97. package/dist/src/adapters/metrics_adapter/metrics_adapter.test.js.map +1 -0
  98. package/dist/src/adapters/project_adapter/index.d.ts +164 -0
  99. package/dist/src/adapters/project_adapter/index.d.ts.map +1 -0
  100. package/dist/src/adapters/project_adapter/index.js +445 -0
  101. package/dist/src/adapters/project_adapter/index.js.map +1 -0
  102. package/dist/src/adapters/project_adapter/project_adapter.test.d.ts +2 -0
  103. package/dist/src/adapters/project_adapter/project_adapter.test.d.ts.map +1 -0
  104. package/dist/src/adapters/project_adapter/project_adapter.test.js +627 -0
  105. package/dist/src/adapters/project_adapter/project_adapter.test.js.map +1 -0
  106. package/dist/src/adapters/workflow_methodology_adapter/index.d.ts +75 -0
  107. package/dist/src/adapters/workflow_methodology_adapter/index.d.ts.map +1 -0
  108. package/dist/src/adapters/workflow_methodology_adapter/index.js +205 -0
  109. package/dist/src/adapters/workflow_methodology_adapter/index.js.map +1 -0
  110. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter.test.d.ts +2 -0
  111. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter.test.d.ts.map +1 -0
  112. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter.test.js +463 -0
  113. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter.test.js.map +1 -0
  114. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_integration.test.d.ts +2 -0
  115. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_integration.test.d.ts.map +1 -0
  116. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_integration.test.js +287 -0
  117. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_integration.test.js.map +1 -0
  118. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_scrum_integration.test.d.ts +2 -0
  119. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_scrum_integration.test.d.ts.map +1 -0
  120. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_scrum_integration.test.js +278 -0
  121. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_scrum_integration.test.js.map +1 -0
  122. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_default.json +188 -0
  123. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_scrum.json +284 -0
  124. package/dist/src/config_manager/config_manager.test.d.ts +2 -0
  125. package/dist/src/config_manager/config_manager.test.d.ts.map +1 -0
  126. package/dist/src/config_manager/config_manager.test.js +321 -0
  127. package/dist/src/config_manager/config_manager.test.js.map +1 -0
  128. package/dist/src/config_manager/index.d.ts +107 -0
  129. package/dist/src/config_manager/index.d.ts.map +1 -0
  130. package/dist/src/config_manager/index.js +192 -0
  131. package/dist/src/config_manager/index.js.map +1 -0
  132. package/dist/src/crypto/checksum.d.ts +6 -0
  133. package/dist/src/crypto/checksum.d.ts.map +1 -0
  134. package/dist/src/crypto/checksum.js +38 -0
  135. package/dist/src/crypto/checksum.js.map +1 -0
  136. package/dist/src/crypto/checksum.test.d.ts +2 -0
  137. package/dist/src/crypto/checksum.test.d.ts.map +1 -0
  138. package/dist/src/crypto/checksum.test.js +167 -0
  139. package/dist/src/crypto/checksum.test.js.map +1 -0
  140. package/dist/src/crypto/index.d.ts +3 -0
  141. package/dist/src/crypto/index.d.ts.map +1 -0
  142. package/dist/src/crypto/index.js +3 -0
  143. package/dist/src/crypto/index.js.map +1 -0
  144. package/dist/src/crypto/signatures.d.ts +24 -0
  145. package/dist/src/crypto/signatures.d.ts.map +1 -0
  146. package/dist/src/crypto/signatures.js +67 -0
  147. package/dist/src/crypto/signatures.js.map +1 -0
  148. package/dist/src/crypto/signatures.test.d.ts +2 -0
  149. package/dist/src/crypto/signatures.test.d.ts.map +1 -0
  150. package/dist/src/crypto/signatures.test.js +378 -0
  151. package/dist/src/crypto/signatures.test.js.map +1 -0
  152. package/dist/src/diagram_generator/diagram_generator.d.ts +76 -0
  153. package/dist/src/diagram_generator/diagram_generator.d.ts.map +1 -0
  154. package/dist/src/diagram_generator/diagram_generator.js +233 -0
  155. package/dist/src/diagram_generator/diagram_generator.js.map +1 -0
  156. package/dist/src/diagram_generator/graph_validator.d.ts +19 -0
  157. package/dist/src/diagram_generator/graph_validator.d.ts.map +1 -0
  158. package/dist/src/diagram_generator/graph_validator.js +98 -0
  159. package/dist/src/diagram_generator/graph_validator.js.map +1 -0
  160. package/dist/src/diagram_generator/index.d.ts +4 -0
  161. package/dist/src/diagram_generator/index.d.ts.map +1 -0
  162. package/dist/src/diagram_generator/index.js +4 -0
  163. package/dist/src/diagram_generator/index.js.map +1 -0
  164. package/dist/src/diagram_generator/mermaid_renderer.d.ts +82 -0
  165. package/dist/src/diagram_generator/mermaid_renderer.d.ts.map +1 -0
  166. package/dist/src/diagram_generator/mermaid_renderer.js +306 -0
  167. package/dist/src/diagram_generator/mermaid_renderer.js.map +1 -0
  168. package/dist/src/diagram_generator/relationship_analyzer.d.ts +116 -0
  169. package/dist/src/diagram_generator/relationship_analyzer.d.ts.map +1 -0
  170. package/dist/src/diagram_generator/relationship_analyzer.js +381 -0
  171. package/dist/src/diagram_generator/relationship_analyzer.js.map +1 -0
  172. package/dist/src/event_bus/event_bus.d.ts +110 -0
  173. package/dist/src/event_bus/event_bus.d.ts.map +1 -0
  174. package/dist/src/event_bus/event_bus.js +161 -0
  175. package/dist/src/event_bus/event_bus.js.map +1 -0
  176. package/dist/src/event_bus/event_bus.test.d.ts +2 -0
  177. package/dist/src/event_bus/event_bus.test.d.ts.map +1 -0
  178. package/dist/src/event_bus/event_bus.test.js +332 -0
  179. package/dist/src/event_bus/event_bus.test.js.map +1 -0
  180. package/dist/src/event_bus/event_bus_integration.test.d.ts +2 -0
  181. package/dist/src/event_bus/event_bus_integration.test.d.ts.map +1 -0
  182. package/dist/src/event_bus/event_bus_integration.test.js +474 -0
  183. package/dist/src/event_bus/event_bus_integration.test.js.map +1 -0
  184. package/dist/src/event_bus/index.d.ts +3 -0
  185. package/dist/src/event_bus/index.d.ts.map +1 -0
  186. package/dist/src/event_bus/index.js +3 -0
  187. package/dist/src/event_bus/index.js.map +1 -0
  188. package/dist/src/event_bus/types.d.ts +203 -0
  189. package/dist/src/event_bus/types.d.ts.map +1 -0
  190. package/dist/src/event_bus/types.js +5 -0
  191. package/dist/src/event_bus/types.js.map +1 -0
  192. package/dist/src/factories/actor_factory.d.ts +6 -0
  193. package/dist/src/factories/actor_factory.d.ts.map +1 -0
  194. package/dist/src/factories/actor_factory.js +25 -0
  195. package/dist/src/factories/actor_factory.js.map +1 -0
  196. package/dist/src/factories/actor_factory.test.d.ts +2 -0
  197. package/dist/src/factories/actor_factory.test.d.ts.map +1 -0
  198. package/dist/src/factories/actor_factory.test.js +169 -0
  199. package/dist/src/factories/actor_factory.test.js.map +1 -0
  200. package/dist/src/factories/agent_factory.d.ts +6 -0
  201. package/dist/src/factories/agent_factory.d.ts.map +1 -0
  202. package/dist/src/factories/agent_factory.js +25 -0
  203. package/dist/src/factories/agent_factory.js.map +1 -0
  204. package/dist/src/factories/agent_factory.test.d.ts +2 -0
  205. package/dist/src/factories/agent_factory.test.d.ts.map +1 -0
  206. package/dist/src/factories/agent_factory.test.js +199 -0
  207. package/dist/src/factories/agent_factory.test.js.map +1 -0
  208. package/dist/src/factories/changelog_factory.d.ts +9 -0
  209. package/dist/src/factories/changelog_factory.d.ts.map +1 -0
  210. package/dist/src/factories/changelog_factory.js +46 -0
  211. package/dist/src/factories/changelog_factory.js.map +1 -0
  212. package/dist/src/factories/changelog_factory.test.d.ts +2 -0
  213. package/dist/src/factories/changelog_factory.test.d.ts.map +1 -0
  214. package/dist/src/factories/changelog_factory.test.js +368 -0
  215. package/dist/src/factories/changelog_factory.test.js.map +1 -0
  216. package/dist/src/factories/cycle_factory.d.ts +6 -0
  217. package/dist/src/factories/cycle_factory.d.ts.map +1 -0
  218. package/dist/src/factories/cycle_factory.js +28 -0
  219. package/dist/src/factories/cycle_factory.js.map +1 -0
  220. package/dist/src/factories/cycle_factory.test.d.ts +2 -0
  221. package/dist/src/factories/cycle_factory.test.d.ts.map +1 -0
  222. package/dist/src/factories/cycle_factory.test.js +175 -0
  223. package/dist/src/factories/cycle_factory.test.js.map +1 -0
  224. package/dist/src/factories/execution_factory.d.ts +9 -0
  225. package/dist/src/factories/execution_factory.d.ts.map +1 -0
  226. package/dist/src/factories/execution_factory.js +29 -0
  227. package/dist/src/factories/execution_factory.js.map +1 -0
  228. package/dist/src/factories/execution_factory.test.d.ts +2 -0
  229. package/dist/src/factories/execution_factory.test.d.ts.map +1 -0
  230. package/dist/src/factories/execution_factory.test.js +207 -0
  231. package/dist/src/factories/execution_factory.test.js.map +1 -0
  232. package/dist/src/factories/feedback_factory.d.ts +9 -0
  233. package/dist/src/factories/feedback_factory.d.ts.map +1 -0
  234. package/dist/src/factories/feedback_factory.js +30 -0
  235. package/dist/src/factories/feedback_factory.js.map +1 -0
  236. package/dist/src/factories/feedback_factory.test.d.ts +2 -0
  237. package/dist/src/factories/feedback_factory.test.d.ts.map +1 -0
  238. package/dist/src/factories/feedback_factory.test.js +256 -0
  239. package/dist/src/factories/feedback_factory.test.js.map +1 -0
  240. package/dist/src/factories/index.d.ts +9 -0
  241. package/dist/src/factories/index.d.ts.map +1 -0
  242. package/dist/src/factories/index.js +9 -0
  243. package/dist/src/factories/index.js.map +1 -0
  244. package/dist/src/factories/task_factory.d.ts +6 -0
  245. package/dist/src/factories/task_factory.d.ts.map +1 -0
  246. package/dist/src/factories/task_factory.js +30 -0
  247. package/dist/src/factories/task_factory.js.map +1 -0
  248. package/dist/src/factories/task_factory.test.d.ts +2 -0
  249. package/dist/src/factories/task_factory.test.d.ts.map +1 -0
  250. package/dist/src/factories/task_factory.test.js +197 -0
  251. package/dist/src/factories/task_factory.test.js.map +1 -0
  252. package/dist/src/factories/workflow_methodology_factory.d.ts +11 -0
  253. package/dist/src/factories/workflow_methodology_factory.d.ts.map +1 -0
  254. package/dist/src/factories/workflow_methodology_factory.js +173 -0
  255. package/dist/src/factories/workflow_methodology_factory.js.map +1 -0
  256. package/dist/src/factories/workflow_methodology_factory.test.d.ts +2 -0
  257. package/dist/src/factories/workflow_methodology_factory.test.d.ts.map +1 -0
  258. package/dist/src/factories/workflow_methodology_factory.test.js +244 -0
  259. package/dist/src/factories/workflow_methodology_factory.test.js.map +1 -0
  260. package/dist/src/index.d.ts +21 -0
  261. package/dist/src/index.d.ts.map +1 -0
  262. package/dist/src/index.js +23 -0
  263. package/dist/src/index.js.map +1 -0
  264. package/dist/src/integration/cycles_tasks_integration.test.d.ts +2 -0
  265. package/dist/src/integration/cycles_tasks_integration.test.d.ts.map +1 -0
  266. package/dist/src/integration/cycles_tasks_integration.test.js +258 -0
  267. package/dist/src/integration/cycles_tasks_integration.test.js.map +1 -0
  268. package/dist/src/integration/schema_integration.test.d.ts +8 -0
  269. package/dist/src/integration/schema_integration.test.d.ts.map +1 -0
  270. package/dist/src/integration/schema_integration.test.js +279 -0
  271. package/dist/src/integration/schema_integration.test.js.map +1 -0
  272. package/dist/src/logger/index.d.ts +2 -0
  273. package/dist/src/logger/index.d.ts.map +1 -0
  274. package/dist/src/logger/index.js +2 -0
  275. package/dist/src/logger/index.js.map +1 -0
  276. package/dist/src/logger/logger.d.ts +10 -0
  277. package/dist/src/logger/logger.d.ts.map +1 -0
  278. package/dist/src/logger/logger.js +48 -0
  279. package/dist/src/logger/logger.js.map +1 -0
  280. package/dist/src/schemas/errors.d.ts +28 -0
  281. package/dist/src/schemas/errors.d.ts.map +1 -0
  282. package/dist/src/schemas/errors.js +31 -0
  283. package/dist/src/schemas/errors.js.map +1 -0
  284. package/dist/src/schemas/generated/actor_record_schema.json +91 -0
  285. package/dist/src/schemas/generated/agent_record_schema.json +142 -0
  286. package/dist/src/schemas/generated/changelog_record_schema.json +227 -0
  287. package/dist/src/schemas/generated/cycle_record_schema.json +80 -0
  288. package/dist/src/schemas/generated/embedded_metadata_schema.json +318 -0
  289. package/dist/src/schemas/generated/execution_record_schema.json +89 -0
  290. package/dist/src/schemas/generated/feedback_record_schema.json +83 -0
  291. package/dist/src/schemas/generated/index.d.ts +2221 -0
  292. package/dist/src/schemas/generated/index.d.ts.map +1 -0
  293. package/dist/src/schemas/generated/index.js +48 -0
  294. package/dist/src/schemas/generated/index.js.map +1 -0
  295. package/dist/src/schemas/generated/task_record_schema.json +103 -0
  296. package/dist/src/schemas/generated/workflow_methodology_record_schema.json +393 -0
  297. package/dist/src/schemas/index.d.ts +4 -0
  298. package/dist/src/schemas/index.d.ts.map +1 -0
  299. package/dist/src/schemas/index.js +4 -0
  300. package/dist/src/schemas/index.js.map +1 -0
  301. package/dist/src/schemas/schema_cache.d.ts +39 -0
  302. package/dist/src/schemas/schema_cache.d.ts.map +1 -0
  303. package/dist/src/schemas/schema_cache.js +109 -0
  304. package/dist/src/schemas/schema_cache.js.map +1 -0
  305. package/dist/src/schemas/schema_cache.test.d.ts +2 -0
  306. package/dist/src/schemas/schema_cache.test.d.ts.map +1 -0
  307. package/dist/src/schemas/schema_cache.test.js +163 -0
  308. package/dist/src/schemas/schema_cache.test.js.map +1 -0
  309. package/dist/src/store/index.d.ts +2 -0
  310. package/dist/src/store/index.d.ts.map +1 -0
  311. package/dist/src/store/index.js +2 -0
  312. package/dist/src/store/index.js.map +1 -0
  313. package/dist/src/store/record_store.d.ts +30 -0
  314. package/dist/src/store/record_store.d.ts.map +1 -0
  315. package/dist/src/store/record_store.js +83 -0
  316. package/dist/src/store/record_store.js.map +1 -0
  317. package/dist/src/store/record_store.test.d.ts +2 -0
  318. package/dist/src/store/record_store.test.d.ts.map +1 -0
  319. package/dist/src/store/record_store.test.js +646 -0
  320. package/dist/src/store/record_store.test.js.map +1 -0
  321. package/dist/src/types/common.types.d.ts +43 -0
  322. package/dist/src/types/common.types.d.ts.map +1 -0
  323. package/dist/src/types/common.types.js +13 -0
  324. package/dist/src/types/common.types.js.map +1 -0
  325. package/dist/src/types/embedded.types.d.ts +17 -0
  326. package/dist/src/types/embedded.types.d.ts.map +1 -0
  327. package/dist/src/types/embedded.types.js +2 -0
  328. package/dist/src/types/embedded.types.js.map +1 -0
  329. package/dist/src/types/generated/actor_record.d.ts +45 -0
  330. package/dist/src/types/generated/actor_record.d.ts.map +1 -0
  331. package/dist/src/types/generated/actor_record.js +7 -0
  332. package/dist/src/types/generated/actor_record.js.map +1 -0
  333. package/dist/src/types/generated/agent_record.d.ts +40 -0
  334. package/dist/src/types/generated/agent_record.d.ts.map +1 -0
  335. package/dist/src/types/generated/agent_record.js +7 -0
  336. package/dist/src/types/generated/agent_record.js.map +1 -0
  337. package/dist/src/types/generated/changelog_record.d.ts +100 -0
  338. package/dist/src/types/generated/changelog_record.d.ts.map +1 -0
  339. package/dist/src/types/generated/changelog_record.js +7 -0
  340. package/dist/src/types/generated/changelog_record.js.map +1 -0
  341. package/dist/src/types/generated/cycle_record.d.ts +36 -0
  342. package/dist/src/types/generated/cycle_record.d.ts.map +1 -0
  343. package/dist/src/types/generated/cycle_record.js +7 -0
  344. package/dist/src/types/generated/cycle_record.js.map +1 -0
  345. package/dist/src/types/generated/embedded_metadata.d.ts +94 -0
  346. package/dist/src/types/generated/embedded_metadata.d.ts.map +1 -0
  347. package/dist/src/types/generated/embedded_metadata.js +7 -0
  348. package/dist/src/types/generated/embedded_metadata.js.map +1 -0
  349. package/dist/src/types/generated/execution_record.d.ts +39 -0
  350. package/dist/src/types/generated/execution_record.d.ts.map +1 -0
  351. package/dist/src/types/generated/execution_record.js +7 -0
  352. package/dist/src/types/generated/execution_record.js.map +1 -0
  353. package/dist/src/types/generated/feedback_record.d.ts +43 -0
  354. package/dist/src/types/generated/feedback_record.d.ts.map +1 -0
  355. package/dist/src/types/generated/feedback_record.js +7 -0
  356. package/dist/src/types/generated/feedback_record.js.map +1 -0
  357. package/dist/src/types/generated/index.d.ts +15 -0
  358. package/dist/src/types/generated/index.d.ts.map +1 -0
  359. package/dist/src/types/generated/index.js +15 -0
  360. package/dist/src/types/generated/index.js.map +1 -0
  361. package/dist/src/types/generated/task_record.d.ts +47 -0
  362. package/dist/src/types/generated/task_record.d.ts.map +1 -0
  363. package/dist/src/types/generated/task_record.js +7 -0
  364. package/dist/src/types/generated/task_record.js.map +1 -0
  365. package/dist/src/types/generated/workflow_methodology_record.d.ts +211 -0
  366. package/dist/src/types/generated/workflow_methodology_record.d.ts.map +1 -0
  367. package/dist/src/types/generated/workflow_methodology_record.js +7 -0
  368. package/dist/src/types/generated/workflow_methodology_record.js.map +1 -0
  369. package/dist/src/types/index.d.ts +4 -0
  370. package/dist/src/types/index.d.ts.map +1 -0
  371. package/dist/src/types/index.js +4 -0
  372. package/dist/src/types/index.js.map +1 -0
  373. package/dist/src/utils/id_generator.d.ts +44 -0
  374. package/dist/src/utils/id_generator.d.ts.map +1 -0
  375. package/dist/src/utils/id_generator.js +107 -0
  376. package/dist/src/utils/id_generator.js.map +1 -0
  377. package/dist/src/utils/id_generator.test.d.ts +2 -0
  378. package/dist/src/utils/id_generator.test.d.ts.map +1 -0
  379. package/dist/src/utils/id_generator.test.js +100 -0
  380. package/dist/src/utils/id_generator.test.js.map +1 -0
  381. package/dist/src/utils/index.d.ts +2 -0
  382. package/dist/src/utils/index.d.ts.map +1 -0
  383. package/dist/src/utils/index.js +3 -0
  384. package/dist/src/utils/index.js.map +1 -0
  385. package/dist/src/validation/actor_validator.d.ts +21 -0
  386. package/dist/src/validation/actor_validator.d.ts.map +1 -0
  387. package/dist/src/validation/actor_validator.js +48 -0
  388. package/dist/src/validation/actor_validator.js.map +1 -0
  389. package/dist/src/validation/actor_validator.test.d.ts +2 -0
  390. package/dist/src/validation/actor_validator.test.d.ts.map +1 -0
  391. package/dist/src/validation/actor_validator.test.js +83 -0
  392. package/dist/src/validation/actor_validator.test.js.map +1 -0
  393. package/dist/src/validation/agent_validator.d.ts +30 -0
  394. package/dist/src/validation/agent_validator.d.ts.map +1 -0
  395. package/dist/src/validation/agent_validator.js +66 -0
  396. package/dist/src/validation/agent_validator.js.map +1 -0
  397. package/dist/src/validation/agent_validator.test.d.ts +2 -0
  398. package/dist/src/validation/agent_validator.test.d.ts.map +1 -0
  399. package/dist/src/validation/agent_validator.test.js +73 -0
  400. package/dist/src/validation/agent_validator.test.js.map +1 -0
  401. package/dist/src/validation/changelog_validator.d.ts +23 -0
  402. package/dist/src/validation/changelog_validator.d.ts.map +1 -0
  403. package/dist/src/validation/changelog_validator.js +58 -0
  404. package/dist/src/validation/changelog_validator.js.map +1 -0
  405. package/dist/src/validation/changelog_validator.test.d.ts +2 -0
  406. package/dist/src/validation/changelog_validator.test.d.ts.map +1 -0
  407. package/dist/src/validation/changelog_validator.test.js +401 -0
  408. package/dist/src/validation/changelog_validator.test.js.map +1 -0
  409. package/dist/src/validation/common.d.ts +10 -0
  410. package/dist/src/validation/common.d.ts.map +1 -0
  411. package/dist/src/validation/common.js +12 -0
  412. package/dist/src/validation/common.js.map +1 -0
  413. package/dist/src/validation/cycle_validator.d.ts +24 -0
  414. package/dist/src/validation/cycle_validator.d.ts.map +1 -0
  415. package/dist/src/validation/cycle_validator.js +51 -0
  416. package/dist/src/validation/cycle_validator.js.map +1 -0
  417. package/dist/src/validation/cycle_validator.test.d.ts +2 -0
  418. package/dist/src/validation/cycle_validator.test.d.ts.map +1 -0
  419. package/dist/src/validation/cycle_validator.test.js +182 -0
  420. package/dist/src/validation/cycle_validator.test.js.map +1 -0
  421. package/dist/src/validation/embedded_metadata_validator.d.ts +26 -0
  422. package/dist/src/validation/embedded_metadata_validator.d.ts.map +1 -0
  423. package/dist/src/validation/embedded_metadata_validator.js +122 -0
  424. package/dist/src/validation/embedded_metadata_validator.js.map +1 -0
  425. package/dist/src/validation/embedded_metadata_validator.test.d.ts +2 -0
  426. package/dist/src/validation/embedded_metadata_validator.test.d.ts.map +1 -0
  427. package/dist/src/validation/embedded_metadata_validator.test.js +316 -0
  428. package/dist/src/validation/embedded_metadata_validator.test.js.map +1 -0
  429. package/dist/src/validation/errors.d.ts +67 -0
  430. package/dist/src/validation/errors.d.ts.map +1 -0
  431. package/dist/src/validation/errors.js +83 -0
  432. package/dist/src/validation/errors.js.map +1 -0
  433. package/dist/src/validation/execution_validator.d.ts +23 -0
  434. package/dist/src/validation/execution_validator.d.ts.map +1 -0
  435. package/dist/src/validation/execution_validator.js +58 -0
  436. package/dist/src/validation/execution_validator.js.map +1 -0
  437. package/dist/src/validation/execution_validator.test.d.ts +2 -0
  438. package/dist/src/validation/execution_validator.test.d.ts.map +1 -0
  439. package/dist/src/validation/execution_validator.test.js +167 -0
  440. package/dist/src/validation/execution_validator.test.js.map +1 -0
  441. package/dist/src/validation/feedback_validator.d.ts +23 -0
  442. package/dist/src/validation/feedback_validator.d.ts.map +1 -0
  443. package/dist/src/validation/feedback_validator.js +58 -0
  444. package/dist/src/validation/feedback_validator.js.map +1 -0
  445. package/dist/src/validation/feedback_validator.test.d.ts +2 -0
  446. package/dist/src/validation/feedback_validator.test.d.ts.map +1 -0
  447. package/dist/src/validation/feedback_validator.test.js +131 -0
  448. package/dist/src/validation/feedback_validator.test.js.map +1 -0
  449. package/dist/src/validation/index.d.ts +11 -0
  450. package/dist/src/validation/index.d.ts.map +1 -0
  451. package/dist/src/validation/index.js +10 -0
  452. package/dist/src/validation/index.js.map +1 -0
  453. package/dist/src/validation/task_validator.d.ts +24 -0
  454. package/dist/src/validation/task_validator.d.ts.map +1 -0
  455. package/dist/src/validation/task_validator.js +50 -0
  456. package/dist/src/validation/task_validator.js.map +1 -0
  457. package/dist/src/validation/task_validator.test.d.ts +2 -0
  458. package/dist/src/validation/task_validator.test.d.ts.map +1 -0
  459. package/dist/src/validation/task_validator.test.js +185 -0
  460. package/dist/src/validation/task_validator.test.js.map +1 -0
  461. package/dist/src/validation/workflow_methodology_validator.d.ts +32 -0
  462. package/dist/src/validation/workflow_methodology_validator.d.ts.map +1 -0
  463. package/dist/src/validation/workflow_methodology_validator.js +91 -0
  464. package/dist/src/validation/workflow_methodology_validator.js.map +1 -0
  465. package/dist/src/validation/workflow_methodology_validator.test.d.ts +2 -0
  466. package/dist/src/validation/workflow_methodology_validator.test.d.ts.map +1 -0
  467. package/dist/src/validation/workflow_methodology_validator.test.js +229 -0
  468. package/dist/src/validation/workflow_methodology_validator.test.js.map +1 -0
  469. package/package.json +63 -0
@@ -0,0 +1,100 @@
1
+ import { generateActorId, generateTaskId, generateCycleId, generateExecutionId, generateChangelogId, generateFeedbackId, parseTimestampedId, parseActorId, isValidTimestampedId } from './id_generator';
2
+ describe('ID Generators', () => {
3
+ describe('generateActorId', () => {
4
+ it('[EARS-1] should create a valid human ID', () => {
5
+ expect(generateActorId('human', 'Camilo Velandia')).toBe('human:camilo-velandia');
6
+ });
7
+ it('[EARS-1] should create a valid agent ID', () => {
8
+ expect(generateActorId('agent', 'Cursor Assistant')).toBe('agent:cursor-assistant');
9
+ });
10
+ });
11
+ describe('generateTaskId', () => {
12
+ it('[EARS-2] should create a valid task ID', () => {
13
+ expect(generateTaskId('Implement Auth Flow', 12345)).toBe('12345-task-implement-auth-flow');
14
+ });
15
+ });
16
+ describe('generateCycleId', () => {
17
+ it('[EARS-3] should create a valid cycle ID', () => {
18
+ expect(generateCycleId('Q4 Sprint 1', 54321)).toBe('54321-cycle-q4-sprint-1');
19
+ });
20
+ });
21
+ describe('generateExecutionId', () => {
22
+ it('[EARS-4] should create a valid execution ID', () => {
23
+ expect(generateExecutionId('Commit changes', 99999)).toBe('99999-exec-commit-changes');
24
+ });
25
+ });
26
+ describe('generateChangelogId', () => {
27
+ it('[EARS-5] should create a valid changelog ID for task entity', () => {
28
+ const entityId = '12345-task-implement-auth-flow';
29
+ expect(generateChangelogId('task', entityId, 88888)).toBe('88888-changelog-task-implement-auth-flow');
30
+ });
31
+ it('[EARS-5] should create a valid changelog ID for system entity', () => {
32
+ expect(generateChangelogId('system', 'payment-gateway', 88888)).toBe('88888-changelog-system-payment-gateway');
33
+ });
34
+ it('[EARS-5] should create a valid changelog ID for configuration entity', () => {
35
+ expect(generateChangelogId('configuration', 'database-config', 88888)).toBe('88888-changelog-configuration-database-config');
36
+ });
37
+ it('[EARS-5] should create a valid changelog ID for cycle entity', () => {
38
+ const entityId = '54321-cycle-sprint-1';
39
+ expect(generateChangelogId('cycle', entityId, 88888)).toBe('88888-changelog-cycle-sprint-1');
40
+ });
41
+ it('[EARS-5] should create a valid changelog ID for agent entity', () => {
42
+ expect(generateChangelogId('agent', 'cursor-assistant', 88888)).toBe('88888-changelog-agent-cursor-assistant');
43
+ });
44
+ });
45
+ describe('generateFeedbackId', () => {
46
+ it('[EARS-6] should create a valid feedback ID', () => {
47
+ expect(generateFeedbackId('Code Review Comments', 77777)).toBe('77777-feedback-code-review-comments');
48
+ });
49
+ });
50
+ describe('parseTimestampedId', () => {
51
+ it('[EARS-7] should parse a valid task ID', () => {
52
+ const parsed = parseTimestampedId('12345-task-implement-auth');
53
+ expect(parsed).toEqual({
54
+ timestamp: 12345,
55
+ prefix: 'task',
56
+ slug: 'implement-auth',
57
+ });
58
+ });
59
+ it('[EARS-7] should return null for invalid formats', () => {
60
+ expect(parseTimestampedId('invalid-id')).toBeNull();
61
+ expect(parseTimestampedId('123-task')).toBeNull();
62
+ });
63
+ });
64
+ describe('parseActorId', () => {
65
+ it('[EARS-8] should parse a valid human ID', () => {
66
+ const parsed = parseActorId('human:camilo-velandia');
67
+ expect(parsed).toEqual({
68
+ type: 'human',
69
+ slug: 'camilo-velandia',
70
+ });
71
+ });
72
+ it('[EARS-8] should parse a valid agent ID with scope', () => {
73
+ const parsed = parseActorId('agent:camilo:cursor:planner');
74
+ expect(parsed).toEqual({
75
+ type: 'agent',
76
+ slug: 'camilo:cursor:planner',
77
+ });
78
+ });
79
+ it('[EARS-8] should return null for invalid actor IDs', () => {
80
+ expect(parseActorId('invalid-id')).toBeNull();
81
+ expect(parseActorId('badtype:name')).toBeNull();
82
+ });
83
+ });
84
+ describe('isValidTimestampedId', () => {
85
+ it('[EARS-9] should return true for valid IDs', () => {
86
+ expect(isValidTimestampedId('12345-task-valid-slug')).toBe(true);
87
+ expect(isValidTimestampedId('54321-cycle-another-slug')).toBe(true);
88
+ expect(isValidTimestampedId('67890-exec-execution-slug')).toBe(true);
89
+ expect(isValidTimestampedId('11111-changelog-changelog-slug')).toBe(true);
90
+ expect(isValidTimestampedId('22222-feedback-feedback-slug')).toBe(true);
91
+ });
92
+ it('[EARS-10] should return false for invalid IDs', () => {
93
+ expect(isValidTimestampedId('123-badprefix-slug')).toBe(false);
94
+ expect(isValidTimestampedId('notatimestamp-task-slug')).toBe(false);
95
+ expect(isValidTimestampedId('12345-task-')).toBe(false);
96
+ expect(isValidTimestampedId('12345-task')).toBe(false);
97
+ });
98
+ });
99
+ });
100
+ //# sourceMappingURL=id_generator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id_generator.test.js","sourceRoot":"","sources":["../../../src/utils/id_generator.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export {};
2
+ // Utils module - currently empty after removing path-utils
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":";AAAA,2DAA2D"}
@@ -0,0 +1,21 @@
1
+ import type { ValidateFunction } from "ajv";
2
+ import type { ActorRecord } from "../types";
3
+ import type { GitGovRecord } from "../types";
4
+ import type { ValidationResult } from './errors';
5
+ export declare function validateActorRecordSchema(data: unknown): [boolean, ValidateFunction["errors"]];
6
+ export declare function isActorRecord(data: unknown): data is ActorRecord;
7
+ /**
8
+ * Validates an ActorRecord and returns detailed validation result.
9
+ * Use this in factories and adapters for comprehensive error reporting.
10
+ */
11
+ export declare function validateActorRecordDetailed(data: unknown): ValidationResult;
12
+ /**
13
+ * Performs a complete validation of an ActorRecord, including schema,
14
+ * checksum, and signature checks.
15
+ * @param record The full GitGovRecord containing the actor payload.
16
+ * @param getActorPublicKey A function to retrieve the public key for a given actor ID.
17
+ */
18
+ export declare function validateFullActorRecord(record: GitGovRecord & {
19
+ payload: ActorRecord;
20
+ }, getActorPublicKey: (keyId: string) => Promise<string | null>): Promise<void>;
21
+ //# sourceMappingURL=actor_validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actor_validator.d.ts","sourceRoot":"","sources":["../../../src/validation/actor_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAQjD,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,OAAO,GACZ,CAAC,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAIvC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,WAAW,CAGhE;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAa3E;AAGD;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,YAAY,GAAG;IAAE,OAAO,EAAE,WAAW,CAAA;CAAE,EAC/C,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAC3D,OAAO,CAAC,IAAI,CAAC,CAWf"}
@@ -0,0 +1,48 @@
1
+ import { SchemaValidationError } from "./common";
2
+ import { SchemaValidationCache } from "../schemas/schema_cache";
3
+ import { Schemas } from "../schemas";
4
+ import { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';
5
+ // --- Schema Validation ---
6
+ const actorSchema = Schemas.ActorRecord;
7
+ export function validateActorRecordSchema(data) {
8
+ const validateSchema = SchemaValidationCache.getValidatorFromSchema(actorSchema);
9
+ const isValid = validateSchema(data);
10
+ return [isValid, validateSchema.errors];
11
+ }
12
+ export function isActorRecord(data) {
13
+ const validateSchema = SchemaValidationCache.getValidatorFromSchema(actorSchema);
14
+ return validateSchema(data);
15
+ }
16
+ /**
17
+ * Validates an ActorRecord and returns detailed validation result.
18
+ * Use this in factories and adapters for comprehensive error reporting.
19
+ */
20
+ export function validateActorRecordDetailed(data) {
21
+ const [isValid, ajvErrors] = validateActorRecordSchema(data);
22
+ const formattedErrors = ajvErrors ? ajvErrors.map(error => ({
23
+ field: error.instancePath || error.schemaPath || 'root',
24
+ message: error.message || 'Validation failed',
25
+ value: error.data
26
+ })) : [];
27
+ return {
28
+ isValid,
29
+ errors: formattedErrors
30
+ };
31
+ }
32
+ // --- Full Validation Orchestrator ---
33
+ /**
34
+ * Performs a complete validation of an ActorRecord, including schema,
35
+ * checksum, and signature checks.
36
+ * @param record The full GitGovRecord containing the actor payload.
37
+ * @param getActorPublicKey A function to retrieve the public key for a given actor ID.
38
+ */
39
+ export async function validateFullActorRecord(record, getActorPublicKey) {
40
+ // 1. Schema Validation
41
+ const [isValidSchema, errors] = validateActorRecordSchema(record.payload);
42
+ if (!isValidSchema) {
43
+ throw new SchemaValidationError(`ActorRecord payload failed schema validation: ${JSON.stringify(errors)}`);
44
+ }
45
+ // 2. Embedded Metadata Validation (header + wrapper)
46
+ await validateFullEmbeddedMetadataRecord(record, getActorPublicKey);
47
+ }
48
+ //# sourceMappingURL=actor_validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actor_validator.js","sourceRoot":"","sources":["../../../src/validation/actor_validator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,kCAAkC,EAAE,MAAM,+BAA+B,CAAC;AAEnF,4BAA4B;AAC5B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;AAExC,MAAM,UAAU,yBAAyB,CACvC,IAAa;IAEb,MAAM,cAAc,GAAG,qBAAqB,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;IACjF,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAY,CAAC;IAChD,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,MAAM,cAAc,GAAG,qBAAqB,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;IACjF,OAAO,cAAc,CAAC,IAAI,CAAY,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAa;IACvD,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAE7D,MAAM,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1D,KAAK,EAAE,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,UAAU,IAAI,MAAM;QACvD,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,mBAAmB;QAC7C,KAAK,EAAE,KAAK,CAAC,IAAI;KAClB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAET,OAAO;QACL,OAAO;QACP,MAAM,EAAE,eAAe;KACxB,CAAC;AACJ,CAAC;AAED,uCAAuC;AACvC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAA+C,EAC/C,iBAA4D;IAE5D,uBAAuB;IACvB,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG,yBAAyB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1E,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,qBAAqB,CAC7B,iDAAiD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAC1E,CAAC;IACJ,CAAC;IAED,qDAAqD;IACrD,MAAM,kCAAkC,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AACtE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=actor_validator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actor_validator.test.d.ts","sourceRoot":"","sources":["../../../src/validation/actor_validator.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,83 @@
1
+ import { validateFullActorRecord, isActorRecord, validateActorRecordDetailed } from './actor_validator';
2
+ import { SchemaValidationError } from './common';
3
+ import { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';
4
+ // Mock the embedded metadata validator
5
+ jest.mock('./embedded_metadata_validator');
6
+ const mockedValidateEmbeddedMetadata = validateFullEmbeddedMetadataRecord;
7
+ describe('ActorValidator Module', () => {
8
+ const validActorPayload = {
9
+ id: 'human:test', type: 'human', displayName: 'Test',
10
+ publicKey: 'key', roles: ['author'], status: 'active'
11
+ };
12
+ // Create an invalid payload by removing a required property
13
+ const { id, ...invalidPayloadWithoutId } = validActorPayload;
14
+ const getActorPublicKey = jest.fn(async (keyId) => {
15
+ if (keyId === 'human:test')
16
+ return 'key';
17
+ return null;
18
+ });
19
+ beforeEach(() => {
20
+ jest.clearAllMocks();
21
+ // Happy path default for embedded metadata validation
22
+ mockedValidateEmbeddedMetadata.mockResolvedValue(undefined);
23
+ });
24
+ describe('validateFullActorRecord', () => {
25
+ const baseRecord = {
26
+ header: {
27
+ version: '1.0', type: 'actor', payloadChecksum: 'valid_checksum',
28
+ signatures: [{ keyId: 'human:test', role: 'author', signature: 'sig', timestamp: 123, timestamp_iso: '' }]
29
+ },
30
+ payload: validActorPayload
31
+ };
32
+ it('[EARS-4] should complete without errors for a fully valid record', async () => {
33
+ await expect(validateFullActorRecord(baseRecord, getActorPublicKey)).resolves.not.toThrow();
34
+ });
35
+ it('[EARS-1] should throw SchemaValidationError if the payload is invalid', async () => {
36
+ const invalidRecord = { ...baseRecord, payload: { ...validActorPayload, id: 'invalid-id-format' } };
37
+ await expect(validateFullActorRecord(invalidRecord, getActorPublicKey)).rejects.toThrow(SchemaValidationError);
38
+ });
39
+ it('[EARS-2] should throw error if embedded metadata validation fails', async () => {
40
+ const embeddedError = new Error('Embedded metadata validation failed');
41
+ mockedValidateEmbeddedMetadata.mockRejectedValue(embeddedError);
42
+ await expect(validateFullActorRecord(baseRecord, getActorPublicKey)).rejects.toThrow('Embedded metadata validation failed');
43
+ });
44
+ it('[EARS-3] should call validateFullEmbeddedMetadataRecord with correct parameters', async () => {
45
+ await validateFullActorRecord(baseRecord, getActorPublicKey);
46
+ expect(mockedValidateEmbeddedMetadata).toHaveBeenCalledWith(baseRecord, getActorPublicKey);
47
+ });
48
+ });
49
+ describe('isActorRecord', () => {
50
+ it('[EARS-5 & EARS-6] should correctly identify valid and invalid records', () => {
51
+ expect(isActorRecord(validActorPayload)).toBe(true);
52
+ expect(isActorRecord(invalidPayloadWithoutId)).toBe(false);
53
+ });
54
+ });
55
+ describe('validateActorRecordDetailed', () => {
56
+ it('[EARS-7] should return success for valid ActorRecord', () => {
57
+ const result = validateActorRecordDetailed(validActorPayload);
58
+ expect(result.isValid).toBe(true);
59
+ expect(result.errors).toEqual([]);
60
+ });
61
+ it('[EARS-8] should return detailed errors for invalid ActorRecord', () => {
62
+ const result = validateActorRecordDetailed(invalidPayloadWithoutId);
63
+ expect(result.isValid).toBe(false);
64
+ expect(result.errors.length).toBeGreaterThan(0);
65
+ expect(result.errors[0]).toHaveProperty('field');
66
+ expect(result.errors[0]).toHaveProperty('message');
67
+ expect(result.errors[0]).toHaveProperty('value');
68
+ });
69
+ it('[EARS-9] should provide specific error details for each invalid field', () => {
70
+ const invalidActor = {
71
+ id: 'invalid-format', // Wrong ID pattern
72
+ type: 'robot', // Invalid type
73
+ displayName: '', // Empty string
74
+ publicKey: '', // Empty string
75
+ roles: [] // Empty array
76
+ };
77
+ const result = validateActorRecordDetailed(invalidActor);
78
+ expect(result.isValid).toBe(false);
79
+ expect(result.errors.length).toBeGreaterThan(1); // Multiple errors
80
+ });
81
+ });
82
+ });
83
+ //# sourceMappingURL=actor_validator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actor_validator.test.js","sourceRoot":"","sources":["../../../src/validation/actor_validator.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { ValidateFunction } from "ajv";
2
+ import type { AgentRecord } from "../types";
3
+ import type { GitGovRecord } from "../types";
4
+ import type { ValidationResult } from './errors';
5
+ import type { ActorRecord } from "../types";
6
+ export declare function validateAgentRecordSchema(data: unknown): [boolean, ValidateFunction["errors"]];
7
+ export declare function isAgentRecord(data: unknown): data is AgentRecord;
8
+ /**
9
+ * Validates an AgentRecord and returns detailed validation result.
10
+ * Use this in factories and adapters for comprehensive error reporting.
11
+ */
12
+ export declare function validateAgentRecordDetailed(data: unknown): ValidationResult;
13
+ /**
14
+ * Performs a complete validation of an AgentRecord, including schema,
15
+ * checksum, and signature checks.
16
+ * @param record The full GitGovRecord containing the agent payload.
17
+ * @param getActorPublicKey A function to retrieve the public key for a given actor ID.
18
+ */
19
+ export declare function validateFullAgentRecord(record: GitGovRecord & {
20
+ payload: AgentRecord;
21
+ }, getActorPublicKey: (keyId: string) => Promise<string | null>): Promise<void>;
22
+ /**
23
+ * Validates that an AgentRecord has a valid relationship with its corresponding ActorRecord,
24
+ * including succession chain resolution for key rotation scenarios.
25
+ *
26
+ * @param agentRecord The AgentRecord to validate
27
+ * @param getEffectiveActor Function to get the effective ActorRecord (with succession resolution)
28
+ */
29
+ export declare function validateAgentActorRelationship(agentRecord: AgentRecord, getEffectiveActor: (agentId: string) => Promise<ActorRecord | null>): Promise<void>;
30
+ //# sourceMappingURL=agent_validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent_validator.d.ts","sourceRoot":"","sources":["../../../src/validation/agent_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAGjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG5C,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,OAAO,GACZ,CAAC,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAIvC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,WAAW,CAGhE;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAa3E;AAGD;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,YAAY,GAAG;IAAE,OAAO,EAAE,WAAW,CAAA;CAAE,EAC/C,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAC3D,OAAO,CAAC,IAAI,CAAC,CAWf;AAED;;;;;;GAMG;AACH,wBAAsB,8BAA8B,CAClD,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,GAClE,OAAO,CAAC,IAAI,CAAC,CAoBf"}
@@ -0,0 +1,66 @@
1
+ import { SchemaValidationError } from "./common";
2
+ import { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';
3
+ import { SchemaValidationCache } from "../schemas/schema_cache";
4
+ import { Schemas } from '../schemas';
5
+ // --- Schema Validation ---
6
+ export function validateAgentRecordSchema(data) {
7
+ const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.AgentRecord);
8
+ const isValid = validateSchema(data);
9
+ return [isValid, validateSchema.errors];
10
+ }
11
+ export function isAgentRecord(data) {
12
+ const validateSchema = SchemaValidationCache.getValidatorFromSchema(Schemas.AgentRecord);
13
+ return validateSchema(data);
14
+ }
15
+ /**
16
+ * Validates an AgentRecord and returns detailed validation result.
17
+ * Use this in factories and adapters for comprehensive error reporting.
18
+ */
19
+ export function validateAgentRecordDetailed(data) {
20
+ const [isValid, ajvErrors] = validateAgentRecordSchema(data);
21
+ const formattedErrors = ajvErrors ? ajvErrors.map(error => ({
22
+ field: error.instancePath || error.schemaPath || 'root',
23
+ message: error.message || 'Validation failed',
24
+ value: error.data
25
+ })) : [];
26
+ return {
27
+ isValid,
28
+ errors: formattedErrors
29
+ };
30
+ }
31
+ // --- Full Validation Orchestrator ---
32
+ /**
33
+ * Performs a complete validation of an AgentRecord, including schema,
34
+ * checksum, and signature checks.
35
+ * @param record The full GitGovRecord containing the agent payload.
36
+ * @param getActorPublicKey A function to retrieve the public key for a given actor ID.
37
+ */
38
+ export async function validateFullAgentRecord(record, getActorPublicKey) {
39
+ // 1. Schema Validation
40
+ const [isValidSchema, errors] = validateAgentRecordSchema(record.payload);
41
+ if (!isValidSchema) {
42
+ throw new SchemaValidationError(`AgentRecord payload failed schema validation: ${JSON.stringify(errors)}`);
43
+ }
44
+ // 2. Embedded Metadata Validation (header + wrapper)
45
+ await validateFullEmbeddedMetadataRecord(record, getActorPublicKey);
46
+ }
47
+ /**
48
+ * Validates that an AgentRecord has a valid relationship with its corresponding ActorRecord,
49
+ * including succession chain resolution for key rotation scenarios.
50
+ *
51
+ * @param agentRecord The AgentRecord to validate
52
+ * @param getEffectiveActor Function to get the effective ActorRecord (with succession resolution)
53
+ */
54
+ export async function validateAgentActorRelationship(agentRecord, getEffectiveActor) {
55
+ const effectiveActor = await getEffectiveActor(agentRecord.id);
56
+ if (!effectiveActor) {
57
+ throw new SchemaValidationError(`No active ActorRecord found for AgentRecord ${agentRecord.id}. AgentRecord requires corresponding ActorRecord.`);
58
+ }
59
+ if (effectiveActor.type !== 'agent') {
60
+ throw new SchemaValidationError(`ActorRecord ${effectiveActor.id} must be of type 'agent' to support AgentRecord ${agentRecord.id}.`);
61
+ }
62
+ if (effectiveActor.status !== 'active') {
63
+ throw new SchemaValidationError(`ActorRecord succession chain for ${agentRecord.id} does not resolve to an active actor. Current effective actor: ${effectiveActor.id} (status: ${effectiveActor.status}).`);
64
+ }
65
+ }
66
+ //# sourceMappingURL=agent_validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent_validator.js","sourceRoot":"","sources":["../../../src/validation/agent_validator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,kCAAkC,EAAE,MAAM,+BAA+B,CAAC;AAEnF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC,4BAA4B;AAC5B,MAAM,UAAU,yBAAyB,CACvC,IAAa;IAEb,MAAM,cAAc,GAAG,qBAAqB,CAAC,sBAAsB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACzF,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAY,CAAC;IAChD,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,MAAM,cAAc,GAAG,qBAAqB,CAAC,sBAAsB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACzF,OAAO,cAAc,CAAC,IAAI,CAAY,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAa;IACvD,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAE7D,MAAM,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1D,KAAK,EAAE,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,UAAU,IAAI,MAAM;QACvD,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,mBAAmB;QAC7C,KAAK,EAAE,KAAK,CAAC,IAAI;KAClB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAET,OAAO;QACL,OAAO;QACP,MAAM,EAAE,eAAe;KACxB,CAAC;AACJ,CAAC;AAED,uCAAuC;AACvC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAA+C,EAC/C,iBAA4D;IAE5D,uBAAuB;IACvB,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG,yBAAyB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1E,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,qBAAqB,CAC7B,iDAAiD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAC1E,CAAC;IACJ,CAAC;IAED,qDAAqD;IACrD,MAAM,kCAAkC,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AACtE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,WAAwB,EACxB,iBAAmE;IAEnE,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAE/D,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,qBAAqB,CAC7B,+CAA+C,WAAW,CAAC,EAAE,mDAAmD,CACjH,CAAC;IACJ,CAAC;IAED,IAAI,cAAc,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACpC,MAAM,IAAI,qBAAqB,CAC7B,eAAe,cAAc,CAAC,EAAE,mDAAmD,WAAW,CAAC,EAAE,GAAG,CACrG,CAAC;IACJ,CAAC;IAED,IAAI,cAAc,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,IAAI,qBAAqB,CAC7B,oCAAoC,WAAW,CAAC,EAAE,kEAAkE,cAAc,CAAC,EAAE,aAAa,cAAc,CAAC,MAAM,IAAI,CAC5K,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent_validator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent_validator.test.d.ts","sourceRoot":"","sources":["../../../src/validation/agent_validator.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,73 @@
1
+ import { validateFullAgentRecord, isAgentRecord } from './agent_validator';
2
+ import { SchemaValidationError } from './common';
3
+ import { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';
4
+ // Mock the embedded metadata validator
5
+ jest.mock('./embedded_metadata_validator');
6
+ const mockedValidateEmbeddedMetadata = validateFullEmbeddedMetadataRecord;
7
+ describe('AgentValidator Module', () => {
8
+ const validAgentPayload = {
9
+ id: 'agent:test-agent',
10
+ guild: 'design',
11
+ status: 'active',
12
+ engine: { type: 'local', runtime: 'typescript', entrypoint: 'test.ts', function: 'run' },
13
+ triggers: [{ type: 'manual' }],
14
+ knowledge_dependencies: [],
15
+ prompt_engine_requirements: {}
16
+ };
17
+ // Create an invalid payload by removing a required property
18
+ const { id, ...invalidPayloadWithoutId } = validAgentPayload;
19
+ const getActorPublicKey = jest.fn(async (keyId) => {
20
+ if (keyId === 'agent:test-agent')
21
+ return 'key';
22
+ return null;
23
+ });
24
+ beforeEach(() => {
25
+ jest.clearAllMocks();
26
+ // Happy path default for embedded metadata validation
27
+ mockedValidateEmbeddedMetadata.mockResolvedValue(undefined);
28
+ });
29
+ describe('validateFullAgentRecord', () => {
30
+ const baseRecord = {
31
+ header: {
32
+ version: '1.0', type: 'agent', payloadChecksum: 'valid_checksum',
33
+ signatures: [{ keyId: 'agent:test-agent', role: 'author', signature: 'sig', timestamp: 123, timestamp_iso: '' }]
34
+ },
35
+ payload: validAgentPayload
36
+ };
37
+ it('[EARS-4] should complete without errors for a fully valid record', async () => {
38
+ await expect(validateFullAgentRecord(baseRecord, getActorPublicKey)).resolves.not.toThrow();
39
+ });
40
+ it('[EARS-1] should throw SchemaValidationError if the payload is invalid', async () => {
41
+ const invalidRecord = { ...baseRecord, payload: { ...validAgentPayload, id: 'invalid-id-format' } };
42
+ await expect(validateFullAgentRecord(invalidRecord, getActorPublicKey)).rejects.toThrow(SchemaValidationError);
43
+ });
44
+ it('[EARS-2] should throw error if embedded metadata validation fails', async () => {
45
+ const embeddedError = new Error('Embedded metadata validation failed');
46
+ mockedValidateEmbeddedMetadata.mockRejectedValue(embeddedError);
47
+ await expect(validateFullAgentRecord(baseRecord, getActorPublicKey)).rejects.toThrow('Embedded metadata validation failed');
48
+ });
49
+ it('[EARS-3] should call validateFullEmbeddedMetadataRecord with correct parameters', async () => {
50
+ await validateFullAgentRecord(baseRecord, getActorPublicKey);
51
+ expect(mockedValidateEmbeddedMetadata).toHaveBeenCalledWith(baseRecord, getActorPublicKey);
52
+ });
53
+ });
54
+ describe('isAgentRecord', () => {
55
+ it('[EARS-5 & EARS-6] should correctly identify valid and invalid records', () => {
56
+ expect(isAgentRecord(validAgentPayload)).toBe(true);
57
+ expect(isAgentRecord(invalidPayloadWithoutId)).toBe(false);
58
+ });
59
+ it('[EARS-7] should validate agent ID pattern', () => {
60
+ const invalidIdAgent = { ...validAgentPayload, id: 'human:test' }; // Wrong pattern
61
+ expect(isAgentRecord(invalidIdAgent)).toBe(false);
62
+ });
63
+ it('[EARS-8] should validate guild enum values', () => {
64
+ const invalidGuildAgent = { ...validAgentPayload, guild: 'invalid-guild' };
65
+ expect(isAgentRecord(invalidGuildAgent)).toBe(false);
66
+ });
67
+ it('[EARS-9] should validate engine structure', () => {
68
+ const invalidEngineAgent = { ...validAgentPayload, engine: { type: 'invalid' } };
69
+ expect(isAgentRecord(invalidEngineAgent)).toBe(false);
70
+ });
71
+ });
72
+ });
73
+ //# sourceMappingURL=agent_validator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent_validator.test.js","sourceRoot":"","sources":["../../../src/validation/agent_validator.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,kCAAkC,EAAE,MAAM,+BAA+B,CAAC;AAInF,uCAAuC;AACvC,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;AAE3C,MAAM,8BAA8B,GAAG,kCAA+C,CAAC;AAEvF,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,MAAM,iBAAiB,GAAgB;QACrC,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE;QACxF,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC9B,sBAAsB,EAAE,EAAE;QAC1B,0BAA0B,EAAE,EAAE;KAC/B,CAAC;IAEF,4DAA4D;IAC5D,MAAM,EAAE,EAAE,EAAE,GAAG,uBAAuB,EAAE,GAAG,iBAAiB,CAAC;IAE7D,MAAM,iBAAiB,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,KAAa,EAAE,EAAE;QACxD,IAAI,KAAK,KAAK,kBAAkB;YAAE,OAAO,KAAK,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,sDAAsD;QACtD,8BAA8B,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,MAAM,UAAU,GAAG;YACjB,MAAM,EAAE;gBACN,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAgB,EAAE,eAAe,EAAE,gBAAgB;gBACzE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;aACjH;YACD,OAAO,EAAE,iBAAiB;SAC2B,CAAC;QAExD,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;YAChF,MAAM,MAAM,CAAC,uBAAuB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAC9F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;YACrF,MAAM,aAAa,GAAG,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,EAAE,GAAG,iBAAiB,EAAE,EAAE,EAAE,mBAAmB,EAAE,EAAE,CAAC;YACpG,MAAM,MAAM,CAAC,uBAAuB,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACjH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;YACjF,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACvE,8BAA8B,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;YAChE,MAAM,MAAM,CAAC,uBAAuB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;QAC9H,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;YAC/F,MAAM,uBAAuB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;YAC7D,MAAM,CAAC,8BAA8B,CAAC,CAAC,oBAAoB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QAC7F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;YAC/E,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,cAAc,GAAG,EAAE,GAAG,iBAAiB,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,gBAAgB;YACnF,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,iBAAiB,GAAG,EAAE,GAAG,iBAAiB,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;YAC3E,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,kBAAkB,GAAG,EAAE,GAAG,iBAAiB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;YACjF,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { ValidateFunction } from "ajv";
2
+ import type { ChangelogRecord } from '../types';
3
+ import type { GitGovRecord } from '../types';
4
+ import type { ValidationResult } from './errors';
5
+ /**
6
+ * Schema-based validation for ChangelogRecord payload
7
+ */
8
+ export declare function validateChangelogRecordSchema(data: unknown): [boolean, ValidateFunction["errors"]];
9
+ /**
10
+ * Type guard to check if data is a valid ChangelogRecord
11
+ */
12
+ export declare function isChangelogRecord(data: unknown): data is ChangelogRecord;
13
+ /**
14
+ * Detailed validation with field-level error reporting
15
+ */
16
+ export declare function validateChangelogRecordDetailed(data: unknown): ValidationResult;
17
+ /**
18
+ * Full validation including checksum and signature verification
19
+ */
20
+ export declare function validateFullChangelogRecord(record: GitGovRecord & {
21
+ payload: ChangelogRecord;
22
+ }, getPublicKey: (keyId: string) => Promise<string>): Promise<void>;
23
+ //# sourceMappingURL=changelog_validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changelog_validator.d.ts","sourceRoot":"","sources":["../../../src/validation/changelog_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAe,MAAM,KAAK,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAMjD;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,OAAO,GACZ,CAAC,OAAO,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAKvC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,eAAe,CAGxE;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,OAAO,GAAG,gBAAgB,CAoB/E;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,YAAY,GAAG;IAAE,OAAO,EAAE,eAAe,CAAA;CAAE,EACnD,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAC/C,OAAO,CAAC,IAAI,CAAC,CAcf"}
@@ -0,0 +1,58 @@
1
+ import { SchemaValidationCache } from '../schemas/schema_cache';
2
+ import { DetailedValidationError } from './common';
3
+ import { validateFullEmbeddedMetadataRecord } from './embedded_metadata_validator';
4
+ import { Schemas } from '../schemas';
5
+ /**
6
+ * Schema-based validation for ChangelogRecord payload
7
+ */
8
+ export function validateChangelogRecordSchema(data) {
9
+ const validator = SchemaValidationCache.getValidatorFromSchema(Schemas.ChangelogRecord);
10
+ const isValid = validator(data);
11
+ return [isValid, validator.errors];
12
+ }
13
+ /**
14
+ * Type guard to check if data is a valid ChangelogRecord
15
+ */
16
+ export function isChangelogRecord(data) {
17
+ const [isValid] = validateChangelogRecordSchema(data);
18
+ return isValid;
19
+ }
20
+ /**
21
+ * Detailed validation with field-level error reporting
22
+ */
23
+ export function validateChangelogRecordDetailed(data) {
24
+ const [isValid, errors] = validateChangelogRecordSchema(data);
25
+ if (!isValid && errors) {
26
+ const formattedErrors = errors.map((error) => ({
27
+ field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',
28
+ message: error.message || 'Unknown validation error',
29
+ value: error.data
30
+ }));
31
+ return {
32
+ isValid: false,
33
+ errors: formattedErrors
34
+ };
35
+ }
36
+ return {
37
+ isValid: true,
38
+ errors: []
39
+ };
40
+ }
41
+ /**
42
+ * Full validation including checksum and signature verification
43
+ */
44
+ export async function validateFullChangelogRecord(record, getPublicKey) {
45
+ // 1. Validate payload schema
46
+ const [isValid, errors] = validateChangelogRecordSchema(record.payload);
47
+ if (!isValid) {
48
+ const formattedErrors = (errors || []).map((error) => ({
49
+ field: error.instancePath?.replace('/', '') || error.params?.['missingProperty'] || 'root',
50
+ message: error.message || 'Unknown validation error',
51
+ value: error.data
52
+ }));
53
+ throw new DetailedValidationError('ChangelogRecord', formattedErrors);
54
+ }
55
+ // 2. Embedded Metadata Validation (header + wrapper)
56
+ await validateFullEmbeddedMetadataRecord(record, getPublicKey);
57
+ }
58
+ //# sourceMappingURL=changelog_validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changelog_validator.js","sourceRoot":"","sources":["../../../src/validation/changelog_validator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,kCAAkC,EAAE,MAAM,+BAA+B,CAAC;AACnF,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC;;GAEG;AACH,MAAM,UAAU,6BAA6B,CAC3C,IAAa;IAEb,MAAM,SAAS,GAAG,qBAAqB,CAAC,sBAAsB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACxF,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAEhC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAa;IAC7C,MAAM,CAAC,OAAO,CAAC,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC;IACtD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,+BAA+B,CAAC,IAAa;IAC3D,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC;IAE9D,IAAI,CAAC,OAAO,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAkB,EAAE,EAAE,CAAC,CAAC;YAC1D,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,iBAAiB,CAAC,IAAI,MAAM;YAC1F,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,0BAA0B;YACpD,KAAK,EAAE,KAAK,CAAC,IAAI;SAClB,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,eAAe;SACxB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,EAAE;KACX,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,MAAmD,EACnD,YAAgD;IAEhD,6BAA6B;IAC7B,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,6BAA6B,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,eAAe,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAkB,EAAE,EAAE,CAAC,CAAC;YAClE,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC,iBAAiB,CAAC,IAAI,MAAM;YAC1F,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,0BAA0B;YACpD,KAAK,EAAE,KAAK,CAAC,IAAI;SAClB,CAAC,CAAC,CAAC;QACJ,MAAM,IAAI,uBAAuB,CAAC,iBAAiB,EAAE,eAAe,CAAC,CAAC;IACxE,CAAC;IAED,qDAAqD;IACrD,MAAM,kCAAkC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=changelog_validator.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changelog_validator.test.d.ts","sourceRoot":"","sources":["../../../src/validation/changelog_validator.test.ts"],"names":[],"mappings":""}