@mannyc1/ts-release 0.0.7 → 0.3.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 (695) hide show
  1. package/ARCHITECTURE.md +184 -92
  2. package/CHANGELOG.md +197 -0
  3. package/LICENSE +21 -0
  4. package/README.md +404 -327
  5. package/SPEC.md +257 -310
  6. package/apps/release-ts/README.md +39 -0
  7. package/apps/release-ts/src/cli/command.ts +164 -0
  8. package/apps/release-ts/src/cli/commands.ts +351 -0
  9. package/apps/release-ts/src/cli/main.ts +43 -0
  10. package/apps/release-ts/src/cli/node-main.ts +49 -0
  11. package/apps/ts-release-agents/LICENSE +21 -0
  12. package/apps/ts-release-agents/README.md +21 -0
  13. package/apps/ts-release-agents/evals/cases.json +11 -0
  14. package/apps/ts-release-agents/manifests/claude.json +5 -0
  15. package/apps/ts-release-agents/manifests/codex.json +5 -0
  16. package/apps/ts-release-agents/package.json +11 -0
  17. package/apps/ts-release-agents/skills/release/SKILL.md +48 -0
  18. package/apps/ts-release-agents/skills/release/references/configuration.md +18 -0
  19. package/apps/ts-release-agents/skills/release/references/recovery.md +10 -0
  20. package/apps/ts-release-agents/skills/release/references/staged-workflow.md +12 -0
  21. package/apps/ts-release-agents/skills/release/references/target-selection.md +13 -0
  22. package/apps/ts-release-agents/skills/release/references/verification.md +14 -0
  23. package/apps/ts-release-agents/src/build.ts +105 -0
  24. package/apps/ts-release-agents/src/check.ts +122 -0
  25. package/apps/ts-release-agents/src/install.ts +121 -0
  26. package/apps/ts-release-agents/test/contract.test.ts +56 -0
  27. package/apps/ts-release-agents/tsconfig.json +5 -0
  28. package/dist/api/api.d.ts +15 -0
  29. package/dist/api/api.d.ts.map +1 -0
  30. package/dist/api/api.js +244 -0
  31. package/dist/api/api.js.map +1 -0
  32. package/dist/api/errors.d.ts +39 -0
  33. package/dist/api/errors.d.ts.map +1 -0
  34. package/dist/api/errors.js +32 -0
  35. package/dist/api/errors.js.map +1 -0
  36. package/dist/api/input.d.ts +10 -0
  37. package/dist/api/input.d.ts.map +1 -0
  38. package/dist/api/input.js +73 -0
  39. package/dist/api/input.js.map +1 -0
  40. package/dist/api/runtime.d.ts +18 -0
  41. package/dist/api/runtime.d.ts.map +1 -0
  42. package/dist/api/runtime.js +7 -0
  43. package/dist/api/runtime.js.map +1 -0
  44. package/dist/api/types.d.ts +76 -0
  45. package/dist/api/types.d.ts.map +1 -0
  46. package/dist/api/types.js +17 -0
  47. package/dist/api/types.js.map +1 -0
  48. package/dist/bin/ts-release.js +39346 -0
  49. package/dist/capabilities/bun-targets.d.ts +3 -0
  50. package/dist/capabilities/bun-targets.d.ts.map +1 -0
  51. package/dist/capabilities/bun-targets.js +3 -0
  52. package/dist/capabilities/bun-targets.js.map +1 -0
  53. package/dist/capabilities/field-ownership.d.ts +17 -0
  54. package/dist/capabilities/field-ownership.d.ts.map +1 -0
  55. package/dist/capabilities/field-ownership.js +40 -0
  56. package/dist/capabilities/field-ownership.js.map +1 -0
  57. package/dist/capabilities/module.d.ts +91 -0
  58. package/dist/capabilities/module.d.ts.map +1 -0
  59. package/dist/capabilities/module.js +2 -0
  60. package/dist/capabilities/module.js.map +1 -0
  61. package/dist/capabilities/registry.d.ts +829 -0
  62. package/dist/capabilities/registry.d.ts.map +1 -0
  63. package/dist/capabilities/registry.js +291 -0
  64. package/dist/capabilities/registry.js.map +1 -0
  65. package/dist/config/config.d.ts +6 -0
  66. package/dist/config/config.d.ts.map +1 -0
  67. package/dist/config/config.js +42 -0
  68. package/dist/config/config.js.map +1 -0
  69. package/dist/correction/coordinator.d.ts +248 -0
  70. package/dist/correction/coordinator.d.ts.map +1 -0
  71. package/dist/correction/coordinator.js +274 -0
  72. package/dist/correction/coordinator.js.map +1 -0
  73. package/dist/correction/index.d.ts +3 -0
  74. package/dist/correction/index.d.ts.map +1 -0
  75. package/dist/correction/index.js +3 -0
  76. package/dist/correction/index.js.map +1 -0
  77. package/dist/correction/intent.d.ts +111 -0
  78. package/dist/correction/intent.d.ts.map +1 -0
  79. package/dist/correction/intent.js +146 -0
  80. package/dist/correction/intent.js.map +1 -0
  81. package/dist/drivers/archive.d.ts +9 -0
  82. package/dist/drivers/archive.d.ts.map +1 -0
  83. package/dist/drivers/archive.js +105 -0
  84. package/dist/drivers/archive.js.map +1 -0
  85. package/dist/drivers/contain.d.ts +6 -0
  86. package/dist/drivers/contain.d.ts.map +1 -0
  87. package/dist/drivers/contain.js +17 -0
  88. package/dist/drivers/contain.js.map +1 -0
  89. package/dist/drivers/environment.d.ts +4 -0
  90. package/dist/drivers/environment.d.ts.map +1 -0
  91. package/dist/drivers/environment.js +18 -0
  92. package/dist/drivers/environment.js.map +1 -0
  93. package/dist/drivers/errors.d.ts +9 -0
  94. package/dist/drivers/errors.d.ts.map +1 -0
  95. package/dist/drivers/errors.js +6 -0
  96. package/dist/drivers/errors.js.map +1 -0
  97. package/dist/drivers/glob.d.ts +2 -0
  98. package/dist/drivers/glob.d.ts.map +1 -0
  99. package/dist/drivers/glob.js +162 -0
  100. package/dist/drivers/glob.js.map +1 -0
  101. package/dist/drivers/process.d.ts +48 -0
  102. package/dist/drivers/process.d.ts.map +1 -0
  103. package/dist/drivers/process.js +257 -0
  104. package/dist/drivers/process.js.map +1 -0
  105. package/dist/drivers/python-wheel.d.ts +21 -0
  106. package/dist/drivers/python-wheel.d.ts.map +1 -0
  107. package/dist/drivers/python-wheel.js +109 -0
  108. package/dist/drivers/python-wheel.js.map +1 -0
  109. package/dist/drivers/redact.d.ts +4 -0
  110. package/dist/drivers/redact.d.ts.map +1 -0
  111. package/dist/drivers/redact.js +24 -0
  112. package/dist/drivers/redact.js.map +1 -0
  113. package/dist/drivers/seccomp-helper-source.d.ts +7 -0
  114. package/dist/drivers/seccomp-helper-source.d.ts.map +1 -0
  115. package/dist/drivers/seccomp-helper-source.js +121 -0
  116. package/dist/drivers/seccomp-helper-source.js.map +1 -0
  117. package/dist/drivers/utils.d.ts +4 -0
  118. package/dist/drivers/utils.d.ts.map +1 -0
  119. package/dist/drivers/utils.js +5 -0
  120. package/dist/drivers/utils.js.map +1 -0
  121. package/dist/drivers/workspace.d.ts +9 -0
  122. package/dist/drivers/workspace.d.ts.map +1 -0
  123. package/dist/drivers/workspace.js +53 -0
  124. package/dist/drivers/workspace.js.map +1 -0
  125. package/dist/extensions/provider-adapter.d.ts +48 -0
  126. package/dist/extensions/provider-adapter.d.ts.map +1 -0
  127. package/dist/extensions/provider-adapter.js +64 -0
  128. package/dist/extensions/provider-adapter.js.map +1 -0
  129. package/dist/host.d.ts +33 -0
  130. package/dist/host.d.ts.map +1 -0
  131. package/dist/host.js +20 -0
  132. package/dist/host.js.map +1 -0
  133. package/dist/index.d.ts +19 -1
  134. package/dist/index.d.ts.map +1 -1
  135. package/dist/index.js +12 -1
  136. package/dist/index.js.map +1 -1
  137. package/dist/model/artifact-collection.d.ts +84 -0
  138. package/dist/model/artifact-collection.d.ts.map +1 -0
  139. package/dist/model/artifact-collection.js +185 -0
  140. package/dist/model/artifact-collection.js.map +1 -0
  141. package/dist/model/authority.d.ts +89 -0
  142. package/dist/model/authority.d.ts.map +1 -0
  143. package/dist/model/authority.js +80 -0
  144. package/dist/model/authority.js.map +1 -0
  145. package/dist/model/bun-targets.d.ts +34 -0
  146. package/dist/model/bun-targets.d.ts.map +1 -0
  147. package/dist/model/bun-targets.js +17 -0
  148. package/dist/model/bun-targets.js.map +1 -0
  149. package/dist/model/canonical.d.ts +8 -0
  150. package/dist/model/canonical.d.ts.map +1 -0
  151. package/dist/model/canonical.js +205 -0
  152. package/dist/model/canonical.js.map +1 -0
  153. package/dist/model/catalog.d.ts +76 -0
  154. package/dist/model/catalog.d.ts.map +1 -0
  155. package/dist/model/catalog.js +174 -0
  156. package/dist/model/catalog.js.map +1 -0
  157. package/dist/model/digest.d.ts +53 -0
  158. package/dist/model/digest.d.ts.map +1 -0
  159. package/dist/model/digest.js +127 -0
  160. package/dist/model/digest.js.map +1 -0
  161. package/dist/model/errors.d.ts +14 -0
  162. package/dist/model/errors.d.ts.map +1 -0
  163. package/dist/model/errors.js +8 -0
  164. package/dist/model/errors.js.map +1 -0
  165. package/dist/model/primitives.d.ts +19 -0
  166. package/dist/model/primitives.d.ts.map +1 -0
  167. package/dist/model/primitives.js +18 -0
  168. package/dist/model/primitives.js.map +1 -0
  169. package/dist/model/pypi.d.ts +12 -0
  170. package/dist/model/pypi.d.ts.map +1 -0
  171. package/dist/model/pypi.js +20 -0
  172. package/dist/model/pypi.js.map +1 -0
  173. package/dist/model/python-distribution.d.ts +33 -0
  174. package/dist/model/python-distribution.d.ts.map +1 -0
  175. package/dist/model/python-distribution.js +367 -0
  176. package/dist/model/python-distribution.js.map +1 -0
  177. package/dist/model/secret-patterns.d.ts +2 -0
  178. package/dist/model/secret-patterns.d.ts.map +1 -0
  179. package/dist/model/secret-patterns.js +12 -0
  180. package/dist/model/secret-patterns.js.map +1 -0
  181. package/dist/operation-journal/authority.d.ts +3 -0
  182. package/dist/operation-journal/authority.d.ts.map +1 -0
  183. package/dist/operation-journal/authority.js +147 -0
  184. package/dist/operation-journal/authority.js.map +1 -0
  185. package/dist/operation-journal/aws/deadline.d.ts +12 -0
  186. package/dist/operation-journal/aws/deadline.d.ts.map +1 -0
  187. package/dist/operation-journal/aws/deadline.js +38 -0
  188. package/dist/operation-journal/aws/deadline.js.map +1 -0
  189. package/dist/operation-journal/aws/oidc.d.ts +27 -0
  190. package/dist/operation-journal/aws/oidc.d.ts.map +1 -0
  191. package/dist/operation-journal/aws/oidc.js +361 -0
  192. package/dist/operation-journal/aws/oidc.js.map +1 -0
  193. package/dist/operation-journal/aws/policy.d.ts +42 -0
  194. package/dist/operation-journal/aws/policy.d.ts.map +1 -0
  195. package/dist/operation-journal/aws/policy.js +404 -0
  196. package/dist/operation-journal/aws/policy.js.map +1 -0
  197. package/dist/operation-journal/aws/s3-boundary.d.ts +17 -0
  198. package/dist/operation-journal/aws/s3-boundary.d.ts.map +1 -0
  199. package/dist/operation-journal/aws/s3-boundary.js +417 -0
  200. package/dist/operation-journal/aws/s3-boundary.js.map +1 -0
  201. package/dist/operation-journal/aws.d.ts +11 -0
  202. package/dist/operation-journal/aws.d.ts.map +1 -0
  203. package/dist/operation-journal/aws.js +50 -0
  204. package/dist/operation-journal/aws.js.map +1 -0
  205. package/dist/operation-journal/canonical.d.ts +52 -0
  206. package/dist/operation-journal/canonical.d.ts.map +1 -0
  207. package/dist/operation-journal/canonical.js +282 -0
  208. package/dist/operation-journal/canonical.js.map +1 -0
  209. package/dist/operation-journal/model.d.ts +251 -0
  210. package/dist/operation-journal/model.d.ts.map +1 -0
  211. package/dist/operation-journal/model.js +56 -0
  212. package/dist/operation-journal/model.js.map +1 -0
  213. package/dist/operation-journal/reducer.d.ts +28 -0
  214. package/dist/operation-journal/reducer.d.ts.map +1 -0
  215. package/dist/operation-journal/reducer.js +73 -0
  216. package/dist/operation-journal/reducer.js.map +1 -0
  217. package/dist/operation-journal/s3.d.ts +7 -0
  218. package/dist/operation-journal/s3.d.ts.map +1 -0
  219. package/dist/operation-journal/s3.js +667 -0
  220. package/dist/operation-journal/s3.js.map +1 -0
  221. package/dist/operation-journal.d.ts +14 -0
  222. package/dist/operation-journal.d.ts.map +1 -0
  223. package/dist/operation-journal.js +12 -0
  224. package/dist/operation-journal.js.map +1 -0
  225. package/dist/platform/bun.d.ts +7 -0
  226. package/dist/platform/bun.d.ts.map +1 -0
  227. package/dist/platform/bun.js +15 -0
  228. package/dist/platform/bun.js.map +1 -0
  229. package/dist/platform/credentials.d.ts +32 -0
  230. package/dist/platform/credentials.d.ts.map +1 -0
  231. package/dist/platform/credentials.js +834 -0
  232. package/dist/platform/credentials.js.map +1 -0
  233. package/dist/platform/host-support.d.ts +2 -0
  234. package/dist/platform/host-support.d.ts.map +1 -0
  235. package/dist/platform/host-support.js +4 -0
  236. package/dist/platform/host-support.js.map +1 -0
  237. package/dist/platform/node.d.ts +7 -0
  238. package/dist/platform/node.d.ts.map +1 -0
  239. package/dist/platform/node.js +15 -0
  240. package/dist/platform/node.js.map +1 -0
  241. package/dist/platform/release-runtime.d.ts +11 -0
  242. package/dist/platform/release-runtime.d.ts.map +1 -0
  243. package/dist/platform/release-runtime.js +34 -0
  244. package/dist/platform/release-runtime.js.map +1 -0
  245. package/dist/platform/services.d.ts +15 -0
  246. package/dist/platform/services.d.ts.map +1 -0
  247. package/dist/platform/services.js +30 -0
  248. package/dist/platform/services.js.map +1 -0
  249. package/dist/platform/source-observer.d.ts +5 -0
  250. package/dist/platform/source-observer.d.ts.map +1 -0
  251. package/dist/platform/source-observer.js +159 -0
  252. package/dist/platform/source-observer.js.map +1 -0
  253. package/dist/provider-sdk.d.ts +14 -0
  254. package/dist/provider-sdk.d.ts.map +1 -0
  255. package/dist/provider-sdk.js +10 -0
  256. package/dist/provider-sdk.js.map +1 -0
  257. package/dist/publication/adapter.d.ts +212 -0
  258. package/dist/publication/adapter.d.ts.map +1 -0
  259. package/dist/publication/adapter.js +83 -0
  260. package/dist/publication/adapter.js.map +1 -0
  261. package/dist/publication/authority.d.ts +137 -0
  262. package/dist/publication/authority.d.ts.map +1 -0
  263. package/dist/publication/authority.js +233 -0
  264. package/dist/publication/authority.js.map +1 -0
  265. package/dist/publication/catalog-git.d.ts +37 -0
  266. package/dist/publication/catalog-git.d.ts.map +1 -0
  267. package/dist/publication/catalog-git.js +451 -0
  268. package/dist/publication/catalog-git.js.map +1 -0
  269. package/dist/publication/claim.d.ts +39 -0
  270. package/dist/publication/claim.d.ts.map +1 -0
  271. package/dist/publication/claim.js +31 -0
  272. package/dist/publication/claim.js.map +1 -0
  273. package/dist/publication/coordinator.d.ts +246 -0
  274. package/dist/publication/coordinator.d.ts.map +1 -0
  275. package/dist/publication/coordinator.js +370 -0
  276. package/dist/publication/coordinator.js.map +1 -0
  277. package/dist/publication/github.d.ts +36 -0
  278. package/dist/publication/github.d.ts.map +1 -0
  279. package/dist/publication/github.js +695 -0
  280. package/dist/publication/github.js.map +1 -0
  281. package/dist/publication/http.d.ts +69 -0
  282. package/dist/publication/http.d.ts.map +1 -0
  283. package/dist/publication/http.js +29 -0
  284. package/dist/publication/http.js.map +1 -0
  285. package/dist/publication/index.d.ts +5 -0
  286. package/dist/publication/index.d.ts.map +1 -0
  287. package/dist/publication/index.js +5 -0
  288. package/dist/publication/index.js.map +1 -0
  289. package/dist/publication/npm.d.ts +40 -0
  290. package/dist/publication/npm.d.ts.map +1 -0
  291. package/dist/publication/npm.js +359 -0
  292. package/dist/publication/npm.js.map +1 -0
  293. package/dist/publication/profiles.d.ts +136 -0
  294. package/dist/publication/profiles.d.ts.map +1 -0
  295. package/dist/publication/profiles.js +90 -0
  296. package/dist/publication/profiles.js.map +1 -0
  297. package/dist/publication/publisher.d.ts +82 -0
  298. package/dist/publication/publisher.d.ts.map +1 -0
  299. package/dist/publication/publisher.js +53 -0
  300. package/dist/publication/publisher.js.map +1 -0
  301. package/dist/publication/pypi.d.ts +45 -0
  302. package/dist/publication/pypi.d.ts.map +1 -0
  303. package/dist/publication/pypi.js +369 -0
  304. package/dist/publication/pypi.js.map +1 -0
  305. package/dist/publication/recovery.d.ts +663 -0
  306. package/dist/publication/recovery.d.ts.map +1 -0
  307. package/dist/publication/recovery.js +252 -0
  308. package/dist/publication/recovery.js.map +1 -0
  309. package/dist/publication/report.d.ts +1061 -0
  310. package/dist/publication/report.d.ts.map +1 -0
  311. package/dist/publication/report.js +441 -0
  312. package/dist/publication/report.js.map +1 -0
  313. package/dist/recipes/config.d.ts +296 -0
  314. package/dist/recipes/config.d.ts.map +1 -0
  315. package/dist/recipes/config.js +325 -0
  316. package/dist/recipes/config.js.map +1 -0
  317. package/dist/release/capabilities.d.ts +12 -0
  318. package/dist/release/capabilities.d.ts.map +1 -0
  319. package/dist/release/capabilities.js +395 -0
  320. package/dist/release/capabilities.js.map +1 -0
  321. package/dist/release/compiler.d.ts +5 -0
  322. package/dist/release/compiler.d.ts.map +1 -0
  323. package/dist/release/compiler.js +19 -0
  324. package/dist/release/compiler.js.map +1 -0
  325. package/dist/release/config.d.ts +5 -0
  326. package/dist/release/config.d.ts.map +1 -0
  327. package/dist/release/config.js +10 -0
  328. package/dist/release/config.js.map +1 -0
  329. package/dist/release/context.d.ts +96 -0
  330. package/dist/release/context.d.ts.map +1 -0
  331. package/dist/release/context.js +168 -0
  332. package/dist/release/context.js.map +1 -0
  333. package/dist/release/graph.d.ts +271 -0
  334. package/dist/release/graph.d.ts.map +1 -0
  335. package/dist/release/graph.js +766 -0
  336. package/dist/release/graph.js.map +1 -0
  337. package/dist/release/inspect.d.ts +88 -0
  338. package/dist/release/inspect.d.ts.map +1 -0
  339. package/dist/release/inspect.js +75 -0
  340. package/dist/release/inspect.js.map +1 -0
  341. package/dist/release/prepare.d.ts +24 -0
  342. package/dist/release/prepare.d.ts.map +1 -0
  343. package/dist/release/prepare.js +1115 -0
  344. package/dist/release/prepare.js.map +1 -0
  345. package/dist/release/prepared-ref.d.ts +60 -0
  346. package/dist/release/prepared-ref.d.ts.map +1 -0
  347. package/dist/release/prepared-ref.js +131 -0
  348. package/dist/release/prepared-ref.js.map +1 -0
  349. package/dist/release/prepared-store.d.ts +90 -0
  350. package/dist/release/prepared-store.d.ts.map +1 -0
  351. package/dist/release/prepared-store.js +339 -0
  352. package/dist/release/prepared-store.js.map +1 -0
  353. package/dist/release/prepared.d.ts +172 -0
  354. package/dist/release/prepared.d.ts.map +1 -0
  355. package/dist/release/prepared.js +268 -0
  356. package/dist/release/prepared.js.map +1 -0
  357. package/dist/release/staging.d.ts +31 -0
  358. package/dist/release/staging.d.ts.map +1 -0
  359. package/dist/release/staging.js +218 -0
  360. package/dist/release/staging.js.map +1 -0
  361. package/dist/resolve/authored.d.ts +53 -0
  362. package/dist/resolve/authored.d.ts.map +1 -0
  363. package/dist/resolve/authored.js +55 -0
  364. package/dist/resolve/authored.js.map +1 -0
  365. package/dist/resolve/encode.d.ts +3 -0
  366. package/dist/resolve/encode.d.ts.map +1 -0
  367. package/dist/resolve/encode.js +21 -0
  368. package/dist/resolve/encode.js.map +1 -0
  369. package/dist/resolve/errors.d.ts +7 -0
  370. package/dist/resolve/errors.d.ts.map +1 -0
  371. package/dist/resolve/errors.js +17 -0
  372. package/dist/resolve/errors.js.map +1 -0
  373. package/dist/resolve/facts.d.ts +12 -0
  374. package/dist/resolve/facts.d.ts.map +1 -0
  375. package/dist/resolve/facts.js +18 -0
  376. package/dist/resolve/facts.js.map +1 -0
  377. package/dist/resolve/resolve.d.ts +10 -0
  378. package/dist/resolve/resolve.d.ts.map +1 -0
  379. package/dist/resolve/resolve.js +242 -0
  380. package/dist/resolve/resolve.js.map +1 -0
  381. package/dist/store.d.ts +11 -0
  382. package/dist/store.d.ts.map +1 -0
  383. package/dist/store.js +9 -0
  384. package/dist/store.js.map +1 -0
  385. package/examples/README.md +20 -30
  386. package/examples/github-release/release.config.json +11 -18
  387. package/examples/homebrew-tap/README.md +11 -0
  388. package/examples/homebrew-tap/release.config.json +40 -28
  389. package/examples/multi-target/release.config.json +28 -53
  390. package/examples/npm-first-publish/release.config.json +23 -25
  391. package/examples/npm-only/release.config.json +22 -30
  392. package/examples/portable-cli/README.md +17 -0
  393. package/examples/portable-cli/artifacts/portable-example-0.1.0-darwin-arm64 +1 -0
  394. package/examples/portable-cli/artifacts/portable-example-0.1.0-darwin-x64 +1 -0
  395. package/examples/portable-cli/artifacts/portable-example-0.1.0-linux-arm64 +1 -0
  396. package/examples/portable-cli/artifacts/portable-example-0.1.0-linux-x64 +1 -0
  397. package/examples/portable-cli/artifacts/portable-example-0.1.0-windows-x64.exe +1 -0
  398. package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-macosx_10_15_x86_64.whl +1 -0
  399. package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-macosx_11_0_arm64.whl +1 -0
  400. package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-manylinux2014_aarch64.whl +1 -0
  401. package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-manylinux2014_x86_64.whl +1 -0
  402. package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-win_amd64.whl +1 -0
  403. package/examples/portable-cli/package.json +9 -0
  404. package/examples/portable-cli/release.config.json +53 -0
  405. package/examples/portable-cli/src/cli.ts +3 -0
  406. package/examples/pypi-registry/README.md +8 -0
  407. package/examples/scoop-bucket/README.md +10 -0
  408. package/examples/scoop-bucket/release.config.json +40 -30
  409. package/package.json +73 -154
  410. package/src/api/api.ts +365 -0
  411. package/src/api/errors.ts +36 -0
  412. package/src/api/input.ts +92 -0
  413. package/src/api/runtime.ts +14 -0
  414. package/src/api/types.ts +103 -0
  415. package/src/capabilities/bun-targets.ts +2 -0
  416. package/src/capabilities/field-ownership.ts +60 -0
  417. package/src/capabilities/module.ts +158 -0
  418. package/src/capabilities/registry.ts +333 -0
  419. package/src/config/config.ts +48 -0
  420. package/src/correction/coordinator.ts +336 -0
  421. package/src/correction/index.ts +2 -0
  422. package/src/correction/intent.ts +172 -0
  423. package/src/drivers/archive.ts +111 -0
  424. package/src/drivers/contain.ts +20 -0
  425. package/src/drivers/environment.ts +28 -0
  426. package/src/drivers/errors.ts +6 -0
  427. package/src/drivers/glob.ts +137 -0
  428. package/src/drivers/process.ts +339 -0
  429. package/src/drivers/python-wheel.ts +145 -0
  430. package/src/drivers/redact.ts +31 -0
  431. package/src/drivers/seccomp-helper-source.ts +121 -0
  432. package/src/drivers/utils.ts +10 -0
  433. package/src/drivers/workspace.ts +46 -0
  434. package/src/extensions/provider-adapter.ts +99 -0
  435. package/src/host.ts +140 -0
  436. package/src/index.ts +64 -0
  437. package/src/model/artifact-collection.ts +237 -0
  438. package/src/model/authority.ts +116 -0
  439. package/src/model/bun-targets.ts +34 -0
  440. package/src/model/canonical.ts +205 -0
  441. package/src/model/catalog.ts +220 -0
  442. package/src/model/digest.ts +172 -0
  443. package/src/model/errors.ts +6 -0
  444. package/src/model/primitives.ts +37 -0
  445. package/src/model/pypi.ts +30 -0
  446. package/src/model/python-distribution.ts +360 -0
  447. package/src/model/secret-patterns.ts +11 -0
  448. package/src/operation-journal/authority.ts +162 -0
  449. package/src/operation-journal/aws/deadline.ts +41 -0
  450. package/src/operation-journal/aws/oidc.ts +439 -0
  451. package/src/operation-journal/aws/policy.ts +491 -0
  452. package/src/operation-journal/aws/s3-boundary.ts +562 -0
  453. package/src/operation-journal/aws.ts +60 -0
  454. package/src/operation-journal/canonical.ts +373 -0
  455. package/src/operation-journal/model.ts +301 -0
  456. package/src/operation-journal/reducer.ts +112 -0
  457. package/src/operation-journal/s3.ts +884 -0
  458. package/src/operation-journal.ts +51 -0
  459. package/src/platform/bun.ts +38 -0
  460. package/src/platform/credentials.ts +1151 -0
  461. package/src/platform/host-support.ts +4 -0
  462. package/src/platform/node.ts +38 -0
  463. package/src/platform/release-runtime.ts +47 -0
  464. package/src/platform/services.ts +57 -0
  465. package/src/platform/source-observer.ts +193 -0
  466. package/src/provider-sdk.ts +48 -0
  467. package/src/publication/adapter.ts +132 -0
  468. package/src/publication/authority.ts +397 -0
  469. package/src/publication/catalog-git.ts +603 -0
  470. package/src/publication/claim.ts +51 -0
  471. package/src/publication/coordinator.ts +578 -0
  472. package/src/publication/github.ts +1022 -0
  473. package/src/publication/http.ts +101 -0
  474. package/src/publication/index.ts +4 -0
  475. package/src/publication/npm.ts +525 -0
  476. package/src/publication/profiles.ts +94 -0
  477. package/src/publication/publisher.ts +130 -0
  478. package/src/publication/pypi.ts +463 -0
  479. package/src/publication/recovery.ts +349 -0
  480. package/src/publication/report.ts +628 -0
  481. package/src/recipes/config.ts +395 -0
  482. package/src/release/capabilities.ts +460 -0
  483. package/src/release/compiler.ts +28 -0
  484. package/src/release/config.ts +12 -0
  485. package/src/release/context.ts +223 -0
  486. package/src/release/graph.ts +866 -0
  487. package/src/release/inspect.ts +83 -0
  488. package/src/release/prepare.ts +1329 -0
  489. package/src/release/prepared-ref.ts +193 -0
  490. package/src/release/prepared-store.ts +378 -0
  491. package/src/release/prepared.ts +299 -0
  492. package/src/release/staging.ts +257 -0
  493. package/src/resolve/authored.ts +64 -0
  494. package/src/resolve/encode.ts +22 -0
  495. package/src/resolve/errors.ts +15 -0
  496. package/src/resolve/facts.ts +18 -0
  497. package/src/resolve/resolve.ts +328 -0
  498. package/src/store.ts +28 -0
  499. package/templates/README.md +55 -72
  500. package/templates/bun-cli-github/README.md +7 -9
  501. package/templates/bun-cli-github/release.config.json +35 -73
  502. package/templates/github-actions/release.yml +74 -0
  503. package/templates/github-actions/reviewed-release.yml +115 -0
  504. package/templates/multi-target-homebrew/README.md +10 -0
  505. package/templates/multi-target-homebrew/release.config.json +43 -60
  506. package/templates/multi-target-scoop/README.md +10 -0
  507. package/templates/multi-target-scoop/release.config.json +43 -62
  508. package/templates/npm-github/release.config.json +25 -38
  509. package/templates/npm-github/reviewed-release.config.json +37 -0
  510. package/templates/npm-only/README.md +10 -0
  511. package/templates/npm-only/release.config.json +15 -30
  512. package/templates/portable-cli/README.md +13 -0
  513. package/templates/portable-cli/release.config.json +53 -0
  514. package/dist/artifacts/adapter.d.ts +0 -39
  515. package/dist/artifacts/adapter.d.ts.map +0 -1
  516. package/dist/artifacts/adapter.js +0 -23
  517. package/dist/artifacts/adapter.js.map +0 -1
  518. package/dist/artifacts/registry.d.ts +0 -21
  519. package/dist/artifacts/registry.d.ts.map +0 -1
  520. package/dist/artifacts/registry.js +0 -21
  521. package/dist/artifacts/registry.js.map +0 -1
  522. package/dist/config/errors.d.ts +0 -24
  523. package/dist/config/errors.d.ts.map +0 -1
  524. package/dist/config/errors.js +0 -19
  525. package/dist/config/errors.js.map +0 -1
  526. package/dist/config/load.d.ts +0 -9
  527. package/dist/config/load.d.ts.map +0 -1
  528. package/dist/config/load.js +0 -29
  529. package/dist/config/load.js.map +0 -1
  530. package/dist/config/schema.d.ts +0 -12
  531. package/dist/config/schema.d.ts.map +0 -1
  532. package/dist/config/schema.js +0 -19
  533. package/dist/config/schema.js.map +0 -1
  534. package/dist/domain/artifact.d.ts +0 -118
  535. package/dist/domain/artifact.d.ts.map +0 -1
  536. package/dist/domain/artifact.js +0 -197
  537. package/dist/domain/artifact.js.map +0 -1
  538. package/dist/domain/evidence.d.ts +0 -59
  539. package/dist/domain/evidence.d.ts.map +0 -1
  540. package/dist/domain/evidence.js +0 -51
  541. package/dist/domain/evidence.js.map +0 -1
  542. package/dist/domain/operation.d.ts +0 -143
  543. package/dist/domain/operation.d.ts.map +0 -1
  544. package/dist/domain/operation.js +0 -198
  545. package/dist/domain/operation.js.map +0 -1
  546. package/dist/domain/release.d.ts +0 -93
  547. package/dist/domain/release.d.ts.map +0 -1
  548. package/dist/domain/release.js +0 -82
  549. package/dist/domain/release.js.map +0 -1
  550. package/dist/domain/remote-state.d.ts +0 -58
  551. package/dist/domain/remote-state.d.ts.map +0 -1
  552. package/dist/domain/remote-state.js +0 -55
  553. package/dist/domain/remote-state.js.map +0 -1
  554. package/dist/domain/target.d.ts +0 -148
  555. package/dist/domain/target.d.ts.map +0 -1
  556. package/dist/domain/target.js +0 -151
  557. package/dist/domain/target.js.map +0 -1
  558. package/dist/host/host.d.ts +0 -32
  559. package/dist/host/host.d.ts.map +0 -1
  560. package/dist/host/host.js +0 -24
  561. package/dist/host/host.js.map +0 -1
  562. package/dist/host/http-live.d.ts +0 -6
  563. package/dist/host/http-live.d.ts.map +0 -1
  564. package/dist/host/http-live.js +0 -86
  565. package/dist/host/http-live.js.map +0 -1
  566. package/dist/host/http.d.ts +0 -43
  567. package/dist/host/http.d.ts.map +0 -1
  568. package/dist/host/http.js +0 -59
  569. package/dist/host/http.js.map +0 -1
  570. package/dist/host/platform.d.ts +0 -10
  571. package/dist/host/platform.d.ts.map +0 -1
  572. package/dist/host/platform.js +0 -114
  573. package/dist/host/platform.js.map +0 -1
  574. package/dist/host/test.d.ts +0 -23
  575. package/dist/host/test.d.ts.map +0 -1
  576. package/dist/host/test.js +0 -222
  577. package/dist/host/test.js.map +0 -1
  578. package/dist/internal/workspace-path.d.ts +0 -15
  579. package/dist/internal/workspace-path.d.ts.map +0 -1
  580. package/dist/internal/workspace-path.js +0 -36
  581. package/dist/internal/workspace-path.js.map +0 -1
  582. package/dist/planner/artifact-inventory.d.ts +0 -9
  583. package/dist/planner/artifact-inventory.d.ts.map +0 -1
  584. package/dist/planner/artifact-inventory.js +0 -86
  585. package/dist/planner/artifact-inventory.js.map +0 -1
  586. package/dist/planner/create-release-plan.d.ts +0 -5
  587. package/dist/planner/create-release-plan.d.ts.map +0 -1
  588. package/dist/planner/create-release-plan.js +0 -25
  589. package/dist/planner/create-release-plan.js.map +0 -1
  590. package/dist/planner/errors.d.ts +0 -67
  591. package/dist/planner/errors.d.ts.map +0 -1
  592. package/dist/planner/errors.js +0 -58
  593. package/dist/planner/errors.js.map +0 -1
  594. package/dist/planner/evidence-recorder.d.ts +0 -28
  595. package/dist/planner/evidence-recorder.d.ts.map +0 -1
  596. package/dist/planner/evidence-recorder.js +0 -362
  597. package/dist/planner/evidence-recorder.js.map +0 -1
  598. package/dist/planner/executor.d.ts +0 -58
  599. package/dist/planner/executor.d.ts.map +0 -1
  600. package/dist/planner/executor.js +0 -147
  601. package/dist/planner/executor.js.map +0 -1
  602. package/dist/planner/normalize-release.d.ts +0 -19
  603. package/dist/planner/normalize-release.d.ts.map +0 -1
  604. package/dist/planner/normalize-release.js +0 -342
  605. package/dist/planner/normalize-release.js.map +0 -1
  606. package/dist/planner/reconcile.d.ts +0 -17
  607. package/dist/planner/reconcile.d.ts.map +0 -1
  608. package/dist/planner/reconcile.js +0 -259
  609. package/dist/planner/reconcile.js.map +0 -1
  610. package/dist/planner/render-plan.d.ts +0 -15
  611. package/dist/planner/render-plan.d.ts.map +0 -1
  612. package/dist/planner/render-plan.js +0 -231
  613. package/dist/planner/render-plan.js.map +0 -1
  614. package/dist/targets/adapter-helpers.d.ts +0 -79
  615. package/dist/targets/adapter-helpers.d.ts.map +0 -1
  616. package/dist/targets/adapter-helpers.js +0 -194
  617. package/dist/targets/adapter-helpers.js.map +0 -1
  618. package/dist/targets/adapter.d.ts +0 -17
  619. package/dist/targets/adapter.d.ts.map +0 -1
  620. package/dist/targets/adapter.js +0 -2
  621. package/dist/targets/adapter.js.map +0 -1
  622. package/dist/targets/github-release.d.ts +0 -25
  623. package/dist/targets/github-release.d.ts.map +0 -1
  624. package/dist/targets/github-release.js +0 -82
  625. package/dist/targets/github-release.js.map +0 -1
  626. package/dist/targets/github.d.ts +0 -11
  627. package/dist/targets/github.d.ts.map +0 -1
  628. package/dist/targets/github.js +0 -117
  629. package/dist/targets/github.js.map +0 -1
  630. package/dist/targets/homebrew.d.ts +0 -11
  631. package/dist/targets/homebrew.d.ts.map +0 -1
  632. package/dist/targets/homebrew.js +0 -210
  633. package/dist/targets/homebrew.js.map +0 -1
  634. package/dist/targets/live.d.ts +0 -5
  635. package/dist/targets/live.d.ts.map +0 -1
  636. package/dist/targets/live.js +0 -50
  637. package/dist/targets/live.js.map +0 -1
  638. package/dist/targets/npm.d.ts +0 -10
  639. package/dist/targets/npm.d.ts.map +0 -1
  640. package/dist/targets/npm.js +0 -112
  641. package/dist/targets/npm.js.map +0 -1
  642. package/dist/targets/pypi.d.ts +0 -11
  643. package/dist/targets/pypi.d.ts.map +0 -1
  644. package/dist/targets/pypi.js +0 -141
  645. package/dist/targets/pypi.js.map +0 -1
  646. package/dist/targets/registry.d.ts +0 -25
  647. package/dist/targets/registry.d.ts.map +0 -1
  648. package/dist/targets/registry.js +0 -34
  649. package/dist/targets/registry.js.map +0 -1
  650. package/dist/targets/scoop.d.ts +0 -11
  651. package/dist/targets/scoop.d.ts.map +0 -1
  652. package/dist/targets/scoop.js +0 -88
  653. package/dist/targets/scoop.js.map +0 -1
  654. package/dist/types/effect-internal.d.ts +0 -5
  655. package/dist/types/effect-internal.d.ts.map +0 -1
  656. package/dist/types/effect-internal.js +0 -2
  657. package/dist/types/effect-internal.js.map +0 -1
  658. package/dist/workflows/config.d.ts +0 -202
  659. package/dist/workflows/config.d.ts.map +0 -1
  660. package/dist/workflows/config.js +0 -420
  661. package/dist/workflows/config.js.map +0 -1
  662. package/dist/workflows/diagnostics.d.ts +0 -62
  663. package/dist/workflows/diagnostics.d.ts.map +0 -1
  664. package/dist/workflows/diagnostics.js +0 -530
  665. package/dist/workflows/diagnostics.js.map +0 -1
  666. package/dist/workflows/distribution.d.ts +0 -25
  667. package/dist/workflows/distribution.d.ts.map +0 -1
  668. package/dist/workflows/distribution.js +0 -24
  669. package/dist/workflows/distribution.js.map +0 -1
  670. package/dist/workflows/evidence.d.ts +0 -17
  671. package/dist/workflows/evidence.d.ts.map +0 -1
  672. package/dist/workflows/evidence.js +0 -32
  673. package/dist/workflows/evidence.js.map +0 -1
  674. package/dist/workflows/index.d.ts +0 -8
  675. package/dist/workflows/index.d.ts.map +0 -1
  676. package/dist/workflows/index.js +0 -7
  677. package/dist/workflows/index.js.map +0 -1
  678. package/dist/workflows/init.d.ts +0 -84
  679. package/dist/workflows/init.d.ts.map +0 -1
  680. package/dist/workflows/init.js +0 -487
  681. package/dist/workflows/init.js.map +0 -1
  682. package/dist/workflows/live.d.ts +0 -9
  683. package/dist/workflows/live.d.ts.map +0 -1
  684. package/dist/workflows/live.js +0 -7
  685. package/dist/workflows/live.js.map +0 -1
  686. package/dist/workflows/options.d.ts +0 -30
  687. package/dist/workflows/options.d.ts.map +0 -1
  688. package/dist/workflows/options.js +0 -16
  689. package/dist/workflows/options.js.map +0 -1
  690. package/examples/non-strict-skips/artifacts/release-example-skips-0.1.0.tgz +0 -1
  691. package/examples/non-strict-skips/release.config.json +0 -31
  692. package/examples/pypi-registry/release.config.json +0 -31
  693. package/templates/github-actions/plan-and-approved-execute.yml +0 -58
  694. package/templates/github-actions/plan-only.yml +0 -33
  695. package/templates/github-actions/trusted-publishing.yml +0 -61
package/ARCHITECTURE.md CHANGED
@@ -1,98 +1,190 @@
1
1
  # Architecture
2
2
 
3
- `@mannyc1/ts-release` is artifact-first, library-first, and CLI-second.
4
-
5
- The package turns release intent into staged artifacts, installable artifact
6
- variants, target-specific distribution plans, evidence, and approved operations.
7
- The CLI and GitHub Action are adapters over those workflows.
8
-
9
- ## Target Boundary
10
-
11
- The intended repository shape separates reusable library code from the
12
- first-party release application:
13
-
14
- ```text
15
- src/ reusable TypeScript release library
16
- apps/release-ts/ official CLI app, Bun runtime shell, and self-release dogfood
17
- apps/ts-release-action/
18
- official JavaScript action app and Node runtime shell
19
- scripts/ repo-wide maintenance gates only
20
- examples/ reusable release config examples
21
- ```
22
-
23
- `src/` contains generic library code only. It may require platform services
24
- such as `FileSystem`, `Path`, `ReleaseCommandRunner`, `ReleaseHttp`, or
25
- `HttpClient`, but it must not provide the concrete Bun runtime for the official
26
- CLI.
27
-
28
- `apps/release-ts/` owns argv parsing, terminal output, Bun runtime assembly,
29
- standalone CLI compilation, and self-release policy/config. A module consumed
30
- only by the official CLI or self-release dogfood belongs in `apps/release-ts/`
31
- unless it is made generic and documented as public library API.
32
-
33
- `apps/ts-release-action/` owns GitHub Action input parsing, GitHub step-summary
34
- and output adapters, evidence artifact upload, and the Node runtime assembly
35
- used by the bundled action. Action code should call public workflow APIs rather
36
- than reaching into CLI modules.
37
-
38
- ## Current Module Taxonomy
39
-
40
- - `domain/` contains durable schema-backed data models, typed errors, and scalar schemas owned by their semantic domain modules, such as release names in `domain/release`, target IDs in `domain/target`, artifact IDs and installable variants in `domain/artifact`, operation IDs in `domain/operation`, and evidence IDs in `domain/evidence`.
41
- - `config/` parses and validates release config into domain values.
42
- - `artifacts/` defines the recipe staging adapter and registry boundary. Recipes are data until a runtime provides a staging layer.
43
- - `planner/` normalizes release intent, builds artifact inventory, carries installable variants, builds plans, renders plans, executes operation data through injected services, records evidence, and reconciles modeled remote state.
44
- - `targets/` models ecosystem-specific target semantics and produces operation data. Target modules may describe commands and HTTP checks, but they do not execute them.
45
- - `host/` defines injectable command and HTTP services plus live or test implementations.
46
- - `workflows/` contains reusable application workflows over config files, init/scaffolding plans, diagnostics, evidence files, and live target/HTTP composition. This is the high-level programmatic surface.
47
- - `apps/release-ts/src/runtime/` contains the Bun runtime shell for the official CLI app.
48
- - `apps/release-ts/src/cli/` parses command-line flags, calls workflows, prints terminal output, and writes user-requested CLI output files.
49
- - `apps/ts-release-action/src/runtime/` contains the Node runtime shell for the bundled GitHub Action.
50
- - `apps/ts-release-action/src/` adapts GitHub Action inputs, outputs, step summaries, and artifact uploads to workflow calls.
51
- - `scripts/` contains repository maintenance checks. Scripts may use app runtime layers, but they are not package library code.
52
-
53
- ## Dependency Direction
54
-
55
- Library modules must not import from `cli/`.
56
-
57
- The normal flow is:
3
+ The release engine has five canonical forms:
58
4
 
59
5
  ```text
60
- domain <- config
61
- domain <- planner <- targets
62
- domain <- artifacts
63
- domain <- host
64
- workflows -> config/artifacts/planner/host/targets
65
- apps/release-ts runtime -> host/workflows/platform layers
66
- apps/release-ts cli -> workflows/runtime boundary
67
- apps/ts-release-action runtime -> host/workflows/platform layers
68
- apps/ts-release-action action -> workflows/runtime boundary
6
+ authored intent
7
+ observe and resolve
8
+ verified context
9
+ compile and stage
10
+ ephemeral graph
11
+ execute and capture
12
+ prepared release bytes
13
+ observe destinations
14
+ publication status or correction proposal
69
15
  ```
70
16
 
71
- `src/index.ts` intentionally stays empty. Public API is the explicit subpath list in `package.json`, checked by `scripts/check-package-exports.ts` and `scripts/check-tree-shaking.ts`. The only workflow aggregate is the opt-in `./workflows` facade.
72
-
73
- ## Public Workflow Surface
74
-
75
- There is no public `./api` facade, and the root package export stays empty. The public workflow modules are named after the work they own:
76
-
77
- - `./workflows` for the curated opt-in `Distribution`, `Config`, `Init`, `Diagnostics`, `Evidence`, and `Live` namespaces.
78
- - `./workflows/distribution` for the artifact-first high-level distribution facade.
79
- - `./workflows/config` for config-file release workflows.
80
- - `./workflows/init` for data-first scaffolding previews and approved writes.
81
- - `./workflows/diagnostics` for static config, auth, and CI readiness reports.
82
- - `./workflows/evidence` for reusable evidence persistence.
83
- - `./workflows/live` for runtime-neutral live target and HTTP services.
84
-
85
- The `./workflows` facade lives at `src/workflows/index.ts` and should only re-export workflow namespaces. Use `Distribution` for the product path: stage artifacts, plan distribution, render target files, execute approved operations, verify, and reconcile. Use exact workflow leaf imports for maximum tree-shaking or direct option-class access, and lower-level `domain/`, `config/`, `planner/`, `host/`, and `targets/` subpaths when a caller needs more control than the workflow modules provide.
86
-
87
- ## Boundary Rules
88
-
89
- - Publish operations are data until execution is explicitly approved.
90
- - `Effect.run*` belongs at true runtime boundaries.
91
- - Reusable effectful operations use `Effect.fn`; inline orchestration bodies use `Effect.gen`.
92
- - Durable models, options, target variants, and typed errors use `Schema.Class`, `Schema.TaggedClass`, and `Schema.TaggedErrorClass`.
93
- - Layers are provided at CLI, action, runtime, script, application, and test boundaries.
94
- - Config parsing, artifact staging, distribution planning, evidence persistence, reconciliation, and approved execution are library workflows, not CLI behavior.
95
- - Terminal formatting, argv parsing, and `--out` file writing belong in
96
- `apps/release-ts/src/cli/`.
97
- - GitHub Action input parsing, output names, step summaries, and evidence artifact
98
- uploads belong in `apps/ts-release-action/src/`.
17
+ Authored intent is human configuration. Verified context binds it to a clean
18
+ source tree, package manifest, commit, tree, and repository facts. Preparation
19
+ materializes that exact commit rather than executing against ambient workspace
20
+ bytes. The graph is a derived in-process execution form: it is recomputable,
21
+ not transported authority. A complete `prepared-release/v2` manifest plus
22
+ content-addressed blobs is the durable cross-process boundary. Applications
23
+ carry only a content-addressed prepared reference; its host store owns path or
24
+ artifact resolution and provenance verification. Destination observation is
25
+ the authority for publication progress.
26
+
27
+ ## Ownership
28
+
29
+ - `src/resolve` decodes authored intent and resolves observed facts.
30
+ - `src/release` compiles the graph, executes native preparation, and stores or
31
+ inspects the prepared release.
32
+ - `src/publication` owns the provider-neutral fact/decision/attempt/report
33
+ coordinator and provider subjects.
34
+ - `src/correction` binds provider-specific correction requests to exact
35
+ prepared subjects; catalog Git installs the sole conditional correction writer.
36
+ - `src/operation-journal` owns the provider-neutral opaque event envelope,
37
+ finite transition reducer, and the one S3 conditional-write protocol. It
38
+ does not decode provider payloads or acquire cloud credentials.
39
+ - `src/operation-journal/aws` owns the sole production backend: one sealed
40
+ GitHub-OIDC/STS session and exact IAM/S3 policy and object boundary. The core
41
+ subpath does not load the AWS SDK.
42
+ - `src/api` exposes the public lifecycle used by CLI, Action, and library users.
43
+ - `src/platform` supplies Node or Bun filesystem, process, HTTP, durable-store,
44
+ and opaque credential sinks at the host boundary.
45
+ - `apps/release-ts` owns CLI parsing and file I/O.
46
+ - `apps/ts-release-action` owns three contained Action commands and reports.
47
+ - `apps/ts-release-agents` owns the single tracked agent projection source.
48
+
49
+ ## Preparation
50
+
51
+ The compiler lowers useful local work to `CommandCheck` and
52
+ `CommandArtifact`. Checks validate an existing declared input. Artifacts
53
+ generate or transform declared regular files; their bytes are hashed into the
54
+ prepared release. `builder: "command"` is authoring sugar for the same artifact
55
+ primitive. Graph dependencies use declared artifact references, so independent
56
+ node order is not a user contract.
57
+
58
+ Commands are trusted local argv code with no authored host environment values;
59
+ the runtime rejects every nonempty `environmentNames` request before starting
60
+ a subprocess and may retain only `PATH` to locate the argv executable. They are
61
+ not a sandbox, plugin runtime, lifecycle hook system, or remote-effect escape
62
+ hatch. Staging materializes the verified commit into a fresh private root,
63
+ rejects input mutation, verifies source identity after each command, and
64
+ captures only declared regular-file outputs. Partition and merge are reserved
65
+ input tags that fail with `PreparationModeUnsupported`; no partial object is
66
+ durably committed.
67
+
68
+ ## Publication and correction
69
+
70
+ Each destination subject is observed before mutation and again afterward.
71
+ Equivalent content is skipped; mutation requires a typed provider decision;
72
+ conflicts and inconclusive results stop; and an unknown response is resolved
73
+ only by a later exact observation. The coordinator therefore tolerates reruns
74
+ and lost responses without claiming exactly-once behavior or atomic rollback.
75
+
76
+ PyPI adds a stricter history boundary because a filename is permanently
77
+ consumed and an upload is unsafe to replay after response loss. Every PyPI
78
+ token subject is an exact file and must atomically acquire a terminal claim
79
+ from a durable store shared by all runners before mutation authority is read.
80
+ The stock CLI and Action install no pretend runner-local substitute and fail
81
+ closed; external hosts can supply the claim store through the Node, Bun, or
82
+ custom host layer constructors. Trusted publishing remains owned by the
83
+ official external PyPA Action rather than an undocumented in-process OIDC
84
+ exchange.
85
+
86
+ Corrections are separate typed intents. npm deprecation and GitHub release
87
+ amendment requests are bound to exact prepared subjects and produce canonical
88
+ external proposals because neither provider exposes a proved conditional
89
+ write for the observed generation. Catalog Git installs one
90
+ `forward-catalog-state` adapter: a SemVer-newer replacement deterministically
91
+ renders new consumer bytes and a corrected state record, then conditionally
92
+ updates both against the exact old pair and observed branch commit.
93
+
94
+ ## Hosts and targets
95
+
96
+ Execution hosts, artifact targets, and native-tool hosts are independent axes.
97
+ Linux is the only installed execution host. The Bun builder cross-compiles the
98
+ advertised Linux and macOS x64/arm64 artifacts, but a target triple is not
99
+ execution-host evidence. The self-release does not distribute a Windows
100
+ ts-release binary. WSL is treated as Linux. Preparation and network-denied
101
+ commands require the external Bun executable and `libseccomp.so.2`; even a
102
+ standalone CLI binary is not a self-contained substitute for those native tools.
103
+
104
+ ## Host automation
105
+
106
+ The CLI and Action call the same public operations. The automatic workflow
107
+ persists and reload-verifies the complete prepared release before the
108
+ coordinator can acquire mutation authority. A host environment can gate that
109
+ publication job, but identity and consent remain host records rather than
110
+ release-engine data. The Action's redacted report is a workflow artifact; the
111
+ prepared bundle continues to use the dedicated content-addressed Action store.
112
+
113
+ External library integrations use the supported `store` structural contract
114
+ and the `host` layer constructor. The constructor installs custom source/run,
115
+ prepared-store, credential-acquisition, HTTP-authorization, and optional
116
+ shared publication-claim values behind
117
+ the engine's private service tags. Credential values remain host-owned; the
118
+ public seam carries only prepared requests, opaque grants, safe references,
119
+ typed acquisition failures, and authorized HTTP results.
120
+
121
+ The separate `operation-journal` subpath is not part of the six-operation
122
+ release API. Its credential-agnostic core receives an exact structural S3
123
+ boundary so the protocol can be qualified without live credentials. The
124
+ separate `operation-journal/aws` subpath is the only admitted backend and
125
+ closes over a directly acquired short-lived purpose-scoped session; it exposes
126
+ no profile, ambient credential-chain, endpoint, bucket-selection, or fallback
127
+ input. Operation identities, payloads, and retained objects have fixed
128
+ pre-hash/pre-allocation byte bounds. The
129
+ journal records an immutable event attempt before conditionally advancing one versioned `head.bin`; the
130
+ head version is the only commit point. Every returned acknowledgment follows
131
+ an exact event/head version re-read and full reachable-chain validation.
132
+ Unacknowledged event attempts may be adopted or rebased by a fresh process only
133
+ when one transaction and one legal reducer transition are unambiguous. Reachable
134
+ and orphan attempts sharing a transaction ID must have the same canonical
135
+ logical record and workflow.
136
+
137
+ The authority snapshot distinguishes standard GitHub OIDC claims for the
138
+ caller (`repository`, `ref`, `sha`, `workflow_ref`, and
139
+ `workflow_sha`) from `job_workflow_ref` and `job_workflow_sha` for the called
140
+ reusable workflow. The package validates canonical relationships and exact
141
+ expected-versus-observed equality without embedding a consumer repository,
142
+ ID, environment, subject, or caller filename. The consumer-owned activation
143
+ contract must pin its protected caller workflow and branch; a broader release
144
+ workflow must not possess that authority. The
145
+ snapshot also binds the exact OIDC trust-policy digest. Ref and source SHA are
146
+ never collapsed into one invented claim. Append records
147
+ derive repository/run/attempt from this snapshot. The structural boundary is a
148
+ test and host seam, not policy evidence by itself. The package-owned AWS adapter
149
+ decodes the JWT in memory, re-observes STS caller identity, parses live bucket,
150
+ Object Lock, ownership, and public-access configuration, canonicalizes the
151
+ bucket, role, and OIDC trust policies, and derives every boolean and digest it
152
+ returns. Until that adapter is released and the exact infrastructure,
153
+ opaque-byte workflow topology, and retained-object protocol are qualified, the
154
+ reusable workflow is a permissionless, always-failing interface only.
155
+
156
+ The parsed AWS trust projection is exact `aud`, the frozen environment `sub`,
157
+ repository and immutable repository/owner IDs, caller `workflow`, `ref`,
158
+ `environment`, and called `job_workflow_ref`. Current AWS IAM can condition on
159
+ those GitHub claims directly. `workflow_sha` and `job_workflow_sha` remain
160
+ locally re-observed source evidence; the trust-policy projection does not
161
+ pretend AWS conditions on `job_workflow_sha`.
162
+ The frozen activation selects either the exact name-bound environment subject
163
+ or the exact immutable owner/repository-ID-bound form; validation reconstructs
164
+ the selected form and never falls back to the other. The same STS-admitted
165
+ token is locally pinned to `workflow_dispatch`, a branch ref, public repository
166
+ visibility, and a GitHub-hosted runner. OIDC fetch, every SDK send, and every
167
+ response/body stream have a fixed 10,000 ms wall-clock deadline.
168
+ The reusable `job_workflow_ref` itself is conditioned at an exact lowercase
169
+ 40-hex ts-release commit, and the local claim validator requires that suffix to
170
+ equal `job_workflow_sha`. This makes the AWS boundary immutable even though AWS
171
+ does not expose `job_workflow_sha` as a separate condition key. An activated
172
+ job runs the package on Node 22.22.2 through an `env -i` allowlist; it does not
173
+ inherit a caller's Node 24.14.1 process environment.
174
+
175
+ ## Extension translation
176
+
177
+ The kernel admits extensions only through an owner with a narrow invariant:
178
+
179
+ - tests and policy gates become `CommandCheck` nodes;
180
+ - generated notes, manifests, and agent bundles become declared
181
+ `CommandArtifact` bytes;
182
+ - npm, prebuilt PyPI, GitHub Release, and catalog Git reads/writes remain provider-module operations;
183
+ - environment protection and human authorization remain workflow-host state;
184
+ - announcements remain downstream workflow steps after a complete report.
185
+
186
+ Homebrew and Scoop are typed render modules feeding one exact catalog Git
187
+ provider module. Custom applications may install full provider subjects through
188
+ the library-only SDK; the stock CLI and Action do not discover them from
189
+ configuration. Arbitrary catalog templates are not generic hook behavior hidden inside the kernel. Wrapper-wheel generation
190
+ is not part of the installed prebuilt PyPI capability.
package/CHANGELOG.md ADDED
@@ -0,0 +1,197 @@
1
+ # Changelog
2
+
3
+ ## Unreleased
4
+
5
+ ## 0.3.0 - 2026-09-01
6
+
7
+ ### Self-release hardening
8
+
9
+ - Split credential-free preparation, no-upload npm OIDC certification,
10
+ lightweight tag creation, npm publication, and later GitHub publication
11
+ into five exact-SHA dispatch modes. GitHub and npm consume distinct
12
+ content-addressed prepared bundles
13
+ under separately named environments and least-privilege job permissions;
14
+ no default path receives publication authority.
15
+ - Pin GitHub-hosted runner labels, third-party Actions, Node 22.22.2, Bun
16
+ 1.3.14, and the self-release npm CLI at 11.11.0. Reauthenticate the exact
17
+ checkout against the current public `main` tip immediately before every
18
+ preparation or publication boundary, and reject ambient npm credentials.
19
+ - After npm publication, bind the adopted tarball bytes to registry integrity,
20
+ the exact GitHub SLSA v1 provenance statement and run identity, and npm's
21
+ cryptographic signature audit. Select same-run proof for a fresh mutation
22
+ and authenticate the provenance-named prior run for an exact
23
+ `AlreadyEquivalent` response-loss recovery. Pin Sigstore 4.1.0 from the
24
+ audited npm archive and require the exact Fulcio workflow SAN, OIDC issuer,
25
+ environment-bound ID-qualified repository subject, source/workflow SHA, and
26
+ run-invocation certificate extensions. Preserve
27
+ GitHub tag, release, and asset equivalence checks inside the provider-native
28
+ publisher.
29
+ - Keep every credentialed job free of nonlocal Actions by natively checking
30
+ out the exact current-main candidate and executing its local Action. Stage
31
+ GitHub assets only in a private draft; a fresh later full asset reread is the
32
+ sole authority for PATCH-only public promotion. Bind trusted npm children to
33
+ an empty private home and explicit empty mode-0600 user/global configs.
34
+ - Move final npm certification/publication evidence out of the `id-token:
35
+ write` producer jobs. A dependency-free Node bootstrap validates then drops
36
+ the runner-injected OIDC request authority, binds the exact private report,
37
+ and commits one explicitly non-final handoff. A separate no-environment,
38
+ no-id-token job verifies that artifact and alone retains the final v2
39
+ receipt; missing outputs, changed attempts, and unknown writes fail closed.
40
+
41
+ ### Canonical operation journal
42
+
43
+ - Add a provider-neutral `operation-journal` subpath with one opaque canonical
44
+ event envelope, one finite transition reducer, and one versioned S3
45
+ conditional-write protocol. Durable acknowledgments require exact retained
46
+ event/head re-read and full-chain validation; response loss, CAS conflict,
47
+ and fresh-process orphan recovery are bounded and fail closed. Every retained
48
+ attempt that shares a transaction ID must carry the same opaque logical
49
+ record and workflow, including attempts already reachable from the head.
50
+ - Keep provider codecs and provider calls outside the journal package boundary.
51
+ Add the sole package-owned `operation-journal/aws` adapter: it rejects
52
+ ambient AWS configuration, exchanges a GitHub OIDC token directly for one
53
+ short-lived role session, re-observes STS/IAM/S3 authority, parses the exact
54
+ role/trust/bucket policies, and emits only single-part conditional S3 writes.
55
+ Serialized SDK requests and fakes qualify this code without claiming live
56
+ AWS policy or retained-object qualification. No SQLite, Git ref, Actions
57
+ artifact, alternate endpoint, credential chain, or fallback store is added.
58
+ - Bind caller and called reusable-workflow OIDC refs and source SHAs as
59
+ distinct claims, derive event run coordinates from the observed session, and
60
+ include the exact OIDC trust-policy digest in authority drift checks. Pin the
61
+ called workflow at one immutable commit, admit one frozen name- or
62
+ immutable-ID-bound environment subject, and locally require hosted public
63
+ workflow-dispatch branch claims from the same STS-admitted token. Bound every
64
+ OIDC fetch, AWS SDK send, and object stream by a fixed wall-clock deadline.
65
+ Operation identities, payloads, retained objects, request/response
66
+ coordinates, and JWT bytes are independently bounded, and Actions request
67
+ coordinates are consumed from the environment before use. The
68
+ checked-in reusable workflow remains permissionless and always fails until a
69
+ released adapter, exact infrastructure, opaque-byte call topology, and live
70
+ retained-object protocol are separately qualified.
71
+
72
+ ### PyPI embedded-binary distributions
73
+
74
+ - Reopen the repository-specific PyPI wrapper-wheel decision with four
75
+ deterministic `ts-release` wheels: manylinux 2.17 and macOS 13, each for
76
+ x64 and arm64. Every wheel embeds exactly one Bun-compiled executable and
77
+ exposes the `ts-release` Python console script.
78
+ - Add an isolated manual PyPI workflow. Its build job has read-only repository
79
+ authority; its separate `pypi` environment job grants only `id-token: write`
80
+ and invokes `pypa/gh-action-pypi-publish@release/v1` over the transferred
81
+ four-wheel artifact set.
82
+ - Make native self-release builds use the version-bearing Bun entrypoint and
83
+ require the Linux candidate executable to report the exact manifest version.
84
+
85
+ ## 0.2.2 - 2026-08-14
86
+
87
+ This release delivers the intended `0.2` product relative to `0.0.7` and
88
+ supersedes the incomplete immutable `v0.2.1` release.
89
+
90
+ ### npm release repair
91
+
92
+ - Preserve the canonical, digest-only prepared-store blob as the admitted npm
93
+ publication input, while materializing its exact bytes through a private,
94
+ mode-0600 `.tgz` transport path only for the lifetime of the npm process.
95
+ npm treats a suffixless local path as a package directory; the scoped alias
96
+ gives npm the required file classification without weakening prepared-bundle
97
+ validation or leaving transport bytes behind after success, failure, or
98
+ interruption.
99
+
100
+ ## 0.2.1 - incomplete (2026-08-14)
101
+
102
+ The immutable GitHub tag, release, and configured assets were created, but npm
103
+ did not publish because npm classified the verified digest-only blob path as a
104
+ directory. Those subjects remain an audit record and are superseded by
105
+ `0.2.2`; no `0.2.1` subject was rewritten. This candidate otherwise contained
106
+ the following release content and repairs.
107
+
108
+ ### Release repair
109
+
110
+ - Preserve caller-declared HTTP body media types through the Effect transport,
111
+ so GitHub agent archives retain `application/zip` instead of being rewritten
112
+ to `application/octet-stream`.
113
+ - Authenticate recovery against the canonical workflow path and `head_branch`
114
+ fields returned by GitHub's run-attempt API, allowing an emitted immutable
115
+ prepared reference to be reloaded in a later workflow run.
116
+
117
+ ### Release lifecycle
118
+
119
+ - Replaced the previous `ship` and plan/apply/review command model with one
120
+ lifecycle: `release`, `prepare`, `inspect`, `observe`, `publish`, and
121
+ `correct`. The same lifecycle is available through the Promise API, CLI, and
122
+ GitHub Action.
123
+ - Added complete, content-addressed `prepared-release/v2` bundles. Preparation
124
+ materializes the exact verified commit, binds declared source inputs, checks
125
+ the manifest and blobs, and commits the durable bundle only when every
126
+ declared output is present.
127
+ - Added one-command local release and a one-job automatic GitHub Actions path.
128
+ Protected-environment publication remains an optional two-job host workflow,
129
+ not an identity inside ts-release.
130
+ - Added a strict `bun-npm-github` init preset that discovers the canonical
131
+ repository coordinate and writes explicit npm and GitHub authentication
132
+ intent.
133
+
134
+ ### Publication, authentication, and recovery
135
+
136
+ - Retained npm publication and restored explicit trusted-publishing intent.
137
+ npm authentication must select GitHub Actions OIDC or a named token
138
+ credential; credential values remain host-owned and do not enter
139
+ configuration, prepared bytes, reports, or logs.
140
+ - Retained GitHub Releases and asset publication with exact tag, commit,
141
+ release, and asset observation before mutation.
142
+ - Publication now observes every destination before writing. Equivalent
143
+ subjects are skipped, conflicts stop, and inconclusive pre-mutation reads do
144
+ not acquire credentials. A response-lost write remains uncertain until an
145
+ exact later observation converges.
146
+ - Recovery always reloads and verifies the same prepared bundle. It never
147
+ rebuilds from the current checkout as a fallback. Reports preserve partial
148
+ and uncertain outcomes and are redacted before a workflow uploads them.
149
+ - Correction is now proposal-only for the installed npm and GitHub providers.
150
+ `correct` binds intent to an exact prepared subject and emits a canonical
151
+ external-operator proposal; it does not delete or mutate provider state.
152
+
153
+ ### Executable capabilities
154
+
155
+ - Retained Bun compilation, prebuilt-file imports, declared command checks and
156
+ artifact generation, archives, and checksums behind strict configuration and
157
+ default runtime layers.
158
+ - Separated execution-host claims from artifact-target claims. Linux is the
159
+ only execution host, the advertised targets are Linux/macOS x64/arm64, and
160
+ Windows is neither an execution host nor a shipped target.
161
+ - Added generated capability, recovery-profile, and agent-bundle evidence so a
162
+ documented support row must join to executable code and tests.
163
+
164
+ ### Breaking removals and migration
165
+
166
+ - Removed the old `ship`, plan/apply/review, approval, and self-review
167
+ protocols. Migrate automation to `release`, or cross an explicit boundary
168
+ with `prepare` followed by `publish` of the returned prepared reference.
169
+ - Replaced implicit npm credential selection with explicit
170
+ `publish.npm.authentication`. Existing token workflows must name their
171
+ environment credential; GitHub-hosted trusted publishing must author its
172
+ exact attestation relationship.
173
+ - Installed Node consumers now require
174
+ `^22.22.2 || ^24.15.0 || >=26.0.0`. The checked-in GitHub Action is now a
175
+ native Node 24 launcher around a Linux/Bun boundary: advertised workflows
176
+ install pinned Bun, the runtime preloader receives no credentials, and the
177
+ Bun release child receives the runner's Actions-artifact transport. Artifact
178
+ upload/download is executed by a checked-in Node 24 bridge so the official
179
+ client uses native Node streams; bridge requests never serialize the GitHub
180
+ token. This does not change the installed library or CLI's Node engine.
181
+ - PyPI prebuilt publication is temporarily removed despite being available in
182
+ `0.0.7`; it is assigned to a post-`0.2.2` provider-capability wave. PyPI
183
+ wrapper wheels are also removed, and will return only after an explicit
184
+ product decision based on native-wheel or cibuildwheel-class user demand.
185
+ - Homebrew tap and Scoop bucket rendering and delivery are temporarily removed
186
+ despite being available in `0.0.7`; they are assigned to a separate catalog
187
+ delivery wave. Old PyPI, Homebrew, Scoop, and generic catalog configurations
188
+ are rejected rather than accepted as no-ops.
189
+ - A third-party publication-adapter SDK is not part of `0.2.2`. Local extension
190
+ work must use declared command checks or artifact bytes; downstream effects
191
+ belong in the workflow host after a complete release report.
192
+
193
+ ## 0.2.0 - incomplete (2026-08-14)
194
+
195
+ The immutable GitHub tag and release were created, but asset publication did
196
+ not complete and npm was not published. Those immutable subjects remain as an
197
+ audit record and are superseded by `0.2.1`; no `0.2.0` subject was rewritten.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 mannyc2
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.