@clossys/launcher 0.3.1 → 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 (290) hide show
  1. package/README.md +1373 -60
  2. package/contracts/conversation-contract.md +2 -2
  3. package/contracts/product-ci-workflow.yml +74 -0
  4. package/contracts/repository-inventory.json +53 -0
  5. package/dist/admission-fixture.d.ts +168 -0
  6. package/dist/admission-fixture.d.ts.map +1 -0
  7. package/dist/admission-fixture.js +467 -0
  8. package/dist/admission-fixture.js.map +1 -0
  9. package/dist/admission.d.ts +124 -0
  10. package/dist/admission.d.ts.map +1 -0
  11. package/dist/admission.js +804 -0
  12. package/dist/admission.js.map +1 -0
  13. package/dist/agents-guide.d.ts +9 -0
  14. package/dist/agents-guide.d.ts.map +1 -0
  15. package/dist/agents-guide.js +26 -0
  16. package/dist/agents-guide.js.map +1 -0
  17. package/dist/apply-command-options.check.d.ts +12 -0
  18. package/dist/apply-command-options.check.d.ts.map +1 -0
  19. package/dist/apply-command-options.check.js +20 -0
  20. package/dist/apply-command-options.check.js.map +1 -0
  21. package/dist/apply-plan-cli.d.ts +39 -1
  22. package/dist/apply-plan-cli.d.ts.map +1 -1
  23. package/dist/apply-plan-cli.js +432 -15
  24. package/dist/apply-plan-cli.js.map +1 -1
  25. package/dist/apply-plan.d.ts +46 -59
  26. package/dist/apply-plan.d.ts.map +1 -1
  27. package/dist/apply-plan.js +112 -97
  28. package/dist/apply-plan.js.map +1 -1
  29. package/dist/apply-step-fixture.d.ts +87 -0
  30. package/dist/apply-step-fixture.d.ts.map +1 -0
  31. package/dist/apply-step-fixture.js +199 -0
  32. package/dist/apply-step-fixture.js.map +1 -0
  33. package/dist/apply-store.d.ts +93 -0
  34. package/dist/apply-store.d.ts.map +1 -0
  35. package/dist/apply-store.js +625 -0
  36. package/dist/apply-store.js.map +1 -0
  37. package/dist/approval-sheet.d.ts +21 -0
  38. package/dist/approval-sheet.d.ts.map +1 -0
  39. package/dist/approval-sheet.js +163 -0
  40. package/dist/approval-sheet.js.map +1 -0
  41. package/dist/body-command.d.ts +42 -0
  42. package/dist/body-command.d.ts.map +1 -0
  43. package/dist/body-command.js +143 -0
  44. package/dist/body-command.js.map +1 -0
  45. package/dist/change-set-contract.d.ts +403 -0
  46. package/dist/change-set-contract.d.ts.map +1 -0
  47. package/dist/change-set-contract.js +781 -0
  48. package/dist/change-set-contract.js.map +1 -0
  49. package/dist/change-set-digest.d.ts +28 -0
  50. package/dist/change-set-digest.d.ts.map +1 -0
  51. package/dist/change-set-digest.js +65 -0
  52. package/dist/change-set-digest.js.map +1 -0
  53. package/dist/check-cli.d.ts.map +1 -1
  54. package/dist/check-cli.js +14 -3
  55. package/dist/check-cli.js.map +1 -1
  56. package/dist/cli.d.ts +17 -6
  57. package/dist/cli.d.ts.map +1 -1
  58. package/dist/cli.js +84 -23
  59. package/dist/cli.js.map +1 -1
  60. package/dist/core.d.ts +79 -22
  61. package/dist/core.d.ts.map +1 -1
  62. package/dist/core.js +843 -268
  63. package/dist/core.js.map +1 -1
  64. package/dist/dry-materialize.d.ts +63 -0
  65. package/dist/dry-materialize.d.ts.map +1 -0
  66. package/dist/dry-materialize.js +330 -0
  67. package/dist/dry-materialize.js.map +1 -0
  68. package/dist/existing-declaration-adoption.check.d.ts +2 -0
  69. package/dist/existing-declaration-adoption.check.d.ts.map +1 -0
  70. package/dist/existing-declaration-adoption.check.js +10 -0
  71. package/dist/existing-declaration-adoption.check.js.map +1 -0
  72. package/dist/generated/contract-schema.generated.d.ts +97 -0
  73. package/dist/generated/contract-schema.generated.d.ts.map +1 -0
  74. package/dist/generated/contract-schema.generated.js +496 -0
  75. package/dist/generated/contract-schema.generated.js.map +1 -0
  76. package/dist/generated/package-scope.generated.d.ts +6 -0
  77. package/dist/generated/package-scope.generated.d.ts.map +1 -0
  78. package/dist/generated/package-scope.generated.js +10 -0
  79. package/dist/generated/package-scope.generated.js.map +1 -0
  80. package/dist/generated/plan-contracts.generated.d.ts +3 -0
  81. package/dist/generated/plan-contracts.generated.d.ts.map +1 -0
  82. package/dist/generated/plan-contracts.generated.js +3101 -0
  83. package/dist/generated/plan-contracts.generated.js.map +1 -0
  84. package/dist/host.d.ts.map +1 -1
  85. package/dist/host.js +11 -0
  86. package/dist/host.js.map +1 -1
  87. package/dist/identity.d.ts +15 -0
  88. package/dist/identity.d.ts.map +1 -0
  89. package/dist/identity.js +48 -0
  90. package/dist/identity.js.map +1 -0
  91. package/dist/index.d.ts +35 -5
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +19 -2
  94. package/dist/index.js.map +1 -1
  95. package/dist/inventory-adoption.d.ts +24 -5
  96. package/dist/inventory-adoption.d.ts.map +1 -1
  97. package/dist/inventory-adoption.js +70 -25
  98. package/dist/inventory-adoption.js.map +1 -1
  99. package/dist/inventory-choice.d.ts +40 -0
  100. package/dist/inventory-choice.d.ts.map +1 -0
  101. package/dist/inventory-choice.js +156 -0
  102. package/dist/inventory-choice.js.map +1 -0
  103. package/dist/inventory-contract.d.ts +89 -0
  104. package/dist/inventory-contract.d.ts.map +1 -0
  105. package/dist/inventory-contract.js +121 -0
  106. package/dist/inventory-contract.js.map +1 -0
  107. package/dist/key-editor.d.ts +30 -0
  108. package/dist/key-editor.d.ts.map +1 -0
  109. package/dist/key-editor.js +445 -0
  110. package/dist/key-editor.js.map +1 -0
  111. package/dist/ledger-contract.d.ts +190 -0
  112. package/dist/ledger-contract.d.ts.map +1 -0
  113. package/dist/ledger-contract.js +555 -0
  114. package/dist/ledger-contract.js.map +1 -0
  115. package/dist/ledger-trust.d.ts +90 -0
  116. package/dist/ledger-trust.d.ts.map +1 -0
  117. package/dist/ledger-trust.js +203 -0
  118. package/dist/ledger-trust.js.map +1 -0
  119. package/dist/lockfile-invariants.d.ts +48 -0
  120. package/dist/lockfile-invariants.d.ts.map +1 -0
  121. package/dist/lockfile-invariants.js +375 -0
  122. package/dist/lockfile-invariants.js.map +1 -0
  123. package/dist/lockfile-readers.d.ts +72 -0
  124. package/dist/lockfile-readers.d.ts.map +1 -0
  125. package/dist/lockfile-readers.js +713 -0
  126. package/dist/lockfile-readers.js.map +1 -0
  127. package/dist/lockfile-regen.d.ts +106 -0
  128. package/dist/lockfile-regen.d.ts.map +1 -0
  129. package/dist/lockfile-regen.js +760 -0
  130. package/dist/lockfile-regen.js.map +1 -0
  131. package/dist/lockfile-tool-env.d.ts +29 -0
  132. package/dist/lockfile-tool-env.d.ts.map +1 -0
  133. package/dist/lockfile-tool-env.js +111 -0
  134. package/dist/lockfile-tool-env.js.map +1 -0
  135. package/dist/materialize.d.ts +113 -0
  136. package/dist/materialize.d.ts.map +1 -0
  137. package/dist/materialize.js +881 -0
  138. package/dist/materialize.js.map +1 -0
  139. package/dist/observe-repository.d.ts +90 -0
  140. package/dist/observe-repository.d.ts.map +1 -0
  141. package/dist/observe-repository.js +1367 -0
  142. package/dist/observe-repository.js.map +1 -0
  143. package/dist/plan-bundle-setup-fixture.d.ts +68 -0
  144. package/dist/plan-bundle-setup-fixture.d.ts.map +1 -0
  145. package/dist/plan-bundle-setup-fixture.js +167 -0
  146. package/dist/plan-bundle-setup-fixture.js.map +1 -0
  147. package/dist/plan-bundle.d.ts +256 -0
  148. package/dist/plan-bundle.d.ts.map +1 -0
  149. package/dist/plan-bundle.js +882 -0
  150. package/dist/plan-bundle.js.map +1 -0
  151. package/dist/plan-command.d.ts +29 -0
  152. package/dist/plan-command.d.ts.map +1 -0
  153. package/dist/plan-command.js +523 -0
  154. package/dist/plan-command.js.map +1 -0
  155. package/dist/plan-contract.d.ts +153 -0
  156. package/dist/plan-contract.d.ts.map +1 -0
  157. package/dist/plan-contract.js +61 -0
  158. package/dist/plan-contract.js.map +1 -0
  159. package/dist/plan-digest.d.ts +25 -0
  160. package/dist/plan-digest.d.ts.map +1 -0
  161. package/dist/plan-digest.js +106 -0
  162. package/dist/plan-digest.js.map +1 -0
  163. package/dist/plan-rules.d.ts +23 -0
  164. package/dist/plan-rules.d.ts.map +1 -0
  165. package/dist/plan-rules.js +177 -0
  166. package/dist/plan-rules.js.map +1 -0
  167. package/dist/planned-bundle.d.ts +20 -0
  168. package/dist/planned-bundle.d.ts.map +1 -0
  169. package/dist/planned-bundle.js +191 -0
  170. package/dist/planned-bundle.js.map +1 -0
  171. package/dist/product-repository.d.ts +4 -0
  172. package/dist/product-repository.d.ts.map +1 -1
  173. package/dist/product-repository.js +9 -1
  174. package/dist/product-repository.js.map +1 -1
  175. package/dist/provenance-gate.d.ts +48 -0
  176. package/dist/provenance-gate.d.ts.map +1 -0
  177. package/dist/provenance-gate.js +324 -0
  178. package/dist/provenance-gate.js.map +1 -0
  179. package/dist/pull-request-body.d.ts +45 -0
  180. package/dist/pull-request-body.d.ts.map +1 -0
  181. package/dist/pull-request-body.js +232 -0
  182. package/dist/pull-request-body.js.map +1 -0
  183. package/dist/registry-snapshot.d.ts +141 -0
  184. package/dist/registry-snapshot.d.ts.map +1 -0
  185. package/dist/registry-snapshot.js +483 -0
  186. package/dist/registry-snapshot.js.map +1 -0
  187. package/dist/release-age-edit.d.ts +52 -0
  188. package/dist/release-age-edit.d.ts.map +1 -0
  189. package/dist/release-age-edit.js +413 -0
  190. package/dist/release-age-edit.js.map +1 -0
  191. package/dist/root-entries.d.ts +36 -0
  192. package/dist/root-entries.d.ts.map +1 -0
  193. package/dist/root-entries.js +80 -0
  194. package/dist/root-entries.js.map +1 -0
  195. package/dist/setup-template-scripts.d.ts +36 -0
  196. package/dist/setup-template-scripts.d.ts.map +1 -0
  197. package/dist/setup-template-scripts.js +568 -0
  198. package/dist/setup-template-scripts.js.map +1 -0
  199. package/dist/setup-templates.d.ts +55 -0
  200. package/dist/setup-templates.d.ts.map +1 -0
  201. package/dist/setup-templates.js +438 -0
  202. package/dist/setup-templates.js.map +1 -0
  203. package/dist/skills.d.ts +34 -1
  204. package/dist/skills.d.ts.map +1 -1
  205. package/dist/skills.js +129 -17
  206. package/dist/skills.js.map +1 -1
  207. package/dist/status.d.ts +63 -0
  208. package/dist/status.d.ts.map +1 -0
  209. package/dist/status.js +539 -0
  210. package/dist/status.js.map +1 -0
  211. package/dist/types.d.ts +151 -13
  212. package/dist/types.d.ts.map +1 -1
  213. package/package.json +4 -4
  214. package/skeleton/README.md +14 -9
  215. package/skeleton/package.json +2 -1
  216. package/skill/SKILL.md +23 -7
  217. package/skill-catalogue/advisor/SKILL.md +59 -6
  218. package/skill-catalogue/architect/SKILL.md +2 -2
  219. package/skill-catalogue/bouncer/SKILL.md +2 -2
  220. package/skill-catalogue/builder/SKILL.md +2 -2
  221. package/skill-catalogue/butler/SKILL.md +2 -2
  222. package/skill-catalogue/controller/SKILL.md +2 -2
  223. package/skill-catalogue/customer/SKILL.md +2 -2
  224. package/skill-catalogue/designer/SKILL.md +4 -2
  225. package/skill-catalogue/giver/SKILL.md +2 -2
  226. package/skill-catalogue/influencer/SKILL.md +2 -2
  227. package/skill-catalogue/inspector/SKILL.md +2 -2
  228. package/skill-catalogue/integrator/SKILL.md +2 -2
  229. package/skill-catalogue/keeper/SKILL.md +2 -2
  230. package/skill-catalogue/launcher/SKILL.md +23 -7
  231. package/skill-catalogue/locksmith/SKILL.md +2 -2
  232. package/skill-catalogue/messenger/SKILL.md +2 -2
  233. package/skill-catalogue/observer/SKILL.md +2 -2
  234. package/skill-catalogue/publisher/SKILL.md +2 -2
  235. package/skill-catalogue/starter/SKILL.md +3 -2
  236. package/skill-catalogue/strategist/SKILL.md +12 -4
  237. package/skill-catalogue/writer/SKILL.md +2 -2
  238. package/src/admission-fixture.ts +585 -0
  239. package/src/admission.ts +819 -0
  240. package/src/agents-guide.ts +29 -0
  241. package/src/apply-command-options.check.ts +27 -0
  242. package/src/apply-plan-cli.ts +454 -14
  243. package/src/apply-plan.ts +112 -124
  244. package/src/apply-step-fixture.ts +236 -0
  245. package/src/apply-store.ts +584 -0
  246. package/src/approval-sheet.ts +170 -0
  247. package/src/body-command.ts +162 -0
  248. package/src/change-set-contract.ts +987 -0
  249. package/src/change-set-digest.ts +70 -0
  250. package/src/check-cli.ts +14 -3
  251. package/src/cli.ts +90 -22
  252. package/src/core.ts +973 -275
  253. package/src/dry-materialize.ts +353 -0
  254. package/src/existing-declaration-adoption.check.ts +12 -0
  255. package/src/generated/contract-schema.generated.ts +520 -0
  256. package/src/generated/package-scope.generated.ts +10 -0
  257. package/src/generated/plan-contracts.generated.ts +3101 -0
  258. package/src/host.ts +10 -0
  259. package/src/identity.ts +51 -0
  260. package/src/index.ts +74 -3
  261. package/src/inventory-adoption.ts +107 -29
  262. package/src/inventory-choice.ts +172 -0
  263. package/src/inventory-contract.ts +166 -0
  264. package/src/key-editor.ts +446 -0
  265. package/src/ledger-contract.ts +660 -0
  266. package/src/ledger-trust.ts +272 -0
  267. package/src/lockfile-invariants.ts +421 -0
  268. package/src/lockfile-readers.ts +749 -0
  269. package/src/lockfile-regen.ts +851 -0
  270. package/src/lockfile-tool-env.ts +131 -0
  271. package/src/materialize.ts +915 -0
  272. package/src/observe-repository.ts +1365 -0
  273. package/src/plan-bundle-setup-fixture.ts +200 -0
  274. package/src/plan-bundle.ts +1014 -0
  275. package/src/plan-command.ts +532 -0
  276. package/src/plan-contract.ts +179 -0
  277. package/src/plan-digest.ts +102 -0
  278. package/src/plan-rules.ts +188 -0
  279. package/src/planned-bundle.ts +211 -0
  280. package/src/product-repository.ts +10 -1
  281. package/src/provenance-gate.ts +352 -0
  282. package/src/pull-request-body.ts +261 -0
  283. package/src/registry-snapshot.ts +534 -0
  284. package/src/release-age-edit.ts +430 -0
  285. package/src/root-entries.ts +81 -0
  286. package/src/setup-template-scripts.ts +580 -0
  287. package/src/setup-templates.ts +479 -0
  288. package/src/skills.ts +161 -18
  289. package/src/status.ts +557 -0
  290. package/src/types.ts +148 -13
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-rules.js","sourceRoot":"","sources":["../src/plan-rules.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,+EAA+E;AAC/E,2EAA2E;AAC3E,qEAAqE;AACrE,4EAA4E;AAC5E,4EAA4E;AAC5E,0CAA0C;AAC1C,8EAA8E;AAC9E,oEAAoE;AACpE,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,6EAA6E;AAC7E,sBAAsB;AAEtB,OAAO,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAMzE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GAAsB,CAAC,GAAG,EAAE;IACrD,MAAM,WAAW,GAAG,cAAc,CAAC,mBAAmB,CAAC,EAAE,WAA8D,CAAC;IACxH,MAAM,KAAK,GAAG,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC;IAC/C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IACrK,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAI,KAAkB,CAAC,CAAC,CAAC;AACjD,CAAC,CAAC,EAAE,CAAC;AAUL,sHAAsH;AACtH,SAAS,UAAU,CAAI,KAAmB,EAAE,GAAwB,EAAE,QAAqD;IACzH,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAE,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,OAAO,KAAK,SAAS;YAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;;YAC9C,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,GAAG,CAAsC,QAAW,EAAE,IAAO;IACpE,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACpE,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,kBAAkB,CAAC,IAAiB;IAClD,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,MAAM,GAAG,GAAG,CAAC,IAAoB,EAAE,IAAY,EAAE,OAAe,EAAQ,EAAE;QACxE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC;IACF,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IAExC,0EAA0E;IAC1E,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC/E,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,cAAc,EAAE,yCAAyC,KAAK,0DAA0D,CAAC,CAAC;QACvJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kHAAkH;IAClH,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,GAAG,CAAS,YAAY,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;QACvC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAE,CAAC,KAAK,CAAC;YACrC,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,CAAC;gBAC9D,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAE,CAAC,CAAC;gBACnC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAE,CAAC;oBAAE,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,WAAW,QAAQ,GAAG,EAAE,6BAA6B,CAAC,CAAC;YAC1H,CAAC;QACH,CAAC;QACD,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,CAAC;YACrE,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAE,CAAC;gBAAE,GAAG,CAAC,IAAI,EAAE,iBAAiB,QAAQ,GAAG,EAAE,sCAAsC,CAAC,CAAC;QACvL,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,sEAAsE;QACtE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QACnF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAE,CAAC,UAAU,CAAC;gBAAE,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,cAAc,EAAE,qDAAqD,CAAC,CAAC;QACnJ,CAAC;QACD,+BAA+B;QAC/B,UAAU,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC3D,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,YAAY,EAAE,oBAAoB,KAAK,YAAY,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;QACH,gFAAgF;QAChF,UAAU,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,SAAS,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjG,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,QAAQ,EAAE,+CAA+C,KAAK,6CAA6C,CAAC,CAAC;QAC1I,CAAC,CAAC,CAAC;QACH,sGAAsG;QACtG,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACxD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAE,CAAC;YAC7B,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI,EAAE;gBAAE,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,YAAY,EAAE,6EAA6E,CAAC,CAAC;QACjL,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACxD,IAAI,WAAW,IAAI,CAAC,aAAa;QAAE,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,sCAAsC,CAAC,CAAC;IACnG,IAAI,CAAC,WAAW,IAAI,aAAa;QAAE,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,2CAA2C,CAAC,CAAC;IAExG,0BAA0B;IAC1B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,UAAU,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACjD,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,MAAM,EAAE,gBAAgB,KAAK,MAAM,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC;IAED,+CAA+C;IAC/C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACxD,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;gBACrE,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,WAAW,QAAQ,GAAG,EAAE,oBAAoB,KAAK,WAAW,KAAK,GAAG,CAAC,CAAC;YACnG,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,UAAU,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;QAC3D,GAAG,CAAC,IAAI,EAAE,iBAAiB,QAAQ,GAAG,EAAE,yBAAyB,KAAK,GAAG,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,4GAA4G;IAC5G,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC;YAAE,IAAI,QAAQ,CAAC,KAAK,CAAE,CAAC,GAAG,KAAK,aAAa;gBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtH,UAAU,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAE,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;YACzF,GAAG,CAAC,KAAK,EAAE,YAAY,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,+DAA+D,IAAI,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACzK,CAAC,CAAC,CAAC;QACH,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YACzB,IAAI,QAAQ,CAAC,KAAK,CAAE,CAAC,SAAS,KAAK,iBAAiB;gBAAE,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,aAAa,EAAE,+CAA+C,CAAC,CAAC;QACpJ,CAAC;IACH,CAAC;IAED,yDAAyD;IACzD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAE,CAAC,KAAK,CAAC;YACrC,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,EAAE,CAAC;gBAC9D,IAAI,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAE,CAAC;oBAAE,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,WAAW,QAAQ,GAAG,EAAE,mFAAmF,CAAC,CAAC;YAC1L,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,mBAAmB,CAAC,KAAsB;IACxD,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,MAAM,GAAG,GAAG,CAAC,IAAoB,EAAE,IAAY,EAAE,OAAe,EAAQ,EAAE;QACxE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACpC,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC9C,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IAC1C,+CAA+C;IAC/C,MAAM,KAAK,GAAG,IAAI,GAAG,CAAS,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACtE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC3D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAE,CAAC;YAAE,GAAG,CAAC,IAAI,EAAE,eAAe,KAAK,GAAG,EAAE,4BAA4B,CAAC,CAAC;IACxG,CAAC;IACD,wBAAwB;IACxB,UAAU,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACvD,GAAG,CAAC,IAAI,EAAE,eAAe,KAAK,GAAG,EAAE,uBAAuB,KAAK,GAAG,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { ReadinessRunner } from "./admission.js";
2
+ import type { RepositoryChangeSet } from "./change-set-contract.js";
3
+ import type { PlanApplyBundleResult } from "./plan-bundle.js";
4
+ export interface PlannedBundleOptions {
5
+ /** The hub's real path. */
6
+ readonly hub: string;
7
+ /** The local clone of a repository id. */
8
+ readonly cloneFor: (id: string) => string;
9
+ /** Every change set the hub holds: the ledger's history is trusted only against these. */
10
+ readonly heldChangeSets: readonly RepositoryChangeSet[];
11
+ readonly now: () => Date;
12
+ /** Runs advisor-execution-readiness; the hub's own bin by default. Not reachable from a CLI. */
13
+ readonly runReadiness?: ReadinessRunner;
14
+ }
15
+ /**
16
+ * The result as a planned bundle, or the same result when nothing approves it (P1). A repository with no change set keeps
17
+ * its entry. Throws when the planned bundle does not validate; nothing is written here.
18
+ */
19
+ export declare function plannedBundle(result: PlanApplyBundleResult, options: PlannedBundleOptions): Promise<PlanApplyBundleResult>;
20
+ //# sourceMappingURL=planned-bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planned-bundle.d.ts","sourceRoot":"","sources":["../src/planned-bundle.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAkC,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAStF,OAAO,KAAK,EAAkD,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAIpH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAE9D,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C,0FAA0F;IAC1F,QAAQ,CAAC,cAAc,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACxD,QAAQ,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC;IACzB,gGAAgG;IAChG,QAAQ,CAAC,YAAY,CAAC,EAAE,eAAe,CAAC;CACzC;AAwHD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,qBAAqB,EAAE,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAiChI"}
@@ -0,0 +1,191 @@
1
+ // Planned mode for `launcher-apply-plan plan` (issue #1708, RFC apply-approved-plan sections 4.2, 4.4 and 7).
2
+ //
3
+ // The planner and the dry tree produce a report: it claims no repository state and records no approval. This module turns
4
+ // that report into a planned bundle, but only when an approval binds exactly what was planned. Every ambiguity leaves the
5
+ // report as it is, or refuses; a rule is one of a fixed set of tokens and never carries tool output, a path, an id or a file
6
+ // name.
7
+ //
8
+ // P1. The result is planned only when the bundle says the plan is the committed one AND the hub's committed plan, read as a
9
+ // git object at an attached HEAD, is approved (readHubAuthority) for this very plan digest AND the bundle that approval
10
+ // names is one the hub holds, stored and verifying, for that plan digest (the same K2 read admission makes). An approval
11
+ // that names nothing the hub holds approves nothing this run could be bound by. Otherwise the result is returned
12
+ // untouched, so its bytes are what they were before this module existed.
13
+ // P2. A binding comes only from decideSetBinding, over the ledger this module reads at the set's base commit and trusts
14
+ // against the committed plan's acts (never the acts of the set being judged). Nothing here builds a binding by hand.
15
+ // P3. A repository that already carries a violated V3 (the planner's A4 flags: an authorization for another plan, or none)
16
+ // is not admitted, and no readiness check runs for it.
17
+ // P4. V3 is satisfied exactly when the set is bound. A refusal is V3 violated (exit 1) or indeterminate (exit 2), the rule is
18
+ // the refusal's fixed token, and the repository has no binding.
19
+ // P5. Planned mode reports V1, V2, V4, V5 and V7 as satisfied on every computed repository (a set that exists and validated
20
+ // has met them), and V9 as satisfied only for a set that changes no lockfile; the dry tree's V6 and V9 are kept.
21
+ // P6. A repository is `planned` when its verdict is satisfied and it has a binding (code rule A6). The bundle is validated
22
+ // again before it is returned. No set, digest or set byte moves: the bundle digest does not cover mode, state, binding
23
+ // or checks.
24
+ import { spawnSync } from "node:child_process";
25
+ import { realpathSync } from "node:fs";
26
+ import { decideSetBinding, planPackagesFor, readHubAuthority } from "./admission.js";
27
+ import { readStoredApplyBundle } from "./apply-store.js";
28
+ import { AUTHORIZATION_ABSENT, AUTHORIZATION_PLAN_MISMATCH, LEDGER_PATH, canonicalOrder, validateApplyBundle, worstVerdict, } from "./change-set-contract.js";
29
+ import { trustInstalledLedger } from "./ledger-trust.js";
30
+ import { derivedLockfile } from "./materialize.js";
31
+ const TOKEN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/u;
32
+ /** The V3 rule of a refusal whose token is not a fixed one, or is one the bundle may carry only for its own authorization condition. */
33
+ const AUTHORIZATION_NOT_CURRENT = "authorization-not-current";
34
+ /** The V3 rule of a base ledger that cannot be read as a regular file. */
35
+ const LEDGER_UNREADABLE = "ledger-unreadable";
36
+ /** The V3 rule of a base ledger whose generation is not the one the set was computed over. */
37
+ const LEDGER_MISMATCH = "ledger-mismatch";
38
+ /** The V9 rule of a set that changes a lockfile and whose dry tree left no provenance check. */
39
+ const PROVENANCE_NOT_RUN = "provenance-not-run";
40
+ /** Rules only the bundle's own authorization condition may name (code rule A4). */
41
+ const RESERVED_RULES = new Set([AUTHORIZATION_PLAN_MISMATCH, AUTHORIZATION_ABSENT]);
42
+ const sortChecks = (checks) => canonicalOrder(checks, (check) => [check.check, check.rule ?? ""]);
43
+ const satisfied = (check) => ({ check, verdict: "satisfied" });
44
+ // ---------------------------------------------------------------------------
45
+ // the base ledger, from git objects only
46
+ const DROPPED_GIT_ENV = ["GIT_DIR", "GIT_WORK_TREE", "GIT_INDEX_FILE", "GIT_OBJECT_DIRECTORY", "GIT_ALTERNATE_OBJECT_DIRECTORIES", "GIT_COMMON_DIR", "GIT_NAMESPACE", "GIT_PREFIX", "GIT_SHALLOW_FILE", "GIT_GRAFT_FILE"];
47
+ const OBJECT_ID = /^(?:[0-9a-f]{40}|[0-9a-f]{64})$/u;
48
+ /** Runs git with no repository named by the environment, no replace refs and literal pathspecs. Never throws. */
49
+ function runGit(cwd, args) {
50
+ const env = { ...process.env };
51
+ for (const name of DROPPED_GIT_ENV)
52
+ delete env[name];
53
+ env.GIT_LITERAL_PATHSPECS = "1";
54
+ env.GIT_TERMINAL_PROMPT = "0";
55
+ env.GIT_OPTIONAL_LOCKS = "0";
56
+ const run = spawnSync("git", ["--no-replace-objects", ...args], { cwd, env, stdio: ["ignore", "pipe", "ignore"], maxBuffer: 256 * 1024 * 1024 });
57
+ if (run.error !== undefined || run.stdout === null || run.stdout === undefined)
58
+ return { status: null, stdout: Buffer.alloc(0) };
59
+ return { status: run.status, stdout: run.stdout };
60
+ }
61
+ /**
62
+ * The base ledger's exact bytes at the set's base commit: null when the commit holds none, or when the commit cannot be
63
+ * read (materialize reads it the same way, and admission reads the base tree itself for every set that depends on it);
64
+ * "unreadable" when the path is there but is not one regular, non-executable blob, or the blob cannot be read.
65
+ */
66
+ function readBaseLedger(clone, baseCommit) {
67
+ if (!OBJECT_ID.test(baseCommit))
68
+ return null;
69
+ const listed = runGit(clone, ["ls-tree", "-z", "--full-tree", baseCommit, "--", LEDGER_PATH]);
70
+ if (listed.status !== 0)
71
+ return null;
72
+ const records = listed.stdout.toString("utf8").split("\0").filter((record) => record !== "");
73
+ if (records.length === 0)
74
+ return null;
75
+ if (records.length !== 1)
76
+ return "unreadable";
77
+ const record = records[0];
78
+ const tab = record.indexOf("\t");
79
+ if (tab === -1)
80
+ return "unreadable";
81
+ const [mode, type, oid, ...rest] = record.slice(0, tab).split(" ");
82
+ if (mode !== "100644" || type !== "blob" || oid === undefined || rest.length > 0 || !OBJECT_ID.test(oid) || record.slice(tab + 1) !== LEDGER_PATH)
83
+ return "unreadable";
84
+ const blob = runGit(clone, ["cat-file", "blob", oid]);
85
+ return blob.status === 0 ? blob.stdout : "unreadable";
86
+ }
87
+ /** The base ledger, trusted over the committed plan's acts (T9), and held to the generation the set was computed over. */
88
+ function trustedBaseLedger(clone, set, held, authority) {
89
+ const bytes = readBaseLedger(clone, set.repository.baseCommit);
90
+ if (bytes === "unreadable")
91
+ return { refused: { check: "V3", verdict: "indeterminate", rule: LEDGER_UNREADABLE } };
92
+ const trust = trustInstalledLedger(bytes === null || bytes.length === 0 ? null : bytes, { id: set.repository.id, nodeId: set.repository.nodeId }, held, {
93
+ planPackageActs: [{ planDigest: authority.planDigest, packages: planPackagesFor(authority, set.repository.id) }],
94
+ });
95
+ if (trust.state === "refused")
96
+ return { refused: { check: "V3", verdict: "indeterminate", rule: TOKEN.test(trust.rule) ? trust.rule : LEDGER_UNREADABLE } };
97
+ if ((trust.ledger?.generation ?? 0) !== set.ledger.generation)
98
+ return { refused: { check: "V3", verdict: "violated", rule: LEDGER_MISMATCH } };
99
+ return { ledger: trust.ledger, bytes: bytes === null || bytes.length === 0 ? null : bytes };
100
+ }
101
+ // ---------------------------------------------------------------------------
102
+ // V3 for one set
103
+ /** The V3 check of a refusal: exit 1 is violated, anything else indeterminate; the rule is its fixed detail, or its reason. */
104
+ function refusalCheck(refusal) {
105
+ const token = refusal.detail ?? refusal.reason;
106
+ const rule = TOKEN.test(token) && !RESERVED_RULES.has(token) ? token : AUTHORIZATION_NOT_CURRENT;
107
+ return { check: "V3", verdict: refusal.exitCode === 1 ? "violated" : "indeterminate", rule };
108
+ }
109
+ async function decideV3(entry, set, authority, options) {
110
+ let clone;
111
+ try {
112
+ clone = realpathSync(options.cloneFor(set.repository.id));
113
+ }
114
+ catch {
115
+ return { check: { check: "V3", verdict: "indeterminate", rule: "clone-unreadable" } };
116
+ }
117
+ const base = trustedBaseLedger(clone, set, options.heldChangeSets, authority);
118
+ if ("refused" in base)
119
+ return { check: base.refused };
120
+ const decided = await decideSetBinding({
121
+ hub: options.hub,
122
+ clone,
123
+ set,
124
+ authority,
125
+ baseLedger: base.ledger,
126
+ baseLedgerBytes: base.bytes,
127
+ now: options.now,
128
+ runReadiness: options.runReadiness,
129
+ });
130
+ if (decided.state !== "bound")
131
+ return { check: refusalCheck(decided) };
132
+ return { check: satisfied("V3"), binding: decided.binding };
133
+ }
134
+ // ---------------------------------------------------------------------------
135
+ // the bundle
136
+ /** Whether the hub stores, verified, the bundle the approval names, and it is for the approved plan's digest. A store that cannot be read holds nothing. */
137
+ function holdsApprovedBundle(hub, authority) {
138
+ try {
139
+ const approved = readStoredApplyBundle(hub, authority.subject);
140
+ return approved !== null && approved.bundleDigest === authority.subject && approved.plan.digest === authority.planDigest;
141
+ }
142
+ catch {
143
+ return false;
144
+ }
145
+ }
146
+ const PRE_APPLY = ["V1", "V2", "V3", "V4", "V5", "V6", "V7", "V8", "V9"];
147
+ /**
148
+ * The result as a planned bundle, or the same result when nothing approves it (P1). A repository with no change set keeps
149
+ * its entry. Throws when the planned bundle does not validate; nothing is written here.
150
+ */
151
+ export async function plannedBundle(result, options) {
152
+ if (!result.bundle.plan.committed)
153
+ return result;
154
+ const authority = readHubAuthority(options.hub);
155
+ if ("state" in authority || authority.planDigest !== result.bundle.plan.digest)
156
+ return result;
157
+ if (!holdsApprovedBundle(options.hub, authority))
158
+ return result;
159
+ const repositories = [];
160
+ for (const entry of result.bundle.repositories) {
161
+ if (!("changeSet" in entry)) {
162
+ repositories.push(entry);
163
+ continue;
164
+ }
165
+ const set = result.changeSets.find((candidate) => candidate.changeSetDigest === entry.changeSet);
166
+ if (set === undefined)
167
+ throw new Error("a repository names a change set the result does not hold");
168
+ const { state: _state, binding: _binding, ...rest } = entry;
169
+ // P3: the planner already refused this repository's authorization; no readiness runs and nothing is bound.
170
+ const flagged = rest.checks.some((check) => check.check === "V3");
171
+ const decided = flagged ? undefined : await decideV3(rest, set, authority, options);
172
+ const others = rest.checks.filter((check) => !(decided !== undefined && check.check === "V3"));
173
+ const added = [satisfied("V1"), satisfied("V2"), satisfied("V4"), satisfied("V5"), satisfied("V7")];
174
+ // P5: V9 is satisfied only for a set with no lockfile to regenerate; for any other set it stands as the dry tree left it, and is
175
+ // indeterminate when the dry tree ran no provenance check at all.
176
+ if (derivedLockfile(set) === null)
177
+ added.push(satisfied("V9"));
178
+ else
179
+ added.push({ check: "V9", verdict: "indeterminate", rule: PROVENANCE_NOT_RUN });
180
+ const checks = sortChecks([...others, ...(decided === undefined ? [] : [decided.check]), ...added.filter((check) => !others.some((existing) => existing.check === check.check))]);
181
+ const verdict = worstVerdict(checks.map((check) => check.verdict));
182
+ const binding = decided?.binding;
183
+ const planned = verdict === "satisfied" && binding !== undefined && PRE_APPLY.every((id) => checks.some((check) => check.check === id && check.verdict === "satisfied"));
184
+ repositories.push({ ...rest, verdict, checks, ...(binding === undefined ? {} : { binding }), ...(planned ? { state: "planned" } : {}) });
185
+ }
186
+ const bundle = { ...result.bundle, mode: "planned", repositories };
187
+ if (!validateApplyBundle(bundle).valid)
188
+ throw new Error("the planned bundle does not validate");
189
+ return { bundle, changeSets: result.changeSets };
190
+ }
191
+ //# sourceMappingURL=planned-bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"planned-bundle.js","sourceRoot":"","sources":["../src/planned-bundle.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,10 @@ export interface CloudBootstrapReport {
21
21
  * against `directory`. Never mutates anything, never runs `npm ci` itself
22
22
  * -- it checks that the manifest and lockfile are BOTH present, which is
23
23
  * the precondition a real `npm ci` needs, not a substitute for running it.
24
+ * An unsatisfied check is a readiness report, not a failure: a launcher run
25
+ * in the hub writes nothing into a product repository, whose `AGENTS.md`
26
+ * arrives only once it is staffed in an approved plan, with that plan's
27
+ * setup pull request.
24
28
  */
25
29
  export declare function checkCloudSessionBootstrap(host: WorkspaceHost, directory: string): CloudBootstrapReport;
26
30
  //# sourceMappingURL=product-repository.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"product-repository.d.ts","sourceRoot":"","sources":["../src/product-repository.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,kBAAkB,GAAG,gBAAgB,GAAG,YAAY,CAAC;IAClE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAOD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,oBAAoB,CAuCvG"}
1
+ {"version":3,"file":"product-repository.d.ts","sourceRoot":"","sources":["../src/product-repository.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,EAAE,kBAAkB,GAAG,gBAAgB,GAAG,YAAY,CAAC;IAClE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,mBAAmB,EAAE,CAAC;IAChD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAOD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,oBAAoB,CA4CvG"}
@@ -8,6 +8,10 @@ const HUB_MARKER_REL = join("clossys", ".state", "workspace.json");
8
8
  * against `directory`. Never mutates anything, never runs `npm ci` itself
9
9
  * -- it checks that the manifest and lockfile are BOTH present, which is
10
10
  * the precondition a real `npm ci` needs, not a substitute for running it.
11
+ * An unsatisfied check is a readiness report, not a failure: a launcher run
12
+ * in the hub writes nothing into a product repository, whose `AGENTS.md`
13
+ * arrives only once it is staffed in an approved plan, with that plan's
14
+ * setup pull request.
11
15
  */
12
16
  export function checkCloudSessionBootstrap(host, directory) {
13
17
  const hasManifest = host.exists(join(directory, PACKAGE_JSON_REL));
@@ -34,7 +38,11 @@ export function checkCloudSessionBootstrap(host, directory) {
34
38
  satisfied: agentsPointsAtClossys,
35
39
  ...(agentsPointsAtClossys
36
40
  ? {}
37
- : { note: agentsRaw === null ? "AGENTS.md does not exist at the repository root." : "AGENTS.md exists but does not mention clossys/." }),
41
+ : {
42
+ note: agentsRaw === null
43
+ ? "AGENTS.md does not exist at the repository root yet; a launcher run in the hub writes nothing here, and once this repository is staffed in an approved plan, AGENTS.md arrives with that plan's setup pull request."
44
+ : "AGENTS.md exists but does not mention clossys/.",
45
+ }),
38
46
  };
39
47
  const hasHubMarker = host.exists(join(directory, HUB_MARKER_REL));
40
48
  const markerCheck = {
@@ -1 +1 @@
1
- {"version":3,"file":"product-repository.js","sourceRoot":"","sources":["../src/product-repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAsBjC,MAAM,gBAAgB,GAAG,cAAc,CAAC;AACxC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAC7C,MAAM,aAAa,GAAG,WAAW,CAAC;AAClC,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAmB,EAAE,SAAiB;IAC/E,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAwB;QACzC,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,qDAAqD;QAC5D,SAAS,EAAE,WAAW,IAAI,OAAO;QACjC,GAAG,CAAC,WAAW,IAAI,OAAO;YACxB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,IAAI,EAAE,CAAC,WAAW,IAAI,CAAC,OAAO;oBAC5B,CAAC,CAAC,wDAAwD;oBAC1D,CAAC,CAAC,CAAC,WAAW;wBACZ,CAAC,CAAC,qDAAqD;wBACvD,CAAC,CAAC,0EAA0E;aACjF,CAAC;KACP,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAChE,MAAM,qBAAqB,GAAG,SAAS,KAAK,IAAI,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACnF,MAAM,WAAW,GAAwB;QACvC,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,gEAAgE;QACvE,SAAS,EAAE,qBAAqB;QAChC,GAAG,CAAC,qBAAqB;YACvB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,kDAAkD,CAAC,CAAC,CAAC,iDAAiD,EAAE,CAAC;KAC3I,CAAC;IAEF,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;IAClE,MAAM,WAAW,GAAwB;QACvC,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,2DAA2D;QAClE,SAAS,EAAE,YAAY;QACvB,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,mDAAmD,EAAE,CAAC;KACvF,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,aAAa,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACzD,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;AACvF,CAAC"}
1
+ {"version":3,"file":"product-repository.js","sourceRoot":"","sources":["../src/product-repository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAsBjC,MAAM,gBAAgB,GAAG,cAAc,CAAC;AACxC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC;AAC7C,MAAM,aAAa,GAAG,WAAW,CAAC;AAClC,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;AAEnE;;;;;;;;;GASG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAmB,EAAE,SAAiB;IAC/E,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACnE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAwB;QACzC,EAAE,EAAE,kBAAkB;QACtB,KAAK,EAAE,qDAAqD;QAC5D,SAAS,EAAE,WAAW,IAAI,OAAO;QACjC,GAAG,CAAC,WAAW,IAAI,OAAO;YACxB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,IAAI,EAAE,CAAC,WAAW,IAAI,CAAC,OAAO;oBAC5B,CAAC,CAAC,wDAAwD;oBAC1D,CAAC,CAAC,CAAC,WAAW;wBACZ,CAAC,CAAC,qDAAqD;wBACvD,CAAC,CAAC,0EAA0E;aACjF,CAAC;KACP,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAChE,MAAM,qBAAqB,GAAG,SAAS,KAAK,IAAI,IAAI,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACnF,MAAM,WAAW,GAAwB;QACvC,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,gEAAgE;QACvE,SAAS,EAAE,qBAAqB;QAChC,GAAG,CAAC,qBAAqB;YACvB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,IAAI,EACF,SAAS,KAAK,IAAI;oBAChB,CAAC,CAAC,qNAAqN;oBACvN,CAAC,CAAC,iDAAiD;aACxD,CAAC;KACP,CAAC;IAEF,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;IAClE,MAAM,WAAW,GAAwB;QACvC,EAAE,EAAE,YAAY;QAChB,KAAK,EAAE,2DAA2D;QAClE,SAAS,EAAE,YAAY;QACvB,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,mDAAmD,EAAE,CAAC;KACvF,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,aAAa,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACzD,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;AACvF,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { ApplyCheck, ChangeSetItem } from "./change-set-contract.js";
2
+ import type { LockfileSpawn } from "./lockfile-regen.js";
3
+ import type { RegistrySnapshot } from "./registry-snapshot.js";
4
+ /** The bin Integrator installs, found under the hub's node_modules/.bin. */
5
+ export declare const PROVENANCE_CHECK_BIN = "integrator-provenance-check";
6
+ /** How long one run of the bin may take. */
7
+ export declare const PROVENANCE_CHECK_TIMEOUT_MS = 120000;
8
+ /** Bytes kept of the bin's stdout; a report at or past this is treated as truncated. */
9
+ export declare const PROVENANCE_CHECK_MAX_BUFFER = 1000000;
10
+ export interface ProvenanceGateInput {
11
+ /** Absolute, real (realpath-equal) directory holding the set's materialized tree. */
12
+ readonly tree: string;
13
+ /** Absolute, real (realpath-equal) hub root, whose node_modules holds Integrator. */
14
+ readonly hubRoot: string;
15
+ /** The change set's items. */
16
+ readonly items: readonly ChangeSetItem[];
17
+ }
18
+ /** Ports. Not reachable from a CLI. */
19
+ export interface ProvenanceGatePorts {
20
+ readonly spawn?: LockfileSpawn;
21
+ }
22
+ /**
23
+ * The snapshot's digest, as docs/contracts/registry-snapshot.json defines it
24
+ * (in the public repository, not shipped in this package): `sha256:` and the
25
+ * SHA-256 of the canonical JSON of `{registry, packages}`, packages sorted by
26
+ * name, each reduced to name, status, latest and versions, versions sorted by
27
+ * version and kept whole. fetchedAt, fetchedBy, responseSha256, schemaVersion
28
+ * and kind are left out. Throws TypeError for a snapshot that does not validate
29
+ * against the contract: an invalid snapshot has no digest. The gate itself
30
+ * does not read a snapshot; this is exported for the plan binding that a later
31
+ * change wires in.
32
+ */
33
+ export declare function registrySnapshotDigest(snapshot: RegistrySnapshot): string;
34
+ /**
35
+ * V9 for one change set. Satisfied without touching anything when the set
36
+ * installs or pins nothing its base lacks. Otherwise runs the hub's
37
+ * `integrator-provenance-check` against `tree` and judges each gated package
38
+ * by exact name and exact version: satisfied only when every one is verified
39
+ * at that version, with no exception for an unverified one. Other `@clossys`
40
+ * packages in the report never gate: an unrelated violated legacy pin passes
41
+ * when every gated package is verified. Indeterminate wins over violated; the
42
+ * result lists each distinct rule once, in code-unit order, and never mixes a
43
+ * satisfied entry with a refusal. Never throws for a bad input; everything it
44
+ * cannot rely on is an indeterminate entry. The input carries no ledger or
45
+ * snapshot: nothing here reads one.
46
+ */
47
+ export declare function checkSetProvenance(input: ProvenanceGateInput, ports?: ProvenanceGatePorts): Promise<readonly ApplyCheck[]>;
48
+ //# sourceMappingURL=provenance-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance-gate.d.ts","sourceRoot":"","sources":["../src/provenance-gate.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAI1E,OAAO,KAAK,EAAE,aAAa,EAAuB,MAAM,qBAAqB,CAAC;AAK9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,gCAAgC,CAAC;AAClE,4CAA4C;AAC5C,eAAO,MAAM,2BAA2B,SAAU,CAAC;AACnD,wFAAwF;AACxF,eAAO,MAAM,2BAA2B,UAAY,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,qFAAqF;IACrF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,qFAAqF;IACrF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,8BAA8B;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;CAC1C;AAED,uCAAuC;AACvC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;CAChC;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAOzE;AA4KD;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,GAAE,mBAAwB,GAAG,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC,CA6EpI"}