@gitgov/core 1.0.1 → 1.0.2

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 +31 -31
  2. package/dist/src/index.d.ts +5475 -21
  3. package/dist/src/index.js +7873 -22
  4. package/dist/src/index.js.map +1 -1
  5. package/package.json +17 -5
  6. package/dist/scripts/compile-json-to-types.d.ts +0 -11
  7. package/dist/scripts/compile-json-to-types.d.ts.map +0 -1
  8. package/dist/scripts/compile-json-to-types.js +0 -129
  9. package/dist/scripts/compile-json-to-types.js.map +0 -1
  10. package/dist/scripts/diagnose-duplicates.d.ts +0 -7
  11. package/dist/scripts/diagnose-duplicates.d.ts.map +0 -1
  12. package/dist/scripts/diagnose-duplicates.js +0 -72
  13. package/dist/scripts/diagnose-duplicates.js.map +0 -1
  14. package/dist/scripts/generate-indexes.d.ts +0 -22
  15. package/dist/scripts/generate-indexes.d.ts.map +0 -1
  16. package/dist/scripts/generate-indexes.js +0 -168
  17. package/dist/scripts/generate-indexes.js.map +0 -1
  18. package/dist/scripts/sync-schemas.d.ts +0 -10
  19. package/dist/scripts/sync-schemas.d.ts.map +0 -1
  20. package/dist/scripts/sync-schemas.js +0 -84
  21. package/dist/scripts/sync-schemas.js.map +0 -1
  22. package/dist/scripts/sync-workflow-configs.d.ts +0 -11
  23. package/dist/scripts/sync-workflow-configs.d.ts.map +0 -1
  24. package/dist/scripts/sync-workflow-configs.js +0 -61
  25. package/dist/scripts/sync-workflow-configs.js.map +0 -1
  26. package/dist/scripts/update-diagram.d.ts +0 -7
  27. package/dist/scripts/update-diagram.d.ts.map +0 -1
  28. package/dist/scripts/update-diagram.js +0 -47
  29. package/dist/scripts/update-diagram.js.map +0 -1
  30. package/dist/scripts/validate-schemas.d.ts +0 -18
  31. package/dist/scripts/validate-schemas.d.ts.map +0 -1
  32. package/dist/scripts/validate-schemas.js +0 -313
  33. package/dist/scripts/validate-schemas.js.map +0 -1
  34. package/dist/src/adapters/backlog_adapter/backlog_adapter.integration.test.d.ts +0 -2
  35. package/dist/src/adapters/backlog_adapter/backlog_adapter.integration.test.d.ts.map +0 -1
  36. package/dist/src/adapters/backlog_adapter/backlog_adapter.integration.test.js +0 -507
  37. package/dist/src/adapters/backlog_adapter/backlog_adapter.integration.test.js.map +0 -1
  38. package/dist/src/adapters/backlog_adapter/backlog_adapter.test.d.ts +0 -2
  39. package/dist/src/adapters/backlog_adapter/backlog_adapter.test.d.ts.map +0 -1
  40. package/dist/src/adapters/backlog_adapter/backlog_adapter.test.js +0 -1282
  41. package/dist/src/adapters/backlog_adapter/backlog_adapter.test.js.map +0 -1
  42. package/dist/src/adapters/backlog_adapter/backlog_adapter_e2e.test.d.ts +0 -10
  43. package/dist/src/adapters/backlog_adapter/backlog_adapter_e2e.test.d.ts.map +0 -1
  44. package/dist/src/adapters/backlog_adapter/backlog_adapter_e2e.test.js +0 -144
  45. package/dist/src/adapters/backlog_adapter/backlog_adapter_e2e.test.js.map +0 -1
  46. package/dist/src/adapters/backlog_adapter/index.d.ts +0 -213
  47. package/dist/src/adapters/backlog_adapter/index.d.ts.map +0 -1
  48. package/dist/src/adapters/backlog_adapter/index.js +0 -924
  49. package/dist/src/adapters/backlog_adapter/index.js.map +0 -1
  50. package/dist/src/adapters/changelog_adapter/changelog_adapter.test.d.ts +0 -2
  51. package/dist/src/adapters/changelog_adapter/changelog_adapter.test.d.ts.map +0 -1
  52. package/dist/src/adapters/changelog_adapter/changelog_adapter.test.js +0 -505
  53. package/dist/src/adapters/changelog_adapter/changelog_adapter.test.js.map +0 -1
  54. package/dist/src/adapters/changelog_adapter/index.d.ts +0 -101
  55. package/dist/src/adapters/changelog_adapter/index.d.ts.map +0 -1
  56. package/dist/src/adapters/changelog_adapter/index.js +0 -197
  57. package/dist/src/adapters/changelog_adapter/index.js.map +0 -1
  58. package/dist/src/adapters/execution_adapter/execution_adapter.test.d.ts +0 -2
  59. package/dist/src/adapters/execution_adapter/execution_adapter.test.d.ts.map +0 -1
  60. package/dist/src/adapters/execution_adapter/execution_adapter.test.js +0 -266
  61. package/dist/src/adapters/execution_adapter/execution_adapter.test.js.map +0 -1
  62. package/dist/src/adapters/execution_adapter/index.d.ts +0 -90
  63. package/dist/src/adapters/execution_adapter/index.d.ts.map +0 -1
  64. package/dist/src/adapters/execution_adapter/index.js +0 -150
  65. package/dist/src/adapters/execution_adapter/index.js.map +0 -1
  66. package/dist/src/adapters/feedback_adapter/feedback_adapter.test.d.ts +0 -2
  67. package/dist/src/adapters/feedback_adapter/feedback_adapter.test.d.ts.map +0 -1
  68. package/dist/src/adapters/feedback_adapter/feedback_adapter.test.js +0 -256
  69. package/dist/src/adapters/feedback_adapter/feedback_adapter.test.js.map +0 -1
  70. package/dist/src/adapters/feedback_adapter/index.d.ts +0 -95
  71. package/dist/src/adapters/feedback_adapter/index.d.ts.map +0 -1
  72. package/dist/src/adapters/feedback_adapter/index.js +0 -192
  73. package/dist/src/adapters/feedback_adapter/index.js.map +0 -1
  74. package/dist/src/adapters/identity_adapter/identity_adapter.test.d.ts +0 -2
  75. package/dist/src/adapters/identity_adapter/identity_adapter.test.d.ts.map +0 -1
  76. package/dist/src/adapters/identity_adapter/identity_adapter.test.js +0 -624
  77. package/dist/src/adapters/identity_adapter/identity_adapter.test.js.map +0 -1
  78. package/dist/src/adapters/identity_adapter/index.d.ts +0 -82
  79. package/dist/src/adapters/identity_adapter/index.d.ts.map +0 -1
  80. package/dist/src/adapters/identity_adapter/index.js +0 -336
  81. package/dist/src/adapters/identity_adapter/index.js.map +0 -1
  82. package/dist/src/adapters/index.d.ts +0 -10
  83. package/dist/src/adapters/index.d.ts.map +0 -1
  84. package/dist/src/adapters/index.js +0 -10
  85. package/dist/src/adapters/index.js.map +0 -1
  86. package/dist/src/adapters/indexer_adapter/index.d.ts +0 -214
  87. package/dist/src/adapters/indexer_adapter/index.d.ts.map +0 -1
  88. package/dist/src/adapters/indexer_adapter/index.js +0 -643
  89. package/dist/src/adapters/indexer_adapter/index.js.map +0 -1
  90. package/dist/src/adapters/indexer_adapter/indexer_adapter.test.d.ts +0 -2
  91. package/dist/src/adapters/indexer_adapter/indexer_adapter.test.d.ts.map +0 -1
  92. package/dist/src/adapters/indexer_adapter/indexer_adapter.test.js +0 -409
  93. package/dist/src/adapters/indexer_adapter/indexer_adapter.test.js.map +0 -1
  94. package/dist/src/adapters/metrics_adapter/index.d.ts +0 -189
  95. package/dist/src/adapters/metrics_adapter/index.d.ts.map +0 -1
  96. package/dist/src/adapters/metrics_adapter/index.js +0 -592
  97. package/dist/src/adapters/metrics_adapter/index.js.map +0 -1
  98. package/dist/src/adapters/metrics_adapter/metrics_adapter.test.d.ts +0 -2
  99. package/dist/src/adapters/metrics_adapter/metrics_adapter.test.d.ts.map +0 -1
  100. package/dist/src/adapters/metrics_adapter/metrics_adapter.test.js +0 -558
  101. package/dist/src/adapters/metrics_adapter/metrics_adapter.test.js.map +0 -1
  102. package/dist/src/adapters/project_adapter/index.d.ts +0 -164
  103. package/dist/src/adapters/project_adapter/index.d.ts.map +0 -1
  104. package/dist/src/adapters/project_adapter/index.js +0 -445
  105. package/dist/src/adapters/project_adapter/index.js.map +0 -1
  106. package/dist/src/adapters/project_adapter/project_adapter.test.d.ts +0 -2
  107. package/dist/src/adapters/project_adapter/project_adapter.test.d.ts.map +0 -1
  108. package/dist/src/adapters/project_adapter/project_adapter.test.js +0 -627
  109. package/dist/src/adapters/project_adapter/project_adapter.test.js.map +0 -1
  110. package/dist/src/adapters/workflow_methodology_adapter/index.d.ts +0 -75
  111. package/dist/src/adapters/workflow_methodology_adapter/index.d.ts.map +0 -1
  112. package/dist/src/adapters/workflow_methodology_adapter/index.js +0 -205
  113. package/dist/src/adapters/workflow_methodology_adapter/index.js.map +0 -1
  114. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter.test.d.ts +0 -2
  115. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter.test.d.ts.map +0 -1
  116. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter.test.js +0 -463
  117. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter.test.js.map +0 -1
  118. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_integration.test.d.ts +0 -2
  119. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_integration.test.d.ts.map +0 -1
  120. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_integration.test.js +0 -287
  121. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_integration.test.js.map +0 -1
  122. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_scrum_integration.test.d.ts +0 -2
  123. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_scrum_integration.test.d.ts.map +0 -1
  124. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_scrum_integration.test.js +0 -278
  125. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_adapter_scrum_integration.test.js.map +0 -1
  126. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_default.json +0 -188
  127. package/dist/src/adapters/workflow_methodology_adapter/workflow_methodology_scrum.json +0 -284
  128. package/dist/src/config_manager/config_manager.test.d.ts +0 -2
  129. package/dist/src/config_manager/config_manager.test.d.ts.map +0 -1
  130. package/dist/src/config_manager/config_manager.test.js +0 -321
  131. package/dist/src/config_manager/config_manager.test.js.map +0 -1
  132. package/dist/src/config_manager/index.d.ts +0 -107
  133. package/dist/src/config_manager/index.d.ts.map +0 -1
  134. package/dist/src/config_manager/index.js +0 -192
  135. package/dist/src/config_manager/index.js.map +0 -1
  136. package/dist/src/crypto/checksum.d.ts +0 -6
  137. package/dist/src/crypto/checksum.d.ts.map +0 -1
  138. package/dist/src/crypto/checksum.js +0 -38
  139. package/dist/src/crypto/checksum.js.map +0 -1
  140. package/dist/src/crypto/checksum.test.d.ts +0 -2
  141. package/dist/src/crypto/checksum.test.d.ts.map +0 -1
  142. package/dist/src/crypto/checksum.test.js +0 -167
  143. package/dist/src/crypto/checksum.test.js.map +0 -1
  144. package/dist/src/crypto/index.d.ts +0 -3
  145. package/dist/src/crypto/index.d.ts.map +0 -1
  146. package/dist/src/crypto/index.js +0 -3
  147. package/dist/src/crypto/index.js.map +0 -1
  148. package/dist/src/crypto/signatures.d.ts +0 -24
  149. package/dist/src/crypto/signatures.d.ts.map +0 -1
  150. package/dist/src/crypto/signatures.js +0 -67
  151. package/dist/src/crypto/signatures.js.map +0 -1
  152. package/dist/src/crypto/signatures.test.d.ts +0 -2
  153. package/dist/src/crypto/signatures.test.d.ts.map +0 -1
  154. package/dist/src/crypto/signatures.test.js +0 -378
  155. package/dist/src/crypto/signatures.test.js.map +0 -1
  156. package/dist/src/diagram_generator/diagram_generator.d.ts +0 -76
  157. package/dist/src/diagram_generator/diagram_generator.d.ts.map +0 -1
  158. package/dist/src/diagram_generator/diagram_generator.js +0 -233
  159. package/dist/src/diagram_generator/diagram_generator.js.map +0 -1
  160. package/dist/src/diagram_generator/graph_validator.d.ts +0 -19
  161. package/dist/src/diagram_generator/graph_validator.d.ts.map +0 -1
  162. package/dist/src/diagram_generator/graph_validator.js +0 -98
  163. package/dist/src/diagram_generator/graph_validator.js.map +0 -1
  164. package/dist/src/diagram_generator/index.d.ts +0 -4
  165. package/dist/src/diagram_generator/index.d.ts.map +0 -1
  166. package/dist/src/diagram_generator/index.js +0 -4
  167. package/dist/src/diagram_generator/index.js.map +0 -1
  168. package/dist/src/diagram_generator/mermaid_renderer.d.ts +0 -82
  169. package/dist/src/diagram_generator/mermaid_renderer.d.ts.map +0 -1
  170. package/dist/src/diagram_generator/mermaid_renderer.js +0 -306
  171. package/dist/src/diagram_generator/mermaid_renderer.js.map +0 -1
  172. package/dist/src/diagram_generator/relationship_analyzer.d.ts +0 -116
  173. package/dist/src/diagram_generator/relationship_analyzer.d.ts.map +0 -1
  174. package/dist/src/diagram_generator/relationship_analyzer.js +0 -381
  175. package/dist/src/diagram_generator/relationship_analyzer.js.map +0 -1
  176. package/dist/src/event_bus/event_bus.d.ts +0 -110
  177. package/dist/src/event_bus/event_bus.d.ts.map +0 -1
  178. package/dist/src/event_bus/event_bus.js +0 -161
  179. package/dist/src/event_bus/event_bus.js.map +0 -1
  180. package/dist/src/event_bus/event_bus.test.d.ts +0 -2
  181. package/dist/src/event_bus/event_bus.test.d.ts.map +0 -1
  182. package/dist/src/event_bus/event_bus.test.js +0 -332
  183. package/dist/src/event_bus/event_bus.test.js.map +0 -1
  184. package/dist/src/event_bus/event_bus_integration.test.d.ts +0 -2
  185. package/dist/src/event_bus/event_bus_integration.test.d.ts.map +0 -1
  186. package/dist/src/event_bus/event_bus_integration.test.js +0 -474
  187. package/dist/src/event_bus/event_bus_integration.test.js.map +0 -1
  188. package/dist/src/event_bus/index.d.ts +0 -3
  189. package/dist/src/event_bus/index.d.ts.map +0 -1
  190. package/dist/src/event_bus/index.js +0 -3
  191. package/dist/src/event_bus/index.js.map +0 -1
  192. package/dist/src/event_bus/types.d.ts +0 -203
  193. package/dist/src/event_bus/types.d.ts.map +0 -1
  194. package/dist/src/event_bus/types.js +0 -5
  195. package/dist/src/event_bus/types.js.map +0 -1
  196. package/dist/src/factories/actor_factory.d.ts +0 -6
  197. package/dist/src/factories/actor_factory.d.ts.map +0 -1
  198. package/dist/src/factories/actor_factory.js +0 -25
  199. package/dist/src/factories/actor_factory.js.map +0 -1
  200. package/dist/src/factories/actor_factory.test.d.ts +0 -2
  201. package/dist/src/factories/actor_factory.test.d.ts.map +0 -1
  202. package/dist/src/factories/actor_factory.test.js +0 -169
  203. package/dist/src/factories/actor_factory.test.js.map +0 -1
  204. package/dist/src/factories/agent_factory.d.ts +0 -6
  205. package/dist/src/factories/agent_factory.d.ts.map +0 -1
  206. package/dist/src/factories/agent_factory.js +0 -25
  207. package/dist/src/factories/agent_factory.js.map +0 -1
  208. package/dist/src/factories/agent_factory.test.d.ts +0 -2
  209. package/dist/src/factories/agent_factory.test.d.ts.map +0 -1
  210. package/dist/src/factories/agent_factory.test.js +0 -199
  211. package/dist/src/factories/agent_factory.test.js.map +0 -1
  212. package/dist/src/factories/changelog_factory.d.ts +0 -9
  213. package/dist/src/factories/changelog_factory.d.ts.map +0 -1
  214. package/dist/src/factories/changelog_factory.js +0 -46
  215. package/dist/src/factories/changelog_factory.js.map +0 -1
  216. package/dist/src/factories/changelog_factory.test.d.ts +0 -2
  217. package/dist/src/factories/changelog_factory.test.d.ts.map +0 -1
  218. package/dist/src/factories/changelog_factory.test.js +0 -368
  219. package/dist/src/factories/changelog_factory.test.js.map +0 -1
  220. package/dist/src/factories/cycle_factory.d.ts +0 -6
  221. package/dist/src/factories/cycle_factory.d.ts.map +0 -1
  222. package/dist/src/factories/cycle_factory.js +0 -28
  223. package/dist/src/factories/cycle_factory.js.map +0 -1
  224. package/dist/src/factories/cycle_factory.test.d.ts +0 -2
  225. package/dist/src/factories/cycle_factory.test.d.ts.map +0 -1
  226. package/dist/src/factories/cycle_factory.test.js +0 -175
  227. package/dist/src/factories/cycle_factory.test.js.map +0 -1
  228. package/dist/src/factories/execution_factory.d.ts +0 -9
  229. package/dist/src/factories/execution_factory.d.ts.map +0 -1
  230. package/dist/src/factories/execution_factory.js +0 -29
  231. package/dist/src/factories/execution_factory.js.map +0 -1
  232. package/dist/src/factories/execution_factory.test.d.ts +0 -2
  233. package/dist/src/factories/execution_factory.test.d.ts.map +0 -1
  234. package/dist/src/factories/execution_factory.test.js +0 -207
  235. package/dist/src/factories/execution_factory.test.js.map +0 -1
  236. package/dist/src/factories/feedback_factory.d.ts +0 -9
  237. package/dist/src/factories/feedback_factory.d.ts.map +0 -1
  238. package/dist/src/factories/feedback_factory.js +0 -30
  239. package/dist/src/factories/feedback_factory.js.map +0 -1
  240. package/dist/src/factories/feedback_factory.test.d.ts +0 -2
  241. package/dist/src/factories/feedback_factory.test.d.ts.map +0 -1
  242. package/dist/src/factories/feedback_factory.test.js +0 -256
  243. package/dist/src/factories/feedback_factory.test.js.map +0 -1
  244. package/dist/src/factories/index.d.ts +0 -9
  245. package/dist/src/factories/index.d.ts.map +0 -1
  246. package/dist/src/factories/index.js +0 -9
  247. package/dist/src/factories/index.js.map +0 -1
  248. package/dist/src/factories/task_factory.d.ts +0 -6
  249. package/dist/src/factories/task_factory.d.ts.map +0 -1
  250. package/dist/src/factories/task_factory.js +0 -30
  251. package/dist/src/factories/task_factory.js.map +0 -1
  252. package/dist/src/factories/task_factory.test.d.ts +0 -2
  253. package/dist/src/factories/task_factory.test.d.ts.map +0 -1
  254. package/dist/src/factories/task_factory.test.js +0 -197
  255. package/dist/src/factories/task_factory.test.js.map +0 -1
  256. package/dist/src/factories/workflow_methodology_factory.d.ts +0 -11
  257. package/dist/src/factories/workflow_methodology_factory.d.ts.map +0 -1
  258. package/dist/src/factories/workflow_methodology_factory.js +0 -173
  259. package/dist/src/factories/workflow_methodology_factory.js.map +0 -1
  260. package/dist/src/factories/workflow_methodology_factory.test.d.ts +0 -2
  261. package/dist/src/factories/workflow_methodology_factory.test.d.ts.map +0 -1
  262. package/dist/src/factories/workflow_methodology_factory.test.js +0 -244
  263. package/dist/src/factories/workflow_methodology_factory.test.js.map +0 -1
  264. package/dist/src/index.d.ts.map +0 -1
  265. package/dist/src/integration/cycles_tasks_integration.test.d.ts +0 -2
  266. package/dist/src/integration/cycles_tasks_integration.test.d.ts.map +0 -1
  267. package/dist/src/integration/cycles_tasks_integration.test.js +0 -258
  268. package/dist/src/integration/cycles_tasks_integration.test.js.map +0 -1
  269. package/dist/src/integration/schema_integration.test.d.ts +0 -8
  270. package/dist/src/integration/schema_integration.test.d.ts.map +0 -1
  271. package/dist/src/integration/schema_integration.test.js +0 -279
  272. package/dist/src/integration/schema_integration.test.js.map +0 -1
  273. package/dist/src/logger/index.d.ts +0 -2
  274. package/dist/src/logger/index.d.ts.map +0 -1
  275. package/dist/src/logger/index.js +0 -2
  276. package/dist/src/logger/index.js.map +0 -1
  277. package/dist/src/logger/logger.d.ts +0 -10
  278. package/dist/src/logger/logger.d.ts.map +0 -1
  279. package/dist/src/logger/logger.js +0 -48
  280. package/dist/src/logger/logger.js.map +0 -1
  281. package/dist/src/schemas/errors.d.ts +0 -28
  282. package/dist/src/schemas/errors.d.ts.map +0 -1
  283. package/dist/src/schemas/errors.js +0 -31
  284. package/dist/src/schemas/errors.js.map +0 -1
  285. package/dist/src/schemas/generated/actor_record_schema.json +0 -91
  286. package/dist/src/schemas/generated/agent_record_schema.json +0 -142
  287. package/dist/src/schemas/generated/changelog_record_schema.json +0 -227
  288. package/dist/src/schemas/generated/cycle_record_schema.json +0 -80
  289. package/dist/src/schemas/generated/embedded_metadata_schema.json +0 -318
  290. package/dist/src/schemas/generated/execution_record_schema.json +0 -89
  291. package/dist/src/schemas/generated/feedback_record_schema.json +0 -83
  292. package/dist/src/schemas/generated/index.d.ts +0 -2221
  293. package/dist/src/schemas/generated/index.d.ts.map +0 -1
  294. package/dist/src/schemas/generated/index.js +0 -48
  295. package/dist/src/schemas/generated/index.js.map +0 -1
  296. package/dist/src/schemas/generated/task_record_schema.json +0 -103
  297. package/dist/src/schemas/generated/workflow_methodology_record_schema.json +0 -393
  298. package/dist/src/schemas/index.d.ts +0 -4
  299. package/dist/src/schemas/index.d.ts.map +0 -1
  300. package/dist/src/schemas/index.js +0 -4
  301. package/dist/src/schemas/index.js.map +0 -1
  302. package/dist/src/schemas/schema_cache.d.ts +0 -39
  303. package/dist/src/schemas/schema_cache.d.ts.map +0 -1
  304. package/dist/src/schemas/schema_cache.js +0 -109
  305. package/dist/src/schemas/schema_cache.js.map +0 -1
  306. package/dist/src/schemas/schema_cache.test.d.ts +0 -2
  307. package/dist/src/schemas/schema_cache.test.d.ts.map +0 -1
  308. package/dist/src/schemas/schema_cache.test.js +0 -163
  309. package/dist/src/schemas/schema_cache.test.js.map +0 -1
  310. package/dist/src/store/index.d.ts +0 -2
  311. package/dist/src/store/index.d.ts.map +0 -1
  312. package/dist/src/store/index.js +0 -2
  313. package/dist/src/store/index.js.map +0 -1
  314. package/dist/src/store/record_store.d.ts +0 -30
  315. package/dist/src/store/record_store.d.ts.map +0 -1
  316. package/dist/src/store/record_store.js +0 -83
  317. package/dist/src/store/record_store.js.map +0 -1
  318. package/dist/src/store/record_store.test.d.ts +0 -2
  319. package/dist/src/store/record_store.test.d.ts.map +0 -1
  320. package/dist/src/store/record_store.test.js +0 -646
  321. package/dist/src/store/record_store.test.js.map +0 -1
  322. package/dist/src/types/common.types.d.ts +0 -43
  323. package/dist/src/types/common.types.d.ts.map +0 -1
  324. package/dist/src/types/common.types.js +0 -13
  325. package/dist/src/types/common.types.js.map +0 -1
  326. package/dist/src/types/embedded.types.d.ts +0 -17
  327. package/dist/src/types/embedded.types.d.ts.map +0 -1
  328. package/dist/src/types/embedded.types.js +0 -2
  329. package/dist/src/types/embedded.types.js.map +0 -1
  330. package/dist/src/types/generated/actor_record.d.ts +0 -45
  331. package/dist/src/types/generated/actor_record.d.ts.map +0 -1
  332. package/dist/src/types/generated/actor_record.js +0 -7
  333. package/dist/src/types/generated/actor_record.js.map +0 -1
  334. package/dist/src/types/generated/agent_record.d.ts +0 -40
  335. package/dist/src/types/generated/agent_record.d.ts.map +0 -1
  336. package/dist/src/types/generated/agent_record.js +0 -7
  337. package/dist/src/types/generated/agent_record.js.map +0 -1
  338. package/dist/src/types/generated/changelog_record.d.ts +0 -100
  339. package/dist/src/types/generated/changelog_record.d.ts.map +0 -1
  340. package/dist/src/types/generated/changelog_record.js +0 -7
  341. package/dist/src/types/generated/changelog_record.js.map +0 -1
  342. package/dist/src/types/generated/cycle_record.d.ts +0 -36
  343. package/dist/src/types/generated/cycle_record.d.ts.map +0 -1
  344. package/dist/src/types/generated/cycle_record.js +0 -7
  345. package/dist/src/types/generated/cycle_record.js.map +0 -1
  346. package/dist/src/types/generated/embedded_metadata.d.ts +0 -94
  347. package/dist/src/types/generated/embedded_metadata.d.ts.map +0 -1
  348. package/dist/src/types/generated/embedded_metadata.js +0 -7
  349. package/dist/src/types/generated/embedded_metadata.js.map +0 -1
  350. package/dist/src/types/generated/execution_record.d.ts +0 -39
  351. package/dist/src/types/generated/execution_record.d.ts.map +0 -1
  352. package/dist/src/types/generated/execution_record.js +0 -7
  353. package/dist/src/types/generated/execution_record.js.map +0 -1
  354. package/dist/src/types/generated/feedback_record.d.ts +0 -43
  355. package/dist/src/types/generated/feedback_record.d.ts.map +0 -1
  356. package/dist/src/types/generated/feedback_record.js +0 -7
  357. package/dist/src/types/generated/feedback_record.js.map +0 -1
  358. package/dist/src/types/generated/index.d.ts +0 -15
  359. package/dist/src/types/generated/index.d.ts.map +0 -1
  360. package/dist/src/types/generated/index.js +0 -15
  361. package/dist/src/types/generated/index.js.map +0 -1
  362. package/dist/src/types/generated/task_record.d.ts +0 -47
  363. package/dist/src/types/generated/task_record.d.ts.map +0 -1
  364. package/dist/src/types/generated/task_record.js +0 -7
  365. package/dist/src/types/generated/task_record.js.map +0 -1
  366. package/dist/src/types/generated/workflow_methodology_record.d.ts +0 -211
  367. package/dist/src/types/generated/workflow_methodology_record.d.ts.map +0 -1
  368. package/dist/src/types/generated/workflow_methodology_record.js +0 -7
  369. package/dist/src/types/generated/workflow_methodology_record.js.map +0 -1
  370. package/dist/src/types/index.d.ts +0 -4
  371. package/dist/src/types/index.d.ts.map +0 -1
  372. package/dist/src/types/index.js +0 -4
  373. package/dist/src/types/index.js.map +0 -1
  374. package/dist/src/utils/id_generator.d.ts +0 -44
  375. package/dist/src/utils/id_generator.d.ts.map +0 -1
  376. package/dist/src/utils/id_generator.js +0 -107
  377. package/dist/src/utils/id_generator.js.map +0 -1
  378. package/dist/src/utils/id_generator.test.d.ts +0 -2
  379. package/dist/src/utils/id_generator.test.d.ts.map +0 -1
  380. package/dist/src/utils/id_generator.test.js +0 -100
  381. package/dist/src/utils/id_generator.test.js.map +0 -1
  382. package/dist/src/utils/index.d.ts +0 -2
  383. package/dist/src/utils/index.d.ts.map +0 -1
  384. package/dist/src/utils/index.js +0 -3
  385. package/dist/src/utils/index.js.map +0 -1
  386. package/dist/src/validation/actor_validator.d.ts +0 -21
  387. package/dist/src/validation/actor_validator.d.ts.map +0 -1
  388. package/dist/src/validation/actor_validator.js +0 -48
  389. package/dist/src/validation/actor_validator.js.map +0 -1
  390. package/dist/src/validation/actor_validator.test.d.ts +0 -2
  391. package/dist/src/validation/actor_validator.test.d.ts.map +0 -1
  392. package/dist/src/validation/actor_validator.test.js +0 -83
  393. package/dist/src/validation/actor_validator.test.js.map +0 -1
  394. package/dist/src/validation/agent_validator.d.ts +0 -30
  395. package/dist/src/validation/agent_validator.d.ts.map +0 -1
  396. package/dist/src/validation/agent_validator.js +0 -66
  397. package/dist/src/validation/agent_validator.js.map +0 -1
  398. package/dist/src/validation/agent_validator.test.d.ts +0 -2
  399. package/dist/src/validation/agent_validator.test.d.ts.map +0 -1
  400. package/dist/src/validation/agent_validator.test.js +0 -73
  401. package/dist/src/validation/agent_validator.test.js.map +0 -1
  402. package/dist/src/validation/changelog_validator.d.ts +0 -23
  403. package/dist/src/validation/changelog_validator.d.ts.map +0 -1
  404. package/dist/src/validation/changelog_validator.js +0 -58
  405. package/dist/src/validation/changelog_validator.js.map +0 -1
  406. package/dist/src/validation/changelog_validator.test.d.ts +0 -2
  407. package/dist/src/validation/changelog_validator.test.d.ts.map +0 -1
  408. package/dist/src/validation/changelog_validator.test.js +0 -401
  409. package/dist/src/validation/changelog_validator.test.js.map +0 -1
  410. package/dist/src/validation/common.d.ts +0 -10
  411. package/dist/src/validation/common.d.ts.map +0 -1
  412. package/dist/src/validation/common.js +0 -12
  413. package/dist/src/validation/common.js.map +0 -1
  414. package/dist/src/validation/cycle_validator.d.ts +0 -24
  415. package/dist/src/validation/cycle_validator.d.ts.map +0 -1
  416. package/dist/src/validation/cycle_validator.js +0 -51
  417. package/dist/src/validation/cycle_validator.js.map +0 -1
  418. package/dist/src/validation/cycle_validator.test.d.ts +0 -2
  419. package/dist/src/validation/cycle_validator.test.d.ts.map +0 -1
  420. package/dist/src/validation/cycle_validator.test.js +0 -182
  421. package/dist/src/validation/cycle_validator.test.js.map +0 -1
  422. package/dist/src/validation/embedded_metadata_validator.d.ts +0 -26
  423. package/dist/src/validation/embedded_metadata_validator.d.ts.map +0 -1
  424. package/dist/src/validation/embedded_metadata_validator.js +0 -122
  425. package/dist/src/validation/embedded_metadata_validator.js.map +0 -1
  426. package/dist/src/validation/embedded_metadata_validator.test.d.ts +0 -2
  427. package/dist/src/validation/embedded_metadata_validator.test.d.ts.map +0 -1
  428. package/dist/src/validation/embedded_metadata_validator.test.js +0 -316
  429. package/dist/src/validation/embedded_metadata_validator.test.js.map +0 -1
  430. package/dist/src/validation/errors.d.ts +0 -67
  431. package/dist/src/validation/errors.d.ts.map +0 -1
  432. package/dist/src/validation/errors.js +0 -83
  433. package/dist/src/validation/errors.js.map +0 -1
  434. package/dist/src/validation/execution_validator.d.ts +0 -23
  435. package/dist/src/validation/execution_validator.d.ts.map +0 -1
  436. package/dist/src/validation/execution_validator.js +0 -58
  437. package/dist/src/validation/execution_validator.js.map +0 -1
  438. package/dist/src/validation/execution_validator.test.d.ts +0 -2
  439. package/dist/src/validation/execution_validator.test.d.ts.map +0 -1
  440. package/dist/src/validation/execution_validator.test.js +0 -167
  441. package/dist/src/validation/execution_validator.test.js.map +0 -1
  442. package/dist/src/validation/feedback_validator.d.ts +0 -23
  443. package/dist/src/validation/feedback_validator.d.ts.map +0 -1
  444. package/dist/src/validation/feedback_validator.js +0 -58
  445. package/dist/src/validation/feedback_validator.js.map +0 -1
  446. package/dist/src/validation/feedback_validator.test.d.ts +0 -2
  447. package/dist/src/validation/feedback_validator.test.d.ts.map +0 -1
  448. package/dist/src/validation/feedback_validator.test.js +0 -131
  449. package/dist/src/validation/feedback_validator.test.js.map +0 -1
  450. package/dist/src/validation/index.d.ts +0 -11
  451. package/dist/src/validation/index.d.ts.map +0 -1
  452. package/dist/src/validation/index.js +0 -10
  453. package/dist/src/validation/index.js.map +0 -1
  454. package/dist/src/validation/task_validator.d.ts +0 -24
  455. package/dist/src/validation/task_validator.d.ts.map +0 -1
  456. package/dist/src/validation/task_validator.js +0 -50
  457. package/dist/src/validation/task_validator.js.map +0 -1
  458. package/dist/src/validation/task_validator.test.d.ts +0 -2
  459. package/dist/src/validation/task_validator.test.d.ts.map +0 -1
  460. package/dist/src/validation/task_validator.test.js +0 -185
  461. package/dist/src/validation/task_validator.test.js.map +0 -1
  462. package/dist/src/validation/workflow_methodology_validator.d.ts +0 -32
  463. package/dist/src/validation/workflow_methodology_validator.d.ts.map +0 -1
  464. package/dist/src/validation/workflow_methodology_validator.js +0 -91
  465. package/dist/src/validation/workflow_methodology_validator.js.map +0 -1
  466. package/dist/src/validation/workflow_methodology_validator.test.d.ts +0 -2
  467. package/dist/src/validation/workflow_methodology_validator.test.d.ts.map +0 -1
  468. package/dist/src/validation/workflow_methodology_validator.test.js +0 -229
  469. package/dist/src/validation/workflow_methodology_validator.test.js.map +0 -1
@@ -1,646 +0,0 @@
1
- // Mock IdentityAdapter before importing
2
- jest.doMock('../adapters/identity_adapter', () => ({
3
- IdentityAdapter: jest.fn().mockImplementation(() => ({
4
- getActorPublicKey: jest.fn().mockResolvedValue('mock-public-key'),
5
- getActor: jest.fn(),
6
- createActor: jest.fn(),
7
- listActors: jest.fn(),
8
- signRecord: jest.fn(),
9
- rotateActorKey: jest.fn(),
10
- revokeActor: jest.fn(),
11
- resolveCurrentActorId: jest.fn(),
12
- getCurrentActor: jest.fn(),
13
- getEffectiveActorForAgent: jest.fn(),
14
- authenticate: jest.fn(),
15
- createAgentRecord: jest.fn(),
16
- getAgentRecord: jest.fn(),
17
- listAgentRecords: jest.fn(),
18
- }))
19
- }));
20
- import { RecordStore } from './record_store';
21
- import * as path from 'path';
22
- import { createExecutionRecord, createChangelogRecord, createFeedbackRecord } from '../factories';
23
- // This is our hand-made mock for the fs dependencies.
24
- const mockFs = {
25
- mkdir: jest.fn(),
26
- writeFile: jest.fn(),
27
- readFile: jest.fn(),
28
- readdir: jest.fn(),
29
- unlink: jest.fn(),
30
- access: jest.fn(),
31
- };
32
- const testRoot = '/tmp/gitgov-test-root';
33
- // Helper function to create mock Dirent objects
34
- const createMockDirent = (name, isFile = true) => ({
35
- name,
36
- isFile: () => isFile,
37
- isDirectory: () => !isFile,
38
- isBlockDevice: () => false,
39
- isCharacterDevice: () => false,
40
- isSymbolicLink: () => false,
41
- isFIFO: () => false,
42
- isSocket: () => false,
43
- }); // Using any here because Jest mocks are complex to type correctly
44
- // Helper function to create mock Signature objects
45
- const createMockSignature = (keyId = 'human:test-user') => ({
46
- keyId,
47
- role: 'author',
48
- signature: 'mock-signature-hash',
49
- timestamp: 1704067200000,
50
- timestamp_iso: '2024-01-01T00:00:00.000Z'
51
- });
52
- describe('RecordStore<ActorRecord>', () => {
53
- let actorStore;
54
- const actorsDir = path.join(testRoot, '.gitgov', 'actors');
55
- beforeAll(() => {
56
- // Set up mocks once for all tests in this suite
57
- mockFs.mkdir.mockResolvedValue(undefined);
58
- });
59
- beforeEach(() => {
60
- // Reset mocks before each test to ensure isolation
61
- jest.restoreAllMocks();
62
- actorStore = new RecordStore('actors', testRoot, mockFs);
63
- });
64
- const actorPayload = {
65
- id: 'human:test-user', type: 'human', displayName: 'Test User',
66
- publicKey: 'some-key', roles: ['author'], status: 'active',
67
- };
68
- const mockHeader = {
69
- version: '1.0',
70
- type: 'actor',
71
- payloadChecksum: 'valid-checksum',
72
- // Provide a valid signature object to satisfy the type
73
- signatures: [{ keyId: 'a', role: 'b', signature: 'c', timestamp: 1, timestamp_iso: 'd' }],
74
- };
75
- const actorRecord = {
76
- header: mockHeader,
77
- payload: actorPayload,
78
- };
79
- const actorFileName = 'human_test-user.json';
80
- const expectedPath = path.join(actorsDir, actorFileName);
81
- describe('write', () => {
82
- it('[EARS-1 & EARS-2] should write a record and create the directory', async () => {
83
- mockFs.writeFile.mockResolvedValue(undefined);
84
- await actorStore.write(actorRecord);
85
- expect(mockFs.mkdir).toHaveBeenCalledWith(actorsDir, { recursive: true });
86
- expect(mockFs.writeFile).toHaveBeenCalledWith(expectedPath, expect.stringContaining('"id": "human:test-user"'), 'utf-8');
87
- });
88
- });
89
- describe('read', () => {
90
- it('[EARS-5] should read an existing record', async () => {
91
- const mockContent = JSON.stringify(actorRecord);
92
- mockFs.readFile.mockResolvedValue(mockContent);
93
- const readData = await actorStore.read(actorPayload.id);
94
- expect(mockFs.readFile).toHaveBeenCalledWith(expectedPath, 'utf-8');
95
- expect(readData).toEqual(actorRecord);
96
- });
97
- it('[EARS-6] should return null if the record does not exist', async () => {
98
- const error = new Error('File not found');
99
- error.code = 'ENOENT';
100
- mockFs.readFile.mockRejectedValue(error);
101
- const readData = await actorStore.read('non-existent');
102
- expect(readData).toBeNull();
103
- });
104
- });
105
- describe('delete', () => {
106
- it('[EARS-10] should delete an existing file', async () => {
107
- mockFs.unlink.mockResolvedValue(undefined);
108
- await actorStore.delete(actorPayload.id);
109
- expect(mockFs.unlink).toHaveBeenCalledWith(expectedPath);
110
- });
111
- });
112
- describe('list', () => {
113
- it('[EARS-11] should list all record IDs from the directory', async () => {
114
- // Mock the simplest case: readdir returns Dirent objects with just the properties we need
115
- const mockFiles = [
116
- createMockDirent('human_test-user.json'),
117
- createMockDirent('agent_another.json'),
118
- createMockDirent('not-json.txt'),
119
- createMockDirent('a-directory', false),
120
- ];
121
- mockFs.readdir.mockResolvedValue(mockFiles);
122
- const ids = await actorStore.list();
123
- expect(mockFs.readdir).toHaveBeenCalledWith(actorsDir, { withFileTypes: true });
124
- expect(ids).toEqual(['human:test-user', 'agent:another']);
125
- });
126
- });
127
- describe('exists', () => {
128
- it('[EARS-12] should return true if a record exists', async () => {
129
- mockFs.access.mockResolvedValue(undefined);
130
- const result = await actorStore.exists(actorPayload.id);
131
- expect(mockFs.access).toHaveBeenCalled();
132
- expect(result).toBe(true);
133
- });
134
- it('[EARS-13] should return false if a record does not exist', async () => {
135
- mockFs.access.mockRejectedValue(new Error('ENOENT'));
136
- const result = await actorStore.exists('non-existent');
137
- expect(result).toBe(false);
138
- });
139
- });
140
- });
141
- describe('RecordStore<AgentRecord>', () => {
142
- let agentStore;
143
- const agentsDir = path.join(testRoot, '.gitgov', 'agents');
144
- beforeEach(() => {
145
- // Reset mocks before each test to ensure isolation
146
- jest.restoreAllMocks();
147
- agentStore = new RecordStore('agents', testRoot, mockFs);
148
- });
149
- const agentPayload = {
150
- id: 'agent:test-agent', guild: 'design', status: 'active',
151
- engine: { type: 'local', runtime: 'typescript', entrypoint: 'test.ts', function: 'run' },
152
- triggers: [], knowledge_dependencies: [], prompt_engine_requirements: {}
153
- };
154
- const mockAgentHeader = {
155
- version: '1.0',
156
- type: 'agent',
157
- payloadChecksum: 'valid-agent-checksum',
158
- signatures: [{ keyId: 'agent:test-agent', role: 'author', signature: 'sig', timestamp: 1, timestamp_iso: 'd' }],
159
- };
160
- const agentRecord = {
161
- header: mockAgentHeader,
162
- payload: agentPayload,
163
- };
164
- const agentFileName = 'agent_test-agent.json';
165
- const expectedAgentPath = path.join(agentsDir, agentFileName);
166
- describe('write', () => {
167
- it('[EARS-1 & EARS-2] should write an agent record and create the directory', async () => {
168
- mockFs.writeFile.mockResolvedValue(undefined);
169
- await agentStore.write(agentRecord);
170
- expect(mockFs.mkdir).toHaveBeenCalledWith(agentsDir, { recursive: true });
171
- expect(mockFs.writeFile).toHaveBeenCalledWith(expectedAgentPath, expect.stringContaining('"id": "agent:test-agent"'), 'utf-8');
172
- });
173
- });
174
- describe('read', () => {
175
- it('[EARS-5] should read an existing agent record', async () => {
176
- const mockContent = JSON.stringify(agentRecord);
177
- mockFs.readFile.mockResolvedValue(mockContent);
178
- const readData = await agentStore.read(agentPayload.id);
179
- expect(mockFs.readFile).toHaveBeenCalledWith(expectedAgentPath, 'utf-8');
180
- expect(readData).toEqual(agentRecord);
181
- });
182
- it('[EARS-6] should return null if the agent record does not exist', async () => {
183
- const error = new Error('File not found');
184
- error.code = 'ENOENT';
185
- mockFs.readFile.mockRejectedValue(error);
186
- const readData = await agentStore.read('agent:non-existent');
187
- expect(readData).toBeNull();
188
- });
189
- });
190
- describe('delete', () => {
191
- it('[EARS-10] should delete an existing agent file', async () => {
192
- mockFs.unlink.mockResolvedValue(undefined);
193
- await agentStore.delete(agentPayload.id);
194
- expect(mockFs.unlink).toHaveBeenCalledWith(expectedAgentPath);
195
- });
196
- });
197
- describe('list', () => {
198
- it('[EARS-11] should list all agent record IDs from the directory', async () => {
199
- const mockFiles = [
200
- createMockDirent('agent_test-agent.json'),
201
- createMockDirent('agent_design-bot.json'),
202
- createMockDirent('not-json.txt'),
203
- createMockDirent('a-directory', false),
204
- ];
205
- mockFs.readdir.mockResolvedValue(mockFiles);
206
- const ids = await agentStore.list();
207
- expect(mockFs.readdir).toHaveBeenCalledWith(agentsDir, { withFileTypes: true });
208
- expect(ids).toEqual(['agent:test-agent', 'agent:design-bot']);
209
- });
210
- });
211
- describe('exists', () => {
212
- it('[EARS-12] should return true if an agent record exists', async () => {
213
- mockFs.access.mockResolvedValue(undefined);
214
- const result = await agentStore.exists(agentPayload.id);
215
- expect(mockFs.access).toHaveBeenCalled();
216
- expect(result).toBe(true);
217
- });
218
- it('[EARS-13] should return false if an agent record does not exist', async () => {
219
- mockFs.access.mockRejectedValue(new Error('ENOENT'));
220
- const result = await agentStore.exists('agent:non-existent');
221
- expect(result).toBe(false);
222
- });
223
- });
224
- });
225
- describe('RecordStore<TaskRecord>', () => {
226
- let taskStore;
227
- const tasksDir = path.join(testRoot, '.gitgov', 'tasks');
228
- beforeEach(() => {
229
- jest.restoreAllMocks();
230
- taskStore = new RecordStore('tasks', testRoot, mockFs);
231
- });
232
- const taskPayload = {
233
- id: '1752274500-task-test-task', title: 'Test Task',
234
- status: 'draft', priority: 'medium', description: 'A test task for store validation', tags: ['test']
235
- };
236
- const mockTaskHeader = {
237
- version: '1.0',
238
- type: 'task',
239
- payloadChecksum: 'valid-task-checksum',
240
- signatures: [{ keyId: 'human:test-user', role: 'author', signature: 'sig', timestamp: 1, timestamp_iso: 'd' }],
241
- };
242
- const taskRecord = {
243
- header: mockTaskHeader,
244
- payload: taskPayload,
245
- };
246
- const taskFileName = '1752274500-task-test-task.json';
247
- const expectedTaskPath = path.join(tasksDir, taskFileName);
248
- describe('write', () => {
249
- it('[EARS-1 & EARS-2] should write a task record and create the directory', async () => {
250
- mockFs.writeFile.mockResolvedValue(undefined);
251
- await taskStore.write(taskRecord);
252
- expect(mockFs.mkdir).toHaveBeenCalledWith(tasksDir, { recursive: true });
253
- expect(mockFs.writeFile).toHaveBeenCalledWith(expectedTaskPath, expect.stringContaining('"id": "1752274500-task-test-task"'), 'utf-8');
254
- });
255
- });
256
- describe('read', () => {
257
- it('[EARS-5] should read an existing task record', async () => {
258
- const mockContent = JSON.stringify(taskRecord);
259
- mockFs.readFile.mockResolvedValue(mockContent);
260
- const readData = await taskStore.read(taskPayload.id);
261
- expect(mockFs.readFile).toHaveBeenCalledWith(expectedTaskPath, 'utf-8');
262
- expect(readData).toEqual(taskRecord);
263
- });
264
- it('[EARS-6] should return null if the task record does not exist', async () => {
265
- const error = new Error('File not found');
266
- error.code = 'ENOENT';
267
- mockFs.readFile.mockRejectedValue(error);
268
- const readData = await taskStore.read('1752274500-task-non-existent');
269
- expect(readData).toBeNull();
270
- });
271
- });
272
- describe('list', () => {
273
- it('[EARS-11] should list all task record IDs from the directory', async () => {
274
- const mockFiles = [
275
- createMockDirent('1752274500-task-test-task.json'),
276
- createMockDirent('1752360900-task-another-task.json'),
277
- createMockDirent('not-json.txt'),
278
- createMockDirent('a-directory', false),
279
- ];
280
- mockFs.readdir.mockResolvedValue(mockFiles);
281
- const ids = await taskStore.list();
282
- expect(mockFs.readdir).toHaveBeenCalledWith(tasksDir, { withFileTypes: true });
283
- expect(ids).toEqual(['1752274500-task-test-task', '1752360900-task-another-task']);
284
- });
285
- });
286
- describe('exists', () => {
287
- it('[EARS-12] should return true if a task record exists', async () => {
288
- mockFs.access.mockResolvedValue(undefined);
289
- const result = await taskStore.exists(taskPayload.id);
290
- expect(mockFs.access).toHaveBeenCalled();
291
- expect(result).toBe(true);
292
- });
293
- it('[EARS-13] should return false if a task record does not exist', async () => {
294
- mockFs.access.mockRejectedValue(new Error('ENOENT'));
295
- const result = await taskStore.exists('1752274500-task-non-existent');
296
- expect(result).toBe(false);
297
- });
298
- });
299
- });
300
- describe('RecordStore<CycleRecord>', () => {
301
- let cycleStore;
302
- const cyclesDir = path.join(testRoot, '.gitgov', 'cycles');
303
- beforeEach(() => {
304
- jest.restoreAllMocks();
305
- cycleStore = new RecordStore('cycles', testRoot, mockFs);
306
- });
307
- const cyclePayload = {
308
- id: '1754400000-cycle-test-cycle', title: 'Test Cycle',
309
- status: 'planning', taskIds: ['1752274500-task-test-task'], tags: ['test']
310
- };
311
- const mockCycleHeader = {
312
- version: '1.0',
313
- type: 'cycle',
314
- payloadChecksum: 'valid-cycle-checksum',
315
- signatures: [{ keyId: 'human:test-user', role: 'author', signature: 'sig', timestamp: 1, timestamp_iso: 'd' }],
316
- };
317
- const cycleRecord = {
318
- header: mockCycleHeader,
319
- payload: cyclePayload,
320
- };
321
- const cycleFileName = '1754400000-cycle-test-cycle.json';
322
- const expectedCyclePath = path.join(cyclesDir, cycleFileName);
323
- describe('write', () => {
324
- it('[EARS-1 & EARS-2] should write a cycle record and create the directory', async () => {
325
- mockFs.writeFile.mockResolvedValue(undefined);
326
- await cycleStore.write(cycleRecord);
327
- expect(mockFs.mkdir).toHaveBeenCalledWith(cyclesDir, { recursive: true });
328
- expect(mockFs.writeFile).toHaveBeenCalledWith(expectedCyclePath, expect.stringContaining('"id": "1754400000-cycle-test-cycle"'), 'utf-8');
329
- });
330
- });
331
- describe('read', () => {
332
- it('[EARS-5] should read an existing cycle record', async () => {
333
- const mockContent = JSON.stringify(cycleRecord);
334
- mockFs.readFile.mockResolvedValue(mockContent);
335
- const readData = await cycleStore.read(cyclePayload.id);
336
- expect(mockFs.readFile).toHaveBeenCalledWith(expectedCyclePath, 'utf-8');
337
- expect(readData).toEqual(cycleRecord);
338
- });
339
- it('[EARS-6] should return null if the cycle record does not exist', async () => {
340
- const error = new Error('File not found');
341
- error.code = 'ENOENT';
342
- mockFs.readFile.mockRejectedValue(error);
343
- const readData = await cycleStore.read('1754400000-cycle-non-existent');
344
- expect(readData).toBeNull();
345
- });
346
- });
347
- describe('list', () => {
348
- it('[EARS-11] should list all cycle record IDs from the directory', async () => {
349
- const mockFiles = [
350
- createMockDirent('1754400000-cycle-test-cycle.json'),
351
- createMockDirent('1754500000-cycle-another-cycle.json'),
352
- createMockDirent('not-json.txt'),
353
- createMockDirent('a-directory', false),
354
- ];
355
- mockFs.readdir.mockResolvedValue(mockFiles);
356
- const ids = await cycleStore.list();
357
- expect(mockFs.readdir).toHaveBeenCalledWith(cyclesDir, { withFileTypes: true });
358
- expect(ids).toEqual(['1754400000-cycle-test-cycle', '1754500000-cycle-another-cycle']);
359
- });
360
- });
361
- describe('exists', () => {
362
- it('[EARS-12] should return true if a cycle record exists', async () => {
363
- mockFs.access.mockResolvedValue(undefined);
364
- const result = await cycleStore.exists(cyclePayload.id);
365
- expect(mockFs.access).toHaveBeenCalled();
366
- expect(result).toBe(true);
367
- });
368
- it('[EARS-13] should return false if a cycle record does not exist', async () => {
369
- mockFs.access.mockRejectedValue(new Error('ENOENT'));
370
- const result = await cycleStore.exists('1754400000-cycle-non-existent');
371
- expect(result).toBe(false);
372
- });
373
- });
374
- });
375
- // --- Validation Methods Tests ---
376
- // Mock the validation module at the top level
377
- jest.mock('../validation/embedded_metadata_validator', () => ({
378
- validateFullEmbeddedMetadataRecord: jest.fn().mockResolvedValue(undefined)
379
- }));
380
- import { validateFullEmbeddedMetadataRecord } from '../validation/embedded_metadata_validator';
381
- const mockValidateFullEmbeddedMetadataRecord = validateFullEmbeddedMetadataRecord;
382
- // Global beforeEach to reset validation mock
383
- beforeEach(() => {
384
- mockValidateFullEmbeddedMetadataRecord.mockResolvedValue(undefined);
385
- });
386
- describe('RecordStore Validation Methods', () => {
387
- let actorStore;
388
- beforeEach(() => {
389
- jest.clearAllMocks();
390
- actorStore = new RecordStore('actors', testRoot, mockFs);
391
- });
392
- const validActorRecord = {
393
- header: {
394
- version: '1.0',
395
- type: 'actor',
396
- payloadChecksum: 'valid-checksum',
397
- signatures: [{ keyId: 'human:test-user', role: 'author', signature: 'sig', timestamp: 1, timestamp_iso: 'd' }],
398
- },
399
- payload: {
400
- id: 'human:test-user', type: 'human', displayName: 'Test User',
401
- publicKey: 'some-key', roles: ['author'], status: 'active',
402
- }
403
- };
404
- describe('write (dumb storage)', () => {
405
- it('[EARS-3] should persist record without validation (validation is adapter responsibility)', async () => {
406
- mockFs.writeFile.mockResolvedValue(undefined);
407
- await actorStore.write(validActorRecord);
408
- expect(mockFs.writeFile).toHaveBeenCalledWith(expect.stringContaining('human_test-user.json'), JSON.stringify(validActorRecord, null, 2), 'utf-8');
409
- // RecordStore should NOT call validation - that's adapter responsibility
410
- expect(mockValidateFullEmbeddedMetadataRecord).not.toHaveBeenCalled();
411
- });
412
- it('[EARS-4] should persist any record without validation (even invalid ones)', async () => {
413
- const invalidRecord = { ...validActorRecord, payload: { ...validActorRecord.payload, id: '' } };
414
- mockFs.writeFile.mockResolvedValue(undefined);
415
- await actorStore.write(invalidRecord);
416
- expect(mockFs.writeFile).toHaveBeenCalledWith(expect.stringContaining('.json'), JSON.stringify(invalidRecord, null, 2), 'utf-8');
417
- // RecordStore should NOT validate - it's "dumb storage"
418
- expect(mockValidateFullEmbeddedMetadataRecord).not.toHaveBeenCalled();
419
- });
420
- });
421
- describe('read (dumb storage)', () => {
422
- it('[EARS-7] should return record without validation (validation is adapter responsibility)', async () => {
423
- mockFs.readFile.mockResolvedValue(JSON.stringify(validActorRecord));
424
- const result = await actorStore.read('human:test-user');
425
- expect(mockFs.readFile).toHaveBeenCalledWith(expect.stringContaining('human_test-user.json'), 'utf-8');
426
- expect(result).toEqual(validActorRecord);
427
- // RecordStore should NOT call validation - that's adapter responsibility
428
- expect(mockValidateFullEmbeddedMetadataRecord).not.toHaveBeenCalled();
429
- });
430
- it('[EARS-8] should return any record without validation (even invalid ones)', async () => {
431
- const invalidRecord = { ...validActorRecord, payload: { ...validActorRecord.payload, id: '' } };
432
- mockFs.readFile.mockResolvedValue(JSON.stringify(invalidRecord));
433
- const result = await actorStore.read('human:test-user');
434
- expect(mockFs.readFile).toHaveBeenCalled();
435
- expect(result).toEqual(invalidRecord);
436
- // RecordStore should NOT validate - it's "dumb storage"
437
- expect(mockValidateFullEmbeddedMetadataRecord).not.toHaveBeenCalled();
438
- });
439
- it('[EARS-9] should return null when record does not exist', async () => {
440
- const error = new Error('File not found');
441
- error.code = 'ENOENT';
442
- mockFs.readFile.mockRejectedValue(error);
443
- const result = await actorStore.read('non-existent');
444
- expect(result).toBeNull();
445
- expect(mockFs.readFile).toHaveBeenCalled();
446
- // Should not call validation for non-existent records
447
- expect(mockValidateFullEmbeddedMetadataRecord).not.toHaveBeenCalled();
448
- });
449
- });
450
- });
451
- // --- ExecutionRecord Tests ---
452
- describe('RecordStore<ExecutionRecord>', () => {
453
- let executionStore;
454
- let mockExecutionRecord;
455
- beforeEach(async () => {
456
- executionStore = new RecordStore('executions', testRoot, mockFs);
457
- mockExecutionRecord = {
458
- header: {
459
- type: 'execution',
460
- version: '1.0',
461
- payloadChecksum: 'a'.repeat(64), // Mock SHA-256 hash
462
- signatures: [createMockSignature()]
463
- },
464
- payload: await createExecutionRecord({
465
- id: '1757460000-exec-test-execution',
466
- title: 'Test Execution',
467
- taskId: '1757452191-task-implement-workflow-methodology-adapter',
468
- result: 'Completed successfully.',
469
- }),
470
- };
471
- });
472
- it('[EARS-1 & EARS-2] should write an ExecutionRecord', async () => {
473
- await executionStore.write(mockExecutionRecord);
474
- const expectedPath = path.join('/tmp/gitgov-test-root', '.gitgov', 'executions', '1757460000-exec-test-execution.json');
475
- expect(mockFs.writeFile).toHaveBeenCalledWith(expectedPath, expect.any(String), 'utf-8');
476
- });
477
- it('[EARS-5] should read an ExecutionRecord', async () => {
478
- mockFs.readFile.mockResolvedValue(JSON.stringify(mockExecutionRecord));
479
- const record = await executionStore.read(mockExecutionRecord.payload.id);
480
- expect(record).toEqual(mockExecutionRecord);
481
- });
482
- it('[EARS-6] should return null if ExecutionRecord does not exist', async () => {
483
- const error = new Error('File not found');
484
- error.code = 'ENOENT';
485
- mockFs.readFile.mockRejectedValue(error);
486
- const readData = await executionStore.read('non-existent');
487
- expect(readData).toBeNull();
488
- });
489
- it('[EARS-10] should delete an ExecutionRecord', async () => {
490
- mockFs.unlink.mockResolvedValue(undefined);
491
- await executionStore.delete(mockExecutionRecord.payload.id);
492
- const expectedPath = path.join('/tmp/gitgov-test-root', '.gitgov', 'executions', '1757460000-exec-test-execution.json');
493
- expect(mockFs.unlink).toHaveBeenCalledWith(expectedPath);
494
- });
495
- it('[EARS-11] should list ExecutionRecord IDs', async () => {
496
- const mockFiles = [
497
- createMockDirent('1757460000-exec-test-execution.json'),
498
- createMockDirent('1757460001-exec-another.json'),
499
- ];
500
- mockFs.readdir.mockResolvedValue(mockFiles);
501
- const ids = await executionStore.list();
502
- expect(ids).toEqual(['1757460000-exec-test-execution', '1757460001-exec-another']);
503
- });
504
- it('[EARS-12] should return true if ExecutionRecord exists', async () => {
505
- mockFs.access.mockResolvedValue(undefined);
506
- const result = await executionStore.exists(mockExecutionRecord.payload.id);
507
- expect(result).toBe(true);
508
- });
509
- it('[EARS-13] should return false if ExecutionRecord does not exist', async () => {
510
- mockFs.access.mockRejectedValue(new Error('ENOENT'));
511
- const result = await executionStore.exists('non-existent');
512
- expect(result).toBe(false);
513
- });
514
- });
515
- // --- ChangelogRecord Tests ---
516
- describe('RecordStore<ChangelogRecord>', () => {
517
- let changelogStore;
518
- let mockChangelogRecord;
519
- beforeEach(async () => {
520
- changelogStore = new RecordStore('changelogs', testRoot, mockFs);
521
- mockChangelogRecord = {
522
- header: {
523
- type: 'changelog',
524
- version: '1.0',
525
- payloadChecksum: 'b'.repeat(64), // Mock SHA-256 hash
526
- signatures: [createMockSignature()]
527
- },
528
- payload: await createChangelogRecord({
529
- id: '1757460001-changelog-task-implement-workflow-methodology-adapter',
530
- entityType: 'task',
531
- entityId: '1757452191-task-implement-workflow-methodology-adapter',
532
- changeType: 'completion',
533
- title: 'Workflow Methodology Adapter Completed',
534
- description: 'Successfully completed the implementation of workflow methodology adapter with all requirements',
535
- triggeredBy: 'human:developer',
536
- reason: 'All acceptance criteria met and code review passed'
537
- }),
538
- };
539
- });
540
- it('[EARS-1 & EARS-2] should write a ChangelogRecord', async () => {
541
- await changelogStore.write(mockChangelogRecord);
542
- const expectedPath = path.join('/tmp/gitgov-test-root', '.gitgov', 'changelogs', '1757460001-changelog-task-implement-workflow-methodology-adapter.json');
543
- expect(mockFs.writeFile).toHaveBeenCalledWith(expectedPath, expect.any(String), 'utf-8');
544
- });
545
- it('[EARS-5] should read a ChangelogRecord', async () => {
546
- mockFs.readFile.mockResolvedValue(JSON.stringify(mockChangelogRecord));
547
- const record = await changelogStore.read(mockChangelogRecord.payload.id);
548
- expect(record).toEqual(mockChangelogRecord);
549
- });
550
- it('[EARS-6] should return null if ChangelogRecord does not exist', async () => {
551
- const error = new Error('File not found');
552
- error.code = 'ENOENT';
553
- mockFs.readFile.mockRejectedValue(error);
554
- const readData = await changelogStore.read('non-existent');
555
- expect(readData).toBeNull();
556
- });
557
- it('[EARS-10] should delete a ChangelogRecord', async () => {
558
- mockFs.unlink.mockResolvedValue(undefined);
559
- await changelogStore.delete(mockChangelogRecord.payload.id);
560
- const expectedPath = path.join('/tmp/gitgov-test-root', '.gitgov', 'changelogs', '1757460001-changelog-task-implement-workflow-methodology-adapter.json');
561
- expect(mockFs.unlink).toHaveBeenCalledWith(expectedPath);
562
- });
563
- it('[EARS-11] should list ChangelogRecord IDs', async () => {
564
- const mockFiles = [
565
- createMockDirent('1757460001-changelog-task-implement-workflow-methodology-adapter.json'),
566
- createMockDirent('1757460002-changelog-another.json'),
567
- ];
568
- mockFs.readdir.mockResolvedValue(mockFiles);
569
- const ids = await changelogStore.list();
570
- expect(ids).toEqual(['1757460001-changelog-task-implement-workflow-methodology-adapter', '1757460002-changelog-another']);
571
- });
572
- it('[EARS-12] should return true if ChangelogRecord exists', async () => {
573
- mockFs.access.mockResolvedValue(undefined);
574
- const result = await changelogStore.exists(mockChangelogRecord.payload.id);
575
- expect(result).toBe(true);
576
- });
577
- it('[EARS-13] should return false if ChangelogRecord does not exist', async () => {
578
- mockFs.access.mockRejectedValue(new Error('ENOENT'));
579
- const result = await changelogStore.exists('non-existent');
580
- expect(result).toBe(false);
581
- });
582
- });
583
- // --- FeedbackRecord Tests ---
584
- describe('RecordStore<FeedbackRecord>', () => {
585
- let feedbackStore;
586
- let mockFeedbackRecord;
587
- beforeEach(async () => {
588
- feedbackStore = new RecordStore('feedback', testRoot, mockFs);
589
- mockFeedbackRecord = {
590
- header: {
591
- type: 'feedback',
592
- version: '1.0',
593
- payloadChecksum: 'c'.repeat(64), // Mock SHA-256 hash
594
- signatures: [createMockSignature()]
595
- },
596
- payload: await createFeedbackRecord({
597
- id: '1757460002-feedback-test-feedback',
598
- entityId: '1757452191-task-implement-workflow-methodology-adapter',
599
- content: 'This looks great!'
600
- }),
601
- };
602
- });
603
- it('[EARS-1 & EARS-2] should write a FeedbackRecord', async () => {
604
- await feedbackStore.write(mockFeedbackRecord);
605
- const expectedPath = path.join('/tmp/gitgov-test-root', '.gitgov', 'feedback', '1757460002-feedback-test-feedback.json');
606
- expect(mockFs.writeFile).toHaveBeenCalledWith(expectedPath, expect.any(String), 'utf-8');
607
- });
608
- it('[EARS-5] should read a FeedbackRecord', async () => {
609
- mockFs.readFile.mockResolvedValue(JSON.stringify(mockFeedbackRecord));
610
- const record = await feedbackStore.read(mockFeedbackRecord.payload.id);
611
- expect(record).toEqual(mockFeedbackRecord);
612
- });
613
- it('[EARS-6] should return null if FeedbackRecord does not exist', async () => {
614
- const error = new Error('File not found');
615
- error.code = 'ENOENT';
616
- mockFs.readFile.mockRejectedValue(error);
617
- const readData = await feedbackStore.read('non-existent');
618
- expect(readData).toBeNull();
619
- });
620
- it('[EARS-10] should delete a FeedbackRecord', async () => {
621
- mockFs.unlink.mockResolvedValue(undefined);
622
- await feedbackStore.delete(mockFeedbackRecord.payload.id);
623
- const expectedPath = path.join('/tmp/gitgov-test-root', '.gitgov', 'feedback', '1757460002-feedback-test-feedback.json');
624
- expect(mockFs.unlink).toHaveBeenCalledWith(expectedPath);
625
- });
626
- it('[EARS-11] should list FeedbackRecord IDs', async () => {
627
- const mockFiles = [
628
- createMockDirent('1757460002-feedback-test-feedback.json'),
629
- createMockDirent('1757460003-feedback-another.json'),
630
- ];
631
- mockFs.readdir.mockResolvedValue(mockFiles);
632
- const ids = await feedbackStore.list();
633
- expect(ids).toEqual(['1757460002-feedback-test-feedback', '1757460003-feedback-another']);
634
- });
635
- it('[EARS-12] should return true if FeedbackRecord exists', async () => {
636
- mockFs.access.mockResolvedValue(undefined);
637
- const result = await feedbackStore.exists(mockFeedbackRecord.payload.id);
638
- expect(result).toBe(true);
639
- });
640
- it('[EARS-13] should return false if FeedbackRecord does not exist', async () => {
641
- mockFs.access.mockRejectedValue(new Error('ENOENT'));
642
- const result = await feedbackStore.exists('non-existent');
643
- expect(result).toBe(false);
644
- });
645
- });
646
- //# sourceMappingURL=record_store.test.js.map