@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/SPEC.md
CHANGED
|
@@ -1,310 +1,257 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
##
|
|
4
|
-
|
|
5
|
-
The
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
-
|
|
40
|
-
|
|
41
|
-
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
-
|
|
104
|
-
|
|
105
|
-
-
|
|
106
|
-
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
The
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
-
|
|
138
|
-
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
-
|
|
225
|
-
-
|
|
226
|
-
-
|
|
227
|
-
-
|
|
228
|
-
-
|
|
229
|
-
-
|
|
230
|
-
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
-
|
|
241
|
-
-
|
|
242
|
-
-
|
|
243
|
-
-
|
|
244
|
-
-
|
|
245
|
-
-
|
|
246
|
-
-
|
|
247
|
-
-
|
|
248
|
-
-
|
|
249
|
-
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
- the package can stage declared artifacts before target planning
|
|
259
|
-
- the package produces a reviewable distribution plan with no side effects
|
|
260
|
-
- target differences are explicit in the plan
|
|
261
|
-
- installable artifact variants are available before package-manager rendering
|
|
262
|
-
- validation emits structured evidence
|
|
263
|
-
- publish operations are blocked by default
|
|
264
|
-
- irreversible operations require deliberate approval
|
|
265
|
-
- core behavior is covered with deterministic tests
|
|
266
|
-
- a CLI can be rebuilt as a thin adapter over the library
|
|
267
|
-
- a GitHub Action can run the same workflows without embedding CLI behavior
|
|
268
|
-
- starter templates can be checked by the same workflow path as examples
|
|
269
|
-
- adding a new target does not require rewriting the core planner
|
|
270
|
-
|
|
271
|
-
## Biases
|
|
272
|
-
|
|
273
|
-
Prefer:
|
|
274
|
-
|
|
275
|
-
- explicit data over implicit conventions
|
|
276
|
-
- small target adapters over a large universal abstraction
|
|
277
|
-
- official ecosystem validators over homegrown approximations
|
|
278
|
-
- deterministic planning over clever runtime discovery
|
|
279
|
-
- evidence artifacts over terminal-only output
|
|
280
|
-
- hard failures for unsafe ambiguity
|
|
281
|
-
- dry-run as the default mode
|
|
282
|
-
|
|
283
|
-
Avoid:
|
|
284
|
-
|
|
285
|
-
- hook-runner architecture as the core design
|
|
286
|
-
- hidden publish side effects during validation
|
|
287
|
-
- target adapters that silently shell out without modeling risk
|
|
288
|
-
- global process state in the planning layer
|
|
289
|
-
- special cases that only work for one repository shape
|
|
290
|
-
- abstractions that erase important ecosystem differences
|
|
291
|
-
|
|
292
|
-
## Implementation Direction
|
|
293
|
-
|
|
294
|
-
Continue from the data model.
|
|
295
|
-
|
|
296
|
-
Keep the smallest set of types needed to represent release identity, artifact recipes, artifact variants, targets, operations, validation results, execution gates, and evidence. Add target adapters end to end only when they prove the abstractions carry real differences without becoming generic mush.
|
|
297
|
-
|
|
298
|
-
The implementation should stay narrow but honest:
|
|
299
|
-
|
|
300
|
-
1. Load config.
|
|
301
|
-
2. Stage declared artifact recipes when requested.
|
|
302
|
-
3. Normalize into a release model with artifact inventory and variants.
|
|
303
|
-
4. Generate a serializable distribution plan.
|
|
304
|
-
5. Render generated files only through explicit render operations.
|
|
305
|
-
6. Validate with structured evidence.
|
|
306
|
-
7. Print executable operations.
|
|
307
|
-
8. Execute only when explicitly approved.
|
|
308
|
-
9. Verify remote state and record evidence.
|
|
309
|
-
|
|
310
|
-
Everything else should be added only after it has a clear place in that flow.
|
|
1
|
+
# ts-release specification
|
|
2
|
+
|
|
3
|
+
## 1. Public operations
|
|
4
|
+
|
|
5
|
+
The root package exports `inspect`, `prepare`, `observe`, `publish`, `release`,
|
|
6
|
+
and `correct`, plus `makeReleaseApi`, durable-reference codecs, configuration helpers, and
|
|
7
|
+
tagged input/runtime errors. The total observation and release report schemas,
|
|
8
|
+
transient credential acquisition errors, and their secret-free durable causes
|
|
9
|
+
are also public. The constructed API adds `dispose` for its host runtime. CLI
|
|
10
|
+
and Action boundaries call these same operations.
|
|
11
|
+
|
|
12
|
+
## 2. Authored and verified forms
|
|
13
|
+
|
|
14
|
+
Authored configuration is decoded strictly. Resolution combines it with
|
|
15
|
+
observed package and Git facts; disagreement is an error. Verified context
|
|
16
|
+
records the clean source commit/tree and package-manifest digest. Preparation
|
|
17
|
+
materializes that exact commit into a fresh private staging root. Changed,
|
|
18
|
+
ignored, or untracked workspace bytes are never implicit inputs.
|
|
19
|
+
|
|
20
|
+
## 3. Derived graph
|
|
21
|
+
|
|
22
|
+
The graph contains imported artifacts, build, archive, checksum, command check,
|
|
23
|
+
command artifact, typed Homebrew/Scoop rendering, npm publication, exact-file
|
|
24
|
+
PyPI publication, GitHub Release publication, and catalog Git publication
|
|
25
|
+
primitives. It is
|
|
26
|
+
sorted and linked inside one process. It is never serialized as authority and
|
|
27
|
+
never crosses a runner boundary.
|
|
28
|
+
|
|
29
|
+
## 4. Prepared release
|
|
30
|
+
|
|
31
|
+
`prepared-release/v2` is canonical JSON plus content-addressed blobs. A
|
|
32
|
+
`CompletePreparedReleaseRef` is the only public cross-process locator and
|
|
33
|
+
contains content identity, never a local path. The complete manifest records
|
|
34
|
+
materialized source identity, project coordinates, artifact IDs, exact
|
|
35
|
+
sizes/digests/media types, input basis, execution provenance, and provider
|
|
36
|
+
subjects. A prepared store refuses missing, altered, extra, symlinked,
|
|
37
|
+
non-canonical, or producer-mismatched content.
|
|
38
|
+
|
|
39
|
+
An npm trusted-publishing subject also binds the exact verified source commit
|
|
40
|
+
and a versioned GitHub/npm provenance-environment contract. The host validates
|
|
41
|
+
all npm-consumed GitHub run facts before reading OIDC authority, snapshots them
|
|
42
|
+
privately onto the issued workload grant, and projects only that snapshot plus
|
|
43
|
+
the two OIDC request values into the closed npm child.
|
|
44
|
+
|
|
45
|
+
A PyPI publication records one independent subject per prebuilt wheel or gzip
|
|
46
|
+
sdist. Preparation parses archive structure and embedded metadata and requires
|
|
47
|
+
project/version/filename agreement before the file can enter a prepared
|
|
48
|
+
manifest. Each subject binds the closed PyPI/TestPyPI Simple and upload
|
|
49
|
+
endpoints, exact filename, size, SHA-256, media type, and distribution tags.
|
|
50
|
+
|
|
51
|
+
## 5. Observation
|
|
52
|
+
|
|
53
|
+
Publication is subject-based. `observe` uses a read-only report algebra.
|
|
54
|
+
`publish` observes every subject before mutation and again afterward.
|
|
55
|
+
Equivalent subjects are idempotent skips; only a typed provider decision may
|
|
56
|
+
authorize mutation; conflict or inconclusive state blocks. Provider correction
|
|
57
|
+
intent is typed and bound to the prepared digest. npm and GitHub Release
|
|
58
|
+
requests produce external proposals; catalog Git admits one SemVer-forward
|
|
59
|
+
conditional replacement of its exact target/state pair. Credential unavailability
|
|
60
|
+
and unsupported authentication remain total report data with distinct tagged,
|
|
61
|
+
secret-free causes; they do not escape as publication control flow.
|
|
62
|
+
|
|
63
|
+
PyPI observation accepts only a standards-shaped JSON Simple response with
|
|
64
|
+
API major 1 and the API 1.1 equality fields. A visible project page that omits
|
|
65
|
+
the exact filename can authorize token upload only after the host atomically
|
|
66
|
+
creates a shared, durable, terminal claim for the prepared subject. Claim
|
|
67
|
+
unavailability or occupation blocks before credential acquisition. A project
|
|
68
|
+
404 never authorizes first creation. Yanked files conflict; no yank mutation
|
|
69
|
+
is installed. Trusted publishing is an external PyPA Action path and is
|
|
70
|
+
rejected by the stock coordinator before dispatch.
|
|
71
|
+
|
|
72
|
+
Catalog observation reads the exact branch ref, commit, complete untruncated
|
|
73
|
+
recursive tree, and both managed blobs. Mutation creates exact blobs and a tree
|
|
74
|
+
with the observed root as `base_tree`, verifies every unrelated object and mode
|
|
75
|
+
in the proposed full tree, creates a commit with the observed commit as its
|
|
76
|
+
sole parent, and updates the ref with `force: false`. A catalog subject depends
|
|
77
|
+
on convergence of its configured GitHub release asset subjects.
|
|
78
|
+
|
|
79
|
+
## 6. Native preparation
|
|
80
|
+
|
|
81
|
+
`CommandCheck` runs trusted argv code against declared inputs. `CommandArtifact`
|
|
82
|
+
generates or transforms declared regular-file outputs. `builder: "command"`
|
|
83
|
+
lowers to the same primitive. Generic preparation children inherit no host
|
|
84
|
+
environment. A nonempty authored environment request is rejected unless a
|
|
85
|
+
future dedicated capability certifies its safe build-time contract. There is
|
|
86
|
+
no generic hook or remote-publisher escape hatch. The public API recognizes
|
|
87
|
+
reserved partition and merge preparation modes and rejects them with
|
|
88
|
+
`PreparationModeUnsupported`; it creates no partial durable object.
|
|
89
|
+
|
|
90
|
+
## 7. Hosts
|
|
91
|
+
|
|
92
|
+
The capability registry owns separate execution-host, artifact-target, and
|
|
93
|
+
native-tool-host axes. Linux is the only installed execution host. The exact
|
|
94
|
+
advertised artifact targets are Linux x64/arm64 and macOS x64/arm64; macOS
|
|
95
|
+
binaries are cross-compiled artifacts, not execution-host evidence. Windows is
|
|
96
|
+
neither an execution host nor an advertised artifact target, and the
|
|
97
|
+
self-release does not distribute a Windows ts-release binary. WSL is Linux for
|
|
98
|
+
this contract.
|
|
99
|
+
|
|
100
|
+
The checked-in Action is a Linux workflow boundary: its composite step
|
|
101
|
+
requires Bash and a workflow-installed, pinned Bun runtime. The distributed
|
|
102
|
+
package and CLI run under the declared Node engine, but preparation and
|
|
103
|
+
network-denied command execution delegate to an external Bun executable whose
|
|
104
|
+
Linux child loads `libseccomp.so.2`. The standalone CLI is therefore not a
|
|
105
|
+
self-contained preparation sandbox. These declared axes still require the
|
|
106
|
+
clean-candidate public-entrypoint smoke matrix before release certification.
|
|
107
|
+
|
|
108
|
+
## 8. Error and safety contract
|
|
109
|
+
|
|
110
|
+
Structured Effect errors cross the library boundary. A pre-commit preparation
|
|
111
|
+
failure proves no remote mutation; a post-commit abort carries the exact
|
|
112
|
+
durable reference. Filesystem paths are contained and symlink-checked. Public
|
|
113
|
+
inputs contain no credential values. Secrets are acquired through host layers,
|
|
114
|
+
consumed only by audience- and purpose-checking sinks, and redacted at process
|
|
115
|
+
output boundaries. Host credential error text never enters durable reports;
|
|
116
|
+
only request-derived, secret-free cause data does. The Action validates its
|
|
117
|
+
inputs before calling the library.
|
|
118
|
+
|
|
119
|
+
## 9. Recovery limits
|
|
120
|
+
|
|
121
|
+
Rerun the same prepared bytes. A partial release is possible; atomic rollback,
|
|
122
|
+
deletion, exactly-once publication, and universal correction are not claimed.
|
|
123
|
+
PyPI filenames remain consumed after deletion and uncertain token uploads are
|
|
124
|
+
never blindly replayed; the required terminal claim survives process loss and
|
|
125
|
+
must be shared by every runner capable of dispatching that subject.
|
|
126
|
+
Read-convergence timing defaults are conservative assumed bounds until live
|
|
127
|
+
post-write evidence measures them. Announcements and unsupported providers
|
|
128
|
+
remain outside the retained product.
|
|
129
|
+
|
|
130
|
+
The provider-neutral `operation-journal` subpath admits only
|
|
131
|
+
`IntentRecorded`, `ReceiptRecorded`, zero or more `ObservationRecorded`, and
|
|
132
|
+
`TerminalRecorded`, with `OutcomeUnknown` as the terminal alternative from an
|
|
133
|
+
intent. Payload bytes and their codec identifier are opaque to ts-release.
|
|
134
|
+
There is one storage protocol: a versioned, Object-Locked S3 namespace with
|
|
135
|
+
immutable conditional event creates and conditional `head.bin` replacement.
|
|
136
|
+
An acknowledgment exists only after exact retained event/head versions and the
|
|
137
|
+
complete chain are re-read. Conditional conflicts, response loss, and process
|
|
138
|
+
death are reconciled by bounded exact-version reads; ambiguity stops and never
|
|
139
|
+
authorizes a provider resubmission. Credential acquisition, provider codecs,
|
|
140
|
+
and provider calls remain host/consumer responsibilities.
|
|
141
|
+
|
|
142
|
+
The release point must equal the re-observed caller `sha`. Standard OIDC claims
|
|
143
|
+
identify the caller while `job_workflow_ref` and
|
|
144
|
+
`job_workflow_sha` separately identify the called ts-release workflow and its
|
|
145
|
+
exact source commit. The OIDC trust-policy digest is independent of the bucket
|
|
146
|
+
and role-policy digests. Repository ID, run ID, and run attempt in journal
|
|
147
|
+
events come only from that observed session; they are not append inputs. The
|
|
148
|
+
checked-in reusable workflow is inert and always fails without OIDC permission
|
|
149
|
+
until the package-owned `operation-journal/aws` adapter has been released and
|
|
150
|
+
the exact infrastructure, opaque-byte workflow topology, and retained-object
|
|
151
|
+
protocol have been separately qualified. Local fake and serialized-request
|
|
152
|
+
tests establish implementation behavior, not live AWS certification.
|
|
153
|
+
AWS trust must compare `job_workflow_ref` to the reusable workflow path at one
|
|
154
|
+
lowercase 40-hex ts-release commit. The called workflow ref must end in the
|
|
155
|
+
same value as `job_workflow_sha`; branch and tag refs are rejected before STS.
|
|
156
|
+
|
|
157
|
+
The library embeds no consumer repository, immutable ID, environment, subject,
|
|
158
|
+
or caller-workflow name. An activation contract supplies those exact expected
|
|
159
|
+
values and the adapter re-observes them. Its parsed trust projection must bind
|
|
160
|
+
`aud`, the frozen environment `sub`, repository/IDs, caller `workflow`, `ref`,
|
|
161
|
+
`environment`, and `job_workflow_ref`. Workflow source SHAs remain separately
|
|
162
|
+
re-observed evidence and are not misrepresented as AWS trust-condition keys.
|
|
163
|
+
The activation contract freezes either the exact name-bound environment
|
|
164
|
+
subject or its immutable owner/repository-ID-bound form; the adapter admits no
|
|
165
|
+
fallback between those forms. After STS admits the token, local equality also
|
|
166
|
+
requires `event_name=workflow_dispatch`, `ref_type=branch`,
|
|
167
|
+
`repository_visibility=public`, and `runner_environment=github-hosted`.
|
|
168
|
+
The adapter accepts no credential, profile, endpoint, or alternate-store input:
|
|
169
|
+
it rejects ambient AWS variables and shared files, directly exchanges GitHub
|
|
170
|
+
OIDC for one short-lived role session, and derives governance facts from signed
|
|
171
|
+
STS/IAM/S3 responses and exact parsed policies rather than caller booleans.
|
|
172
|
+
Operation identities are limited to 65,536 bytes, consumer payloads to
|
|
173
|
+
1,048,576 bytes, and every retained object to 1,500,000 bytes; declared and
|
|
174
|
+
streamed lengths are both enforced before hashing or full object allocation.
|
|
175
|
+
Every OIDC fetch, AWS SDK send, and response/body stream is
|
|
176
|
+
bounded by one fixed 10,000 ms wall-clock deadline. The activated reusable job
|
|
177
|
+
uses pinned Node 22.22.2 and an
|
|
178
|
+
`env -i` allowlist. Node 24.14.1 is not in this package's engine because the
|
|
179
|
+
authoritative transitive floor begins at Node 24.15.0.
|
|
180
|
+
|
|
181
|
+
## 10. Product evidence
|
|
182
|
+
|
|
183
|
+
In the source distribution, the generated capability inventory is joined
|
|
184
|
+
one-to-one from executable module values and dated evidence. Evidence records
|
|
185
|
+
contain sanitized references only and cannot configure runtime support. A
|
|
186
|
+
source checkout, configuration field, detached test, or protocol double is not
|
|
187
|
+
release certification.
|
|
188
|
+
|
|
189
|
+
## 11. Distribution
|
|
190
|
+
|
|
191
|
+
The canonical package identity is `@mannyc1/ts-release`. The canonical Action
|
|
192
|
+
is the monorepo subpath `mannyc2/ts-release/apps/ts-release-action`. Public
|
|
193
|
+
consumer documents bind an immutable version only when its tag targets the
|
|
194
|
+
exact certified result commit before the package README becomes visible.
|
|
195
|
+
Installed Node package consumers require
|
|
196
|
+
`^22.22.2 || ^24.15.0 || >=26.0.0`. The checked-in Action declares a composite
|
|
197
|
+
runtime and runs `dist/index.js` with the pinned Bun installed earlier in each
|
|
198
|
+
advertised Linux workflow. Its entrypoint evidence is separate from installed
|
|
199
|
+
package evidence and does not alter the package's Node engine. The packaged
|
|
200
|
+
Node CLI still requires external Bun and, for network-denied commands on its
|
|
201
|
+
Linux execution host, `libseccomp.so.2`.
|
|
202
|
+
|
|
203
|
+
## 12. Non-goals
|
|
204
|
+
|
|
205
|
+
The engine does not transport host-gate identity or persist execution history as authority,
|
|
206
|
+
provide generic lifecycle hooks, or claim to be a language-specific clone of
|
|
207
|
+
another release product. Arbitrary catalog templates, engine-owned downstream
|
|
208
|
+
announcements, dynamic adapter discovery, and command publishers are not
|
|
209
|
+
capabilities installed in the stock kernel.
|
|
210
|
+
|
|
211
|
+
## 13. Root export audit
|
|
212
|
+
|
|
213
|
+
The root runtime exports are exactly:
|
|
214
|
+
|
|
215
|
+
- `AuthoredGithubReleaseAmendment`
|
|
216
|
+
- `AuthoredCatalogForwardCorrection`
|
|
217
|
+
- `AuthoredNpmDeprecation`
|
|
218
|
+
- `CompletePreparedReleaseRef`
|
|
219
|
+
- `CorrectionReport`
|
|
220
|
+
- `CredentialFailureCause`
|
|
221
|
+
- `CredentialStrategyUnsupported`
|
|
222
|
+
- `CredentialStrategyUnsupportedCause`
|
|
223
|
+
- `CredentialUnavailable`
|
|
224
|
+
- `CredentialUnavailableCause`
|
|
225
|
+
- `GitHubActionsCompletePreparedReleaseRef`
|
|
226
|
+
- `LocalCompletePreparedReleaseRef`
|
|
227
|
+
- `ObservationReport`
|
|
228
|
+
- `PreparationModeUnsupported`
|
|
229
|
+
- `PreparedReleaseRefCodecError`
|
|
230
|
+
- `PreparedReleaseRefMalformedError`
|
|
231
|
+
- `PreparedReleaseRefUnknownSchemeError`
|
|
232
|
+
- `ReleaseAbortedError`
|
|
233
|
+
- `ReleaseIncompleteError`
|
|
234
|
+
- `ReleasePreparationError`
|
|
235
|
+
- `ReleaseReport`
|
|
236
|
+
- `correct`
|
|
237
|
+
- `decodeAuthoredCorrection`
|
|
238
|
+
- `decodeCompletePreparedReleaseRef`
|
|
239
|
+
- `defineRelease`
|
|
240
|
+
- `encodeCompletePreparedReleaseRef`
|
|
241
|
+
- `encodeResolvedConfig`
|
|
242
|
+
- `inspect`
|
|
243
|
+
- `makeGitHubActionsCompletePreparedReleaseRef`
|
|
244
|
+
- `makeLocalCompletePreparedReleaseRef`
|
|
245
|
+
- `makeReleaseApi`
|
|
246
|
+
- `observe`
|
|
247
|
+
- `prepare`
|
|
248
|
+
- `publish`
|
|
249
|
+
- `release`
|
|
250
|
+
- `ReleaseInputError`
|
|
251
|
+
- `ReleaseRuntime`
|
|
252
|
+
- `resolveConfig`
|
|
253
|
+
- `unsupportedExecutionHost`
|
|
254
|
+
|
|
255
|
+
## 14. License
|
|
256
|
+
|
|
257
|
+
MIT.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# ts-release CLI
|
|
2
|
+
|
|
3
|
+
The CLI exposes exactly seven commands:
|
|
4
|
+
|
|
5
|
+
- `init` writes an explicit preset only after that preset passes strict
|
|
6
|
+
authored-config inspection.
|
|
7
|
+
- `inspect` observes authored configuration or reads a prepared bundle.
|
|
8
|
+
- `prepare` stages native preparations and stores an exact bundle.
|
|
9
|
+
- `observe` reads the remote subjects for one prepared bundle without mutation.
|
|
10
|
+
- `publish` observes and publishes one prepared bundle.
|
|
11
|
+
- `release` composes preparation and publication automatically.
|
|
12
|
+
- `correct` binds one provider-specific correction proposal to the exact
|
|
13
|
+
prepared subject; the installed kernel has no corrective mutation adapter.
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
bun run cli init --preset bun-npm-github
|
|
17
|
+
bun run cli inspect --config release.config.json
|
|
18
|
+
bun run cli release --config release.config.json
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
The published Node bundle is built from `src/cli/node-main.ts`; development
|
|
22
|
+
uses the Bun host entrypoint.
|
|
23
|
+
|
|
24
|
+
The publishing preset first discovers the canonical owner/repository, then
|
|
25
|
+
writes explicit trusted-publishing and GitHub intent and strictly inspects the
|
|
26
|
+
exact generated object. It refuses to guess when repository discovery is
|
|
27
|
+
ambiguous or absent.
|
|
28
|
+
|
|
29
|
+
The preset binds trusted publication to `.github/workflows/release.yml` at
|
|
30
|
+
`refs/heads/main`. Change both `workflow` and `workflowRef` when another exact
|
|
31
|
+
workflow/ref is the intended host; a mismatch is rejected before OIDC request
|
|
32
|
+
material is read.
|
|
33
|
+
|
|
34
|
+
The repository-specific PyPI self-release is separate from that npm/GitHub
|
|
35
|
+
path. `pypi-release.config.json` builds the four Linux/macOS x64/arm64 native
|
|
36
|
+
wheel artifacts, and `scripts/prepare-pypi-distributions.ts` materializes the
|
|
37
|
+
verified set for `.github/workflows/pypi-release.yml`. Its external publisher
|
|
38
|
+
identity is the official PyPA Action bound to the `pypi` GitHub environment;
|
|
39
|
+
the script prepares bytes only and never exchanges OIDC or uploads them.
|