@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,101 @@
1
+ import { RecordStore } from '../../store';
2
+ import { IdentityAdapter } from '../identity_adapter';
3
+ import type { ChangelogRecord } from '../../types';
4
+ import type { TaskRecord } from '../../types';
5
+ import type { CycleRecord } from '../../types';
6
+ import type { IEventStream } from '../../event_bus';
7
+ /**
8
+ * ChangelogAdapter Dependencies - Facade + Dependency Injection Pattern
9
+ */
10
+ export interface ChangelogAdapterDependencies {
11
+ changelogStore: RecordStore<ChangelogRecord>;
12
+ identity: IdentityAdapter;
13
+ eventBus: IEventStream;
14
+ taskStore?: RecordStore<TaskRecord>;
15
+ cycleStore?: RecordStore<CycleRecord>;
16
+ }
17
+ /**
18
+ * ChangelogAdapter Interface - The Enterprise Historian
19
+ */
20
+ export interface IChangelogAdapter {
21
+ /**
22
+ * Records a significant change in any system entity.
23
+ */
24
+ create(payload: Partial<ChangelogRecord>, actorId: string): Promise<ChangelogRecord>;
25
+ /**
26
+ * Gets a specific ChangelogRecord by its ID.
27
+ */
28
+ getChangelog(changelogId: string): Promise<ChangelogRecord | null>;
29
+ /**
30
+ * Gets all ChangelogRecords for a specific entity.
31
+ */
32
+ getChangelogsByEntity(entityId: string, entityType?: string): Promise<ChangelogRecord[]>;
33
+ /**
34
+ * Gets all ChangelogRecords in the system.
35
+ */
36
+ getAllChangelogs(): Promise<ChangelogRecord[]>;
37
+ /**
38
+ * Gets recent ChangelogRecords ordered by timestamp.
39
+ */
40
+ getRecentChangelogs(limit: number): Promise<ChangelogRecord[]>;
41
+ }
42
+ /**
43
+ * ChangelogAdapter - The Enterprise Historian
44
+ *
45
+ * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.
46
+ * Acts as Mediator between enterprise changelog system and multi-entity data stores.
47
+ */
48
+ export declare class ChangelogAdapter implements IChangelogAdapter {
49
+ private changelogStore;
50
+ private identity;
51
+ private eventBus;
52
+ private taskStore;
53
+ private cycleStore;
54
+ constructor(dependencies: ChangelogAdapterDependencies);
55
+ /**
56
+ * [EARS-1] Records a significant change in any entity with complete context and conditional validation.
57
+ *
58
+ * Description: Records a significant change in any entity of the ecosystem with complete context and conditional validation.
59
+ * Implementation: Validates entity existence (optional), builds record with factory, validates conditional fields, signs with actorId, persists and emits event.
60
+ * Usage: Invoked by `gitgov changelog add` to document changes in tasks, cycles, agents, systems, configurations.
61
+ * Returns: Complete and signed ChangelogRecord with 19 fields.
62
+ */
63
+ create(payload: Partial<ChangelogRecord>, actorId: string): Promise<ChangelogRecord>;
64
+ /**
65
+ * [EARS-9] Gets a specific ChangelogRecord by its ID for historical query.
66
+ *
67
+ * Description: Gets a specific ChangelogRecord by its ID for historical query.
68
+ * Implementation: Direct read from record store without modifications.
69
+ * Usage: Invoked by `gitgov changelog show` to display change details.
70
+ * Returns: ChangelogRecord found or null if it doesn't exist.
71
+ */
72
+ getChangelog(changelogId: string): Promise<ChangelogRecord | null>;
73
+ /**
74
+ * [EARS-11] Gets all ChangelogRecords associated with a specific entity.
75
+ *
76
+ * Description: Gets all ChangelogRecords associated with a specific entity with optional type filtering.
77
+ * Implementation: Reads all records and filters by matching entityId, optionally by entityType.
78
+ * Usage: Invoked by `gitgov changelog list` to display history for any system entity.
79
+ * Returns: Array of ChangelogRecords filtered for the entity.
80
+ */
81
+ getChangelogsByEntity(entityId: string, entityType?: string): Promise<ChangelogRecord[]>;
82
+ /**
83
+ * [EARS-12] Gets all ChangelogRecords in the system for complete indexation.
84
+ *
85
+ * Description: Gets all ChangelogRecords in the system for complete indexation.
86
+ * Implementation: Complete read from record store without filters.
87
+ * Usage: Invoked by `gitgov changelog list --all` and MetricsAdapter for activity analysis.
88
+ * Returns: Complete array of all ChangelogRecords.
89
+ */
90
+ getAllChangelogs(): Promise<ChangelogRecord[]>;
91
+ /**
92
+ * [EARS-13] Gets recent ChangelogRecords ordered by timestamp for dashboard and monitoring.
93
+ *
94
+ * Description: Gets recent ChangelogRecords ordered by timestamp for dashboard and monitoring.
95
+ * Implementation: Reads all records, sorts by timestamp descending and applies limit.
96
+ * Usage: Invoked by `gitgov changelog list --recent` and dashboard for activity monitoring.
97
+ * Returns: Array of ChangelogRecords limited and ordered by timestamp.
98
+ */
99
+ getRecentChangelogs(limit: number): Promise<ChangelogRecord[]>;
100
+ }
101
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/adapters/changelog_adapter/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAyB,MAAM,iBAAiB,CAAC;AAG3E;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,cAAc,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;IAC7C,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,YAAY,CAAC;IAEvB,SAAS,CAAC,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IACpC,UAAU,CAAC,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;CAEvC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAErF;;OAEG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAEnE;;OAEG;IACH,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAEzF;;OAEG;IACH,gBAAgB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAE/C;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;CAChE;AAED;;;;;GAKG;AACH,qBAAa,gBAAiB,YAAW,iBAAiB;IACxD,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,UAAU,CAAuC;gBAE7C,YAAY,EAAE,4BAA4B;IAQtD;;;;;;;OAOG;IACG,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAiH1F;;;;;;;OAOG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAKxE;;;;;;;OAOG;IACG,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAiB9F;;;;;;;OAOG;IACG,gBAAgB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAcpD;;;;;;;OAOG;IACG,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;CASrE"}
@@ -0,0 +1,197 @@
1
+ import { createChangelogRecord } from '../../factories/changelog_factory';
2
+ import { RecordStore } from '../../store';
3
+ import { IdentityAdapter } from '../identity_adapter';
4
+ /**
5
+ * ChangelogAdapter - The Enterprise Historian
6
+ *
7
+ * Implements Facade + Dependency Injection Pattern for testeable and configurable orchestration.
8
+ * Acts as Mediator between enterprise changelog system and multi-entity data stores.
9
+ */
10
+ export class ChangelogAdapter {
11
+ changelogStore;
12
+ identity;
13
+ eventBus;
14
+ taskStore;
15
+ cycleStore;
16
+ constructor(dependencies) {
17
+ this.changelogStore = dependencies.changelogStore;
18
+ this.identity = dependencies.identity;
19
+ this.eventBus = dependencies.eventBus;
20
+ this.taskStore = dependencies.taskStore; // Graceful degradation
21
+ this.cycleStore = dependencies.cycleStore; // Graceful degradation
22
+ }
23
+ /**
24
+ * [EARS-1] Records a significant change in any entity with complete context and conditional validation.
25
+ *
26
+ * Description: Records a significant change in any entity of the ecosystem with complete context and conditional validation.
27
+ * Implementation: Validates entity existence (optional), builds record with factory, validates conditional fields, signs with actorId, persists and emits event.
28
+ * Usage: Invoked by `gitgov changelog add` to document changes in tasks, cycles, agents, systems, configurations.
29
+ * Returns: Complete and signed ChangelogRecord with 19 fields.
30
+ */
31
+ async create(payload, actorId) {
32
+ // Input validation
33
+ if (!payload.entityType) {
34
+ throw new Error('DetailedValidationError: entityType is required');
35
+ }
36
+ if (!payload.entityId) {
37
+ throw new Error('DetailedValidationError: entityId is required');
38
+ }
39
+ // EARS-4: Validate entityType
40
+ if (!['task', 'cycle', 'agent', 'system', 'configuration'].includes(payload.entityType)) {
41
+ throw new Error('DetailedValidationError: entityType must be task, cycle, agent, system, or configuration');
42
+ }
43
+ // EARS-5: Validate changeType
44
+ if (payload.changeType && !['creation', 'completion', 'update', 'deletion', 'hotfix'].includes(payload.changeType)) {
45
+ throw new Error('DetailedValidationError: changeType must be creation, completion, update, deletion, or hotfix');
46
+ }
47
+ // EARS-14: Validate title length
48
+ if (payload.title && payload.title.length < 10) {
49
+ throw new Error('DetailedValidationError: title must be at least 10 characters');
50
+ }
51
+ // EARS-15: Validate description length
52
+ if (payload.description && payload.description.length < 20) {
53
+ throw new Error('DetailedValidationError: description must be at least 20 characters');
54
+ }
55
+ // EARS-6: Validate rollbackInstructions for high risk
56
+ if (payload.riskLevel === 'high' && !payload.rollbackInstructions) {
57
+ throw new Error('DetailedValidationError: rollbackInstructions is required when riskLevel is high');
58
+ }
59
+ // EARS-7: Validate rollbackInstructions for critical risk
60
+ if (payload.riskLevel === 'critical' && !payload.rollbackInstructions) {
61
+ throw new Error('DetailedValidationError: rollbackInstructions is required when riskLevel is critical');
62
+ }
63
+ // EARS-8: Validate references.tasks for completion
64
+ if (payload.changeType === 'completion' && (!payload.references?.tasks || payload.references.tasks.length === 0)) {
65
+ throw new Error('DetailedValidationError: references.tasks is required when changeType is completion');
66
+ }
67
+ // Optional: Validate entityId exists (graceful degradation) - EARS-3
68
+ if (payload.entityType === 'task' && this.taskStore) {
69
+ const taskExists = await this.taskStore.read(payload.entityId);
70
+ if (!taskExists) {
71
+ throw new Error(`RecordNotFoundError: Task not found: ${payload.entityId}`);
72
+ }
73
+ }
74
+ if (payload.entityType === 'cycle' && this.cycleStore) {
75
+ const cycleExists = await this.cycleStore.read(payload.entityId);
76
+ if (!cycleExists) {
77
+ throw new Error(`RecordNotFoundError: Cycle not found: ${payload.entityId}`);
78
+ }
79
+ }
80
+ try {
81
+ // 1. Build the record with factory (handles all conditional validation)
82
+ const validatedPayload = await createChangelogRecord(payload);
83
+ // 2. Create unsigned record structure
84
+ const unsignedRecord = {
85
+ header: {
86
+ version: '1.0',
87
+ type: 'changelog',
88
+ payloadChecksum: 'will-be-calculated-by-signRecord',
89
+ signatures: [{
90
+ keyId: actorId,
91
+ role: 'author',
92
+ signature: 'placeholder',
93
+ timestamp: Date.now(),
94
+ timestamp_iso: new Date().toISOString()
95
+ }]
96
+ },
97
+ payload: validatedPayload,
98
+ };
99
+ // 3. Sign the record
100
+ const signedRecord = await this.identity.signRecord(unsignedRecord, actorId, 'author');
101
+ // 4. Persist the record
102
+ await this.changelogStore.write(signedRecord);
103
+ // 5. Emit event - responsibility ends here
104
+ this.eventBus.publish({
105
+ type: 'changelog.created',
106
+ timestamp: Date.now(),
107
+ source: 'changelog_adapter',
108
+ payload: {
109
+ changelogId: validatedPayload.id,
110
+ entityId: validatedPayload.entityId,
111
+ entityType: validatedPayload.entityType,
112
+ changeType: validatedPayload.changeType,
113
+ triggeredBy: actorId,
114
+ riskLevel: validatedPayload.riskLevel,
115
+ title: validatedPayload.title,
116
+ trigger: validatedPayload.trigger
117
+ },
118
+ });
119
+ return validatedPayload;
120
+ }
121
+ catch (error) {
122
+ if (error instanceof Error && error.message.includes('DetailedValidationError')) {
123
+ throw error;
124
+ }
125
+ throw error;
126
+ }
127
+ }
128
+ /**
129
+ * [EARS-9] Gets a specific ChangelogRecord by its ID for historical query.
130
+ *
131
+ * Description: Gets a specific ChangelogRecord by its ID for historical query.
132
+ * Implementation: Direct read from record store without modifications.
133
+ * Usage: Invoked by `gitgov changelog show` to display change details.
134
+ * Returns: ChangelogRecord found or null if it doesn't exist.
135
+ */
136
+ async getChangelog(changelogId) {
137
+ const record = await this.changelogStore.read(changelogId);
138
+ return record ? record.payload : null;
139
+ }
140
+ /**
141
+ * [EARS-11] Gets all ChangelogRecords associated with a specific entity.
142
+ *
143
+ * Description: Gets all ChangelogRecords associated with a specific entity with optional type filtering.
144
+ * Implementation: Reads all records and filters by matching entityId, optionally by entityType.
145
+ * Usage: Invoked by `gitgov changelog list` to display history for any system entity.
146
+ * Returns: Array of ChangelogRecords filtered for the entity.
147
+ */
148
+ async getChangelogsByEntity(entityId, entityType) {
149
+ const ids = await this.changelogStore.list();
150
+ const changelogs = [];
151
+ for (const id of ids) {
152
+ const record = await this.changelogStore.read(id);
153
+ if (record && record.payload.entityId === entityId) {
154
+ // Optional entityType filter
155
+ if (!entityType || record.payload.entityType === entityType) {
156
+ changelogs.push(record.payload);
157
+ }
158
+ }
159
+ }
160
+ return changelogs;
161
+ }
162
+ /**
163
+ * [EARS-12] Gets all ChangelogRecords in the system for complete indexation.
164
+ *
165
+ * Description: Gets all ChangelogRecords in the system for complete indexation.
166
+ * Implementation: Complete read from record store without filters.
167
+ * Usage: Invoked by `gitgov changelog list --all` and MetricsAdapter for activity analysis.
168
+ * Returns: Complete array of all ChangelogRecords.
169
+ */
170
+ async getAllChangelogs() {
171
+ const ids = await this.changelogStore.list();
172
+ const changelogs = [];
173
+ for (const id of ids) {
174
+ const record = await this.changelogStore.read(id);
175
+ if (record) {
176
+ changelogs.push(record.payload);
177
+ }
178
+ }
179
+ return changelogs;
180
+ }
181
+ /**
182
+ * [EARS-13] Gets recent ChangelogRecords ordered by timestamp for dashboard and monitoring.
183
+ *
184
+ * Description: Gets recent ChangelogRecords ordered by timestamp for dashboard and monitoring.
185
+ * Implementation: Reads all records, sorts by timestamp descending and applies limit.
186
+ * Usage: Invoked by `gitgov changelog list --recent` and dashboard for activity monitoring.
187
+ * Returns: Array of ChangelogRecords limited and ordered by timestamp.
188
+ */
189
+ async getRecentChangelogs(limit) {
190
+ const allChangelogs = await this.getAllChangelogs();
191
+ // Sort by timestamp descending (most recent first)
192
+ const sortedChangelogs = allChangelogs.sort((a, b) => b.timestamp - a.timestamp);
193
+ // Apply limit
194
+ return sortedChangelogs.slice(0, limit);
195
+ }
196
+ }
197
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/adapters/changelog_adapter/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=execution_adapter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution_adapter.test.d.ts","sourceRoot":"","sources":["../../../../src/adapters/execution_adapter/execution_adapter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,266 @@
1
+ import { ExecutionAdapter } from './index';
2
+ import { createExecutionRecord } from '../../factories/execution_factory';
3
+ import { RecordStore } from '../../store';
4
+ import { IdentityAdapter } from '../identity_adapter';
5
+ import { publishEvent } from '../../event_bus';
6
+ import { DetailedValidationError } from '../../validation/common';
7
+ // Mock dependencies
8
+ jest.mock('../../factories/execution_factory');
9
+ jest.mock('../../store');
10
+ jest.mock('../identity_adapter');
11
+ jest.mock('../../event_bus', () => ({
12
+ ...jest.requireActual('../../event_bus'),
13
+ publishEvent: jest.fn(),
14
+ }));
15
+ // Helper function to create properly typed mock execution records
16
+ function createMockExecutionRecord(overrides = {}) {
17
+ return {
18
+ header: {
19
+ version: '1.0',
20
+ type: 'execution',
21
+ payloadChecksum: 'mock-checksum',
22
+ signatures: [{
23
+ keyId: 'mock-author',
24
+ role: 'author',
25
+ signature: 'mock-sig',
26
+ timestamp: 123,
27
+ timestamp_iso: '2025-01-01T00:00:00Z'
28
+ }]
29
+ },
30
+ payload: {
31
+ id: 'mock-execution',
32
+ taskId: 'task-123',
33
+ result: 'Mock execution output with sufficient length for validation',
34
+ type: 'progress',
35
+ title: 'Mock Execution Title',
36
+ notes: 'Mock execution notes',
37
+ references: ['commit:abc123', 'file:test.ts'],
38
+ ...overrides
39
+ }
40
+ };
41
+ }
42
+ describe('ExecutionAdapter', () => {
43
+ let executionAdapter;
44
+ let mockExecutionStore;
45
+ let mockTaskStore;
46
+ let mockIdentityAdapter;
47
+ let mockPublishEvent;
48
+ const mockPayload = {
49
+ taskId: 'task-123',
50
+ result: 'Task completed successfully with all requirements met',
51
+ type: 'progress',
52
+ title: 'Task Completion',
53
+ notes: 'All acceptance criteria met'
54
+ };
55
+ const mockActorId = 'human:developer';
56
+ const mockCreatedExecutionPayload = {
57
+ id: '123-exec-test',
58
+ taskId: 'task-123',
59
+ result: 'Task completed successfully with all requirements met',
60
+ type: 'progress',
61
+ title: 'Task Completion'
62
+ };
63
+ const mockSignedRecord = createMockExecutionRecord(mockCreatedExecutionPayload);
64
+ beforeEach(() => {
65
+ jest.clearAllMocks();
66
+ // Mock store with proper typing
67
+ mockExecutionStore = {
68
+ write: jest.fn().mockResolvedValue(undefined),
69
+ read: jest.fn().mockResolvedValue(null),
70
+ list: jest.fn().mockResolvedValue([]),
71
+ delete: jest.fn().mockResolvedValue(undefined),
72
+ exists: jest.fn().mockResolvedValue(false),
73
+ recordType: 'executions',
74
+ recordsDir: '/mock/path',
75
+ fs: {},
76
+ getRecordPath: jest.fn(),
77
+ ensureDirExists: jest.fn()
78
+ };
79
+ mockTaskStore = {
80
+ read: jest.fn().mockResolvedValue({ payload: { id: 'task-123' } }), // Default: task exists
81
+ write: jest.fn().mockResolvedValue(undefined),
82
+ list: jest.fn().mockResolvedValue([]),
83
+ delete: jest.fn().mockResolvedValue(undefined),
84
+ exists: jest.fn().mockResolvedValue(false),
85
+ recordType: 'tasks',
86
+ recordsDir: '/mock/path',
87
+ fs: {},
88
+ getRecordPath: jest.fn(),
89
+ ensureDirExists: jest.fn()
90
+ };
91
+ // Mock identity adapter
92
+ mockIdentityAdapter = {
93
+ signRecord: jest.fn(),
94
+ createActor: jest.fn(),
95
+ getActor: jest.fn(),
96
+ getAllActors: jest.fn(),
97
+ createAgent: jest.fn(),
98
+ getAgent: jest.fn(),
99
+ getAllAgents: jest.fn()
100
+ };
101
+ // Mock publish event
102
+ mockPublishEvent = publishEvent;
103
+ // Mock factory
104
+ createExecutionRecord.mockResolvedValue(mockCreatedExecutionPayload);
105
+ mockIdentityAdapter.signRecord.mockResolvedValue(mockSignedRecord);
106
+ // Create adapter with mocked dependencies
107
+ executionAdapter = new ExecutionAdapter({
108
+ executionStore: mockExecutionStore,
109
+ identity: mockIdentityAdapter,
110
+ eventBus: {
111
+ publish: jest.fn(),
112
+ subscribe: jest.fn(),
113
+ unsubscribe: jest.fn(),
114
+ getSubscriptions: jest.fn(),
115
+ clearSubscriptions: jest.fn()
116
+ },
117
+ taskStore: mockTaskStore
118
+ });
119
+ });
120
+ describe('create', () => {
121
+ it('[EARS-1] should create, sign, write, and emit event for valid execution', async () => {
122
+ const result = await executionAdapter.create(mockPayload, mockActorId);
123
+ expect(createExecutionRecord).toHaveBeenCalledWith(mockPayload);
124
+ expect(mockIdentityAdapter.signRecord).toHaveBeenCalledWith(expect.objectContaining({
125
+ payload: mockCreatedExecutionPayload
126
+ }), mockActorId, 'author');
127
+ expect(mockExecutionStore.write).toHaveBeenCalledWith(mockSignedRecord);
128
+ // Note: Now using this.eventBus.publish instead of publishEvent
129
+ // The mock eventBus.publish should have been called
130
+ expect(result).toEqual(mockCreatedExecutionPayload);
131
+ });
132
+ it('[EARS-2] should throw DetailedValidationError for invalid payload', async () => {
133
+ const validationError = new DetailedValidationError('Invalid payload', []);
134
+ createExecutionRecord.mockRejectedValue(validationError);
135
+ await expect(executionAdapter.create({ taskId: 'invalid' }, mockActorId))
136
+ .rejects.toThrow('DetailedValidationError: result is required');
137
+ // Ensure no side effects occurred
138
+ expect(mockIdentityAdapter.signRecord).not.toHaveBeenCalled();
139
+ expect(mockExecutionStore.write).not.toHaveBeenCalled();
140
+ expect(mockPublishEvent).not.toHaveBeenCalled();
141
+ });
142
+ it('[EARS-3] should throw RecordNotFoundError for non-existent taskId', async () => {
143
+ mockTaskStore.read.mockResolvedValue(null);
144
+ await expect(executionAdapter.create({ taskId: 'non-existent', result: 'Valid result with sufficient length' }, mockActorId))
145
+ .rejects.toThrow('RecordNotFoundError: Task not found: non-existent');
146
+ });
147
+ it('[EARS-8] should throw DetailedValidationError for missing result', async () => {
148
+ const invalidPayload = { taskId: 'task-123' }; // Missing result
149
+ await expect(executionAdapter.create(invalidPayload, mockActorId))
150
+ .rejects.toThrow('DetailedValidationError: result is required');
151
+ });
152
+ it('[EARS-9] should throw DetailedValidationError for short result', async () => {
153
+ const invalidPayload = { taskId: 'task-123', result: 'short' }; // Too short
154
+ await expect(executionAdapter.create(invalidPayload, mockActorId))
155
+ .rejects.toThrow('DetailedValidationError: result must be at least 10 characters');
156
+ });
157
+ it('[EARS-1] should create execution record successfully', async () => {
158
+ const result = await executionAdapter.create(mockPayload, mockActorId);
159
+ expect(createExecutionRecord).toHaveBeenCalledWith(mockPayload);
160
+ expect(result).toEqual(mockCreatedExecutionPayload);
161
+ });
162
+ it('should work with graceful degradation when taskStore is not provided', async () => {
163
+ const executionAdapterNoTaskStore = new ExecutionAdapter({
164
+ executionStore: mockExecutionStore,
165
+ identity: mockIdentityAdapter,
166
+ eventBus: {
167
+ publish: jest.fn(),
168
+ subscribe: jest.fn(),
169
+ unsubscribe: jest.fn(),
170
+ getSubscriptions: jest.fn(),
171
+ clearSubscriptions: jest.fn()
172
+ },
173
+ // No taskStore provided
174
+ });
175
+ const result = await executionAdapterNoTaskStore.create(mockPayload, mockActorId);
176
+ expect(result).toEqual(mockCreatedExecutionPayload);
177
+ expect(mockTaskStore.read).not.toHaveBeenCalled();
178
+ });
179
+ });
180
+ describe('getExecution', () => {
181
+ it('[EARS-4] should return existing execution record', async () => {
182
+ const mockRecord = createMockExecutionRecord({ id: 'execution-123' });
183
+ mockExecutionStore.read.mockResolvedValue(mockRecord);
184
+ const result = await executionAdapter.getExecution('execution-123');
185
+ expect(mockExecutionStore.read).toHaveBeenCalledWith('execution-123');
186
+ expect(result).toEqual(mockRecord.payload);
187
+ });
188
+ it('[EARS-5] should return null for non-existent execution', async () => {
189
+ mockExecutionStore.read.mockResolvedValue(null);
190
+ const result = await executionAdapter.getExecution('non-existent');
191
+ expect(result).toBeNull();
192
+ });
193
+ });
194
+ describe('getExecutionsByTask', () => {
195
+ it('[EARS-6] should filter executions by task ID', async () => {
196
+ const execution1 = createMockExecutionRecord({ id: 'execution-1', taskId: 'task-123' });
197
+ const execution2 = createMockExecutionRecord({ id: 'execution-2', taskId: 'task-456' });
198
+ const execution3 = createMockExecutionRecord({ id: 'execution-3', taskId: 'task-123' });
199
+ mockExecutionStore.list.mockResolvedValue(['execution-1', 'execution-2', 'execution-3']);
200
+ mockExecutionStore.read
201
+ .mockResolvedValueOnce(execution1)
202
+ .mockResolvedValueOnce(execution2)
203
+ .mockResolvedValueOnce(execution3);
204
+ const result = await executionAdapter.getExecutionsByTask('task-123');
205
+ expect(result).toHaveLength(2);
206
+ expect(result[0]).toEqual(execution1.payload);
207
+ expect(result[1]).toEqual(execution3.payload);
208
+ });
209
+ it('should return empty array when no executions found for task', async () => {
210
+ mockExecutionStore.list.mockResolvedValue([]);
211
+ const result = await executionAdapter.getExecutionsByTask('task-nonexistent');
212
+ expect(result).toEqual([]);
213
+ });
214
+ });
215
+ describe('getAllExecutions', () => {
216
+ it('[EARS-7] should return all execution records in the system', async () => {
217
+ const execution1 = createMockExecutionRecord({ id: 'execution-1' });
218
+ const execution2 = createMockExecutionRecord({ id: 'execution-2' });
219
+ mockExecutionStore.list.mockResolvedValue(['execution-1', 'execution-2']);
220
+ mockExecutionStore.read
221
+ .mockResolvedValueOnce(execution1)
222
+ .mockResolvedValueOnce(execution2);
223
+ const result = await executionAdapter.getAllExecutions();
224
+ expect(result).toHaveLength(2);
225
+ expect(result[0]).toEqual(execution1.payload);
226
+ expect(result[1]).toEqual(execution2.payload);
227
+ });
228
+ it('should return empty array when no executions exist', async () => {
229
+ mockExecutionStore.list.mockResolvedValue([]);
230
+ const result = await executionAdapter.getAllExecutions();
231
+ expect(result).toEqual([]);
232
+ });
233
+ });
234
+ describe('Performance Tests', () => {
235
+ it('[EARS-10] should execute in under 30ms for typical datasets', async () => {
236
+ // Create mock data for performance test
237
+ const executionIds = Array.from({ length: 100 }, (_, i) => `execution-${i}`);
238
+ const mockExecutions = executionIds.map(id => createMockExecutionRecord({ id, taskId: `task-${id}` }));
239
+ mockExecutionStore.list.mockResolvedValue(executionIds);
240
+ mockExecutions.forEach(execution => {
241
+ mockExecutionStore.read.mockResolvedValueOnce(execution);
242
+ });
243
+ const startTime = Date.now();
244
+ await executionAdapter.getAllExecutions();
245
+ const endTime = Date.now();
246
+ expect(endTime - startTime).toBeLessThan(50); // Relaxed from 30ms to 50ms for CI stability
247
+ });
248
+ });
249
+ describe('Error Handling', () => {
250
+ it('should throw error when taskId is missing', async () => {
251
+ await expect(executionAdapter.create({}, mockActorId))
252
+ .rejects.toThrow('DetailedValidationError: taskId is required');
253
+ });
254
+ it('should handle factory errors gracefully', async () => {
255
+ createExecutionRecord.mockRejectedValue(new Error('Factory error'));
256
+ await expect(executionAdapter.create(mockPayload, mockActorId))
257
+ .rejects.toThrow('Factory error');
258
+ });
259
+ it('should handle identity errors gracefully', async () => {
260
+ mockIdentityAdapter.signRecord.mockRejectedValue(new Error('Signing failed'));
261
+ await expect(executionAdapter.create(mockPayload, mockActorId))
262
+ .rejects.toThrow('Signing failed');
263
+ });
264
+ });
265
+ });
266
+ //# sourceMappingURL=execution_adapter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution_adapter.test.js","sourceRoot":"","sources":["../../../../src/adapters/execution_adapter/execution_adapter.test.ts"],"names":[],"mappings":"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"}