@agent-teams/engineering-foundation 0.6.0 → 0.8.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 (280) hide show
  1. package/README.md +6 -2
  2. package/dist/capabilities/contract-protobuf-evolution/adapters/outbound/crypto/node-sha256-digest.d.ts +6 -0
  3. package/dist/capabilities/contract-protobuf-evolution/adapters/outbound/crypto/node-sha256-digest.d.ts.map +1 -0
  4. package/dist/capabilities/contract-protobuf-evolution/adapters/outbound/crypto/node-sha256-digest.js +7 -0
  5. package/dist/capabilities/contract-protobuf-evolution/adapters/outbound/crypto/node-sha256-digest.js.map +1 -0
  6. package/dist/capabilities/contract-protobuf-evolution/adapters/outbound/qualification/filesystem-buf-breaking-qualification-evidence.d.ts +8 -0
  7. package/dist/capabilities/contract-protobuf-evolution/adapters/outbound/qualification/filesystem-buf-breaking-qualification-evidence.d.ts.map +1 -0
  8. package/dist/capabilities/contract-protobuf-evolution/adapters/outbound/qualification/filesystem-buf-breaking-qualification-evidence.js +131 -0
  9. package/dist/capabilities/contract-protobuf-evolution/adapters/outbound/qualification/filesystem-buf-breaking-qualification-evidence.js.map +1 -0
  10. package/dist/capabilities/contract-protobuf-evolution/application/model/buf-breaking-qualification.d.ts +37 -0
  11. package/dist/capabilities/contract-protobuf-evolution/application/model/buf-breaking-qualification.d.ts.map +1 -0
  12. package/dist/capabilities/contract-protobuf-evolution/application/model/buf-breaking-qualification.js +258 -0
  13. package/dist/capabilities/contract-protobuf-evolution/application/model/buf-breaking-qualification.js.map +1 -0
  14. package/dist/capabilities/contract-protobuf-evolution/application/model/protobuf-release-evidence.d.ts +52 -2
  15. package/dist/capabilities/contract-protobuf-evolution/application/model/protobuf-release-evidence.d.ts.map +1 -1
  16. package/dist/capabilities/contract-protobuf-evolution/application/policies/evaluate-protobuf-evolution.d.ts.map +1 -1
  17. package/dist/capabilities/contract-protobuf-evolution/application/policies/evaluate-protobuf-evolution.js +0 -3
  18. package/dist/capabilities/contract-protobuf-evolution/application/policies/evaluate-protobuf-evolution.js.map +1 -1
  19. package/dist/capabilities/contract-protobuf-evolution/application/ports/buf-breaking-qualification-evidence.d.ts +14 -0
  20. package/dist/capabilities/contract-protobuf-evolution/application/ports/buf-breaking-qualification-evidence.d.ts.map +1 -0
  21. package/dist/capabilities/contract-protobuf-evolution/application/ports/buf-breaking-qualification-evidence.js +2 -0
  22. package/dist/capabilities/contract-protobuf-evolution/application/ports/buf-breaking-qualification-evidence.js.map +1 -0
  23. package/dist/capabilities/contract-protobuf-evolution/application/ports/sha256-digest.d.ts +5 -0
  24. package/dist/capabilities/contract-protobuf-evolution/application/ports/sha256-digest.d.ts.map +1 -0
  25. package/dist/capabilities/contract-protobuf-evolution/application/ports/sha256-digest.js +2 -0
  26. package/dist/capabilities/contract-protobuf-evolution/application/ports/sha256-digest.js.map +1 -0
  27. package/dist/capabilities/contract-protobuf-evolution/application/use-cases/resolve-protobuf-evolution-policy.d.ts +2 -0
  28. package/dist/capabilities/contract-protobuf-evolution/application/use-cases/resolve-protobuf-evolution-policy.d.ts.map +1 -1
  29. package/dist/capabilities/contract-protobuf-evolution/application/use-cases/resolve-protobuf-evolution-policy.js +10 -1
  30. package/dist/capabilities/contract-protobuf-evolution/application/use-cases/resolve-protobuf-evolution-policy.js.map +1 -1
  31. package/dist/capabilities/contract-protobuf-evolution/contract/config.d.ts +1 -1
  32. package/dist/capabilities/contract-protobuf-evolution/contract/config.d.ts.map +1 -1
  33. package/dist/capabilities/contract-protobuf-evolution/contract/config.js +33 -18
  34. package/dist/capabilities/contract-protobuf-evolution/contract/config.js.map +1 -1
  35. package/dist/capabilities/contract-protobuf-evolution/module.d.ts +3 -1
  36. package/dist/capabilities/contract-protobuf-evolution/module.d.ts.map +1 -1
  37. package/dist/capabilities/contract-protobuf-evolution/module.js +4 -1
  38. package/dist/capabilities/contract-protobuf-evolution/module.js.map +1 -1
  39. package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/filesystem/filesystem-buf-qualification-artifacts.d.ts +21 -0
  40. package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/filesystem/filesystem-buf-qualification-artifacts.d.ts.map +1 -0
  41. package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/filesystem/filesystem-buf-qualification-artifacts.js +301 -0
  42. package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/filesystem/filesystem-buf-qualification-artifacts.js.map +1 -0
  43. package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-executable.d.ts +2 -0
  44. package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-executable.d.ts.map +1 -1
  45. package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-executable.js +28 -41
  46. package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-executable.js.map +1 -1
  47. package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-qualification-runner.d.ts +8 -0
  48. package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-qualification-runner.d.ts.map +1 -0
  49. package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-qualification-runner.js +102 -0
  50. package/dist/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-qualification-runner.js.map +1 -0
  51. package/dist/capabilities/contract-protobuf-evolution/qualification/module.d.ts +14 -0
  52. package/dist/capabilities/contract-protobuf-evolution/qualification/module.d.ts.map +1 -1
  53. package/dist/capabilities/contract-protobuf-evolution/qualification/module.js +22 -0
  54. package/dist/capabilities/contract-protobuf-evolution/qualification/module.js.map +1 -1
  55. package/dist/capabilities/contract-protobuf-evolution/qualification/ports/buf-qualification-artifacts.d.ts +21 -0
  56. package/dist/capabilities/contract-protobuf-evolution/qualification/ports/buf-qualification-artifacts.d.ts.map +1 -0
  57. package/dist/capabilities/contract-protobuf-evolution/qualification/ports/buf-qualification-artifacts.js +2 -0
  58. package/dist/capabilities/contract-protobuf-evolution/qualification/ports/buf-qualification-artifacts.js.map +1 -0
  59. package/dist/capabilities/contract-protobuf-evolution/qualification/ports/buf-qualification-runner.d.ts +18 -0
  60. package/dist/capabilities/contract-protobuf-evolution/qualification/ports/buf-qualification-runner.d.ts.map +1 -0
  61. package/dist/capabilities/contract-protobuf-evolution/qualification/ports/buf-qualification-runner.js +2 -0
  62. package/dist/capabilities/contract-protobuf-evolution/qualification/ports/buf-qualification-runner.js.map +1 -0
  63. package/dist/capabilities/contract-protobuf-evolution/qualification/use-cases/qualify-buf-breaking-evidence.d.ts +22 -0
  64. package/dist/capabilities/contract-protobuf-evolution/qualification/use-cases/qualify-buf-breaking-evidence.d.ts.map +1 -0
  65. package/dist/capabilities/contract-protobuf-evolution/qualification/use-cases/qualify-buf-breaking-evidence.js +221 -0
  66. package/dist/capabilities/contract-protobuf-evolution/qualification/use-cases/qualify-buf-breaking-evidence.js.map +1 -0
  67. package/dist/capabilities/source-dependencies/application/model/source-workspace.d.ts +2 -6
  68. package/dist/capabilities/source-dependencies/application/model/source-workspace.d.ts.map +1 -1
  69. package/dist/capabilities/source-dependencies/application/model/source-workspace.js +0 -1
  70. package/dist/capabilities/source-dependencies/application/model/source-workspace.js.map +1 -1
  71. package/dist/capabilities/source-dependencies/application/policies/evaluate-resolved-source-dependency.d.ts.map +1 -1
  72. package/dist/capabilities/source-dependencies/application/policies/evaluate-resolved-source-dependency.js +1 -3
  73. package/dist/capabilities/source-dependencies/application/policies/evaluate-resolved-source-dependency.js.map +1 -1
  74. package/dist/capabilities/source-dependencies/application/policies/evaluate-source-dependencies.d.ts.map +1 -1
  75. package/dist/capabilities/source-dependencies/application/policies/evaluate-source-dependencies.js +1 -6
  76. package/dist/capabilities/source-dependencies/application/policies/evaluate-source-dependencies.js.map +1 -1
  77. package/dist/capabilities/source-dependencies/application/rules.js +2 -2
  78. package/dist/capabilities/source-dependencies/application/rules.js.map +1 -1
  79. package/dist/capabilities/source-dependencies/application/use-cases/analyze-source-dependencies.d.ts.map +1 -1
  80. package/dist/capabilities/source-dependencies/application/use-cases/analyze-source-dependencies.js +1 -3
  81. package/dist/capabilities/source-dependencies/application/use-cases/analyze-source-dependencies.js.map +1 -1
  82. package/dist/capabilities/source-dependencies/contract/config.d.ts +1 -1
  83. package/dist/capabilities/source-dependencies/contract/config.d.ts.map +1 -1
  84. package/dist/capabilities/source-dependencies/contract/config.js +17 -25
  85. package/dist/capabilities/source-dependencies/contract/config.js.map +1 -1
  86. package/dist/cli-arguments.d.ts +2 -0
  87. package/dist/cli-arguments.d.ts.map +1 -1
  88. package/dist/cli-arguments.js +34 -2
  89. package/dist/cli-arguments.js.map +1 -1
  90. package/dist/cli.js +40 -1
  91. package/dist/cli.js.map +1 -1
  92. package/dist/scaffolding/adapters/memory/memory-workspace.js +1 -1
  93. package/dist/scaffolding/adapters/memory/memory-workspace.js.map +1 -1
  94. package/dist/scaffolding/adapters/node/filesystem-authority-workspace.d.ts +13 -0
  95. package/dist/scaffolding/adapters/node/filesystem-authority-workspace.d.ts.map +1 -0
  96. package/dist/scaffolding/adapters/node/filesystem-authority-workspace.js +257 -0
  97. package/dist/scaffolding/adapters/node/filesystem-authority-workspace.js.map +1 -0
  98. package/dist/scaffolding/adapters/node/filesystem-authority.d.ts +20 -0
  99. package/dist/scaffolding/adapters/node/filesystem-authority.d.ts.map +1 -0
  100. package/dist/scaffolding/adapters/node/filesystem-authority.js +55 -0
  101. package/dist/scaffolding/adapters/node/filesystem-authority.js.map +1 -0
  102. package/dist/scaffolding/adapters/node/filesystem-file-identity.d.ts +20 -0
  103. package/dist/scaffolding/adapters/node/filesystem-file-identity.d.ts.map +1 -0
  104. package/dist/scaffolding/adapters/node/filesystem-file-identity.js +122 -0
  105. package/dist/scaffolding/adapters/node/filesystem-file-identity.js.map +1 -0
  106. package/dist/scaffolding/adapters/node/filesystem-finalization.d.ts +22 -0
  107. package/dist/scaffolding/adapters/node/filesystem-finalization.d.ts.map +1 -0
  108. package/dist/scaffolding/adapters/node/filesystem-finalization.js +169 -0
  109. package/dist/scaffolding/adapters/node/filesystem-finalization.js.map +1 -0
  110. package/dist/scaffolding/adapters/node/filesystem-journal-state.d.ts +25 -0
  111. package/dist/scaffolding/adapters/node/filesystem-journal-state.d.ts.map +1 -0
  112. package/dist/scaffolding/adapters/node/filesystem-journal-state.js +119 -0
  113. package/dist/scaffolding/adapters/node/filesystem-journal-state.js.map +1 -0
  114. package/dist/scaffolding/adapters/node/filesystem-journal.d.ts +7 -4
  115. package/dist/scaffolding/adapters/node/filesystem-journal.d.ts.map +1 -1
  116. package/dist/scaffolding/adapters/node/filesystem-journal.js +104 -29
  117. package/dist/scaffolding/adapters/node/filesystem-journal.js.map +1 -1
  118. package/dist/scaffolding/adapters/node/filesystem-operation-state.d.ts +23 -0
  119. package/dist/scaffolding/adapters/node/filesystem-operation-state.d.ts.map +1 -0
  120. package/dist/scaffolding/adapters/node/filesystem-operation-state.js +182 -0
  121. package/dist/scaffolding/adapters/node/filesystem-operation-state.js.map +1 -0
  122. package/dist/scaffolding/adapters/node/filesystem-path-guard.d.ts +2 -2
  123. package/dist/scaffolding/adapters/node/filesystem-path-guard.d.ts.map +1 -1
  124. package/dist/scaffolding/adapters/node/filesystem-path-guard.js.map +1 -1
  125. package/dist/scaffolding/adapters/node/filesystem-rendering-journal.d.ts +6 -0
  126. package/dist/scaffolding/adapters/node/filesystem-rendering-journal.d.ts.map +1 -0
  127. package/dist/scaffolding/adapters/node/filesystem-rendering-journal.js +80 -0
  128. package/dist/scaffolding/adapters/node/filesystem-rendering-journal.js.map +1 -0
  129. package/dist/scaffolding/adapters/node/filesystem-workspace.d.ts +1 -0
  130. package/dist/scaffolding/adapters/node/filesystem-workspace.d.ts.map +1 -1
  131. package/dist/scaffolding/adapters/node/filesystem-workspace.js +22 -151
  132. package/dist/scaffolding/adapters/node/filesystem-workspace.js.map +1 -1
  133. package/dist/scaffolding/adapters/node/node-authority-error.d.ts +4 -0
  134. package/dist/scaffolding/adapters/node/node-authority-error.d.ts.map +1 -0
  135. package/dist/scaffolding/adapters/node/node-authority-error.js +7 -0
  136. package/dist/scaffolding/adapters/node/node-authority-error.js.map +1 -0
  137. package/dist/scaffolding/adapters/node/node-authority-input-loader.d.ts +20 -0
  138. package/dist/scaffolding/adapters/node/node-authority-input-loader.d.ts.map +1 -0
  139. package/dist/scaffolding/adapters/node/node-authority-input-loader.js +180 -0
  140. package/dist/scaffolding/adapters/node/node-authority-input-loader.js.map +1 -0
  141. package/dist/scaffolding/adapters/node/node-authority-receipt-validator.d.ts +4 -0
  142. package/dist/scaffolding/adapters/node/node-authority-receipt-validator.d.ts.map +1 -0
  143. package/dist/scaffolding/adapters/node/node-authority-receipt-validator.js +10 -0
  144. package/dist/scaffolding/adapters/node/node-authority-receipt-validator.js.map +1 -0
  145. package/dist/scaffolding/adapters/node/node-input-loader.d.ts +1 -1
  146. package/dist/scaffolding/adapters/node/node-input-loader.d.ts.map +1 -1
  147. package/dist/scaffolding/adapters/node/node-input-loader.js +6 -56
  148. package/dist/scaffolding/adapters/node/node-input-loader.js.map +1 -1
  149. package/dist/scaffolding/adapters/node/node-owner-document-resolver.d.ts +17 -0
  150. package/dist/scaffolding/adapters/node/node-owner-document-resolver.d.ts.map +1 -0
  151. package/dist/scaffolding/adapters/node/node-owner-document-resolver.js +161 -0
  152. package/dist/scaffolding/adapters/node/node-owner-document-resolver.js.map +1 -0
  153. package/dist/scaffolding/adapters/node/node-plan-authority.d.ts +14 -2
  154. package/dist/scaffolding/adapters/node/node-plan-authority.d.ts.map +1 -1
  155. package/dist/scaffolding/adapters/node/node-plan-authority.js +28 -9
  156. package/dist/scaffolding/adapters/node/node-plan-authority.js.map +1 -1
  157. package/dist/scaffolding/adapters/node/node-receipt-validator.d.ts +1 -1
  158. package/dist/scaffolding/adapters/node/node-receipt-validator.d.ts.map +1 -1
  159. package/dist/scaffolding/adapters/node/node-receipt-validator.js +2 -2
  160. package/dist/scaffolding/adapters/node/node-receipt-validator.js.map +1 -1
  161. package/dist/scaffolding/adapters/node/node-rendering-plan-authority.d.ts +3 -0
  162. package/dist/scaffolding/adapters/node/node-rendering-plan-authority.d.ts.map +1 -0
  163. package/dist/scaffolding/adapters/node/node-rendering-plan-authority.js +18 -0
  164. package/dist/scaffolding/adapters/node/node-rendering-plan-authority.js.map +1 -0
  165. package/dist/scaffolding/adapters/node/node-repository-file.d.ts +9 -0
  166. package/dist/scaffolding/adapters/node/node-repository-file.d.ts.map +1 -0
  167. package/dist/scaffolding/adapters/node/node-repository-file.js +65 -0
  168. package/dist/scaffolding/adapters/node/node-repository-file.js.map +1 -0
  169. package/dist/scaffolding/adapters/node/node-scaffold-limits.d.ts +2 -0
  170. package/dist/scaffolding/adapters/node/node-scaffold-limits.d.ts.map +1 -0
  171. package/dist/scaffolding/adapters/node/node-scaffold-limits.js +2 -0
  172. package/dist/scaffolding/adapters/node/node-scaffold-limits.js.map +1 -0
  173. package/dist/scaffolding/authority-service.d.ts +7 -0
  174. package/dist/scaffolding/authority-service.d.ts.map +1 -0
  175. package/dist/scaffolding/authority-service.js +15 -0
  176. package/dist/scaffolding/authority-service.js.map +1 -0
  177. package/dist/scaffolding/canonical-api.d.ts +14 -0
  178. package/dist/scaffolding/canonical-api.d.ts.map +1 -0
  179. package/dist/scaffolding/canonical-api.js +32 -0
  180. package/dist/scaffolding/canonical-api.js.map +1 -0
  181. package/dist/scaffolding/cli-command.d.ts.map +1 -1
  182. package/dist/scaffolding/cli-command.js +1 -2
  183. package/dist/scaffolding/cli-command.js.map +1 -1
  184. package/dist/scaffolding/contract/receipt-authority-types.d.ts +125 -0
  185. package/dist/scaffolding/contract/receipt-authority-types.d.ts.map +1 -0
  186. package/dist/scaffolding/contract/receipt-authority-types.js +2 -0
  187. package/dist/scaffolding/contract/receipt-authority-types.js.map +1 -0
  188. package/dist/scaffolding/contract/scaffold-contract.d.ts +329 -0
  189. package/dist/scaffolding/contract/scaffold-contract.d.ts.map +1 -0
  190. package/dist/scaffolding/contract/scaffold-contract.js +2 -0
  191. package/dist/scaffolding/contract/scaffold-contract.js.map +1 -0
  192. package/dist/scaffolding/contract/types.d.ts +177 -35
  193. package/dist/scaffolding/contract/types.d.ts.map +1 -1
  194. package/dist/scaffolding/definitions/node-typescript-library.d.ts +3 -0
  195. package/dist/scaffolding/definitions/node-typescript-library.d.ts.map +1 -0
  196. package/dist/scaffolding/definitions/node-typescript-library.js +134 -0
  197. package/dist/scaffolding/definitions/node-typescript-library.js.map +1 -0
  198. package/dist/scaffolding/definitions/registry.d.ts +2 -1
  199. package/dist/scaffolding/definitions/registry.d.ts.map +1 -1
  200. package/dist/scaffolding/definitions/registry.js +8 -1
  201. package/dist/scaffolding/definitions/registry.js.map +1 -1
  202. package/dist/scaffolding/index.d.ts +4 -8
  203. package/dist/scaffolding/index.d.ts.map +1 -1
  204. package/dist/scaffolding/index.js +2 -7
  205. package/dist/scaffolding/index.js.map +1 -1
  206. package/dist/scaffolding/internal-rendering-regression-api.d.ts +8 -0
  207. package/dist/scaffolding/internal-rendering-regression-api.d.ts.map +1 -0
  208. package/dist/scaffolding/internal-rendering-regression-api.js +8 -0
  209. package/dist/scaffolding/internal-rendering-regression-api.js.map +1 -0
  210. package/dist/scaffolding/kernel/authority-compiler.d.ts +4 -0
  211. package/dist/scaffolding/kernel/authority-compiler.d.ts.map +1 -0
  212. package/dist/scaffolding/kernel/authority-compiler.js +78 -0
  213. package/dist/scaffolding/kernel/authority-compiler.js.map +1 -0
  214. package/dist/scaffolding/kernel/authority-evidence.d.ts +13 -0
  215. package/dist/scaffolding/kernel/authority-evidence.d.ts.map +1 -0
  216. package/dist/scaffolding/kernel/authority-evidence.js +79 -0
  217. package/dist/scaffolding/kernel/authority-evidence.js.map +1 -0
  218. package/dist/scaffolding/kernel/authority-receipt.d.ts +11 -0
  219. package/dist/scaffolding/kernel/authority-receipt.d.ts.map +1 -0
  220. package/dist/scaffolding/kernel/authority-receipt.js +189 -0
  221. package/dist/scaffolding/kernel/authority-receipt.js.map +1 -0
  222. package/dist/scaffolding/kernel/compiler.d.ts +28 -2
  223. package/dist/scaffolding/kernel/compiler.d.ts.map +1 -1
  224. package/dist/scaffolding/kernel/compiler.js +22 -36
  225. package/dist/scaffolding/kernel/compiler.js.map +1 -1
  226. package/dist/scaffolding/kernel/definition-registry.d.ts +6 -3
  227. package/dist/scaffolding/kernel/definition-registry.d.ts.map +1 -1
  228. package/dist/scaffolding/kernel/definition-registry.js +17 -1
  229. package/dist/scaffolding/kernel/definition-registry.js.map +1 -1
  230. package/dist/scaffolding/kernel/plan-content-validation.d.ts +3 -0
  231. package/dist/scaffolding/kernel/plan-content-validation.d.ts.map +1 -0
  232. package/dist/scaffolding/kernel/plan-content-validation.js +44 -0
  233. package/dist/scaffolding/kernel/plan-content-validation.js.map +1 -0
  234. package/dist/scaffolding/kernel/plan-validation.d.ts +2 -2
  235. package/dist/scaffolding/kernel/plan-validation.d.ts.map +1 -1
  236. package/dist/scaffolding/kernel/plan-validation.js +16 -40
  237. package/dist/scaffolding/kernel/plan-validation.js.map +1 -1
  238. package/dist/scaffolding/kernel/receipt.js +1 -1
  239. package/dist/scaffolding/kernel/receipt.js.map +1 -1
  240. package/dist/scaffolding/kernel/rendering-plan-compiler.d.ts +4 -0
  241. package/dist/scaffolding/kernel/rendering-plan-compiler.d.ts.map +1 -0
  242. package/dist/scaffolding/kernel/rendering-plan-compiler.js +43 -0
  243. package/dist/scaffolding/kernel/rendering-plan-compiler.js.map +1 -0
  244. package/dist/scaffolding/kernel/rendering-plan-validation.d.ts +3 -0
  245. package/dist/scaffolding/kernel/rendering-plan-validation.d.ts.map +1 -0
  246. package/dist/scaffolding/kernel/rendering-plan-validation.js +10 -0
  247. package/dist/scaffolding/kernel/rendering-plan-validation.js.map +1 -0
  248. package/dist/scaffolding/scaffold-defaults.d.ts +2 -0
  249. package/dist/scaffolding/scaffold-defaults.d.ts.map +1 -0
  250. package/dist/scaffolding/scaffold-defaults.js +2 -0
  251. package/dist/scaffolding/scaffold-defaults.js.map +1 -0
  252. package/dist/scaffolding/scaffold-error.d.ts +3 -3
  253. package/dist/scaffolding/scaffold-error.d.ts.map +1 -1
  254. package/dist/scaffolding/scaffold-error.js.map +1 -1
  255. package/dist/scaffolding/service.d.ts +1 -1
  256. package/dist/scaffolding/service.d.ts.map +1 -1
  257. package/dist/scaffolding/service.js +5 -4
  258. package/dist/scaffolding/service.js.map +1 -1
  259. package/dist/schema-catalog.d.ts +2 -2
  260. package/dist/schema-catalog.d.ts.map +1 -1
  261. package/dist/schema-catalog.js +41 -8
  262. package/dist/schema-catalog.js.map +1 -1
  263. package/dist/schema-ids.d.ts +5 -1
  264. package/dist/schema-ids.d.ts.map +1 -1
  265. package/dist/schema-ids.js +14 -3
  266. package/dist/schema-ids.js.map +1 -1
  267. package/package.json +30 -2
  268. package/schemas/architecture-source-dependencies/v1.schema.json +6 -1
  269. package/schemas/contract-protobuf-breaking-qualification/v1.schema.json +89 -0
  270. package/schemas/contract-protobuf-breaking-qualification/v2.schema.json +93 -0
  271. package/schemas/contract-protobuf-evolution/v2.schema.json +147 -0
  272. package/schemas/scaffold-authority-evidence.schema.json +103 -0
  273. package/schemas/{scaffold-intent/v1.schema.json → scaffold-intent.schema.json} +2 -2
  274. package/schemas/{scaffold-plan/v1.schema.json → scaffold-plan.schema.json} +89 -11
  275. package/schemas/scaffold-receipt.schema.json +180 -0
  276. package/schemas/scaffold-recovery-journal.schema.json +31 -0
  277. package/schemas/{scaffold-target-catalog/v1.schema.json → scaffold-target-catalog.schema.json} +11 -10
  278. package/schemas/{scaffolding-config/v1.schema.json → scaffolding-config.schema.json} +40 -4
  279. package/schemas/architecture-source-dependencies/v2.schema.json +0 -102
  280. package/schemas/scaffold-receipt/v1.schema.json +0 -299
@@ -0,0 +1,301 @@
1
+ import { open, mkdir, mkdtemp, realpath, rename, rm, stat } from "node:fs/promises";
2
+ import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
3
+ import { setTimeout as wait } from "node:timers/promises";
4
+ import { lock } from "proper-lockfile";
5
+ import { CapabilityInputError } from "../../../../../../capability-runtime.js";
6
+ import { assertNotCancelled } from "../../../../../../cancellation.js";
7
+ import { ContainedFileReadError, pathTraversesSymbolicLink, readContainedRegularFile } from "../../../../../../filesystem-path-safety.js";
8
+ const MAX_EVIDENCE_BYTES = 8 * 1024 * 1024;
9
+ const WRITE_LOCK_OPTIONS = Object.freeze({
10
+ realpath: false,
11
+ retries: 0,
12
+ stale: 30_000,
13
+ update: 10_000
14
+ });
15
+ const WRITE_LOCK_RETRIES = 30;
16
+ const WRITE_LOCK_MIN_DELAY_MS = 25;
17
+ const WRITE_LOCK_MAX_DELAY_MS = 100;
18
+ const WRITE_LOCK_BACKOFF = 1.2;
19
+ function inputError(code, message) {
20
+ throw qualificationError(code, message);
21
+ }
22
+ function qualificationError(code, message) {
23
+ return new CapabilityInputError({
24
+ code,
25
+ message,
26
+ phase: "protobuf-buf-qualification-artifacts",
27
+ retryable: false
28
+ });
29
+ }
30
+ function errorCode(error) {
31
+ return typeof error === "object" && error !== null && "code" in error
32
+ ? String(error.code)
33
+ : undefined;
34
+ }
35
+ function errorObject(error, message) {
36
+ return error instanceof Error ? error : new Error(message, { cause: error });
37
+ }
38
+ function contained(root, candidate) {
39
+ const relation = relative(root, candidate);
40
+ return (relation === "" ||
41
+ (!isAbsolute(relation) && relation !== ".." && !relation.startsWith(`..${sep}`)));
42
+ }
43
+ function readFailure(error, path, optional) {
44
+ if (optional && error.failure === "missing") {
45
+ return undefined;
46
+ }
47
+ inputError(error.failure === "symlink" || error.failure === "escape"
48
+ ? "BUF_QUALIFICATION_PATH_UNSAFE"
49
+ : "BUF_QUALIFICATION_INPUT_UNAVAILABLE", `Qualification artifact is unavailable, unsafe, or changed while reading: ${path}.`);
50
+ }
51
+ async function readContained(input) {
52
+ try {
53
+ return await readContainedRegularFile({
54
+ candidate: resolve(input.consumerRoot, input.path),
55
+ maxBytes: input.maxBytes,
56
+ root: input.consumerRoot
57
+ });
58
+ }
59
+ catch (error) {
60
+ if (!(error instanceof ContainedFileReadError)) {
61
+ throw error;
62
+ }
63
+ readFailure(error, input.path, input.optional);
64
+ return undefined;
65
+ }
66
+ }
67
+ async function assertSafeCandidate(target) {
68
+ if ((await pathTraversesSymbolicLink(target.root, target.parent)) ||
69
+ (await pathTraversesSymbolicLink(target.root, target.candidate))) {
70
+ inputError("BUF_QUALIFICATION_PATH_UNSAFE", "Evidence target cannot traverse a symbolic link.");
71
+ }
72
+ const canonicalParent = await realpath(target.parent);
73
+ const parentMetadata = await stat(canonicalParent, { bigint: true });
74
+ if (canonicalParent !== target.parent ||
75
+ !contained(target.root, canonicalParent) ||
76
+ !parentMetadata.isDirectory() ||
77
+ String(parentMetadata.dev) !== target.parentDevice ||
78
+ String(parentMetadata.ino) !== target.parentInode) {
79
+ inputError("BUF_QUALIFICATION_PATH_UNSAFE", "Evidence directory identity changed during qualification.");
80
+ }
81
+ try {
82
+ const metadata = await stat(target.candidate);
83
+ if (!metadata.isFile()) {
84
+ inputError("BUF_QUALIFICATION_PATH_UNSAFE", "Evidence target must be a regular file.");
85
+ }
86
+ }
87
+ catch (error) {
88
+ if (errorCode(error) !== "ENOENT") {
89
+ throw error;
90
+ }
91
+ }
92
+ }
93
+ async function canonicalWriteTarget(consumerRoot, path) {
94
+ const root = await realpath(consumerRoot);
95
+ const lexicalCandidate = resolve(root, path);
96
+ if (!contained(root, lexicalCandidate)) {
97
+ inputError("BUF_QUALIFICATION_PATH_UNSAFE", "Evidence path escapes the consumer repository.");
98
+ }
99
+ const parent = dirname(lexicalCandidate);
100
+ if (await pathTraversesSymbolicLink(root, parent)) {
101
+ inputError("BUF_QUALIFICATION_PATH_UNSAFE", "Evidence directory cannot traverse a symbolic link.");
102
+ }
103
+ await mkdir(parent, { recursive: true });
104
+ if (await pathTraversesSymbolicLink(root, parent)) {
105
+ inputError("BUF_QUALIFICATION_PATH_UNSAFE", "Evidence directory cannot traverse a symbolic link.");
106
+ }
107
+ const canonicalParent = await realpath(parent);
108
+ const parentMetadata = await stat(canonicalParent, { bigint: true });
109
+ if (!contained(root, canonicalParent) || !parentMetadata.isDirectory()) {
110
+ inputError("BUF_QUALIFICATION_PATH_UNSAFE", "Evidence directory escapes the consumer repository.");
111
+ }
112
+ const target = {
113
+ candidate: join(canonicalParent, basename(lexicalCandidate)),
114
+ parent: canonicalParent,
115
+ parentDevice: String(parentMetadata.dev),
116
+ parentInode: String(parentMetadata.ino),
117
+ root
118
+ };
119
+ await assertSafeCandidate(target);
120
+ return target;
121
+ }
122
+ async function flushParentDirectory(parent) {
123
+ if (process.platform === "win32") {
124
+ return;
125
+ }
126
+ const directory = await open(parent, "r");
127
+ try {
128
+ await directory.sync();
129
+ }
130
+ finally {
131
+ await directory.close();
132
+ }
133
+ }
134
+ async function waitForLockRetry(delayMs, signal) {
135
+ assertNotCancelled(signal);
136
+ try {
137
+ await wait(delayMs, undefined, signal === undefined ? {} : { signal });
138
+ }
139
+ catch (error) {
140
+ assertNotCancelled(signal);
141
+ throw error;
142
+ }
143
+ assertNotCancelled(signal);
144
+ }
145
+ async function acquireWriteLock(path, signal) {
146
+ for (let attempt = 0; attempt <= WRITE_LOCK_RETRIES; attempt += 1) {
147
+ assertNotCancelled(signal);
148
+ try {
149
+ return await lock(path, WRITE_LOCK_OPTIONS);
150
+ }
151
+ catch (error) {
152
+ if (errorCode(error) !== "ELOCKED" || attempt === WRITE_LOCK_RETRIES) {
153
+ throw error;
154
+ }
155
+ }
156
+ const delayMs = Math.min(WRITE_LOCK_MAX_DELAY_MS, WRITE_LOCK_MIN_DELAY_MS * (WRITE_LOCK_BACKOFF ** attempt));
157
+ await waitForLockRetry(delayMs, signal);
158
+ }
159
+ throw new Error("Unreachable write-lock retry state.");
160
+ }
161
+ async function writeAtomic(target, source, signal) {
162
+ assertNotCancelled(signal);
163
+ const expected = Buffer.from(source, "utf8");
164
+ if (expected.length > MAX_EVIDENCE_BYTES) {
165
+ inputError("BUF_QUALIFICATION_EVIDENCE_TOO_LARGE", "Canonical Buf qualification evidence exceeds the supported size limit.");
166
+ }
167
+ const temporaryRoot = await mkdtemp(join(target.parent, ".buf-evidence-"));
168
+ const temporaryPath = join(temporaryRoot, "evidence.json");
169
+ let replaced = false;
170
+ let durable = false;
171
+ let failure;
172
+ try {
173
+ const handle = await open(temporaryPath, "wx", 0o600);
174
+ try {
175
+ await handle.writeFile(source, "utf8");
176
+ await handle.sync();
177
+ }
178
+ finally {
179
+ await handle.close();
180
+ }
181
+ assertNotCancelled(signal);
182
+ await assertSafeCandidate(target);
183
+ assertNotCancelled(signal);
184
+ await rename(temporaryPath, target.candidate);
185
+ replaced = true;
186
+ await assertSafeCandidate(target);
187
+ const persisted = await readContainedRegularFile({
188
+ candidate: target.candidate,
189
+ maxBytes: MAX_EVIDENCE_BYTES,
190
+ root: target.root
191
+ });
192
+ if (!persisted.equals(expected)) {
193
+ inputError("BUF_QUALIFICATION_WRITE_OUTCOME_UNCERTAIN", "Evidence bytes changed during atomic publication.");
194
+ }
195
+ await assertSafeCandidate(target);
196
+ await flushParentDirectory(target.parent);
197
+ durable = true;
198
+ }
199
+ catch (error) {
200
+ if (replaced &&
201
+ (!(error instanceof CapabilityInputError) ||
202
+ error.problem.code !== "BUF_QUALIFICATION_WRITE_OUTCOME_UNCERTAIN")) {
203
+ failure = qualificationError("BUF_QUALIFICATION_WRITE_OUTCOME_UNCERTAIN", "Evidence was replaced but final durability or containment could not be proven.");
204
+ }
205
+ else {
206
+ failure = errorObject(error, "Evidence publication failed.");
207
+ }
208
+ }
209
+ let cleanupFailure;
210
+ try {
211
+ await rm(temporaryRoot, { force: true, recursive: true });
212
+ }
213
+ catch (error) {
214
+ cleanupFailure = errorObject(error, "Temporary evidence cleanup failed.");
215
+ }
216
+ if (failure !== undefined) {
217
+ throw failure;
218
+ }
219
+ if (cleanupFailure !== undefined) {
220
+ if (durable) {
221
+ inputError("BUF_QUALIFICATION_POST_COMMIT_CLEANUP_FAILED", "Evidence was durably published, but temporary artifact cleanup failed.");
222
+ }
223
+ if (replaced) {
224
+ inputError("BUF_QUALIFICATION_WRITE_OUTCOME_UNCERTAIN", "Evidence was replaced, but publication completion could not be proven.");
225
+ }
226
+ throw cleanupFailure;
227
+ }
228
+ }
229
+ async function readExistingForWrite(consumerRoot, path, target) {
230
+ let metadata;
231
+ try {
232
+ metadata = await stat(target.candidate);
233
+ }
234
+ catch (error) {
235
+ if (errorCode(error) === "ENOENT") {
236
+ return { exists: false };
237
+ }
238
+ throw error;
239
+ }
240
+ if (!metadata.isFile()) {
241
+ inputError("BUF_QUALIFICATION_PATH_UNSAFE", "Evidence target must be a regular file.");
242
+ }
243
+ if (metadata.size > MAX_EVIDENCE_BYTES) {
244
+ return { exists: true };
245
+ }
246
+ const bytes = await readContained({
247
+ consumerRoot,
248
+ path,
249
+ maxBytes: MAX_EVIDENCE_BYTES,
250
+ optional: false
251
+ });
252
+ return { exists: true, ...(bytes === undefined ? {} : { source: bytes.toString("utf8") }) };
253
+ }
254
+ export class FilesystemBufQualificationArtifacts {
255
+ async readInput(input) {
256
+ const bytes = await readContained({ ...input, optional: false });
257
+ if (bytes === undefined) {
258
+ inputError("BUF_QUALIFICATION_INPUT_UNAVAILABLE", `${input.label} is unavailable.`);
259
+ }
260
+ return bytes;
261
+ }
262
+ async readExistingEvidence(input) {
263
+ const bytes = await readContained({ ...input, optional: true });
264
+ return bytes?.toString("utf8");
265
+ }
266
+ async writeEvidence(input) {
267
+ assertNotCancelled(input.signal);
268
+ const target = await canonicalWriteTarget(input.consumerRoot, input.path);
269
+ let failed = false;
270
+ let release;
271
+ try {
272
+ release = await acquireWriteLock(target.candidate, input.signal);
273
+ assertNotCancelled(input.signal);
274
+ await assertSafeCandidate(target);
275
+ const existing = await readExistingForWrite(input.consumerRoot, input.path, target);
276
+ if (existing.source === input.source) {
277
+ return "unchanged";
278
+ }
279
+ await writeAtomic(target, input.source, input.signal);
280
+ return existing.exists ? "updated" : "created";
281
+ }
282
+ catch (error) {
283
+ failed = true;
284
+ if (error instanceof CapabilityInputError) {
285
+ throw error;
286
+ }
287
+ return inputError("BUF_QUALIFICATION_WRITE_UNAVAILABLE", "Buf qualification evidence could not be locked or replaced safely.");
288
+ }
289
+ finally {
290
+ try {
291
+ await release?.();
292
+ }
293
+ catch {
294
+ if (!failed) {
295
+ inputError("BUF_QUALIFICATION_LOCK_RELEASE_FAILED", "Evidence was published but its cooperative write lock could not be released.");
296
+ }
297
+ }
298
+ }
299
+ }
300
+ }
301
+ //# sourceMappingURL=filesystem-buf-qualification-artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem-buf-qualification-artifacts.js","sourceRoot":"","sources":["../../../../../../../src/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/filesystem/filesystem-buf-qualification-artifacts.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import type { BufExecutable, BufExecutionResult, BufInvocation } from "../../../ports/buf-executable.js";
2
2
  export declare class ProcessBufExecutable implements BufExecutable {
3
+ #private;
4
+ constructor(timeoutMs?: number);
3
5
  run(invocation: BufInvocation, signal?: AbortSignal): Promise<BufExecutionResult>;
4
6
  }
5
7
  //# sourceMappingURL=process-buf-executable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"process-buf-executable.d.ts","sourceRoot":"","sources":["../../../../../../../src/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-executable.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,aAAa,EACd,MAAM,kCAAkC,CAAC;AAyH1C,qBAAa,oBAAqB,YAAW,aAAa;IAClD,GAAG,CACP,UAAU,EAAE,aAAa,EACzB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAY7B;CACF"}
1
+ {"version":3,"file":"process-buf-executable.d.ts","sourceRoot":"","sources":["../../../../../../../src/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-executable.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,aAAa,EACd,MAAM,kCAAkC,CAAC;AA+F1C,qBAAa,oBAAqB,YAAW,aAAa;;IAGxD,YAAY,SAAS,SAAiC,EAErD;IAEK,GAAG,CACP,UAAU,EAAE,aAAa,EACzB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAY7B;CACF"}
@@ -1,11 +1,11 @@
1
- import { execFile } from "node:child_process";
2
1
  import { realpath, stat } from "node:fs/promises";
3
2
  import { isAbsolute } from "node:path";
4
3
  import { CapabilityInputError } from "../../../../../../capability-runtime.js";
4
+ import { executeManagedProcess } from "../../../../../../process-execution/node-process-runner.js";
5
5
  import { assertNotCancelled } from "../../../../../../strict-yaml.js";
6
6
  const MAX_ARGUMENTS = 128;
7
7
  const MAX_ARGUMENT_LENGTH = 16 * 1024;
8
- const MAX_OUTPUT_BYTES = 4 * 1024 * 1024;
8
+ const DEFAULT_BUF_PROCESS_TIMEOUT_MS = 300_000;
9
9
  function hasControlCharacter(value) {
10
10
  for (const character of value) {
11
11
  const code = character.codePointAt(0);
@@ -15,13 +15,13 @@ function hasControlCharacter(value) {
15
15
  }
16
16
  return false;
17
17
  }
18
- function inputError(code, message) {
18
+ function inputError(code, message, cause) {
19
19
  throw new CapabilityInputError({
20
20
  code,
21
21
  message,
22
22
  phase: "protobuf-buf-process",
23
23
  retryable: false
24
- });
24
+ }, cause === undefined ? undefined : { cause });
25
25
  }
26
26
  function assertArgument(value, index) {
27
27
  if (typeof value !== "string" ||
@@ -52,46 +52,33 @@ async function workingDirectory(path) {
52
52
  }
53
53
  return canonical;
54
54
  }
55
- function execute(command, arguments_, cwd, signal) {
56
- return new Promise((resolve, reject) => {
57
- execFile(command, [...arguments_], {
55
+ async function execute(command, arguments_, cwd, timeoutMs, signal) {
56
+ try {
57
+ const result = await executeManagedProcess({
58
+ command,
59
+ args: arguments_,
58
60
  cwd,
59
- encoding: "utf8",
60
- maxBuffer: MAX_OUTPUT_BYTES,
61
- shell: false,
62
- signal,
63
- windowsHide: true
64
- }, (error, stdout, stderr) => {
65
- if (error === null) {
66
- resolve({ exitCode: 0, stdout, stderr });
67
- return;
68
- }
69
- if (signal?.aborted === true) {
70
- reject(new CapabilityInputError({
71
- code: "EXECUTION_CANCELLED",
72
- message: "Foundation check was cancelled.",
73
- phase: "protobuf-buf-process",
74
- retryable: false
75
- }));
76
- return;
77
- }
78
- const exitCode = typeof error.code === "number"
79
- ? error.code
80
- : undefined;
81
- if (exitCode !== undefined) {
82
- resolve({ exitCode, stdout, stderr });
83
- return;
84
- }
85
- reject(new CapabilityInputError({
86
- code: "BUF_EXECUTION_UNAVAILABLE",
87
- message: "Pinned Buf executable could not be started.",
88
- phase: "protobuf-buf-process",
89
- retryable: false
90
- }, { cause: error }));
61
+ timeoutMs,
62
+ ...(signal === undefined ? {} : { signal })
91
63
  });
92
- });
64
+ return {
65
+ exitCode: result.exitCode,
66
+ stdout: result.stdout,
67
+ stderr: result.stderr
68
+ };
69
+ }
70
+ catch (error) {
71
+ if (signal?.aborted === true) {
72
+ inputError("EXECUTION_CANCELLED", "Buf qualification was cancelled.", error);
73
+ }
74
+ inputError("BUF_EXECUTION_UNAVAILABLE", `Pinned Buf execution failed or exceeded its ${String(timeoutMs)}ms deadline.`, error);
75
+ }
93
76
  }
94
77
  export class ProcessBufExecutable {
78
+ #timeoutMs;
79
+ constructor(timeoutMs = DEFAULT_BUF_PROCESS_TIMEOUT_MS) {
80
+ this.#timeoutMs = timeoutMs;
81
+ }
95
82
  async run(invocation, signal) {
96
83
  assertNotCancelled(signal);
97
84
  if (!Array.isArray(invocation.arguments) || invocation.arguments.length > MAX_ARGUMENTS) {
@@ -103,7 +90,7 @@ export class ProcessBufExecutable {
103
90
  workingDirectory(invocation.workingDirectory)
104
91
  ]);
105
92
  assertNotCancelled(signal);
106
- return execute(command, invocation.arguments, cwd, signal);
93
+ return execute(command, invocation.arguments, cwd, this.#timeoutMs, signal);
107
94
  }
108
95
  }
109
96
  //# sourceMappingURL=process-buf-executable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"process-buf-executable.js","sourceRoot":"","sources":["../../../../../../../src/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-executable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process-buf-executable.js","sourceRoot":"","sources":["../../../../../../../src/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-executable.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { BufQualificationRunner, BufQualificationRunInput, BufQualificationRunResult } from "../../../ports/buf-qualification-runner.js";
2
+ import type { BufExecutable } from "../../../ports/buf-executable.js";
3
+ export declare class ProcessBufQualificationRunner implements BufQualificationRunner {
4
+ #private;
5
+ constructor(executable?: BufExecutable);
6
+ run(input: BufQualificationRunInput): Promise<BufQualificationRunResult>;
7
+ }
8
+ //# sourceMappingURL=process-buf-qualification-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-buf-qualification-runner.d.ts","sourceRoot":"","sources":["../../../../../../../src/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-qualification-runner.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,4CAA4C,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AA6CtE,qBAAa,6BAA8B,YAAW,sBAAsB;;IAG1E,YAAY,UAAU,GAAE,aAA0C,EAEjE;IAEK,GAAG,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,yBAAyB,CAAC,CA+D7E;CACF"}
@@ -0,0 +1,102 @@
1
+ import { open, mkdtemp, rm } from "node:fs/promises";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { CapabilityInputError } from "../../../../../../capability-runtime.js";
5
+ import { readContainedRegularFile } from "../../../../../../filesystem-path-safety.js";
6
+ import { assertNotCancelled } from "../../../../../../strict-yaml.js";
7
+ import { bufQualificationInvocationPlan } from "../../../../application/model/buf-breaking-qualification.js";
8
+ import { verifyPinnedBufVersion } from "../../../use-cases/verify-pinned-buf-version.js";
9
+ import { ProcessBufExecutable } from "./process-buf-executable.js";
10
+ const MAX_DESCRIPTOR_BYTES = 64 * 1024 * 1024;
11
+ function inputError(code, message) {
12
+ throw new CapabilityInputError({
13
+ code,
14
+ message,
15
+ phase: "protobuf-buf-qualification-process",
16
+ retryable: false
17
+ });
18
+ }
19
+ async function writePrivateFile(path, bytes) {
20
+ const handle = await open(path, "wx", 0o600);
21
+ try {
22
+ await handle.writeFile(bytes);
23
+ await handle.sync();
24
+ }
25
+ finally {
26
+ await handle.close();
27
+ }
28
+ }
29
+ async function readBoundedDescriptor(root, path) {
30
+ let descriptor;
31
+ try {
32
+ descriptor = await readContainedRegularFile({
33
+ candidate: path,
34
+ maxBytes: MAX_DESCRIPTOR_BYTES,
35
+ root
36
+ });
37
+ }
38
+ catch {
39
+ inputError("BUF_CANDIDATE_DESCRIPTOR_INVALID", "Buf candidate descriptor is unavailable, unsafe, or exceeds the supported size limit.");
40
+ }
41
+ if (descriptor.length === 0) {
42
+ inputError("BUF_CANDIDATE_DESCRIPTOR_INVALID", "Buf candidate descriptor is empty.");
43
+ }
44
+ return descriptor;
45
+ }
46
+ export class ProcessBufQualificationRunner {
47
+ #executable;
48
+ constructor(executable = new ProcessBufExecutable()) {
49
+ this.#executable = executable;
50
+ }
51
+ async run(input) {
52
+ assertNotCancelled(input.signal);
53
+ await verifyPinnedBufVersion({
54
+ invocation: {
55
+ executablePath: input.executablePath,
56
+ workingDirectory: input.workingDirectory
57
+ },
58
+ expectedVersion: input.expectedVersion,
59
+ ...(input.signal === undefined ? {} : { signal: input.signal })
60
+ }, this.#executable);
61
+ const temporaryRoot = await mkdtemp(join(tmpdir(), "agent-teams-buf-qualification-"));
62
+ const baselinePath = join(temporaryRoot, "baseline.binpb");
63
+ const candidatePath = join(temporaryRoot, "candidate.binpb");
64
+ const invocation = bufQualificationInvocationPlan({
65
+ baselineDescriptorPath: baselinePath,
66
+ bufConfigPath: input.bufConfigPath,
67
+ candidateDescriptorPath: candidatePath,
68
+ modulePath: input.modulePath
69
+ });
70
+ try {
71
+ await writePrivateFile(baselinePath, input.baselineDescriptorImage);
72
+ const build = await this.#executable.run({
73
+ executablePath: input.executablePath,
74
+ workingDirectory: input.workingDirectory,
75
+ arguments: invocation.buildArguments
76
+ }, input.signal);
77
+ assertNotCancelled(input.signal);
78
+ if (build.exitCode !== 0 || build.stdout.length !== 0 || build.stderr.length !== 0) {
79
+ inputError("BUF_BUILD_FAILED", `Buf candidate descriptor build failed or emitted unexpected output: ${build.stderr.trim() || build.stdout.trim() || `exit ${build.exitCode}`}.`);
80
+ }
81
+ const candidateDescriptorImage = await readBoundedDescriptor(temporaryRoot, candidatePath);
82
+ const breaking = await this.#executable.run({
83
+ executablePath: input.executablePath,
84
+ workingDirectory: input.workingDirectory,
85
+ arguments: invocation.breakingArguments
86
+ }, input.signal);
87
+ assertNotCancelled(input.signal);
88
+ if ((breaking.exitCode !== 0 && breaking.exitCode !== 100) || breaking.stderr.length !== 0) {
89
+ inputError("BUF_BREAKING_EXECUTION_FAILED", `Buf breaking qualification failed: ${breaking.stderr.trim() || `exit ${breaking.exitCode}`}.`);
90
+ }
91
+ return Object.freeze({
92
+ status: breaking.exitCode === 0 ? "compatible" : "breaking",
93
+ candidateDescriptorImage,
94
+ rawOutput: breaking.stdout
95
+ });
96
+ }
97
+ finally {
98
+ await rm(temporaryRoot, { force: true, recursive: true });
99
+ }
100
+ }
101
+ }
102
+ //# sourceMappingURL=process-buf-qualification-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-buf-qualification-runner.js","sourceRoot":"","sources":["../../../../../../../src/capabilities/contract-protobuf-evolution/qualification/adapters/outbound/process/process-buf-qualification-runner.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,18 @@
1
+ import { type QualifyBufBreakingEvidenceResult } from "./use-cases/qualify-buf-breaking-evidence.js";
2
+ export declare function qualifyProtobufBreakingEvidence(input: {
3
+ readonly consumerRoot: string;
4
+ readonly configPath: string;
5
+ readonly executablePath: string;
6
+ readonly write: boolean;
7
+ readonly signal?: AbortSignal;
8
+ }): Promise<QualifyBufBreakingEvidenceResult>;
9
+ export { FilesystemBufQualificationArtifacts } from "./adapters/outbound/filesystem/filesystem-buf-qualification-artifacts.js";
1
10
  export { ProcessBufExecutable } from "./adapters/outbound/process/process-buf-executable.js";
11
+ export { ProcessBufQualificationRunner } from "./adapters/outbound/process/process-buf-qualification-runner.js";
2
12
  export type { BufExecutable, BufExecutionResult, BufInvocation } from "./ports/buf-executable.js";
13
+ export type { BufQualificationArtifacts, BufQualificationEvidenceWriteResult } from "./ports/buf-qualification-artifacts.js";
14
+ export type { BufQualificationRunner, BufQualificationRunInput, BufQualificationRunResult } from "./ports/buf-qualification-runner.js";
15
+ export { qualifyBufBreakingEvidence } from "./use-cases/qualify-buf-breaking-evidence.js";
16
+ export type { QualifyBufBreakingEvidenceResult } from "./use-cases/qualify-buf-breaking-evidence.js";
3
17
  export { verifyPinnedBufVersion } from "./use-cases/verify-pinned-buf-version.js";
4
18
  //# sourceMappingURL=module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/contract-protobuf-evolution/qualification/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uDAAuD,CAAC;AAC7F,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,aAAa,EACd,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC"}
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/contract-protobuf-evolution/qualification/module.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,gCAAgC,EACtC,MAAM,8CAA8C,CAAC;AAEtD,wBAAsB,+BAA+B,CAAC,KAAK,EAAE;IAC3D,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B,GAAG,OAAO,CAAC,gCAAgC,CAAC,CAoB5C;AAED,OAAO,EAAE,mCAAmC,EAAE,MAAM,0EAA0E,CAAC;AAC/H,OAAO,EAAE,oBAAoB,EAAE,MAAM,uDAAuD,CAAC;AAC7F,OAAO,EAAE,6BAA6B,EAAE,MAAM,iEAAiE,CAAC;AAChH,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,aAAa,EACd,MAAM,2BAA2B,CAAC;AACnC,YAAY,EACV,yBAAyB,EACzB,mCAAmC,EACpC,MAAM,wCAAwC,CAAC;AAChD,YAAY,EACV,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,0BAA0B,EAAE,MAAM,8CAA8C,CAAC;AAC1F,YAAY,EAAE,gCAAgC,EAAE,MAAM,8CAA8C,CAAC;AACrG,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC"}
@@ -1,3 +1,25 @@
1
+ import { NodeSha256Digest } from "../adapters/outbound/crypto/node-sha256-digest.js";
2
+ import { loadCapabilityConfig } from "../contract/config.js";
3
+ import { FilesystemBufQualificationArtifacts } from "./adapters/outbound/filesystem/filesystem-buf-qualification-artifacts.js";
4
+ import { ProcessBufQualificationRunner } from "./adapters/outbound/process/process-buf-qualification-runner.js";
5
+ import { qualifyBufBreakingEvidence } from "./use-cases/qualify-buf-breaking-evidence.js";
6
+ export async function qualifyProtobufBreakingEvidence(input) {
7
+ const configuration = await loadCapabilityConfig(input.consumerRoot, input.configPath, input.signal);
8
+ return qualifyBufBreakingEvidence({
9
+ consumerRoot: input.consumerRoot,
10
+ executablePath: input.executablePath,
11
+ configuration,
12
+ write: input.write,
13
+ ...(input.signal === undefined ? {} : { signal: input.signal })
14
+ }, {
15
+ artifacts: new FilesystemBufQualificationArtifacts(),
16
+ digest: new NodeSha256Digest(),
17
+ runner: new ProcessBufQualificationRunner()
18
+ });
19
+ }
20
+ export { FilesystemBufQualificationArtifacts } from "./adapters/outbound/filesystem/filesystem-buf-qualification-artifacts.js";
1
21
  export { ProcessBufExecutable } from "./adapters/outbound/process/process-buf-executable.js";
22
+ export { ProcessBufQualificationRunner } from "./adapters/outbound/process/process-buf-qualification-runner.js";
23
+ export { qualifyBufBreakingEvidence } from "./use-cases/qualify-buf-breaking-evidence.js";
2
24
  export { verifyPinnedBufVersion } from "./use-cases/verify-pinned-buf-version.js";
3
25
  //# sourceMappingURL=module.js.map