@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,627 +0,0 @@
1
- import { ProjectAdapter } from './index';
2
- import { RecordStore } from '../../store';
3
- import { ConfigManager } from '../../config_manager';
4
- import { DetailedValidationError } from '../../validation/common';
5
- import { promises as fs, existsSync } from 'fs';
6
- import { createTaskRecord } from '../../factories/task_factory';
7
- import { createCycleRecord } from '../../factories/cycle_factory';
8
- // Mock the factories before importing
9
- jest.mock('../../factories/task_factory', () => ({
10
- createTaskRecord: jest.fn()
11
- }));
12
- jest.mock('../../factories/cycle_factory', () => ({
13
- createCycleRecord: jest.fn()
14
- }));
15
- jest.mock('../../factories/actor_factory', () => ({
16
- createActorRecord: jest.fn()
17
- }));
18
- // Mock dependencies
19
- jest.mock('../../store');
20
- jest.mock('../../config_manager');
21
- jest.mock('fs', () => ({
22
- promises: {
23
- access: jest.fn(),
24
- writeFile: jest.fn(),
25
- readFile: jest.fn(),
26
- unlink: jest.fn(),
27
- mkdir: jest.fn(),
28
- rm: jest.fn(),
29
- appendFile: jest.fn(),
30
- },
31
- existsSync: jest.fn(),
32
- }));
33
- // Helper function to create mock actor record
34
- function createMockActorRecord(overrides = {}) {
35
- return {
36
- id: 'human:test-user',
37
- type: 'human',
38
- displayName: 'Test User',
39
- publicKey: 'test-public-key',
40
- roles: ['admin', 'author'],
41
- status: 'active',
42
- ...overrides,
43
- };
44
- }
45
- // Helper function to create mock cycle record
46
- function createMockCycleRecord(overrides = {}) {
47
- return {
48
- id: `${Date.now()}-cycle-test-cycle`,
49
- title: 'Test Cycle',
50
- status: 'planning',
51
- taskIds: [],
52
- childCycleIds: [],
53
- tags: [],
54
- notes: '',
55
- ...overrides,
56
- };
57
- }
58
- // Helper function to create mock task record
59
- function createMockTaskRecord(overrides = {}) {
60
- return {
61
- id: `${Date.now()}-task-test-task`,
62
- title: 'Test Task',
63
- status: 'draft',
64
- priority: 'medium',
65
- description: 'Test task description',
66
- tags: [],
67
- cycleIds: [],
68
- ...overrides,
69
- };
70
- }
71
- describe('ProjectAdapter', () => {
72
- let projectAdapter;
73
- let mockIdentityAdapter;
74
- let mockBacklogAdapter;
75
- let mockWorkflowMethodologyAdapter;
76
- let mockConfigManager;
77
- let mockTaskStore;
78
- let mockCycleStore;
79
- let mockFs;
80
- let mockCreateTaskRecord;
81
- let mockCreateCycleRecord;
82
- beforeEach(() => {
83
- jest.clearAllMocks();
84
- // Mock all adapters
85
- mockIdentityAdapter = {
86
- createActor: jest.fn(),
87
- getActor: jest.fn(),
88
- listActors: jest.fn(),
89
- revokeActor: jest.fn(),
90
- createAgentRecord: jest.fn(),
91
- getAgentRecord: jest.fn(),
92
- listAgentRecords: jest.fn(),
93
- getCurrentActor: jest.fn(),
94
- getEffectiveActorForAgent: jest.fn(),
95
- };
96
- mockBacklogAdapter = {
97
- createTask: jest.fn(),
98
- createCycle: jest.fn(),
99
- getTask: jest.fn(),
100
- getCycle: jest.fn(),
101
- getAllTasks: jest.fn(),
102
- getAllCycles: jest.fn(),
103
- };
104
- mockWorkflowMethodologyAdapter = {
105
- getTransitionRule: jest.fn(),
106
- validateSignature: jest.fn(),
107
- validateCustomRules: jest.fn(),
108
- };
109
- mockConfigManager = {
110
- loadConfig: jest.fn(),
111
- loadSession: jest.fn(),
112
- getRootCycle: jest.fn(),
113
- getProjectInfo: jest.fn(),
114
- getActorState: jest.fn(),
115
- updateActorState: jest.fn(),
116
- getCloudSessionToken: jest.fn(),
117
- constructor: { name: 'ConfigManager' },
118
- };
119
- // Mock stores
120
- mockTaskStore = {
121
- write: jest.fn().mockResolvedValue(undefined),
122
- read: jest.fn().mockResolvedValue(null),
123
- list: jest.fn().mockResolvedValue([]),
124
- delete: jest.fn().mockResolvedValue(undefined),
125
- exists: jest.fn().mockResolvedValue(false),
126
- };
127
- mockCycleStore = {
128
- write: jest.fn().mockResolvedValue(undefined),
129
- read: jest.fn().mockResolvedValue(null),
130
- list: jest.fn().mockResolvedValue([]),
131
- delete: jest.fn().mockResolvedValue(undefined),
132
- exists: jest.fn().mockResolvedValue(false),
133
- };
134
- mockFs = fs;
135
- mockFs.existsSync = existsSync;
136
- // Configure default mock behavior
137
- mockFs.existsSync.mockReturnValue(true); // Default: .git exists
138
- // Mock factories
139
- mockCreateTaskRecord = createTaskRecord;
140
- mockCreateCycleRecord = createCycleRecord;
141
- // Setup factory mocks
142
- mockCreateTaskRecord.mockImplementation(async (payload) => ({
143
- id: `${Date.now()}-task-${payload.title?.toLowerCase().replace(/\s+/g, '-') || 'test'}`,
144
- title: payload.title || 'Test Task',
145
- status: payload.status || 'draft',
146
- priority: payload.priority || 'medium',
147
- description: payload.description || '',
148
- tags: payload.tags || [],
149
- cycleIds: payload.cycleIds || [],
150
- }));
151
- mockCreateCycleRecord.mockImplementation(async (payload) => ({
152
- id: `${Date.now()}-cycle-${payload.title?.toLowerCase().replace(/\s+/g, '-') || 'test'}`,
153
- title: payload.title || 'Test Cycle',
154
- status: payload.status || 'planning',
155
- taskIds: payload.taskIds || [],
156
- childCycleIds: payload.childCycleIds || [],
157
- tags: payload.tags || [],
158
- notes: payload.notes || '',
159
- }));
160
- // Create adapter with all dependencies
161
- projectAdapter = new ProjectAdapter({
162
- identityAdapter: mockIdentityAdapter,
163
- backlogAdapter: mockBacklogAdapter,
164
- workflowMethodologyAdapter: mockWorkflowMethodologyAdapter,
165
- configManager: mockConfigManager,
166
- taskStore: mockTaskStore,
167
- cycleStore: mockCycleStore,
168
- });
169
- });
170
- describe('Environment Validation (EARS 2, 7, 8)', () => {
171
- it('[EARS-21] should validate current directory, not search upward for init', async () => {
172
- // This test prevents the critical bug where init modifies parent repositories
173
- // Simulate being in /packages/cli/ but wanting to init there, not in parent /solo-hub/
174
- // Mock: no .git in current directory (should fail validation)
175
- mockFs.existsSync.mockImplementation((path) => {
176
- if (typeof path === 'string' && path.includes('/packages/cli/.git')) {
177
- return false; // No .git in subdirectory
178
- }
179
- if (typeof path === 'string' && path.includes('/solo-hub/.git')) {
180
- return true; // .git exists in parent (should NOT be found)
181
- }
182
- return false;
183
- });
184
- // Mock: no write permissions in current directory
185
- mockFs.writeFile.mockRejectedValueOnce(new Error('Permission denied'));
186
- mockFs.access.mockRejectedValue(new Error('Directory does not exist')); // .gitgov doesn't exist
187
- const result = await projectAdapter.validateEnvironment('/test/project/packages/cli');
188
- // Should validate the EXACT directory passed, not search upward
189
- expect(result.isValid).toBe(false);
190
- expect(result.isGitRepo).toBe(false); // Should be false for /packages/cli/
191
- expect(result.warnings).toContain('Not a Git repository in directory: /test/project/packages/cli');
192
- });
193
- it('[EARS-22] should use GITGOV_ORIGINAL_DIR when provided (pnpm --filter case)', async () => {
194
- // This test ensures pnpm --filter cli dev init validates the correct directory
195
- // Mock environment variables as they would be set by our wrapper
196
- const originalEnv = process.env['GITGOV_ORIGINAL_DIR'];
197
- process.env['GITGOV_ORIGINAL_DIR'] = '/test/project'; // User executed from root
198
- try {
199
- // Mock: .git exists in original directory
200
- mockFs.existsSync.mockImplementation((path) => {
201
- if (typeof path === 'string' && path.includes('/test/project/.git')) {
202
- return true; // .git exists in original directory
203
- }
204
- return false;
205
- });
206
- // Mock: .gitgov already exists in original directory
207
- mockFs.writeFile.mockResolvedValueOnce(undefined);
208
- mockFs.unlink.mockResolvedValueOnce(undefined);
209
- mockFs.access.mockResolvedValueOnce(undefined); // .gitgov exists
210
- const result = await projectAdapter.validateEnvironment(); // No path = use env var
211
- expect(result.isValid).toBe(false);
212
- expect(result.isGitRepo).toBe(true);
213
- expect(result.isAlreadyInitialized).toBe(true);
214
- expect(result.warnings).toContain('GitGovernance already initialized in directory: /test/project');
215
- }
216
- finally {
217
- // Restore original environment
218
- if (originalEnv) {
219
- process.env['GITGOV_ORIGINAL_DIR'] = originalEnv;
220
- }
221
- else {
222
- delete process.env['GITGOV_ORIGINAL_DIR'];
223
- }
224
- }
225
- });
226
- it('[EARS-23] should create .gitgov in correct directory during init', async () => {
227
- // This test ensures init creates .gitgov in the target directory, not in parent repos
228
- const targetDirectory = '/tmp/new-project';
229
- const originalEnv = process.env['GITGOV_ORIGINAL_DIR'];
230
- process.env['GITGOV_ORIGINAL_DIR'] = targetDirectory;
231
- try {
232
- // Mock: .git exists in target directory
233
- mockFs.existsSync.mockImplementation((path) => {
234
- if (typeof path === 'string' && path.includes(`${targetDirectory}/.git`)) {
235
- return true;
236
- }
237
- return false;
238
- });
239
- // Mock successful initialization
240
- mockFs.writeFile.mockResolvedValue(undefined);
241
- mockFs.unlink.mockResolvedValue(undefined);
242
- mockFs.access.mockRejectedValue(new Error('Directory does not exist')); // .gitgov doesn't exist
243
- mockFs.mkdir.mockResolvedValue(undefined);
244
- mockFs.appendFile.mockResolvedValue(undefined);
245
- const mockActor = createMockActorRecord();
246
- const mockCycle = createMockCycleRecord();
247
- mockIdentityAdapter.createActor.mockResolvedValueOnce(mockActor);
248
- mockBacklogAdapter.createCycle.mockResolvedValueOnce(mockCycle);
249
- const result = await projectAdapter.initializeProject({
250
- name: 'New Project',
251
- actorName: 'New User',
252
- });
253
- expect(result.success).toBe(true);
254
- // Verify .gitgov directory creation was attempted in correct location
255
- expect(mockFs.mkdir).toHaveBeenCalledWith(expect.stringContaining(targetDirectory), { recursive: true });
256
- // Verify config.json was written to correct location
257
- const configWriteCalls = mockFs.writeFile.mock.calls.filter(call => call[0].toString().includes('config.json'));
258
- expect(configWriteCalls.length).toBeGreaterThan(0);
259
- expect(configWriteCalls[0]?.[0]).toContain(targetDirectory);
260
- }
261
- finally {
262
- // Restore original environment
263
- if (originalEnv) {
264
- process.env['GITGOV_ORIGINAL_DIR'] = originalEnv;
265
- }
266
- else {
267
- delete process.env['GITGOV_ORIGINAL_DIR'];
268
- }
269
- }
270
- });
271
- it('[EARS-2] should verify git repo permissions and previous state', async () => {
272
- // Mock successful validation using static method
273
- jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue('/test/project');
274
- mockFs.writeFile.mockResolvedValueOnce(undefined);
275
- mockFs.unlink.mockResolvedValueOnce(undefined);
276
- mockFs.access.mockRejectedValueOnce(new Error('Directory does not exist'));
277
- const result = await projectAdapter.validateEnvironment('/test/project');
278
- expect(result.isValid).toBe(true);
279
- expect(result.isGitRepo).toBe(true);
280
- expect(result.hasWritePermissions).toBe(true);
281
- expect(result.isAlreadyInitialized).toBe(false);
282
- expect(result.warnings).toHaveLength(0);
283
- });
284
- it('[EARS-7] should return EnvironmentValidation with specific warnings', async () => {
285
- // Mock ConfigManager static method for this test
286
- jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue(null);
287
- // Mock failed validation - no write permissions and no .git
288
- mockFs.writeFile.mockRejectedValueOnce(new Error('Permission denied'));
289
- mockFs.access.mockRejectedValue(new Error('Directory does not exist')); // .gitgov doesn't exist
290
- mockFs.existsSync.mockReturnValue(false); // No .git directory
291
- const result = await projectAdapter.validateEnvironment('/invalid/path');
292
- expect(result.isValid).toBe(false);
293
- expect(result.isGitRepo).toBe(false); // Should be false since findProjectRoot returns null
294
- expect(result.hasWritePermissions).toBe(false);
295
- expect(result.warnings).toContain('Not a Git repository in directory: /invalid/path');
296
- expect(result.warnings).toContain('No write permissions in target directory');
297
- expect(result.suggestions).toContain("Run 'git init' to initialize a Git repository first");
298
- });
299
- it('[EARS-8] should detect already initialized GitGovernance project', async () => {
300
- // Mock already initialized project
301
- jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue('/test/project');
302
- mockFs.writeFile.mockResolvedValueOnce(undefined);
303
- mockFs.unlink.mockResolvedValueOnce(undefined);
304
- mockFs.access.mockResolvedValueOnce(undefined); // .gitgov exists
305
- const result = await projectAdapter.validateEnvironment('/test/project');
306
- expect(result.isValid).toBe(false);
307
- expect(result.isAlreadyInitialized).toBe(true);
308
- expect(result.warnings).toContain('GitGovernance already initialized in directory: /test/project');
309
- expect(result.suggestions).toContain("Use 'gitgov status' to check current state or choose a different directory");
310
- });
311
- });
312
- describe('Project Initialization (EARS 1, 5)', () => {
313
- beforeEach(() => {
314
- // Setup successful mocks
315
- jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue('/test/project');
316
- mockFs.writeFile.mockResolvedValue(undefined);
317
- mockFs.unlink.mockResolvedValue(undefined);
318
- mockFs.access.mockRejectedValue(new Error('Directory does not exist')); // .gitgov doesn't exist
319
- mockFs.mkdir.mockResolvedValue(undefined);
320
- mockFs.appendFile.mockResolvedValue(undefined);
321
- });
322
- it('[EARS-1] should create complete project with 3-adapter orchestration', async () => {
323
- const mockActor = createMockActorRecord();
324
- const mockCycle = createMockCycleRecord();
325
- mockIdentityAdapter.createActor.mockResolvedValueOnce(mockActor);
326
- mockBacklogAdapter.createCycle.mockResolvedValueOnce(mockCycle);
327
- const result = await projectAdapter.initializeProject({
328
- name: 'Test Project',
329
- actorName: 'Test User',
330
- });
331
- expect(result.success).toBe(true);
332
- expect(result.projectName).toBe('Test Project');
333
- expect(result.rootCycle).toBe(mockCycle.id);
334
- expect(result.actor.id).toBe(mockActor.id);
335
- expect(result.actor.displayName).toBe(mockActor.displayName);
336
- expect(mockIdentityAdapter.createActor).toHaveBeenCalledWith({
337
- type: 'human',
338
- displayName: 'Test User',
339
- roles: ['admin', 'author'],
340
- }, 'bootstrap');
341
- expect(mockBacklogAdapter.createCycle).toHaveBeenCalledWith(expect.objectContaining({
342
- title: 'root',
343
- status: 'planning',
344
- }), mockActor.id);
345
- });
346
- it('[EARS-5] should return ProjectInitResult with complete metadata', async () => {
347
- const mockActor = createMockActorRecord();
348
- const mockCycle = createMockCycleRecord();
349
- mockIdentityAdapter.createActor.mockResolvedValueOnce(mockActor);
350
- mockBacklogAdapter.createCycle.mockResolvedValueOnce(mockCycle);
351
- const result = await projectAdapter.initializeProject({
352
- name: 'Test Project',
353
- actorName: 'Test User',
354
- methodology: 'scrum',
355
- });
356
- expect(result).toEqual({
357
- success: true,
358
- projectId: 'test-project',
359
- projectName: 'Test Project',
360
- rootCycle: mockCycle.id,
361
- actor: {
362
- id: mockActor.id,
363
- displayName: mockActor.displayName,
364
- publicKeyPath: expect.stringContaining(`${mockActor.id}.json`),
365
- },
366
- template: undefined,
367
- initializationTime: expect.any(Number),
368
- nextSteps: expect.arrayContaining([
369
- "Run 'gitgov status' to see your project overview",
370
- "Use 'gitgov task create' to add your first task"
371
- ]),
372
- });
373
- });
374
- });
375
- describe('Template Processing (EARS 3, 6)', () => {
376
- beforeEach(() => {
377
- const mockTemplate = {
378
- cycles: [
379
- {
380
- title: 'Sprint 1',
381
- status: 'active',
382
- tasks: [
383
- { title: 'Task 1', priority: 'high', description: 'Test task 1' },
384
- { title: 'Task 2', priority: 'medium', description: 'Test task 2' },
385
- ],
386
- },
387
- ],
388
- };
389
- mockFs.readFile.mockResolvedValue(JSON.stringify(mockTemplate));
390
- });
391
- it('[EARS-3] should create cycles and tasks using factories with validation', async () => {
392
- const mockCycle = createMockCycleRecord();
393
- const mockTask1 = createMockTaskRecord({ title: 'Task 1' });
394
- const mockTask2 = createMockTaskRecord({ title: 'Task 2' });
395
- mockBacklogAdapter.createCycle.mockResolvedValueOnce(mockCycle);
396
- mockBacklogAdapter.createTask
397
- .mockResolvedValueOnce(mockTask1)
398
- .mockResolvedValueOnce(mockTask2);
399
- const projectContext = {
400
- projectId: 'test-project',
401
- projectName: 'Test Project',
402
- actorId: 'human:test-user',
403
- rootCycle: 'cycle-123',
404
- };
405
- const result = await projectAdapter.processBlueprintTemplate('./template.json', projectContext);
406
- expect(result.success).toBe(true);
407
- expect(result.cyclesCreated).toBe(1);
408
- expect(result.tasksCreated).toBe(2);
409
- expect(result.createdIds.cycles).toContain(mockCycle.id);
410
- expect(result.createdIds.tasks).toContain(mockTask1.id);
411
- expect(result.createdIds.tasks).toContain(mockTask2.id);
412
- expect(mockBacklogAdapter.createCycle).toHaveBeenCalledWith(expect.objectContaining({
413
- title: 'Sprint 1',
414
- status: 'active',
415
- }), projectContext.actorId);
416
- });
417
- it('[EARS-6] should throw DetailedValidationError for invalid template', async () => {
418
- mockFs.readFile.mockResolvedValue(JSON.stringify({ invalid: 'template' }));
419
- const projectContext = {
420
- projectId: 'test-project',
421
- projectName: 'Test Project',
422
- actorId: 'human:test-user',
423
- rootCycle: 'cycle-123',
424
- };
425
- await expect(projectAdapter.processBlueprintTemplate('./invalid-template.json', projectContext)).rejects.toThrow(DetailedValidationError);
426
- await expect(projectAdapter.processBlueprintTemplate('./invalid-template.json', projectContext)).rejects.toThrow('Invalid template format');
427
- });
428
- });
429
- describe('Error Handling & Rollback (EARS 4, 13, 15, 16, 17)', () => {
430
- it('[EARS-4] should invoke rollback automatically when initialization fails', async () => {
431
- // Mock ConfigManager static method for this test
432
- jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue('/test/project');
433
- // Setup environment validation to pass
434
- mockFs.writeFile.mockResolvedValue(undefined);
435
- mockFs.unlink.mockResolvedValue(undefined);
436
- mockFs.access.mockRejectedValueOnce(new Error('Directory does not exist')); // .gitgov doesn't exist (validation)
437
- mockFs.mkdir.mockResolvedValue(undefined);
438
- // Setup identity creation to fail
439
- mockIdentityAdapter.createActor.mockRejectedValueOnce(new Error('Identity creation failed'));
440
- // Setup rollback mocks
441
- mockFs.access.mockResolvedValueOnce(undefined); // .gitgov exists for rollback
442
- mockFs.rm.mockResolvedValue(undefined);
443
- await expect(projectAdapter.initializeProject({
444
- name: 'Test Project',
445
- actorName: 'Test User',
446
- })).rejects.toThrow('Identity creation failed');
447
- // Verify rollback was called
448
- expect(mockFs.rm).toHaveBeenCalledWith(expect.stringContaining('.gitgov'), { recursive: true, force: true });
449
- });
450
- it('[EARS-13] should capture adapter errors with specific context', async () => {
451
- jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue('/test/project');
452
- mockFs.writeFile.mockResolvedValue(undefined);
453
- mockFs.unlink.mockResolvedValue(undefined);
454
- mockFs.access.mockRejectedValue(new Error('Directory does not exist'));
455
- mockFs.mkdir.mockResolvedValue(undefined);
456
- const specificError = new Error('BacklogAdapter connection failed');
457
- mockIdentityAdapter.createActor.mockResolvedValueOnce(createMockActorRecord());
458
- mockBacklogAdapter.createCycle.mockRejectedValueOnce(specificError);
459
- await expect(projectAdapter.initializeProject({
460
- name: 'Test Project',
461
- actorName: 'Test User',
462
- })).rejects.toThrow('BacklogAdapter connection failed');
463
- });
464
- it('[EARS-15] should provide specific guidance for environment errors', async () => {
465
- // Mock ConfigManager static method for this test
466
- jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue(null);
467
- mockFs.writeFile.mockRejectedValueOnce(new Error('Permission denied'));
468
- mockFs.existsSync.mockReturnValue(false); // No .git directory
469
- const result = await projectAdapter.validateEnvironment('/invalid/path');
470
- expect(result.isValid).toBe(false);
471
- expect(result.suggestions).toContain("Run 'git init' to initialize a Git repository first");
472
- expect(result.suggestions).toContain('Ensure you have write permissions in the target directory');
473
- });
474
- it('[EARS-16] should provide field-level errors for DetailedValidationError', async () => {
475
- mockFs.readFile.mockResolvedValue('invalid json');
476
- const projectContext = {
477
- projectId: 'test-project',
478
- projectName: 'Test Project',
479
- actorId: 'human:test-user',
480
- rootCycle: 'cycle-123',
481
- };
482
- await expect(projectAdapter.processBlueprintTemplate('./invalid.json', projectContext)).rejects.toThrow(DetailedValidationError);
483
- try {
484
- await projectAdapter.processBlueprintTemplate('./invalid.json', projectContext);
485
- }
486
- catch (error) {
487
- expect(error).toBeInstanceOf(DetailedValidationError);
488
- if (error instanceof DetailedValidationError) {
489
- expect(error.ajvErrors).toBeDefined();
490
- expect(error.ajvErrors[0]).toEqual({
491
- field: 'template',
492
- message: expect.any(String),
493
- value: './invalid.json',
494
- });
495
- }
496
- }
497
- });
498
- it('[EARS-17] should handle file system errors gracefully', async () => {
499
- // Mock ConfigManager static method for this test
500
- jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue('/test/project');
501
- // Mock file system error during permission check
502
- mockFs.writeFile.mockRejectedValueOnce(new Error('Disk full'));
503
- mockFs.access.mockRejectedValue(new Error('Directory does not exist')); // .gitgov doesn't exist
504
- mockFs.existsSync.mockReturnValue(true); // .git exists but other errors
505
- const result = await projectAdapter.validateEnvironment('/test/path');
506
- expect(result.isValid).toBe(false);
507
- expect(result.warnings).toContain('No write permissions in target directory');
508
- expect(result.suggestions).toContain('Ensure you have write permissions in the target directory');
509
- });
510
- });
511
- describe('Graceful Degradation (EARS 14)', () => {
512
- it('[EARS-14] should continue without optional dependencies with warnings', async () => {
513
- // Create adapter without optional dependencies
514
- const minimalAdapter = new ProjectAdapter({
515
- identityAdapter: mockIdentityAdapter,
516
- backlogAdapter: mockBacklogAdapter,
517
- workflowMethodologyAdapter: mockWorkflowMethodologyAdapter,
518
- configManager: mockConfigManager,
519
- taskStore: mockTaskStore,
520
- cycleStore: mockCycleStore,
521
- // No eventBus, platformApi, or userManagement
522
- });
523
- jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue('/test/project');
524
- mockFs.writeFile.mockResolvedValue(undefined);
525
- mockFs.unlink.mockResolvedValue(undefined);
526
- mockFs.access.mockRejectedValue(new Error('Directory does not exist'));
527
- mockFs.mkdir.mockResolvedValue(undefined);
528
- mockFs.appendFile.mockResolvedValue(undefined);
529
- const mockActor = createMockActorRecord();
530
- const mockCycle = createMockCycleRecord();
531
- mockIdentityAdapter.createActor.mockResolvedValueOnce(mockActor);
532
- mockBacklogAdapter.createCycle.mockResolvedValueOnce(mockCycle);
533
- const result = await minimalAdapter.initializeProject({
534
- name: 'Test Project',
535
- actorName: 'Test User',
536
- });
537
- expect(result.success).toBe(true);
538
- expect(result.projectName).toBe('Test Project');
539
- // Should work without optional dependencies
540
- });
541
- });
542
- describe('Future Platform Methods (EARS 19, 20)', () => {
543
- it('[EARS-19] should return project metadata from ConfigManager', async () => {
544
- const mockConfig = {
545
- protocolVersion: '1.0.0',
546
- projectId: 'test-project',
547
- projectName: 'Test Project',
548
- rootCycle: 'cycle-123',
549
- blueprints: { root: './blueprints' },
550
- state: { branch: 'gitgov-state' },
551
- };
552
- mockConfigManager.loadConfig.mockResolvedValueOnce(mockConfig);
553
- const result = await projectAdapter.getProjectInfo();
554
- expect(result).toEqual({
555
- id: 'test-project',
556
- name: 'Test Project',
557
- rootCycle: 'cycle-123',
558
- protocolVersion: '1.0.0',
559
- });
560
- });
561
- it('[EARS-20] should handle missing configuration gracefully', async () => {
562
- mockConfigManager.loadConfig.mockResolvedValueOnce(null);
563
- const result = await projectAdapter.getProjectInfo();
564
- expect(result).toBeNull();
565
- });
566
- });
567
- describe('Type Safety (EARS 18)', () => {
568
- it('[EARS-18] should compile without any or unknown types unjustified', () => {
569
- // This test ensures TypeScript compilation is clean
570
- // The fact that this test file compiles without errors validates EARS-18
571
- expect(true).toBe(true);
572
- });
573
- });
574
- describe('Integration Tests', () => {
575
- it('should work end-to-end with real-like data', async () => {
576
- // Setup complete successful scenario
577
- jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue('/test/project');
578
- mockFs.writeFile.mockResolvedValue(undefined);
579
- mockFs.unlink.mockResolvedValue(undefined);
580
- mockFs.access.mockRejectedValue(new Error('Directory does not exist'));
581
- mockFs.mkdir.mockResolvedValue(undefined);
582
- mockFs.appendFile.mockResolvedValue(undefined);
583
- const mockActor = createMockActorRecord({
584
- id: 'human:project-owner',
585
- displayName: 'Project Owner',
586
- });
587
- const mockCycle = createMockCycleRecord({
588
- id: 'cycle-root-project',
589
- title: 'My Awesome Project - Root Cycle',
590
- });
591
- mockIdentityAdapter.createActor.mockResolvedValueOnce(mockActor);
592
- mockBacklogAdapter.createCycle.mockResolvedValueOnce(mockCycle);
593
- const envValidation = await projectAdapter.validateEnvironment();
594
- expect(envValidation.isValid).toBe(true);
595
- const initResult = await projectAdapter.initializeProject({
596
- name: 'My Awesome Project',
597
- actorName: 'Project Owner',
598
- methodology: 'scrum',
599
- });
600
- expect(initResult.success).toBe(true);
601
- expect(initResult.projectName).toBe('My Awesome Project');
602
- expect(initResult.actor.displayName).toBe('Project Owner');
603
- expect(initResult.initializationTime).toBeGreaterThanOrEqual(0);
604
- });
605
- });
606
- describe('Performance Tests', () => {
607
- it('should complete initialization in reasonable time', async () => {
608
- jest.spyOn(ConfigManager, 'findProjectRoot').mockReturnValue('/test/project');
609
- mockFs.writeFile.mockResolvedValue(undefined);
610
- mockFs.unlink.mockResolvedValue(undefined);
611
- mockFs.access.mockRejectedValue(new Error('Directory does not exist'));
612
- mockFs.mkdir.mockResolvedValue(undefined);
613
- mockFs.appendFile.mockResolvedValue(undefined);
614
- mockIdentityAdapter.createActor.mockResolvedValueOnce(createMockActorRecord());
615
- mockBacklogAdapter.createCycle.mockResolvedValueOnce(createMockCycleRecord());
616
- const startTime = Date.now();
617
- await projectAdapter.initializeProject({
618
- name: 'Performance Test Project',
619
- actorName: 'Test User',
620
- });
621
- const endTime = Date.now();
622
- // Should complete within reasonable time (mocked, so should be very fast)
623
- expect(endTime - startTime).toBeLessThan(1000);
624
- });
625
- });
626
- });
627
- //# sourceMappingURL=project_adapter.test.js.map