@knpkv/control-center 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. package/README.md +70 -17
  2. package/dist/client/.vite/manifest.json +223 -178
  3. package/dist/client/assets/{ActiveWorkPage-DJQgGZeV.js → ActiveWorkPage-g2-Jyavo.js} +2 -2
  4. package/dist/client/assets/{ActiveWorkPage-DJQgGZeV.js.map → ActiveWorkPage-g2-Jyavo.js.map} +1 -1
  5. package/dist/client/assets/AgentPage-B6GQdZAs.css +1 -0
  6. package/dist/client/assets/AgentPage-DmVsEe13.js +6 -0
  7. package/dist/client/assets/AgentPage-DmVsEe13.js.map +1 -0
  8. package/dist/client/assets/AtlassianOAuthCallbackPage-C8u9ItMj.js +2 -0
  9. package/dist/client/assets/{AtlassianOAuthCallbackPage-D1F1xE_2.js.map → AtlassianOAuthCallbackPage-C8u9ItMj.js.map} +1 -1
  10. package/dist/client/assets/AuthorizedSharePage-CVBJ1NTm.js +2 -0
  11. package/dist/client/assets/AuthorizedSharePage-CVBJ1NTm.js.map +1 -0
  12. package/dist/client/assets/BrowserCrypto-3BoTVFdl.js +2 -0
  13. package/dist/client/assets/{BrowserCrypto-DVWR7DFd.js.map → BrowserCrypto-3BoTVFdl.js.map} +1 -1
  14. package/dist/client/assets/BrowserSessionHydrator-CpZnNm4X.js +2 -0
  15. package/dist/client/assets/BrowserSessionHydrator-CpZnNm4X.js.map +1 -0
  16. package/dist/client/assets/CommandSearch-DUeRRbV2.js +2 -0
  17. package/dist/client/assets/{CommandSearch-CP_QCbkm.js.map → CommandSearch-DUeRRbV2.js.map} +1 -1
  18. package/dist/client/assets/ItemsPage-BF2ZkSzh.js +2 -0
  19. package/dist/client/assets/{ItemsPage-BGFUkRL2.js.map → ItemsPage-BF2ZkSzh.js.map} +1 -1
  20. package/dist/client/assets/{PairPage-DIgzx0K2.js → PairPage-CkaZltHd.js} +2 -2
  21. package/dist/client/assets/{PairPage-DIgzx0K2.js.map → PairPage-CkaZltHd.js.map} +1 -1
  22. package/dist/client/assets/PortfolioOverview-CEUHJmGC.js +2 -0
  23. package/dist/client/assets/PortfolioOverview-CEUHJmGC.js.map +1 -0
  24. package/dist/client/assets/PullRequestReviewPanel-D1IpvHe2.js +6 -0
  25. package/dist/client/assets/PullRequestReviewPanel-D1IpvHe2.js.map +1 -0
  26. package/dist/client/assets/ReleaseRoute-BuQybrsg.js +2 -0
  27. package/dist/client/assets/{ReleaseRoute-DXJ8Jg60.js.map → ReleaseRoute-BuQybrsg.js.map} +1 -1
  28. package/dist/client/assets/ReleaseWorkset-BclY0Nvj.js +2 -0
  29. package/dist/client/assets/ReleaseWorkset-BclY0Nvj.js.map +1 -0
  30. package/dist/client/assets/ServicesPage-hw5Ee69-.js +2 -0
  31. package/dist/client/assets/ServicesPage-hw5Ee69-.js.map +1 -0
  32. package/dist/client/assets/TimelinePage-Cj3V98uI.js +2 -0
  33. package/dist/client/assets/TimelinePage-Cj3V98uI.js.map +1 -0
  34. package/dist/client/assets/WorkspaceEntityLink-C_rc8lxi.js +2 -0
  35. package/dist/client/assets/{WorkspaceEntityLink-AdZ_T-Wk.js.map → WorkspaceEntityLink-C_rc8lxi.js.map} +1 -1
  36. package/dist/client/assets/WorkspaceEntityRoute-DLLT6fY0.css +1 -0
  37. package/dist/client/assets/WorkspaceEntityRoute-kbnrQ_lY.js +14 -0
  38. package/dist/client/assets/WorkspaceEntityRoute-kbnrQ_lY.js.map +1 -0
  39. package/dist/client/assets/WorkspaceHomeLink-DeYYLEsH.js +2 -0
  40. package/dist/client/assets/{WorkspaceHomeLink-XbKSPths.js.map → WorkspaceHomeLink-DeYYLEsH.js.map} +1 -1
  41. package/dist/client/assets/{WorkspacePullRequestDetails-BErJ5bk8.js → WorkspacePullRequestDetails-CizqydjN.js} +3 -3
  42. package/dist/client/assets/WorkspacePullRequestDetails-CizqydjN.js.map +1 -0
  43. package/dist/client/assets/{WorkspaceReleaseLayout-cfboC5Qh.js → WorkspaceReleaseLayout-CXAQUhkh.js} +2 -2
  44. package/dist/client/assets/{WorkspaceReleaseLayout-cfboC5Qh.js.map → WorkspaceReleaseLayout-CXAQUhkh.js.map} +1 -1
  45. package/dist/client/assets/{WorkspaceRichText-D1M637Ff.js → WorkspaceRichText-CCOciILO.js} +2 -2
  46. package/dist/client/assets/WorkspaceRichText-CCOciILO.js.map +1 -0
  47. package/dist/client/assets/WorkspaceSettingsPage-GoBfQzBx.css +1 -0
  48. package/dist/client/assets/WorkspaceSettingsPage-JG-pN_CA.js +2 -0
  49. package/dist/client/assets/WorkspaceSettingsPage-JG-pN_CA.js.map +1 -0
  50. package/dist/client/assets/agent-api-Dl9TuGOJ.js +19 -0
  51. package/dist/client/assets/agent-api-Dl9TuGOJ.js.map +1 -0
  52. package/dist/client/assets/atlassianOAuthSetupIntentStorage-DE4ySCTb.js +2 -0
  53. package/dist/client/assets/atlassianOAuthSetupIntentStorage-DE4ySCTb.js.map +1 -0
  54. package/dist/client/assets/authenticatedMutationClient-DdowMjyo.js +2 -0
  55. package/dist/client/assets/{authenticatedMutationClient-Ccwguc3i.js.map → authenticatedMutationClient-DdowMjyo.js.map} +1 -1
  56. package/dist/client/assets/authorizedShareTransport-CnclcYai.js +2 -0
  57. package/dist/client/assets/{authorizedShareTransport-DZHgFEkh.js.map → authorizedShareTransport-CnclcYai.js.map} +1 -1
  58. package/dist/client/assets/client-Dq_XQE_l.js +5 -0
  59. package/dist/client/assets/client-Dq_XQE_l.js.map +1 -0
  60. package/dist/client/assets/confluenceTasks-DtKq8_eU.js +5 -0
  61. package/dist/client/assets/confluenceTasks-DtKq8_eU.js.map +1 -0
  62. package/dist/client/assets/connectionTestTransport-CPK98z7H.js +2 -0
  63. package/dist/client/assets/connectionTestTransport-CPK98z7H.js.map +1 -0
  64. package/dist/client/assets/index-zVjlBm9l.js +11 -0
  65. package/dist/client/assets/index-zVjlBm9l.js.map +1 -0
  66. package/dist/client/assets/{patterns-5N-j-AD2-BwypFm-e.js → patterns-5N-j-AD2-DLfaGePK.js} +2 -2
  67. package/dist/client/assets/{patterns-5N-j-AD2-BwypFm-e.js.map → patterns-5N-j-AD2-DLfaGePK.js.map} +1 -1
  68. package/dist/client/assets/{presentPortfolio-D3ZIcnqt.js → presentPortfolio-DLEq-vEz.js} +2 -2
  69. package/dist/client/assets/presentPortfolio-DLEq-vEz.js.map +1 -0
  70. package/dist/client/assets/{presentWorkspaceItems-Bmh4oEbH.js → presentWorkspaceItems-BOY3FbhO.js} +2 -2
  71. package/dist/client/assets/{presentWorkspaceItems-Bmh4oEbH.js.map → presentWorkspaceItems-BOY3FbhO.js.map} +1 -1
  72. package/dist/client/assets/{pullRequestReviewFailures-S74M-fOk.js → pullRequestReviewFailures-CyjTVnSX.js} +2 -2
  73. package/dist/client/assets/{pullRequestReviewFailures-S74M-fOk.js.map → pullRequestReviewFailures-CyjTVnSX.js.map} +1 -1
  74. package/dist/client/assets/pullRequestReviewThreadReplay-CXHspFTr.js +2 -0
  75. package/dist/client/assets/pullRequestReviewThreadReplay-CXHspFTr.js.map +1 -0
  76. package/dist/client/assets/releaseAgentTransport-DaO4svPu.js +2 -0
  77. package/dist/client/assets/releaseAgentTransport-DaO4svPu.js.map +1 -0
  78. package/dist/client/assets/releaseRoutes-B4ciNOJj.js +2 -0
  79. package/dist/client/assets/{releaseRoutes-BCuIdZyA.js.map → releaseRoutes-B4ciNOJj.js.map} +1 -1
  80. package/dist/client/assets/serviceOnboarding-D0FmodRi.js +2 -0
  81. package/dist/client/assets/{serviceOnboarding-Jg_0yNjf.js.map → serviceOnboarding-D0FmodRi.js.map} +1 -1
  82. package/dist/client/assets/{useWorkspaceDefaultLanding-CzlDdEF-.js → useWorkspaceDefaultLanding-BaQdg0sY.js} +3 -3
  83. package/dist/client/assets/{useWorkspaceDefaultLanding-CzlDdEF-.js.map → useWorkspaceDefaultLanding-BaQdg0sY.js.map} +1 -1
  84. package/dist/client/assets/{useWorkspaceItems-Cd3MPke2.js → useWorkspaceItems-B-7JHtm0.js} +2 -2
  85. package/dist/client/assets/{useWorkspaceItems-Cd3MPke2.js.map → useWorkspaceItems-B-7JHtm0.js.map} +1 -1
  86. package/dist/client/assets/workspaceEntityRoutes-DqqDa0AB.js +2 -0
  87. package/dist/client/assets/workspaceEntityRoutes-DqqDa0AB.js.map +1 -0
  88. package/dist/client/assets/workspaceScrollCapture-BYNfR2wo.js +2 -0
  89. package/dist/client/assets/workspaceScrollCapture-BYNfR2wo.js.map +1 -0
  90. package/dist/client/assets/workspaceSettingsTransport-Br4lBmvS.js +2 -0
  91. package/dist/client/assets/{workspaceSettingsTransport-CZWYL5T7.js.map → workspaceSettingsTransport-Br4lBmvS.js.map} +1 -1
  92. package/dist/client/build-graph.json +115 -0
  93. package/dist/client/index.html +1 -1
  94. package/dist/server/api/agent.d.ts +575 -44
  95. package/dist/server/api/agent.d.ts.map +1 -1
  96. package/dist/server/api/deliveryGraph.d.ts +474 -454
  97. package/dist/server/api/deliveryGraph.d.ts.map +1 -1
  98. package/dist/server/api/index.d.ts +2 -2
  99. package/dist/server/api/index.d.ts.map +1 -1
  100. package/dist/server/api/index.js +4 -4
  101. package/dist/server/api/liveEvents.d.ts +20 -0
  102. package/dist/server/api/liveEvents.d.ts.map +1 -1
  103. package/dist/server/api/portfolio.d.ts +23 -0
  104. package/dist/server/api/portfolio.d.ts.map +1 -1
  105. package/dist/server/api/session.d.ts +23 -1
  106. package/dist/server/api/session.d.ts.map +1 -1
  107. package/dist/server/api/shares.d.ts +4 -2
  108. package/dist/server/api/shares.d.ts.map +1 -1
  109. package/dist/server/assets/{BindConfig-DIsf2Rnh.js → BindConfig-DAASchDn.js} +2405 -322
  110. package/dist/server/assets/BindConfig-DAASchDn.js.map +1 -0
  111. package/dist/server/assets/{CodePipelineStateDecoder-CVf1A2zG.js → CodePipelineStateDecoder-CNiFRgSi.js} +2 -2
  112. package/dist/server/assets/{CodePipelineStateDecoder-CVf1A2zG.js.map → CodePipelineStateDecoder-CNiFRgSi.js.map} +1 -1
  113. package/dist/server/assets/{agent-CyZ40zs1.js → agent-xQhAQXly.js} +181 -11
  114. package/dist/server/assets/agent-xQhAQXly.js.map +1 -0
  115. package/dist/server/assets/{controlCenterApi-ZUX3Y-LE.js → controlCenterApi-DNXK7MT1.js} +6 -5
  116. package/dist/server/assets/controlCenterApi-DNXK7MT1.js.map +1 -0
  117. package/dist/server/assets/{descriptor-CKtTnhef.js → descriptor-CCvNzSZL.js} +10 -10
  118. package/dist/server/assets/{descriptor-CKtTnhef.js.map → descriptor-CCvNzSZL.js.map} +1 -1
  119. package/dist/server/assets/{failures-mgYDkUZy.js → failures-CesHLYbN.js} +2 -2
  120. package/dist/server/assets/{failures-mgYDkUZy.js.map → failures-CesHLYbN.js.map} +1 -1
  121. package/dist/server/assets/{firstPartyServices-D7b8BOek.js → firstPartyServices-Cdzjcs2H.js} +2 -2
  122. package/dist/server/assets/{firstPartyServices-D7b8BOek.js.map → firstPartyServices-Cdzjcs2H.js.map} +1 -1
  123. package/dist/server/assets/{manualPluginSynchronization-DFlhKvav.js → manualPluginSynchronization-DFIeUHP9.js} +6 -5
  124. package/dist/server/assets/manualPluginSynchronization-DFIeUHP9.js.map +1 -0
  125. package/dist/server/assets/{plugins-D__oMDpI.js → plugins-DiPrfzV8.js} +2 -2
  126. package/dist/server/assets/{plugins-D__oMDpI.js.map → plugins-DiPrfzV8.js.map} +1 -1
  127. package/dist/server/assets/{readiness-BhA-Nr9c.js → readiness-31Mqc-9H.js} +3 -3
  128. package/dist/server/assets/{readiness-BhA-Nr9c.js.map → readiness-31Mqc-9H.js.map} +1 -1
  129. package/dist/server/assets/{relationshipInferenceMaterialization-DYBcaWhQ.js → relationshipInferenceMaterialization-Dyix96px.js} +1158 -169
  130. package/dist/server/assets/relationshipInferenceMaterialization-Dyix96px.js.map +1 -0
  131. package/dist/server/assets/{workspaceSettings-BE713Oe8.js → workspaceSettings-sv8h_h2P.js} +2787 -2700
  132. package/dist/server/assets/workspaceSettings-sv8h_h2P.js.map +1 -0
  133. package/dist/server/build-graph.json +144 -4
  134. package/dist/server/domain/actors.d.ts +12 -12
  135. package/dist/server/domain/confluenceTasks.d.ts +27 -0
  136. package/dist/server/domain/confluenceTasks.d.ts.map +1 -0
  137. package/dist/server/domain/deliveryGraph.d.ts +51 -49
  138. package/dist/server/domain/deliveryGraph.d.ts.map +1 -1
  139. package/dist/server/domain/governedAction/bindings.d.ts +26 -12
  140. package/dist/server/domain/governedAction/bindings.d.ts.map +1 -1
  141. package/dist/server/domain/governedAction/lifecycle.d.ts +8 -8
  142. package/dist/server/domain/governedAction/model.d.ts +45 -18
  143. package/dist/server/domain/governedAction/model.d.ts.map +1 -1
  144. package/dist/server/domain/governedAction/stateMachine.d.ts +34 -34
  145. package/dist/server/domain/index.js +6 -6
  146. package/dist/server/domain/normalizedIssue.d.ts +1 -1
  147. package/dist/server/domain/normalizedPage.d.ts +1 -0
  148. package/dist/server/domain/normalizedPage.d.ts.map +1 -1
  149. package/dist/server/domain/prReview.d.ts +38 -0
  150. package/dist/server/domain/prReview.d.ts.map +1 -1
  151. package/dist/server/domain/prReviewReconciliation.d.ts +56 -0
  152. package/dist/server/domain/prReviewReconciliation.d.ts.map +1 -0
  153. package/dist/server/domain/prReviewRevision.d.ts +1 -0
  154. package/dist/server/domain/prReviewRevision.d.ts.map +1 -1
  155. package/dist/server/domain/readiness/model.d.ts +3 -3
  156. package/dist/server/domain/release.d.ts +3 -3
  157. package/dist/server/domain/releasePipelineApproval.d.ts +31 -0
  158. package/dist/server/domain/releasePipelineApproval.d.ts.map +1 -0
  159. package/dist/server/domain/releasePublication.d.ts +4 -0
  160. package/dist/server/domain/releasePublication.d.ts.map +1 -0
  161. package/dist/server/index.js +8 -8
  162. package/dist/server/server/agent/AgentJobWorker.d.ts +10 -1
  163. package/dist/server/server/agent/AgentJobWorker.d.ts.map +1 -1
  164. package/dist/server/server/agent/ReleaseAgentPrompt.d.ts.map +1 -1
  165. package/dist/server/server/agent/internal/AgentJobTaskExecutor.d.ts +4 -3
  166. package/dist/server/server/agent/internal/AgentJobTaskExecutor.d.ts.map +1 -1
  167. package/dist/server/server/agent/internal/PrReviewSandboxSession.d.ts +17 -1
  168. package/dist/server/server/agent/internal/PrReviewSandboxSession.d.ts.map +1 -1
  169. package/dist/server/server/agent/internal/PrReviewTaskExecutor.d.ts +76 -2
  170. package/dist/server/server/agent/internal/PrReviewTaskExecutor.d.ts.map +1 -1
  171. package/dist/server/server/agent/internal/PrReviewTelemetry.d.ts +27 -0
  172. package/dist/server/server/agent/internal/PrReviewTelemetry.d.ts.map +1 -0
  173. package/dist/server/server/api/ApplicationServices.d.ts +39 -5
  174. package/dist/server/server/api/ApplicationServices.d.ts.map +1 -1
  175. package/dist/server/server/api/Handlers.d.ts +1 -1
  176. package/dist/server/server/api/Handlers.d.ts.map +1 -1
  177. package/dist/server/server/api/RequestBoundary.d.ts.map +1 -1
  178. package/dist/server/server/application/GovernedReviewSuggestionPublicationGateway.d.ts.map +1 -1
  179. package/dist/server/server/application/ReviewSuggestionPublicationGateway.d.ts +4 -0
  180. package/dist/server/server/application/ReviewSuggestionPublicationGateway.d.ts.map +1 -1
  181. package/dist/server/server/application/deliveryGraphInspection.d.ts.map +1 -1
  182. package/dist/server/server/application/index.d.ts +1 -0
  183. package/dist/server/server/application/index.d.ts.map +1 -1
  184. package/dist/server/server/application/liveEvents.d.ts.map +1 -1
  185. package/dist/server/server/application/normalizedPluginPageMaterialization.d.ts.map +1 -1
  186. package/dist/server/server/application/pipelineExecutionProjection.d.ts +7 -6
  187. package/dist/server/server/application/pipelineExecutionProjection.d.ts.map +1 -1
  188. package/dist/server/server/application/portfolioSnapshots.d.ts +2018 -4
  189. package/dist/server/server/application/portfolioSnapshots.d.ts.map +1 -1
  190. package/dist/server/server/application/pullRequestReviews.d.ts.map +1 -1
  191. package/dist/server/server/application/releaseAgent.d.ts +11 -3
  192. package/dist/server/server/application/releaseAgent.d.ts.map +1 -1
  193. package/dist/server/server/application/releasePublicationIntent.d.ts +7 -0
  194. package/dist/server/server/application/releasePublicationIntent.d.ts.map +1 -0
  195. package/dist/server/server/application/releasePublicationMetadata.d.ts +61 -0
  196. package/dist/server/server/application/releasePublicationMetadata.d.ts.map +1 -0
  197. package/dist/server/server/application/releasePublicationSubmissions.d.ts +3730 -0
  198. package/dist/server/server/application/releasePublicationSubmissions.d.ts.map +1 -0
  199. package/dist/server/server/application/releaseRunbookHydration.d.ts +2310 -0
  200. package/dist/server/server/application/releaseRunbookHydration.d.ts.map +1 -0
  201. package/dist/server/server/application/releaseSynchronization.d.ts.map +1 -1
  202. package/dist/server/server/cli.js +8 -8
  203. package/dist/server/server/cli.js.map +1 -1
  204. package/dist/server/server/governance/governedActionDigests.d.ts +236 -218
  205. package/dist/server/server/governance/governedActionDigests.d.ts.map +1 -1
  206. package/dist/server/server/governance/internal/GovernedActionExecutionEngine.d.ts +3 -4
  207. package/dist/server/server/governance/internal/GovernedActionExecutionEngine.d.ts.map +1 -1
  208. package/dist/server/server/governance/internal/execution-store/begin.d.ts.map +1 -1
  209. package/dist/server/server/governance/internal/execution-store/dispatch-inbox.d.ts +1 -1
  210. package/dist/server/server/governance/internal/execution-store/dispatch-outcome.d.ts +8 -8
  211. package/dist/server/server/governance/internal/execution-store/provider-outcome-fold.d.ts +2 -2
  212. package/dist/server/server/governance/internal/execution-store/reconciliation-inbox.d.ts +1 -1
  213. package/dist/server/server/governance/internal/execution-store/recovery-claim.d.ts +37 -30
  214. package/dist/server/server/governance/internal/execution-store/recovery-claim.d.ts.map +1 -1
  215. package/dist/server/server/index.js +5 -5
  216. package/dist/server/server/internal/codepipeline-state-probe.js +1 -1
  217. package/dist/server/server/persistence/Database.d.ts +1 -1
  218. package/dist/server/server/persistence/Database.d.ts.map +1 -1
  219. package/dist/server/server/persistence/Persistence.d.ts +1549 -577
  220. package/dist/server/server/persistence/Persistence.d.ts.map +1 -1
  221. package/dist/server/server/persistence/backup/BackupArchive.d.ts.map +1 -1
  222. package/dist/server/server/persistence/object-store/BlobPublisher.d.ts.map +1 -1
  223. package/dist/server/server/persistence/object-store/PinnedDirectory.d.ts +2 -2
  224. package/dist/server/server/persistence/object-store/PinnedDirectory.d.ts.map +1 -1
  225. package/dist/server/server/persistence/repositories/agentJobModels.d.ts +345 -8
  226. package/dist/server/server/persistence/repositories/agentJobModels.d.ts.map +1 -1
  227. package/dist/server/server/persistence/repositories/agentJobRepository.d.ts +654 -192
  228. package/dist/server/server/persistence/repositories/agentJobRepository.d.ts.map +1 -1
  229. package/dist/server/server/persistence/repositories/delivery-graph/contract.d.ts +148 -138
  230. package/dist/server/server/persistence/repositories/delivery-graph/contract.d.ts.map +1 -1
  231. package/dist/server/server/persistence/repositories/delivery-graph/decode.d.ts +27 -25
  232. package/dist/server/server/persistence/repositories/delivery-graph/decode.d.ts.map +1 -1
  233. package/dist/server/server/persistence/repositories/delivery-graph/read.d.ts +117 -111
  234. package/dist/server/server/persistence/repositories/delivery-graph/read.d.ts.map +1 -1
  235. package/dist/server/server/persistence/repositories/delivery-graph/rows.d.ts +28 -27
  236. package/dist/server/server/persistence/repositories/delivery-graph/rows.d.ts.map +1 -1
  237. package/dist/server/server/persistence/repositories/delivery-graph/write.d.ts +50 -48
  238. package/dist/server/server/persistence/repositories/delivery-graph/write.d.ts.map +1 -1
  239. package/dist/server/server/persistence/repositories/deliveryGraphRepository.d.ts +117 -111
  240. package/dist/server/server/persistence/repositories/deliveryGraphRepository.d.ts.map +1 -1
  241. package/dist/server/server/persistence/repositories/governed-action/codec.d.ts +259 -234
  242. package/dist/server/server/persistence/repositories/governed-action/codec.d.ts.map +1 -1
  243. package/dist/server/server/persistence/repositories/governed-action/contract.d.ts +68 -46
  244. package/dist/server/server/persistence/repositories/governed-action/contract.d.ts.map +1 -1
  245. package/dist/server/server/persistence/repositories/governed-action/read.d.ts +668 -190
  246. package/dist/server/server/persistence/repositories/governed-action/read.d.ts.map +1 -1
  247. package/dist/server/server/persistence/repositories/governed-action/transaction.d.ts +680 -206
  248. package/dist/server/server/persistence/repositories/governed-action/transaction.d.ts.map +1 -1
  249. package/dist/server/server/persistence/repositories/governed-action/write-preparation.d.ts +38 -31
  250. package/dist/server/server/persistence/repositories/governed-action/write-preparation.d.ts.map +1 -1
  251. package/dist/server/server/persistence/repositories/governed-action/write-replay.d.ts +46 -32
  252. package/dist/server/server/persistence/repositories/governed-action/write-replay.d.ts.map +1 -1
  253. package/dist/server/server/persistence/repositories/governed-action/write.d.ts +46 -32
  254. package/dist/server/server/persistence/repositories/governed-action/write.d.ts.map +1 -1
  255. package/dist/server/server/persistence/repositories/governedActionRepository.d.ts +678 -205
  256. package/dist/server/server/persistence/repositories/governedActionRepository.d.ts.map +1 -1
  257. package/dist/server/server/persistence/repositories/internal/reviewSuggestionRevisions.d.ts +85 -4
  258. package/dist/server/server/persistence/repositories/internal/reviewSuggestionRevisions.d.ts.map +1 -1
  259. package/dist/server/server/persistence/repositories/models.d.ts +9 -9
  260. package/dist/server/server/persistence/repositories/peopleRepository.d.ts +36 -36
  261. package/dist/server/server/persistence/repositories/providerAccountRepository.d.ts +1 -1
  262. package/dist/server/server/persistence/repositories/readiness/assessments.d.ts +6 -6
  263. package/dist/server/server/persistence/repositories/readiness/contract.d.ts +450 -450
  264. package/dist/server/server/persistence/repositories/readiness/queue.d.ts +14 -14
  265. package/dist/server/server/persistence/repositories/readinessRepository.d.ts +7 -7
  266. package/dist/server/server/persistence/repositories/releaseRepository.d.ts +18 -18
  267. package/dist/server/server/persistence/repositories/retentionRepository.d.ts.map +1 -1
  268. package/dist/server/server/persistence/repositories/timelineRepository.d.ts +4 -4
  269. package/dist/server/server/plugins/atlassian/AtlassianOAuthGrants.d.ts.map +1 -1
  270. package/dist/server/server/plugins/atlassian/AtlassianOAuthScopes.d.ts +9 -0
  271. package/dist/server/server/plugins/atlassian/AtlassianOAuthScopes.d.ts.map +1 -0
  272. package/dist/server/server/plugins/atlassian/AtlassianProfiles.d.ts.map +1 -1
  273. package/dist/server/server/plugins/codecommit/CodeCommitPluginDefinition.d.ts.map +1 -1
  274. package/dist/server/server/plugins/jira/JiraReadPlugin.d.ts +2 -2
  275. package/dist/server/server/plugins/jira/JiraReadPlugin.d.ts.map +1 -1
  276. package/dist/server/server/plugins/jira/JiraReadProvider.d.ts.map +1 -1
  277. package/dist/server/server/plugins/jira/JiraReleaseVersionLimits.d.ts +8 -0
  278. package/dist/server/server/plugins/jira/JiraReleaseVersionLimits.d.ts.map +1 -0
  279. package/dist/server/server/plugins/jira/index.d.ts +1 -1
  280. package/dist/server/server/plugins/jira/index.d.ts.map +1 -1
  281. package/dist/server/server/runtime/Bootstrap.d.ts +1 -1
  282. package/dist/server/server/runtime/Bootstrap.d.ts.map +1 -1
  283. package/dist/server/server/runtime/ControlCenterServer.d.ts +3 -3
  284. package/dist/server/server/runtime/ControlCenterServer.d.ts.map +1 -1
  285. package/dist/server/server/runtime/PrReviewWorkerStartup.d.ts +11 -1
  286. package/dist/server/server/runtime/PrReviewWorkerStartup.d.ts.map +1 -1
  287. package/dist/server/server/runtime/RetentionStartup.d.ts.map +1 -1
  288. package/dist/server/server/runtime/ServerLifecycle.d.ts.map +1 -1
  289. package/dist/server/server/secrets/SecretStore.d.ts.map +1 -1
  290. package/package.json +10 -9
  291. package/dist/client/assets/AgentPage-DGL93TJU.js +0 -3
  292. package/dist/client/assets/AgentPage-DGL93TJU.js.map +0 -1
  293. package/dist/client/assets/AgentPage-DVSgQgJa.css +0 -1
  294. package/dist/client/assets/AtlassianOAuthCallbackPage-D1F1xE_2.js +0 -2
  295. package/dist/client/assets/AuthorizedSharePage-DCQUFY2I.js +0 -2
  296. package/dist/client/assets/AuthorizedSharePage-DCQUFY2I.js.map +0 -1
  297. package/dist/client/assets/BrowserCrypto-DVWR7DFd.js +0 -2
  298. package/dist/client/assets/BrowserSessionHydrator-DE46feEX.js +0 -2
  299. package/dist/client/assets/BrowserSessionHydrator-DE46feEX.js.map +0 -1
  300. package/dist/client/assets/CommandSearch-CP_QCbkm.js +0 -2
  301. package/dist/client/assets/ItemsPage-BGFUkRL2.js +0 -2
  302. package/dist/client/assets/PortfolioOverview-D45rk8Hl.js +0 -2
  303. package/dist/client/assets/PortfolioOverview-D45rk8Hl.js.map +0 -1
  304. package/dist/client/assets/PullRequestReviewPanel-CqPtjhVW.js +0 -6
  305. package/dist/client/assets/PullRequestReviewPanel-CqPtjhVW.js.map +0 -1
  306. package/dist/client/assets/ReleaseRoute-DXJ8Jg60.js +0 -2
  307. package/dist/client/assets/ReleaseWorkset-Dtzalmji.js +0 -2
  308. package/dist/client/assets/ReleaseWorkset-Dtzalmji.js.map +0 -1
  309. package/dist/client/assets/ServicesPage-DGcUjd2H.js +0 -2
  310. package/dist/client/assets/ServicesPage-DGcUjd2H.js.map +0 -1
  311. package/dist/client/assets/TimelinePage-Bq1RTQlP.js +0 -2
  312. package/dist/client/assets/TimelinePage-Bq1RTQlP.js.map +0 -1
  313. package/dist/client/assets/WorkspaceEntityLink-AdZ_T-Wk.js +0 -2
  314. package/dist/client/assets/WorkspaceEntityRoute-9iMOV64J.css +0 -1
  315. package/dist/client/assets/WorkspaceEntityRoute-Bxxnc8us.js +0 -3
  316. package/dist/client/assets/WorkspaceEntityRoute-Bxxnc8us.js.map +0 -1
  317. package/dist/client/assets/WorkspaceHomeLink-XbKSPths.js +0 -2
  318. package/dist/client/assets/WorkspacePullRequestDetails-BErJ5bk8.js.map +0 -1
  319. package/dist/client/assets/WorkspaceRichText-D1M637Ff.js.map +0 -1
  320. package/dist/client/assets/WorkspaceSettingsPage-Fy7Wx8Y2.js +0 -2
  321. package/dist/client/assets/WorkspaceSettingsPage-Fy7Wx8Y2.js.map +0 -1
  322. package/dist/client/assets/WorkspaceSettingsPage-P6yfac0b.css +0 -1
  323. package/dist/client/assets/agent-api-QVqt4a0O.js +0 -19
  324. package/dist/client/assets/agent-api-QVqt4a0O.js.map +0 -1
  325. package/dist/client/assets/authenticatedMutationClient-Ccwguc3i.js +0 -2
  326. package/dist/client/assets/authorizedShareTransport-DZHgFEkh.js +0 -2
  327. package/dist/client/assets/client-D27unen8.js +0 -5
  328. package/dist/client/assets/client-D27unen8.js.map +0 -1
  329. package/dist/client/assets/connectionTestTransport-BQ55d6Me.js +0 -2
  330. package/dist/client/assets/connectionTestTransport-BQ55d6Me.js.map +0 -1
  331. package/dist/client/assets/index-j5ze816l.js +0 -11
  332. package/dist/client/assets/index-j5ze816l.js.map +0 -1
  333. package/dist/client/assets/presentPortfolio-D3ZIcnqt.js.map +0 -1
  334. package/dist/client/assets/pullRequestReviewThreadReplay-oljKM7Xz.js +0 -2
  335. package/dist/client/assets/pullRequestReviewThreadReplay-oljKM7Xz.js.map +0 -1
  336. package/dist/client/assets/releaseRoutes-BCuIdZyA.js +0 -2
  337. package/dist/client/assets/serviceOnboarding-Jg_0yNjf.js +0 -2
  338. package/dist/client/assets/workspaceScrollCapture-CJ4QUptr.js +0 -2
  339. package/dist/client/assets/workspaceScrollCapture-CJ4QUptr.js.map +0 -1
  340. package/dist/client/assets/workspaceSettingsTransport-CZWYL5T7.js +0 -2
  341. package/dist/server/assets/BindConfig-DIsf2Rnh.js.map +0 -1
  342. package/dist/server/assets/agent-CyZ40zs1.js.map +0 -1
  343. package/dist/server/assets/controlCenterApi-ZUX3Y-LE.js.map +0 -1
  344. package/dist/server/assets/manualPluginSynchronization-DFlhKvav.js.map +0 -1
  345. package/dist/server/assets/relationshipInferenceMaterialization-DYBcaWhQ.js.map +0 -1
  346. package/dist/server/assets/workspaceSettings-BE713Oe8.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"readiness-BhA-Nr9c.js","names":[],"sources":["../../../src/domain/authorizedShare.ts","../../../src/domain/readiness/material.ts","../../../src/domain/readiness/rollup.ts"],"sourcesContent":["import * as DateTime from \"effect/DateTime\"\nimport * as Schema from \"effect/Schema\"\n\nimport { EntityId, PersonId, SessionId, ShareId, WorkspaceId } from \"./identifiers.js\"\nimport { UtcTimestamp } from \"./utcTimestamp.js\"\n\n/** Exact normalized entity scope granted to one authenticated person. */\nexport const AuthorizedShareTarget = Schema.TaggedStruct(\"entity\", {\n entityId: EntityId\n})\n\n/** Decoded exact authorized-share target. */\nexport type AuthorizedShareTarget = typeof AuthorizedShareTarget.Type\n\n/** Durable authenticated grant with immutable creation and optional revocation evidence. */\nexport const AuthorizedShareGrant = Schema.Struct({\n workspaceId: WorkspaceId,\n shareId: ShareId,\n target: AuthorizedShareTarget,\n granteePersonId: PersonId,\n createdByPersonId: PersonId,\n createdBySessionId: SessionId,\n createdAt: UtcTimestamp,\n expiresAt: UtcTimestamp,\n revokedAt: Schema.NullOr(UtcTimestamp)\n}).check(\n Schema.makeFilter(\n ({ createdAt, expiresAt }) => DateTime.Order(createdAt, expiresAt) < 0,\n { expected: \"authorized share expiry after creation\" }\n ),\n Schema.makeFilter(\n ({ createdAt, revokedAt }) => revokedAt === null || DateTime.Order(createdAt, revokedAt) <= 0,\n { expected: \"authorized share revocation at or after creation\" }\n )\n)\n\n/** Decoded durable authorized-share grant. */\nexport type AuthorizedShareGrant = typeof AuthorizedShareGrant.Type\n","import * as Schema from \"effect/Schema\"\n\nimport { EnvironmentId, ReadinessAssessmentId, ReleaseId, WorkspaceId } from \"../identifiers.js\"\nimport {\n MAX_READINESS_EVIDENCE_REFERENCES,\n ReadinessArtifactRevision,\n ReadinessCandidateDigest,\n ReadinessFactDefinition,\n type ReadinessFactDefinition as ReadinessFactDefinitionType,\n ReadinessFactObservation,\n type ReadinessFactObservation as ReadinessFactObservationType,\n ReadinessReleaseRevision,\n ReadinessRuleId,\n ReadinessRuleVersion\n} from \"./model.js\"\nimport { compareReadinessText, readinessDefinitionsShapeIsV1, readinessPolicyShapeIsV1 } from \"./policy.js\"\n\nconst unique = <Value>(values: ReadonlyArray<Value>): boolean => new Set(values).size === values.length\n\nconst CandidateMaterialBase = {\n workspaceId: WorkspaceId,\n releaseRevision: ReadinessReleaseRevision,\n artifactRevision: ReadinessArtifactRevision\n}\n\nconst readinessFactsAreValid = (input: {\n readonly definitions: ReadonlyArray<ReadinessFactDefinitionType>\n readonly observations: ReadonlyArray<ReadinessFactObservationType>\n}): boolean => {\n const definitionsById = new Map(input.definitions.map((definition) => [definition.factId, definition]))\n return unique(input.definitions.map(({ factId }) => factId)) &&\n unique(input.observations.map(({ factId }) => factId)) &&\n input.observations.every((observation) =>\n definitionsById.get(observation.factId)?.kind === observation.state._tag\n ) &&\n readinessPolicyShapeIsV1(input.definitions, input.observations) &&\n input.observations.reduce((total, observation) => total + observation.evidence.length, 0) <=\n MAX_READINESS_EVIDENCE_REFERENCES\n}\n\n/** Digest-free, complete material for one target-environment candidate. */\nexport const EnvironmentReadinessCandidateMaterial = Schema.Struct({\n ...CandidateMaterialBase,\n scope: Schema.TaggedStruct(\"environment\", {\n releaseId: ReleaseId,\n environmentId: EnvironmentId\n }),\n complete: Schema.Boolean,\n definitions: Schema.Array(ReadinessFactDefinition).check(Schema.isMaxLength(512)),\n observations: Schema.Array(ReadinessFactObservation).check(Schema.isMaxLength(512))\n}).check(\n Schema.makeFilter(readinessFactsAreValid, {\n expected: \"complete, unique, evidence-bounded V1 readiness candidate material\"\n })\n)\n\n/** Decoded environment candidate material before deterministic normalization. */\nexport type EnvironmentReadinessCandidateMaterial = typeof EnvironmentReadinessCandidateMaterial.Type\n\n/** Exact child assessment bound into a release-scope candidate. */\nexport const ReleaseReadinessChildMaterial = Schema.Struct({\n assessmentId: ReadinessAssessmentId,\n environmentId: EnvironmentId,\n candidateDigest: ReadinessCandidateDigest\n})\n\n/** Decoded release child material. */\nexport type ReleaseReadinessChildMaterial = typeof ReleaseReadinessChildMaterial.Type\n\n/** Digest-free material for one release candidate and its exact environment assessments. */\nexport const ReleaseReadinessCandidateMaterial = Schema.Struct({\n ...CandidateMaterialBase,\n scope: Schema.TaggedStruct(\"release\", { releaseId: ReleaseId }),\n environments: Schema.NonEmptyArray(ReleaseReadinessChildMaterial).check(Schema.isMaxLength(512))\n}).check(\n Schema.makeFilter(({ environments }) => unique(environments.map(({ environmentId }) => environmentId)), {\n expected: \"release candidate environment identities to be unique\"\n }),\n Schema.makeFilter(({ environments }) => unique(environments.map(({ assessmentId }) => assessmentId)), {\n expected: \"release candidate assessment identities to be unique\"\n })\n)\n\n/** Decoded release candidate material before deterministic normalization. */\nexport type ReleaseReadinessCandidateMaterial = typeof ReleaseReadinessCandidateMaterial.Type\n\n/** Digest-free immutable readiness-rule snapshot. */\nexport const ReadinessRuleMaterial = Schema.Struct({\n ruleId: ReadinessRuleId,\n version: ReadinessRuleVersion,\n definitions: Schema.Array(ReadinessFactDefinition).check(Schema.isNonEmpty(), Schema.isMaxLength(512))\n}).check(\n Schema.makeFilter(({ definitions }) => unique(definitions.map(({ factId }) => factId)), {\n expected: \"readiness rule fact identities to be unique\"\n }),\n Schema.makeFilter(({ definitions }) => readinessDefinitionsShapeIsV1(definitions), {\n expected: \"readiness rule material to contain the complete V1 policy shape\"\n })\n)\n\n/** Decoded rule material before deterministic normalization. */\nexport type ReadinessRuleMaterial = typeof ReadinessRuleMaterial.Type\n\nconst normalizeDefinitions = (\n definitions: ReadonlyArray<ReadinessFactDefinitionType>\n): Array<ReadinessFactDefinitionType> =>\n [...definitions].sort((left, right) => compareReadinessText(left.factId, right.factId))\n\nconst normalizeObservations = (\n observations: ReadonlyArray<ReadinessFactObservationType>\n): Array<ReadinessFactObservationType> =>\n observations\n .map((observation) => ({\n ...observation,\n evidence: [...observation.evidence].sort((left, right) => compareReadinessText(left.evidenceId, right.evidenceId))\n }))\n .sort((left, right) => compareReadinessText(left.factId, right.factId))\n\n/** Return the only JSON ordering accepted for environment-candidate hashing. */\nexport const normalizeEnvironmentReadinessCandidateMaterial = (\n material: EnvironmentReadinessCandidateMaterial\n): EnvironmentReadinessCandidateMaterial => ({\n ...material,\n definitions: normalizeDefinitions(material.definitions),\n observations: normalizeObservations(material.observations)\n})\n\n/** Return the only JSON ordering accepted for release-candidate hashing. */\nexport const normalizeReleaseReadinessCandidateMaterial = (\n material: ReleaseReadinessCandidateMaterial\n): ReleaseReadinessCandidateMaterial => {\n const [first, ...remaining] = material.environments\n const environments: [ReleaseReadinessChildMaterial, ...Array<ReleaseReadinessChildMaterial>] = [\n first,\n ...remaining\n ]\n environments.sort((left, right) => compareReadinessText(left.environmentId, right.environmentId))\n return { ...material, environments }\n}\n\n/** Return the only JSON ordering accepted for rule hashing. */\nexport const normalizeReadinessRuleMaterial = (\n material: ReadinessRuleMaterial\n): ReadinessRuleMaterial => ({\n ...material,\n definitions: normalizeDefinitions(material.definitions)\n})\n","import type {\n EnvironmentReadinessAssessment,\n ReleaseReadinessAssessment,\n ReleaseReadinessRollupInput\n} from \"./model.js\"\nimport {\n compareReadinessText,\n deriveReleaseReadinessFindings,\n deriveReleaseReadinessNextEvaluationAt,\n deriveReleaseReadinessSourceSummaries,\n deriveReleaseReadinessStages,\n deriveReleaseReadinessVerdict,\n sortedReadinessUnique\n} from \"./policy.js\"\n\n/** Exact compact projection retained when an environment is rolled into a release. */\nexport const summarizeEnvironmentReadiness = (\n assessment: EnvironmentReadinessAssessment\n): ReleaseReadinessAssessment[\"environments\"][number] => ({\n assessmentId: assessment.assessmentId,\n environmentId: assessment.candidate.scope.environmentId,\n candidateDigest: assessment.candidate.digest,\n inputComplete: assessment.inputComplete,\n facts: assessment.facts,\n nextEvaluationAt: assessment.nextEvaluationAt,\n verdict: assessment.verdict,\n stages: assessment.stages,\n blockers: assessment.blockers,\n warnings: assessment.warnings,\n gaps: assessment.gaps,\n sourceFreshness: assessment.sourceFreshness,\n evidenceIds: assessment.evidenceIds\n})\n\n/** Pure deterministic roll-up of current target-environment assessments. */\nexport const rollUpReleaseReadiness = (\n input: ReleaseReadinessRollupInput\n): ReleaseReadinessAssessment => {\n const environments = input.environments\n .slice()\n .sort((left, right) => {\n return compareReadinessText(\n left.candidate.scope.environmentId,\n right.candidate.scope.environmentId\n )\n })\n const first = environments.reduce((earliest, assessment) =>\n compareReadinessText(\n assessment.candidate.scope.environmentId,\n earliest.candidate.scope.environmentId\n ) < 0\n ? assessment\n : earliest, input.environments[0])\n const environmentSummaries: ReleaseReadinessAssessment[\"environments\"] = [\n summarizeEnvironmentReadiness(first),\n ...environments.filter((assessment) => assessment !== first).map(summarizeEnvironmentReadiness)\n ]\n const findings = deriveReleaseReadinessFindings(environmentSummaries)\n\n return {\n _tag: \"release\",\n assessmentId: input.assessmentId,\n previousAssessmentId: input.previousAssessmentId,\n candidate: input.candidate,\n rule: first.rule,\n derivationVersion: first.derivationVersion,\n evaluatedAt: input.evaluatedAt,\n nextEvaluationAt: deriveReleaseReadinessNextEvaluationAt(environmentSummaries),\n verdict: deriveReleaseReadinessVerdict(environmentSummaries),\n stages: deriveReleaseReadinessStages(environmentSummaries),\n environments: environmentSummaries,\n blockers: findings.blockers,\n warnings: findings.warnings,\n gaps: findings.gaps,\n sourceFreshness: deriveReleaseReadinessSourceSummaries(environmentSummaries),\n evidenceIds: sortedReadinessUnique(environments.flatMap(({ evidenceIds }) => evidenceIds))\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"readiness-31Mqc-9H.js","names":[],"sources":["../../../src/domain/authorizedShare.ts","../../../src/domain/readiness/material.ts","../../../src/domain/readiness/rollup.ts"],"sourcesContent":["import * as DateTime from \"effect/DateTime\"\nimport * as Schema from \"effect/Schema\"\n\nimport { EntityId, PersonId, SessionId, ShareId, WorkspaceId } from \"./identifiers.js\"\nimport { UtcTimestamp } from \"./utcTimestamp.js\"\n\n/** Exact normalized entity scope granted to one authenticated person. */\nexport const AuthorizedShareTarget = Schema.TaggedStruct(\"entity\", {\n entityId: EntityId\n})\n\n/** Decoded exact authorized-share target. */\nexport type AuthorizedShareTarget = typeof AuthorizedShareTarget.Type\n\n/** Durable authenticated grant with immutable creation and optional revocation evidence. */\nexport const AuthorizedShareGrant = Schema.Struct({\n workspaceId: WorkspaceId,\n shareId: ShareId,\n target: AuthorizedShareTarget,\n granteePersonId: PersonId,\n createdByPersonId: PersonId,\n createdBySessionId: SessionId,\n createdAt: UtcTimestamp,\n expiresAt: UtcTimestamp,\n revokedAt: Schema.NullOr(UtcTimestamp)\n}).check(\n Schema.makeFilter(\n ({ createdAt, expiresAt }) => DateTime.Order(createdAt, expiresAt) < 0,\n { expected: \"authorized share expiry after creation\" }\n ),\n Schema.makeFilter(\n ({ createdAt, revokedAt }) => revokedAt === null || DateTime.Order(createdAt, revokedAt) <= 0,\n { expected: \"authorized share revocation at or after creation\" }\n )\n)\n\n/** Decoded durable authorized-share grant. */\nexport type AuthorizedShareGrant = typeof AuthorizedShareGrant.Type\n","import * as Schema from \"effect/Schema\"\n\nimport { EnvironmentId, ReadinessAssessmentId, ReleaseId, WorkspaceId } from \"../identifiers.js\"\nimport {\n MAX_READINESS_EVIDENCE_REFERENCES,\n ReadinessArtifactRevision,\n ReadinessCandidateDigest,\n ReadinessFactDefinition,\n type ReadinessFactDefinition as ReadinessFactDefinitionType,\n ReadinessFactObservation,\n type ReadinessFactObservation as ReadinessFactObservationType,\n ReadinessReleaseRevision,\n ReadinessRuleId,\n ReadinessRuleVersion\n} from \"./model.js\"\nimport { compareReadinessText, readinessDefinitionsShapeIsV1, readinessPolicyShapeIsV1 } from \"./policy.js\"\n\nconst unique = <Value>(values: ReadonlyArray<Value>): boolean => new Set(values).size === values.length\n\nconst CandidateMaterialBase = {\n workspaceId: WorkspaceId,\n releaseRevision: ReadinessReleaseRevision,\n artifactRevision: ReadinessArtifactRevision\n}\n\nconst readinessFactsAreValid = (input: {\n readonly definitions: ReadonlyArray<ReadinessFactDefinitionType>\n readonly observations: ReadonlyArray<ReadinessFactObservationType>\n}): boolean => {\n const definitionsById = new Map(input.definitions.map((definition) => [definition.factId, definition]))\n return unique(input.definitions.map(({ factId }) => factId)) &&\n unique(input.observations.map(({ factId }) => factId)) &&\n input.observations.every((observation) =>\n definitionsById.get(observation.factId)?.kind === observation.state._tag\n ) &&\n readinessPolicyShapeIsV1(input.definitions, input.observations) &&\n input.observations.reduce((total, observation) => total + observation.evidence.length, 0) <=\n MAX_READINESS_EVIDENCE_REFERENCES\n}\n\n/** Digest-free, complete material for one target-environment candidate. */\nexport const EnvironmentReadinessCandidateMaterial = Schema.Struct({\n ...CandidateMaterialBase,\n scope: Schema.TaggedStruct(\"environment\", {\n releaseId: ReleaseId,\n environmentId: EnvironmentId\n }),\n complete: Schema.Boolean,\n definitions: Schema.Array(ReadinessFactDefinition).check(Schema.isMaxLength(512)),\n observations: Schema.Array(ReadinessFactObservation).check(Schema.isMaxLength(512))\n}).check(\n Schema.makeFilter(readinessFactsAreValid, {\n expected: \"complete, unique, evidence-bounded V1 readiness candidate material\"\n })\n)\n\n/** Decoded environment candidate material before deterministic normalization. */\nexport type EnvironmentReadinessCandidateMaterial = typeof EnvironmentReadinessCandidateMaterial.Type\n\n/** Exact child assessment bound into a release-scope candidate. */\nexport const ReleaseReadinessChildMaterial = Schema.Struct({\n assessmentId: ReadinessAssessmentId,\n environmentId: EnvironmentId,\n candidateDigest: ReadinessCandidateDigest\n})\n\n/** Decoded release child material. */\nexport type ReleaseReadinessChildMaterial = typeof ReleaseReadinessChildMaterial.Type\n\n/** Digest-free material for one release candidate and its exact environment assessments. */\nexport const ReleaseReadinessCandidateMaterial = Schema.Struct({\n ...CandidateMaterialBase,\n scope: Schema.TaggedStruct(\"release\", { releaseId: ReleaseId }),\n environments: Schema.NonEmptyArray(ReleaseReadinessChildMaterial).check(Schema.isMaxLength(512))\n}).check(\n Schema.makeFilter(({ environments }) => unique(environments.map(({ environmentId }) => environmentId)), {\n expected: \"release candidate environment identities to be unique\"\n }),\n Schema.makeFilter(({ environments }) => unique(environments.map(({ assessmentId }) => assessmentId)), {\n expected: \"release candidate assessment identities to be unique\"\n })\n)\n\n/** Decoded release candidate material before deterministic normalization. */\nexport type ReleaseReadinessCandidateMaterial = typeof ReleaseReadinessCandidateMaterial.Type\n\n/** Digest-free immutable readiness-rule snapshot. */\nexport const ReadinessRuleMaterial = Schema.Struct({\n ruleId: ReadinessRuleId,\n version: ReadinessRuleVersion,\n definitions: Schema.Array(ReadinessFactDefinition).check(Schema.isNonEmpty(), Schema.isMaxLength(512))\n}).check(\n Schema.makeFilter(({ definitions }) => unique(definitions.map(({ factId }) => factId)), {\n expected: \"readiness rule fact identities to be unique\"\n }),\n Schema.makeFilter(({ definitions }) => readinessDefinitionsShapeIsV1(definitions), {\n expected: \"readiness rule material to contain the complete V1 policy shape\"\n })\n)\n\n/** Decoded rule material before deterministic normalization. */\nexport type ReadinessRuleMaterial = typeof ReadinessRuleMaterial.Type\n\nconst normalizeDefinitions = (\n definitions: ReadonlyArray<ReadinessFactDefinitionType>\n): Array<ReadinessFactDefinitionType> =>\n [...definitions].sort((left, right) => compareReadinessText(left.factId, right.factId))\n\nconst normalizeObservations = (\n observations: ReadonlyArray<ReadinessFactObservationType>\n): Array<ReadinessFactObservationType> =>\n observations\n .map((observation) => ({\n ...observation,\n evidence: [...observation.evidence].sort((left, right) => compareReadinessText(left.evidenceId, right.evidenceId))\n }))\n .sort((left, right) => compareReadinessText(left.factId, right.factId))\n\n/** Return the only JSON ordering accepted for environment-candidate hashing. */\nexport const normalizeEnvironmentReadinessCandidateMaterial = (\n material: EnvironmentReadinessCandidateMaterial\n): EnvironmentReadinessCandidateMaterial => ({\n ...material,\n definitions: normalizeDefinitions(material.definitions),\n observations: normalizeObservations(material.observations)\n})\n\n/** Return the only JSON ordering accepted for release-candidate hashing. */\nexport const normalizeReleaseReadinessCandidateMaterial = (\n material: ReleaseReadinessCandidateMaterial\n): ReleaseReadinessCandidateMaterial => {\n const [first, ...remaining] = material.environments\n const environments: [ReleaseReadinessChildMaterial, ...Array<ReleaseReadinessChildMaterial>] = [\n first,\n ...remaining\n ]\n environments.sort((left, right) => compareReadinessText(left.environmentId, right.environmentId))\n return { ...material, environments }\n}\n\n/** Return the only JSON ordering accepted for rule hashing. */\nexport const normalizeReadinessRuleMaterial = (\n material: ReadinessRuleMaterial\n): ReadinessRuleMaterial => ({\n ...material,\n definitions: normalizeDefinitions(material.definitions)\n})\n","import type {\n EnvironmentReadinessAssessment,\n ReleaseReadinessAssessment,\n ReleaseReadinessRollupInput\n} from \"./model.js\"\nimport {\n compareReadinessText,\n deriveReleaseReadinessFindings,\n deriveReleaseReadinessNextEvaluationAt,\n deriveReleaseReadinessSourceSummaries,\n deriveReleaseReadinessStages,\n deriveReleaseReadinessVerdict,\n sortedReadinessUnique\n} from \"./policy.js\"\n\n/** Exact compact projection retained when an environment is rolled into a release. */\nexport const summarizeEnvironmentReadiness = (\n assessment: EnvironmentReadinessAssessment\n): ReleaseReadinessAssessment[\"environments\"][number] => ({\n assessmentId: assessment.assessmentId,\n environmentId: assessment.candidate.scope.environmentId,\n candidateDigest: assessment.candidate.digest,\n inputComplete: assessment.inputComplete,\n facts: assessment.facts,\n nextEvaluationAt: assessment.nextEvaluationAt,\n verdict: assessment.verdict,\n stages: assessment.stages,\n blockers: assessment.blockers,\n warnings: assessment.warnings,\n gaps: assessment.gaps,\n sourceFreshness: assessment.sourceFreshness,\n evidenceIds: assessment.evidenceIds\n})\n\n/** Pure deterministic roll-up of current target-environment assessments. */\nexport const rollUpReleaseReadiness = (\n input: ReleaseReadinessRollupInput\n): ReleaseReadinessAssessment => {\n const environments = input.environments\n .slice()\n .sort((left, right) => {\n return compareReadinessText(\n left.candidate.scope.environmentId,\n right.candidate.scope.environmentId\n )\n })\n const first = environments.reduce((earliest, assessment) =>\n compareReadinessText(\n assessment.candidate.scope.environmentId,\n earliest.candidate.scope.environmentId\n ) < 0\n ? assessment\n : earliest, input.environments[0])\n const environmentSummaries: ReleaseReadinessAssessment[\"environments\"] = [\n summarizeEnvironmentReadiness(first),\n ...environments.filter((assessment) => assessment !== first).map(summarizeEnvironmentReadiness)\n ]\n const findings = deriveReleaseReadinessFindings(environmentSummaries)\n\n return {\n _tag: \"release\",\n assessmentId: input.assessmentId,\n previousAssessmentId: input.previousAssessmentId,\n candidate: input.candidate,\n rule: first.rule,\n derivationVersion: first.derivationVersion,\n evaluatedAt: input.evaluatedAt,\n nextEvaluationAt: deriveReleaseReadinessNextEvaluationAt(environmentSummaries),\n verdict: deriveReleaseReadinessVerdict(environmentSummaries),\n stages: deriveReleaseReadinessStages(environmentSummaries),\n environments: environmentSummaries,\n blockers: findings.blockers,\n warnings: findings.warnings,\n gaps: findings.gaps,\n sourceFreshness: deriveReleaseReadinessSourceSummaries(environmentSummaries),\n evidenceIds: sortedReadinessUnique(environments.flatMap(({ evidenceIds }) => evidenceIds))\n }\n}\n"],"mappings":"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"}