@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.
- package/ARCHITECTURE.md +184 -92
- package/CHANGELOG.md +197 -0
- package/LICENSE +21 -0
- package/README.md +404 -327
- package/SPEC.md +257 -310
- package/apps/release-ts/README.md +39 -0
- package/apps/release-ts/src/cli/command.ts +164 -0
- package/apps/release-ts/src/cli/commands.ts +351 -0
- package/apps/release-ts/src/cli/main.ts +43 -0
- package/apps/release-ts/src/cli/node-main.ts +49 -0
- package/apps/ts-release-agents/LICENSE +21 -0
- package/apps/ts-release-agents/README.md +21 -0
- package/apps/ts-release-agents/evals/cases.json +11 -0
- package/apps/ts-release-agents/manifests/claude.json +5 -0
- package/apps/ts-release-agents/manifests/codex.json +5 -0
- package/apps/ts-release-agents/package.json +11 -0
- package/apps/ts-release-agents/skills/release/SKILL.md +48 -0
- package/apps/ts-release-agents/skills/release/references/configuration.md +18 -0
- package/apps/ts-release-agents/skills/release/references/recovery.md +10 -0
- package/apps/ts-release-agents/skills/release/references/staged-workflow.md +12 -0
- package/apps/ts-release-agents/skills/release/references/target-selection.md +13 -0
- package/apps/ts-release-agents/skills/release/references/verification.md +14 -0
- package/apps/ts-release-agents/src/build.ts +105 -0
- package/apps/ts-release-agents/src/check.ts +122 -0
- package/apps/ts-release-agents/src/install.ts +121 -0
- package/apps/ts-release-agents/test/contract.test.ts +56 -0
- package/apps/ts-release-agents/tsconfig.json +5 -0
- package/dist/api/api.d.ts +15 -0
- package/dist/api/api.d.ts.map +1 -0
- package/dist/api/api.js +244 -0
- package/dist/api/api.js.map +1 -0
- package/dist/api/errors.d.ts +39 -0
- package/dist/api/errors.d.ts.map +1 -0
- package/dist/api/errors.js +32 -0
- package/dist/api/errors.js.map +1 -0
- package/dist/api/input.d.ts +10 -0
- package/dist/api/input.d.ts.map +1 -0
- package/dist/api/input.js +73 -0
- package/dist/api/input.js.map +1 -0
- package/dist/api/runtime.d.ts +18 -0
- package/dist/api/runtime.d.ts.map +1 -0
- package/dist/api/runtime.js +7 -0
- package/dist/api/runtime.js.map +1 -0
- package/dist/api/types.d.ts +76 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +17 -0
- package/dist/api/types.js.map +1 -0
- package/dist/bin/ts-release.js +39346 -0
- package/dist/capabilities/bun-targets.d.ts +3 -0
- package/dist/capabilities/bun-targets.d.ts.map +1 -0
- package/dist/capabilities/bun-targets.js +3 -0
- package/dist/capabilities/bun-targets.js.map +1 -0
- package/dist/capabilities/field-ownership.d.ts +17 -0
- package/dist/capabilities/field-ownership.d.ts.map +1 -0
- package/dist/capabilities/field-ownership.js +40 -0
- package/dist/capabilities/field-ownership.js.map +1 -0
- package/dist/capabilities/module.d.ts +91 -0
- package/dist/capabilities/module.d.ts.map +1 -0
- package/dist/capabilities/module.js +2 -0
- package/dist/capabilities/module.js.map +1 -0
- package/dist/capabilities/registry.d.ts +829 -0
- package/dist/capabilities/registry.d.ts.map +1 -0
- package/dist/capabilities/registry.js +291 -0
- package/dist/capabilities/registry.js.map +1 -0
- package/dist/config/config.d.ts +6 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +42 -0
- package/dist/config/config.js.map +1 -0
- package/dist/correction/coordinator.d.ts +248 -0
- package/dist/correction/coordinator.d.ts.map +1 -0
- package/dist/correction/coordinator.js +274 -0
- package/dist/correction/coordinator.js.map +1 -0
- package/dist/correction/index.d.ts +3 -0
- package/dist/correction/index.d.ts.map +1 -0
- package/dist/correction/index.js +3 -0
- package/dist/correction/index.js.map +1 -0
- package/dist/correction/intent.d.ts +111 -0
- package/dist/correction/intent.d.ts.map +1 -0
- package/dist/correction/intent.js +146 -0
- package/dist/correction/intent.js.map +1 -0
- package/dist/drivers/archive.d.ts +9 -0
- package/dist/drivers/archive.d.ts.map +1 -0
- package/dist/drivers/archive.js +105 -0
- package/dist/drivers/archive.js.map +1 -0
- package/dist/drivers/contain.d.ts +6 -0
- package/dist/drivers/contain.d.ts.map +1 -0
- package/dist/drivers/contain.js +17 -0
- package/dist/drivers/contain.js.map +1 -0
- package/dist/drivers/environment.d.ts +4 -0
- package/dist/drivers/environment.d.ts.map +1 -0
- package/dist/drivers/environment.js +18 -0
- package/dist/drivers/environment.js.map +1 -0
- package/dist/drivers/errors.d.ts +9 -0
- package/dist/drivers/errors.d.ts.map +1 -0
- package/dist/drivers/errors.js +6 -0
- package/dist/drivers/errors.js.map +1 -0
- package/dist/drivers/glob.d.ts +2 -0
- package/dist/drivers/glob.d.ts.map +1 -0
- package/dist/drivers/glob.js +162 -0
- package/dist/drivers/glob.js.map +1 -0
- package/dist/drivers/process.d.ts +48 -0
- package/dist/drivers/process.d.ts.map +1 -0
- package/dist/drivers/process.js +257 -0
- package/dist/drivers/process.js.map +1 -0
- package/dist/drivers/python-wheel.d.ts +21 -0
- package/dist/drivers/python-wheel.d.ts.map +1 -0
- package/dist/drivers/python-wheel.js +109 -0
- package/dist/drivers/python-wheel.js.map +1 -0
- package/dist/drivers/redact.d.ts +4 -0
- package/dist/drivers/redact.d.ts.map +1 -0
- package/dist/drivers/redact.js +24 -0
- package/dist/drivers/redact.js.map +1 -0
- package/dist/drivers/seccomp-helper-source.d.ts +7 -0
- package/dist/drivers/seccomp-helper-source.d.ts.map +1 -0
- package/dist/drivers/seccomp-helper-source.js +121 -0
- package/dist/drivers/seccomp-helper-source.js.map +1 -0
- package/dist/drivers/utils.d.ts +4 -0
- package/dist/drivers/utils.d.ts.map +1 -0
- package/dist/drivers/utils.js +5 -0
- package/dist/drivers/utils.js.map +1 -0
- package/dist/drivers/workspace.d.ts +9 -0
- package/dist/drivers/workspace.d.ts.map +1 -0
- package/dist/drivers/workspace.js +53 -0
- package/dist/drivers/workspace.js.map +1 -0
- package/dist/extensions/provider-adapter.d.ts +48 -0
- package/dist/extensions/provider-adapter.d.ts.map +1 -0
- package/dist/extensions/provider-adapter.js +64 -0
- package/dist/extensions/provider-adapter.js.map +1 -0
- package/dist/host.d.ts +33 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +20 -0
- package/dist/host.js.map +1 -0
- package/dist/index.d.ts +19 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/model/artifact-collection.d.ts +84 -0
- package/dist/model/artifact-collection.d.ts.map +1 -0
- package/dist/model/artifact-collection.js +185 -0
- package/dist/model/artifact-collection.js.map +1 -0
- package/dist/model/authority.d.ts +89 -0
- package/dist/model/authority.d.ts.map +1 -0
- package/dist/model/authority.js +80 -0
- package/dist/model/authority.js.map +1 -0
- package/dist/model/bun-targets.d.ts +34 -0
- package/dist/model/bun-targets.d.ts.map +1 -0
- package/dist/model/bun-targets.js +17 -0
- package/dist/model/bun-targets.js.map +1 -0
- package/dist/model/canonical.d.ts +8 -0
- package/dist/model/canonical.d.ts.map +1 -0
- package/dist/model/canonical.js +205 -0
- package/dist/model/canonical.js.map +1 -0
- package/dist/model/catalog.d.ts +76 -0
- package/dist/model/catalog.d.ts.map +1 -0
- package/dist/model/catalog.js +174 -0
- package/dist/model/catalog.js.map +1 -0
- package/dist/model/digest.d.ts +53 -0
- package/dist/model/digest.d.ts.map +1 -0
- package/dist/model/digest.js +127 -0
- package/dist/model/digest.js.map +1 -0
- package/dist/model/errors.d.ts +14 -0
- package/dist/model/errors.d.ts.map +1 -0
- package/dist/model/errors.js +8 -0
- package/dist/model/errors.js.map +1 -0
- package/dist/model/primitives.d.ts +19 -0
- package/dist/model/primitives.d.ts.map +1 -0
- package/dist/model/primitives.js +18 -0
- package/dist/model/primitives.js.map +1 -0
- package/dist/model/pypi.d.ts +12 -0
- package/dist/model/pypi.d.ts.map +1 -0
- package/dist/model/pypi.js +20 -0
- package/dist/model/pypi.js.map +1 -0
- package/dist/model/python-distribution.d.ts +33 -0
- package/dist/model/python-distribution.d.ts.map +1 -0
- package/dist/model/python-distribution.js +367 -0
- package/dist/model/python-distribution.js.map +1 -0
- package/dist/model/secret-patterns.d.ts +2 -0
- package/dist/model/secret-patterns.d.ts.map +1 -0
- package/dist/model/secret-patterns.js +12 -0
- package/dist/model/secret-patterns.js.map +1 -0
- package/dist/operation-journal/authority.d.ts +3 -0
- package/dist/operation-journal/authority.d.ts.map +1 -0
- package/dist/operation-journal/authority.js +147 -0
- package/dist/operation-journal/authority.js.map +1 -0
- package/dist/operation-journal/aws/deadline.d.ts +12 -0
- package/dist/operation-journal/aws/deadline.d.ts.map +1 -0
- package/dist/operation-journal/aws/deadline.js +38 -0
- package/dist/operation-journal/aws/deadline.js.map +1 -0
- package/dist/operation-journal/aws/oidc.d.ts +27 -0
- package/dist/operation-journal/aws/oidc.d.ts.map +1 -0
- package/dist/operation-journal/aws/oidc.js +361 -0
- package/dist/operation-journal/aws/oidc.js.map +1 -0
- package/dist/operation-journal/aws/policy.d.ts +42 -0
- package/dist/operation-journal/aws/policy.d.ts.map +1 -0
- package/dist/operation-journal/aws/policy.js +404 -0
- package/dist/operation-journal/aws/policy.js.map +1 -0
- package/dist/operation-journal/aws/s3-boundary.d.ts +17 -0
- package/dist/operation-journal/aws/s3-boundary.d.ts.map +1 -0
- package/dist/operation-journal/aws/s3-boundary.js +417 -0
- package/dist/operation-journal/aws/s3-boundary.js.map +1 -0
- package/dist/operation-journal/aws.d.ts +11 -0
- package/dist/operation-journal/aws.d.ts.map +1 -0
- package/dist/operation-journal/aws.js +50 -0
- package/dist/operation-journal/aws.js.map +1 -0
- package/dist/operation-journal/canonical.d.ts +52 -0
- package/dist/operation-journal/canonical.d.ts.map +1 -0
- package/dist/operation-journal/canonical.js +282 -0
- package/dist/operation-journal/canonical.js.map +1 -0
- package/dist/operation-journal/model.d.ts +251 -0
- package/dist/operation-journal/model.d.ts.map +1 -0
- package/dist/operation-journal/model.js +56 -0
- package/dist/operation-journal/model.js.map +1 -0
- package/dist/operation-journal/reducer.d.ts +28 -0
- package/dist/operation-journal/reducer.d.ts.map +1 -0
- package/dist/operation-journal/reducer.js +73 -0
- package/dist/operation-journal/reducer.js.map +1 -0
- package/dist/operation-journal/s3.d.ts +7 -0
- package/dist/operation-journal/s3.d.ts.map +1 -0
- package/dist/operation-journal/s3.js +667 -0
- package/dist/operation-journal/s3.js.map +1 -0
- package/dist/operation-journal.d.ts +14 -0
- package/dist/operation-journal.d.ts.map +1 -0
- package/dist/operation-journal.js +12 -0
- package/dist/operation-journal.js.map +1 -0
- package/dist/platform/bun.d.ts +7 -0
- package/dist/platform/bun.d.ts.map +1 -0
- package/dist/platform/bun.js +15 -0
- package/dist/platform/bun.js.map +1 -0
- package/dist/platform/credentials.d.ts +32 -0
- package/dist/platform/credentials.d.ts.map +1 -0
- package/dist/platform/credentials.js +834 -0
- package/dist/platform/credentials.js.map +1 -0
- package/dist/platform/host-support.d.ts +2 -0
- package/dist/platform/host-support.d.ts.map +1 -0
- package/dist/platform/host-support.js +4 -0
- package/dist/platform/host-support.js.map +1 -0
- package/dist/platform/node.d.ts +7 -0
- package/dist/platform/node.d.ts.map +1 -0
- package/dist/platform/node.js +15 -0
- package/dist/platform/node.js.map +1 -0
- package/dist/platform/release-runtime.d.ts +11 -0
- package/dist/platform/release-runtime.d.ts.map +1 -0
- package/dist/platform/release-runtime.js +34 -0
- package/dist/platform/release-runtime.js.map +1 -0
- package/dist/platform/services.d.ts +15 -0
- package/dist/platform/services.d.ts.map +1 -0
- package/dist/platform/services.js +30 -0
- package/dist/platform/services.js.map +1 -0
- package/dist/platform/source-observer.d.ts +5 -0
- package/dist/platform/source-observer.d.ts.map +1 -0
- package/dist/platform/source-observer.js +159 -0
- package/dist/platform/source-observer.js.map +1 -0
- package/dist/provider-sdk.d.ts +14 -0
- package/dist/provider-sdk.d.ts.map +1 -0
- package/dist/provider-sdk.js +10 -0
- package/dist/provider-sdk.js.map +1 -0
- package/dist/publication/adapter.d.ts +212 -0
- package/dist/publication/adapter.d.ts.map +1 -0
- package/dist/publication/adapter.js +83 -0
- package/dist/publication/adapter.js.map +1 -0
- package/dist/publication/authority.d.ts +137 -0
- package/dist/publication/authority.d.ts.map +1 -0
- package/dist/publication/authority.js +233 -0
- package/dist/publication/authority.js.map +1 -0
- package/dist/publication/catalog-git.d.ts +37 -0
- package/dist/publication/catalog-git.d.ts.map +1 -0
- package/dist/publication/catalog-git.js +451 -0
- package/dist/publication/catalog-git.js.map +1 -0
- package/dist/publication/claim.d.ts +39 -0
- package/dist/publication/claim.d.ts.map +1 -0
- package/dist/publication/claim.js +31 -0
- package/dist/publication/claim.js.map +1 -0
- package/dist/publication/coordinator.d.ts +246 -0
- package/dist/publication/coordinator.d.ts.map +1 -0
- package/dist/publication/coordinator.js +370 -0
- package/dist/publication/coordinator.js.map +1 -0
- package/dist/publication/github.d.ts +36 -0
- package/dist/publication/github.d.ts.map +1 -0
- package/dist/publication/github.js +695 -0
- package/dist/publication/github.js.map +1 -0
- package/dist/publication/http.d.ts +69 -0
- package/dist/publication/http.d.ts.map +1 -0
- package/dist/publication/http.js +29 -0
- package/dist/publication/http.js.map +1 -0
- package/dist/publication/index.d.ts +5 -0
- package/dist/publication/index.d.ts.map +1 -0
- package/dist/publication/index.js +5 -0
- package/dist/publication/index.js.map +1 -0
- package/dist/publication/npm.d.ts +40 -0
- package/dist/publication/npm.d.ts.map +1 -0
- package/dist/publication/npm.js +359 -0
- package/dist/publication/npm.js.map +1 -0
- package/dist/publication/profiles.d.ts +136 -0
- package/dist/publication/profiles.d.ts.map +1 -0
- package/dist/publication/profiles.js +90 -0
- package/dist/publication/profiles.js.map +1 -0
- package/dist/publication/publisher.d.ts +82 -0
- package/dist/publication/publisher.d.ts.map +1 -0
- package/dist/publication/publisher.js +53 -0
- package/dist/publication/publisher.js.map +1 -0
- package/dist/publication/pypi.d.ts +45 -0
- package/dist/publication/pypi.d.ts.map +1 -0
- package/dist/publication/pypi.js +369 -0
- package/dist/publication/pypi.js.map +1 -0
- package/dist/publication/recovery.d.ts +663 -0
- package/dist/publication/recovery.d.ts.map +1 -0
- package/dist/publication/recovery.js +252 -0
- package/dist/publication/recovery.js.map +1 -0
- package/dist/publication/report.d.ts +1061 -0
- package/dist/publication/report.d.ts.map +1 -0
- package/dist/publication/report.js +441 -0
- package/dist/publication/report.js.map +1 -0
- package/dist/recipes/config.d.ts +296 -0
- package/dist/recipes/config.d.ts.map +1 -0
- package/dist/recipes/config.js +325 -0
- package/dist/recipes/config.js.map +1 -0
- package/dist/release/capabilities.d.ts +12 -0
- package/dist/release/capabilities.d.ts.map +1 -0
- package/dist/release/capabilities.js +395 -0
- package/dist/release/capabilities.js.map +1 -0
- package/dist/release/compiler.d.ts +5 -0
- package/dist/release/compiler.d.ts.map +1 -0
- package/dist/release/compiler.js +19 -0
- package/dist/release/compiler.js.map +1 -0
- package/dist/release/config.d.ts +5 -0
- package/dist/release/config.d.ts.map +1 -0
- package/dist/release/config.js +10 -0
- package/dist/release/config.js.map +1 -0
- package/dist/release/context.d.ts +96 -0
- package/dist/release/context.d.ts.map +1 -0
- package/dist/release/context.js +168 -0
- package/dist/release/context.js.map +1 -0
- package/dist/release/graph.d.ts +271 -0
- package/dist/release/graph.d.ts.map +1 -0
- package/dist/release/graph.js +766 -0
- package/dist/release/graph.js.map +1 -0
- package/dist/release/inspect.d.ts +88 -0
- package/dist/release/inspect.d.ts.map +1 -0
- package/dist/release/inspect.js +75 -0
- package/dist/release/inspect.js.map +1 -0
- package/dist/release/prepare.d.ts +24 -0
- package/dist/release/prepare.d.ts.map +1 -0
- package/dist/release/prepare.js +1115 -0
- package/dist/release/prepare.js.map +1 -0
- package/dist/release/prepared-ref.d.ts +60 -0
- package/dist/release/prepared-ref.d.ts.map +1 -0
- package/dist/release/prepared-ref.js +131 -0
- package/dist/release/prepared-ref.js.map +1 -0
- package/dist/release/prepared-store.d.ts +90 -0
- package/dist/release/prepared-store.d.ts.map +1 -0
- package/dist/release/prepared-store.js +339 -0
- package/dist/release/prepared-store.js.map +1 -0
- package/dist/release/prepared.d.ts +172 -0
- package/dist/release/prepared.d.ts.map +1 -0
- package/dist/release/prepared.js +268 -0
- package/dist/release/prepared.js.map +1 -0
- package/dist/release/staging.d.ts +31 -0
- package/dist/release/staging.d.ts.map +1 -0
- package/dist/release/staging.js +218 -0
- package/dist/release/staging.js.map +1 -0
- package/dist/resolve/authored.d.ts +53 -0
- package/dist/resolve/authored.d.ts.map +1 -0
- package/dist/resolve/authored.js +55 -0
- package/dist/resolve/authored.js.map +1 -0
- package/dist/resolve/encode.d.ts +3 -0
- package/dist/resolve/encode.d.ts.map +1 -0
- package/dist/resolve/encode.js +21 -0
- package/dist/resolve/encode.js.map +1 -0
- package/dist/resolve/errors.d.ts +7 -0
- package/dist/resolve/errors.d.ts.map +1 -0
- package/dist/resolve/errors.js +17 -0
- package/dist/resolve/errors.js.map +1 -0
- package/dist/resolve/facts.d.ts +12 -0
- package/dist/resolve/facts.d.ts.map +1 -0
- package/dist/resolve/facts.js +18 -0
- package/dist/resolve/facts.js.map +1 -0
- package/dist/resolve/resolve.d.ts +10 -0
- package/dist/resolve/resolve.d.ts.map +1 -0
- package/dist/resolve/resolve.js +242 -0
- package/dist/resolve/resolve.js.map +1 -0
- package/dist/store.d.ts +11 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +9 -0
- package/dist/store.js.map +1 -0
- package/examples/README.md +20 -30
- package/examples/github-release/release.config.json +11 -18
- package/examples/homebrew-tap/README.md +11 -0
- package/examples/homebrew-tap/release.config.json +40 -28
- package/examples/multi-target/release.config.json +28 -53
- package/examples/npm-first-publish/release.config.json +23 -25
- package/examples/npm-only/release.config.json +22 -30
- package/examples/portable-cli/README.md +17 -0
- package/examples/portable-cli/artifacts/portable-example-0.1.0-darwin-arm64 +1 -0
- package/examples/portable-cli/artifacts/portable-example-0.1.0-darwin-x64 +1 -0
- package/examples/portable-cli/artifacts/portable-example-0.1.0-linux-arm64 +1 -0
- package/examples/portable-cli/artifacts/portable-example-0.1.0-linux-x64 +1 -0
- package/examples/portable-cli/artifacts/portable-example-0.1.0-windows-x64.exe +1 -0
- package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-macosx_10_15_x86_64.whl +1 -0
- package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-macosx_11_0_arm64.whl +1 -0
- package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-manylinux2014_aarch64.whl +1 -0
- package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-manylinux2014_x86_64.whl +1 -0
- package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-win_amd64.whl +1 -0
- package/examples/portable-cli/package.json +9 -0
- package/examples/portable-cli/release.config.json +53 -0
- package/examples/portable-cli/src/cli.ts +3 -0
- package/examples/pypi-registry/README.md +8 -0
- package/examples/scoop-bucket/README.md +10 -0
- package/examples/scoop-bucket/release.config.json +40 -30
- package/package.json +73 -154
- package/src/api/api.ts +365 -0
- package/src/api/errors.ts +36 -0
- package/src/api/input.ts +92 -0
- package/src/api/runtime.ts +14 -0
- package/src/api/types.ts +103 -0
- package/src/capabilities/bun-targets.ts +2 -0
- package/src/capabilities/field-ownership.ts +60 -0
- package/src/capabilities/module.ts +158 -0
- package/src/capabilities/registry.ts +333 -0
- package/src/config/config.ts +48 -0
- package/src/correction/coordinator.ts +336 -0
- package/src/correction/index.ts +2 -0
- package/src/correction/intent.ts +172 -0
- package/src/drivers/archive.ts +111 -0
- package/src/drivers/contain.ts +20 -0
- package/src/drivers/environment.ts +28 -0
- package/src/drivers/errors.ts +6 -0
- package/src/drivers/glob.ts +137 -0
- package/src/drivers/process.ts +339 -0
- package/src/drivers/python-wheel.ts +145 -0
- package/src/drivers/redact.ts +31 -0
- package/src/drivers/seccomp-helper-source.ts +121 -0
- package/src/drivers/utils.ts +10 -0
- package/src/drivers/workspace.ts +46 -0
- package/src/extensions/provider-adapter.ts +99 -0
- package/src/host.ts +140 -0
- package/src/index.ts +64 -0
- package/src/model/artifact-collection.ts +237 -0
- package/src/model/authority.ts +116 -0
- package/src/model/bun-targets.ts +34 -0
- package/src/model/canonical.ts +205 -0
- package/src/model/catalog.ts +220 -0
- package/src/model/digest.ts +172 -0
- package/src/model/errors.ts +6 -0
- package/src/model/primitives.ts +37 -0
- package/src/model/pypi.ts +30 -0
- package/src/model/python-distribution.ts +360 -0
- package/src/model/secret-patterns.ts +11 -0
- package/src/operation-journal/authority.ts +162 -0
- package/src/operation-journal/aws/deadline.ts +41 -0
- package/src/operation-journal/aws/oidc.ts +439 -0
- package/src/operation-journal/aws/policy.ts +491 -0
- package/src/operation-journal/aws/s3-boundary.ts +562 -0
- package/src/operation-journal/aws.ts +60 -0
- package/src/operation-journal/canonical.ts +373 -0
- package/src/operation-journal/model.ts +301 -0
- package/src/operation-journal/reducer.ts +112 -0
- package/src/operation-journal/s3.ts +884 -0
- package/src/operation-journal.ts +51 -0
- package/src/platform/bun.ts +38 -0
- package/src/platform/credentials.ts +1151 -0
- package/src/platform/host-support.ts +4 -0
- package/src/platform/node.ts +38 -0
- package/src/platform/release-runtime.ts +47 -0
- package/src/platform/services.ts +57 -0
- package/src/platform/source-observer.ts +193 -0
- package/src/provider-sdk.ts +48 -0
- package/src/publication/adapter.ts +132 -0
- package/src/publication/authority.ts +397 -0
- package/src/publication/catalog-git.ts +603 -0
- package/src/publication/claim.ts +51 -0
- package/src/publication/coordinator.ts +578 -0
- package/src/publication/github.ts +1022 -0
- package/src/publication/http.ts +101 -0
- package/src/publication/index.ts +4 -0
- package/src/publication/npm.ts +525 -0
- package/src/publication/profiles.ts +94 -0
- package/src/publication/publisher.ts +130 -0
- package/src/publication/pypi.ts +463 -0
- package/src/publication/recovery.ts +349 -0
- package/src/publication/report.ts +628 -0
- package/src/recipes/config.ts +395 -0
- package/src/release/capabilities.ts +460 -0
- package/src/release/compiler.ts +28 -0
- package/src/release/config.ts +12 -0
- package/src/release/context.ts +223 -0
- package/src/release/graph.ts +866 -0
- package/src/release/inspect.ts +83 -0
- package/src/release/prepare.ts +1329 -0
- package/src/release/prepared-ref.ts +193 -0
- package/src/release/prepared-store.ts +378 -0
- package/src/release/prepared.ts +299 -0
- package/src/release/staging.ts +257 -0
- package/src/resolve/authored.ts +64 -0
- package/src/resolve/encode.ts +22 -0
- package/src/resolve/errors.ts +15 -0
- package/src/resolve/facts.ts +18 -0
- package/src/resolve/resolve.ts +328 -0
- package/src/store.ts +28 -0
- package/templates/README.md +55 -72
- package/templates/bun-cli-github/README.md +7 -9
- package/templates/bun-cli-github/release.config.json +35 -73
- package/templates/github-actions/release.yml +74 -0
- package/templates/github-actions/reviewed-release.yml +115 -0
- package/templates/multi-target-homebrew/README.md +10 -0
- package/templates/multi-target-homebrew/release.config.json +43 -60
- package/templates/multi-target-scoop/README.md +10 -0
- package/templates/multi-target-scoop/release.config.json +43 -62
- package/templates/npm-github/release.config.json +25 -38
- package/templates/npm-github/reviewed-release.config.json +37 -0
- package/templates/npm-only/README.md +10 -0
- package/templates/npm-only/release.config.json +15 -30
- package/templates/portable-cli/README.md +13 -0
- package/templates/portable-cli/release.config.json +53 -0
- package/dist/artifacts/adapter.d.ts +0 -39
- package/dist/artifacts/adapter.d.ts.map +0 -1
- package/dist/artifacts/adapter.js +0 -23
- package/dist/artifacts/adapter.js.map +0 -1
- package/dist/artifacts/registry.d.ts +0 -21
- package/dist/artifacts/registry.d.ts.map +0 -1
- package/dist/artifacts/registry.js +0 -21
- package/dist/artifacts/registry.js.map +0 -1
- package/dist/config/errors.d.ts +0 -24
- package/dist/config/errors.d.ts.map +0 -1
- package/dist/config/errors.js +0 -19
- package/dist/config/errors.js.map +0 -1
- package/dist/config/load.d.ts +0 -9
- package/dist/config/load.d.ts.map +0 -1
- package/dist/config/load.js +0 -29
- package/dist/config/load.js.map +0 -1
- package/dist/config/schema.d.ts +0 -12
- package/dist/config/schema.d.ts.map +0 -1
- package/dist/config/schema.js +0 -19
- package/dist/config/schema.js.map +0 -1
- package/dist/domain/artifact.d.ts +0 -118
- package/dist/domain/artifact.d.ts.map +0 -1
- package/dist/domain/artifact.js +0 -197
- package/dist/domain/artifact.js.map +0 -1
- package/dist/domain/evidence.d.ts +0 -59
- package/dist/domain/evidence.d.ts.map +0 -1
- package/dist/domain/evidence.js +0 -51
- package/dist/domain/evidence.js.map +0 -1
- package/dist/domain/operation.d.ts +0 -143
- package/dist/domain/operation.d.ts.map +0 -1
- package/dist/domain/operation.js +0 -198
- package/dist/domain/operation.js.map +0 -1
- package/dist/domain/release.d.ts +0 -93
- package/dist/domain/release.d.ts.map +0 -1
- package/dist/domain/release.js +0 -82
- package/dist/domain/release.js.map +0 -1
- package/dist/domain/remote-state.d.ts +0 -58
- package/dist/domain/remote-state.d.ts.map +0 -1
- package/dist/domain/remote-state.js +0 -55
- package/dist/domain/remote-state.js.map +0 -1
- package/dist/domain/target.d.ts +0 -148
- package/dist/domain/target.d.ts.map +0 -1
- package/dist/domain/target.js +0 -151
- package/dist/domain/target.js.map +0 -1
- package/dist/host/host.d.ts +0 -32
- package/dist/host/host.d.ts.map +0 -1
- package/dist/host/host.js +0 -24
- package/dist/host/host.js.map +0 -1
- package/dist/host/http-live.d.ts +0 -6
- package/dist/host/http-live.d.ts.map +0 -1
- package/dist/host/http-live.js +0 -86
- package/dist/host/http-live.js.map +0 -1
- package/dist/host/http.d.ts +0 -43
- package/dist/host/http.d.ts.map +0 -1
- package/dist/host/http.js +0 -59
- package/dist/host/http.js.map +0 -1
- package/dist/host/platform.d.ts +0 -10
- package/dist/host/platform.d.ts.map +0 -1
- package/dist/host/platform.js +0 -114
- package/dist/host/platform.js.map +0 -1
- package/dist/host/test.d.ts +0 -23
- package/dist/host/test.d.ts.map +0 -1
- package/dist/host/test.js +0 -222
- package/dist/host/test.js.map +0 -1
- package/dist/internal/workspace-path.d.ts +0 -15
- package/dist/internal/workspace-path.d.ts.map +0 -1
- package/dist/internal/workspace-path.js +0 -36
- package/dist/internal/workspace-path.js.map +0 -1
- package/dist/planner/artifact-inventory.d.ts +0 -9
- package/dist/planner/artifact-inventory.d.ts.map +0 -1
- package/dist/planner/artifact-inventory.js +0 -86
- package/dist/planner/artifact-inventory.js.map +0 -1
- package/dist/planner/create-release-plan.d.ts +0 -5
- package/dist/planner/create-release-plan.d.ts.map +0 -1
- package/dist/planner/create-release-plan.js +0 -25
- package/dist/planner/create-release-plan.js.map +0 -1
- package/dist/planner/errors.d.ts +0 -67
- package/dist/planner/errors.d.ts.map +0 -1
- package/dist/planner/errors.js +0 -58
- package/dist/planner/errors.js.map +0 -1
- package/dist/planner/evidence-recorder.d.ts +0 -28
- package/dist/planner/evidence-recorder.d.ts.map +0 -1
- package/dist/planner/evidence-recorder.js +0 -362
- package/dist/planner/evidence-recorder.js.map +0 -1
- package/dist/planner/executor.d.ts +0 -58
- package/dist/planner/executor.d.ts.map +0 -1
- package/dist/planner/executor.js +0 -147
- package/dist/planner/executor.js.map +0 -1
- package/dist/planner/normalize-release.d.ts +0 -19
- package/dist/planner/normalize-release.d.ts.map +0 -1
- package/dist/planner/normalize-release.js +0 -342
- package/dist/planner/normalize-release.js.map +0 -1
- package/dist/planner/reconcile.d.ts +0 -17
- package/dist/planner/reconcile.d.ts.map +0 -1
- package/dist/planner/reconcile.js +0 -259
- package/dist/planner/reconcile.js.map +0 -1
- package/dist/planner/render-plan.d.ts +0 -15
- package/dist/planner/render-plan.d.ts.map +0 -1
- package/dist/planner/render-plan.js +0 -231
- package/dist/planner/render-plan.js.map +0 -1
- package/dist/targets/adapter-helpers.d.ts +0 -79
- package/dist/targets/adapter-helpers.d.ts.map +0 -1
- package/dist/targets/adapter-helpers.js +0 -194
- package/dist/targets/adapter-helpers.js.map +0 -1
- package/dist/targets/adapter.d.ts +0 -17
- package/dist/targets/adapter.d.ts.map +0 -1
- package/dist/targets/adapter.js +0 -2
- package/dist/targets/adapter.js.map +0 -1
- package/dist/targets/github-release.d.ts +0 -25
- package/dist/targets/github-release.d.ts.map +0 -1
- package/dist/targets/github-release.js +0 -82
- package/dist/targets/github-release.js.map +0 -1
- package/dist/targets/github.d.ts +0 -11
- package/dist/targets/github.d.ts.map +0 -1
- package/dist/targets/github.js +0 -117
- package/dist/targets/github.js.map +0 -1
- package/dist/targets/homebrew.d.ts +0 -11
- package/dist/targets/homebrew.d.ts.map +0 -1
- package/dist/targets/homebrew.js +0 -210
- package/dist/targets/homebrew.js.map +0 -1
- package/dist/targets/live.d.ts +0 -5
- package/dist/targets/live.d.ts.map +0 -1
- package/dist/targets/live.js +0 -50
- package/dist/targets/live.js.map +0 -1
- package/dist/targets/npm.d.ts +0 -10
- package/dist/targets/npm.d.ts.map +0 -1
- package/dist/targets/npm.js +0 -112
- package/dist/targets/npm.js.map +0 -1
- package/dist/targets/pypi.d.ts +0 -11
- package/dist/targets/pypi.d.ts.map +0 -1
- package/dist/targets/pypi.js +0 -141
- package/dist/targets/pypi.js.map +0 -1
- package/dist/targets/registry.d.ts +0 -25
- package/dist/targets/registry.d.ts.map +0 -1
- package/dist/targets/registry.js +0 -34
- package/dist/targets/registry.js.map +0 -1
- package/dist/targets/scoop.d.ts +0 -11
- package/dist/targets/scoop.d.ts.map +0 -1
- package/dist/targets/scoop.js +0 -88
- package/dist/targets/scoop.js.map +0 -1
- package/dist/types/effect-internal.d.ts +0 -5
- package/dist/types/effect-internal.d.ts.map +0 -1
- package/dist/types/effect-internal.js +0 -2
- package/dist/types/effect-internal.js.map +0 -1
- package/dist/workflows/config.d.ts +0 -202
- package/dist/workflows/config.d.ts.map +0 -1
- package/dist/workflows/config.js +0 -420
- package/dist/workflows/config.js.map +0 -1
- package/dist/workflows/diagnostics.d.ts +0 -62
- package/dist/workflows/diagnostics.d.ts.map +0 -1
- package/dist/workflows/diagnostics.js +0 -530
- package/dist/workflows/diagnostics.js.map +0 -1
- package/dist/workflows/distribution.d.ts +0 -25
- package/dist/workflows/distribution.d.ts.map +0 -1
- package/dist/workflows/distribution.js +0 -24
- package/dist/workflows/distribution.js.map +0 -1
- package/dist/workflows/evidence.d.ts +0 -17
- package/dist/workflows/evidence.d.ts.map +0 -1
- package/dist/workflows/evidence.js +0 -32
- package/dist/workflows/evidence.js.map +0 -1
- package/dist/workflows/index.d.ts +0 -8
- package/dist/workflows/index.d.ts.map +0 -1
- package/dist/workflows/index.js +0 -7
- package/dist/workflows/index.js.map +0 -1
- package/dist/workflows/init.d.ts +0 -84
- package/dist/workflows/init.d.ts.map +0 -1
- package/dist/workflows/init.js +0 -487
- package/dist/workflows/init.js.map +0 -1
- package/dist/workflows/live.d.ts +0 -9
- package/dist/workflows/live.d.ts.map +0 -1
- package/dist/workflows/live.js +0 -7
- package/dist/workflows/live.js.map +0 -1
- package/dist/workflows/options.d.ts +0 -30
- package/dist/workflows/options.d.ts.map +0 -1
- package/dist/workflows/options.js +0 -16
- package/dist/workflows/options.js.map +0 -1
- package/examples/non-strict-skips/artifacts/release-example-skips-0.1.0.tgz +0 -1
- package/examples/non-strict-skips/release.config.json +0 -31
- package/examples/pypi-registry/release.config.json +0 -31
- package/templates/github-actions/plan-and-approved-execute.yml +0 -58
- package/templates/github-actions/plan-only.yml +0 -33
- package/templates/github-actions/trusted-publishing.yml +0 -61
package/ARCHITECTURE.md
CHANGED
|
@@ -1,98 +1,190 @@
|
|
|
1
1
|
# Architecture
|
|
2
2
|
|
|
3
|
-
|
|
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
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
- `
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
-
|
|
94
|
-
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
-
|
|
98
|
-
|
|
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.
|