@mannyc1/ts-release 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/ARCHITECTURE.md +53 -0
  2. package/README.md +177 -34
  3. package/SPEC.md +8 -1
  4. package/dist/cli/command.d.ts +1 -1
  5. package/dist/cli/command.d.ts.map +1 -1
  6. package/dist/cli/command.js +101 -53
  7. package/dist/cli/command.js.map +1 -1
  8. package/dist/cli/main.js +3 -9
  9. package/dist/cli/main.js.map +1 -1
  10. package/dist/domain/operation.d.ts.map +1 -1
  11. package/dist/domain/operation.js +31 -1
  12. package/dist/domain/operation.js.map +1 -1
  13. package/dist/domain/remote-state.d.ts +90 -0
  14. package/dist/domain/remote-state.d.ts.map +1 -0
  15. package/dist/domain/remote-state.js +85 -0
  16. package/dist/domain/remote-state.js.map +1 -0
  17. package/dist/domain/status.d.ts +43 -0
  18. package/dist/domain/status.d.ts.map +1 -0
  19. package/dist/domain/status.js +50 -0
  20. package/dist/domain/status.js.map +1 -0
  21. package/dist/domain/target.d.ts +32 -2
  22. package/dist/domain/target.d.ts.map +1 -1
  23. package/dist/domain/target.js +35 -2
  24. package/dist/domain/target.js.map +1 -1
  25. package/dist/host/host.d.ts +7 -23
  26. package/dist/host/host.d.ts.map +1 -1
  27. package/dist/host/host.js +3 -22
  28. package/dist/host/host.js.map +1 -1
  29. package/dist/host/http-live.d.ts +1 -2
  30. package/dist/host/http-live.d.ts.map +1 -1
  31. package/dist/host/http-live.js +15 -9
  32. package/dist/host/http-live.js.map +1 -1
  33. package/dist/host/platform.d.ts +10 -0
  34. package/dist/host/platform.d.ts.map +1 -0
  35. package/dist/host/platform.js +121 -0
  36. package/dist/host/platform.js.map +1 -0
  37. package/dist/host/test.d.ts +6 -3
  38. package/dist/host/test.d.ts.map +1 -1
  39. package/dist/host/test.js +111 -25
  40. package/dist/host/test.js.map +1 -1
  41. package/dist/planner/artifact-inventory.d.ts +9 -0
  42. package/dist/planner/artifact-inventory.d.ts.map +1 -0
  43. package/dist/planner/artifact-inventory.js +66 -0
  44. package/dist/planner/artifact-inventory.js.map +1 -0
  45. package/dist/planner/create-release-plan.d.ts +1 -1
  46. package/dist/planner/create-release-plan.d.ts.map +1 -1
  47. package/dist/planner/errors.d.ts +37 -1
  48. package/dist/planner/errors.d.ts.map +1 -1
  49. package/dist/planner/errors.js +30 -0
  50. package/dist/planner/errors.js.map +1 -1
  51. package/dist/planner/evidence-recorder.d.ts +13 -8
  52. package/dist/planner/evidence-recorder.d.ts.map +1 -1
  53. package/dist/planner/evidence-recorder.js +98 -18
  54. package/dist/planner/evidence-recorder.js.map +1 -1
  55. package/dist/planner/executor.d.ts +31 -19
  56. package/dist/planner/executor.d.ts.map +1 -1
  57. package/dist/planner/executor.js +19 -6
  58. package/dist/planner/executor.js.map +1 -1
  59. package/dist/planner/normalize-release.d.ts +2 -2
  60. package/dist/planner/normalize-release.d.ts.map +1 -1
  61. package/dist/planner/normalize-release.js +40 -43
  62. package/dist/planner/normalize-release.js.map +1 -1
  63. package/dist/planner/reconcile.d.ts +17 -0
  64. package/dist/planner/reconcile.d.ts.map +1 -0
  65. package/dist/planner/reconcile.js +280 -0
  66. package/dist/planner/reconcile.js.map +1 -0
  67. package/dist/planner/release-eligibility.d.ts +33 -0
  68. package/dist/planner/release-eligibility.d.ts.map +1 -0
  69. package/dist/planner/release-eligibility.js +172 -0
  70. package/dist/planner/release-eligibility.js.map +1 -0
  71. package/dist/planner/render-plan.d.ts.map +1 -1
  72. package/dist/planner/render-plan.js +21 -0
  73. package/dist/planner/render-plan.js.map +1 -1
  74. package/dist/planner/status.d.ts +40 -0
  75. package/dist/planner/status.d.ts.map +1 -0
  76. package/dist/planner/status.js +336 -0
  77. package/dist/planner/status.js.map +1 -0
  78. package/dist/runtime/bun.d.ts +9 -0
  79. package/dist/runtime/bun.d.ts.map +1 -0
  80. package/dist/runtime/bun.js +10 -0
  81. package/dist/runtime/bun.js.map +1 -0
  82. package/dist/targets/github.d.ts.map +1 -1
  83. package/dist/targets/github.js +17 -13
  84. package/dist/targets/github.js.map +1 -1
  85. package/dist/targets/npm.d.ts +2 -2
  86. package/dist/targets/npm.d.ts.map +1 -1
  87. package/dist/targets/npm.js +74 -14
  88. package/dist/targets/npm.js.map +1 -1
  89. package/dist/version.d.ts +2 -0
  90. package/dist/version.d.ts.map +1 -0
  91. package/dist/version.js +2 -0
  92. package/dist/version.js.map +1 -0
  93. package/dist/workflows/config.d.ts +81 -0
  94. package/dist/workflows/config.d.ts.map +1 -0
  95. package/dist/workflows/config.js +191 -0
  96. package/dist/workflows/config.js.map +1 -0
  97. package/dist/workflows/evidence.d.ts +21 -0
  98. package/dist/workflows/evidence.d.ts.map +1 -0
  99. package/dist/workflows/evidence.js +45 -0
  100. package/dist/workflows/evidence.js.map +1 -0
  101. package/dist/workflows/live.d.ts +7 -0
  102. package/dist/workflows/live.d.ts.map +1 -0
  103. package/dist/workflows/live.js +5 -0
  104. package/dist/workflows/live.js.map +1 -0
  105. package/examples/README.md +6 -3
  106. package/examples/multi-target/release.config.json +6 -1
  107. package/examples/npm-first-publish/release.config.json +32 -0
  108. package/examples/npm-only/release.config.json +6 -1
  109. package/package.json +31 -9
  110. package/dist/cli/programmatic.d.ts +0 -25
  111. package/dist/cli/programmatic.d.ts.map +0 -1
  112. package/dist/cli/programmatic.js +0 -53
  113. package/dist/cli/programmatic.js.map +0 -1
  114. package/dist/host/bun.d.ts +0 -9
  115. package/dist/host/bun.d.ts.map +0 -1
  116. package/dist/host/bun.js +0 -156
  117. package/dist/host/bun.js.map +0 -1
@@ -1,15 +1,47 @@
1
1
  import * as Effect from "effect/Effect";
2
- import { CommandSpec, irreversibleGate, noApprovalGate, PublishCommandOperation, ValidateCommandOperation } from "../domain/operation.js";
2
+ import { CommandSpec, irreversibleGate, noApprovalGate, PublishCommandOperation, ValidateCommandOperation, VerifyRemoteOperation } from "../domain/operation.js";
3
+ import { TargetAuthSetup, TargetCapabilities, TargetRequiredPermission } from "../domain/target.js";
3
4
  import { rejectNoDryRunInStrictMode, targetCapabilitiesFor, validationNoteOperation, validationStrategyForDryRun } from "./adapter-helpers.js";
4
- const envNames = (target) => target.tokenEnv === undefined ? [] : [target.tokenEnv];
5
+ const isTrustedPublishing = (target) => target.trustedPublishing !== undefined;
6
+ const envNames = (target) => isTrustedPublishing(target) || target.tokenEnv === undefined ? [] : [target.tokenEnv];
7
+ const trustedPublishingRequiredEnvNames = [
8
+ "ACTIONS_ID_TOKEN_REQUEST_URL",
9
+ "ACTIONS_ID_TOKEN_REQUEST_TOKEN"
10
+ ];
11
+ const requiredAuthEnvNames = (target) => isTrustedPublishing(target) ? trustedPublishingRequiredEnvNames : envNames(target);
12
+ const redactedAuthEnvNames = (target) => isTrustedPublishing(target) ? trustedPublishingRequiredEnvNames : envNames(target);
5
13
  const npmCommand = (target, args, cwd, includeAuth) => CommandSpec.make({
6
14
  executable: "npm",
7
15
  args: [...args],
8
16
  ...(cwd === undefined ? {} : { cwd }),
9
- requiredEnv: includeAuth ? envNames(target) : [],
10
- redactedEnv: includeAuth ? envNames(target) : []
17
+ requiredEnv: includeAuth ? requiredAuthEnvNames(target) : [],
18
+ redactedEnv: includeAuth ? redactedAuthEnvNames(target) : []
11
19
  });
12
- export const npmTargetCapabilities = (target) => targetCapabilitiesFor(target, validationStrategyForDryRun(target.dryRunSupport));
20
+ const trustedPublishingAuthSetup = (workflow) => TargetAuthSetup.make({
21
+ runsIn: "ci",
22
+ provider: "github-actions",
23
+ workflow,
24
+ requiredPermissions: [
25
+ TargetRequiredPermission.make({ name: "id-token", value: "write" })
26
+ ],
27
+ prerequisites: ["npm-package-exists"]
28
+ });
29
+ export const npmTargetCapabilities = (target) => {
30
+ const trustedPublishing = target.trustedPublishing;
31
+ if (trustedPublishing === undefined) {
32
+ return targetCapabilitiesFor(target, validationStrategyForDryRun(target.dryRunSupport));
33
+ }
34
+ return TargetCapabilities.make({
35
+ targetId: target.id,
36
+ targetTag: target._tag,
37
+ authRequirement: "trusted-publishing",
38
+ dryRunSupport: target.dryRunSupport,
39
+ mutability: target.mutability,
40
+ recovery: target.recovery,
41
+ validationStrategy: validationStrategyForDryRun(target.dryRunSupport),
42
+ authSetup: trustedPublishingAuthSetup(trustedPublishing.workflow)
43
+ });
44
+ };
13
45
  const npmDryRunOperation = (target) => {
14
46
  const dryRunSupport = target.dryRunSupport;
15
47
  return dryRunSupport === "native"
@@ -31,6 +63,32 @@ const npmDryRunOperation = (target) => {
31
63
  skippedMessage: "npm dry-run validation was skipped because this target declares no dry-run support."
32
64
  });
33
65
  };
66
+ const npmAuthOperation = (target) => target.trustedPublishing !== undefined
67
+ ? validationNoteOperation({
68
+ id: `${target.id}:npm-trusted-publishing-auth`,
69
+ targetId: target.id,
70
+ dryRunSupport: "simulated",
71
+ simulatedDescription: "Record npm trusted publishing authentication mode.",
72
+ skippedDescription: "Record skipped npm trusted publishing authentication mode.",
73
+ simulatedMessage: `NPM trusted publishing authenticates during npm publish with CI OIDC; npm whoami does not validate this mode. This target expects provider ${target.trustedPublishing.provider}, workflow ${target.trustedPublishing.workflow}, GitHub Actions permission id-token: write, and package ${target.packageName} to already exist on the registry.`,
74
+ skippedMessage: "NPM trusted publishing authentication validation was skipped."
75
+ })
76
+ : ValidateCommandOperation.make({
77
+ id: `${target.id}:npm-whoami`,
78
+ targetId: target.id,
79
+ description: "Validate npm CLI authentication.",
80
+ risk: "read-only",
81
+ gate: noApprovalGate("npm whoami checks CLI authentication without publishing."),
82
+ command: npmCommand(target, ["whoami", "--registry", target.registry], undefined, true)
83
+ });
84
+ const npmPackageExistsOperation = (target) => ValidateCommandOperation.make({
85
+ id: `${target.id}:npm-package-exists`,
86
+ targetId: target.id,
87
+ description: "Verify npm package exists before trusted publishing.",
88
+ risk: "read-only",
89
+ gate: noApprovalGate("npm view checks package metadata without publishing."),
90
+ command: npmCommand(target, ["view", target.packageName, "name", "--registry", target.registry], undefined, false)
91
+ });
34
92
  const npmPublishArgs = (target) => {
35
93
  const args = ["publish", target.packagePath, "--registry", target.registry];
36
94
  if (target.access !== undefined) {
@@ -52,22 +110,24 @@ export const planNpmOperations = Effect.fn("planNpmOperations")(function* (targe
52
110
  gate: noApprovalGate("CLI availability validation is read-only."),
53
111
  command: npmCommand(target, ["--version"], undefined, false)
54
112
  }),
55
- ValidateCommandOperation.make({
56
- id: `${target.id}:npm-whoami`,
57
- targetId: target.id,
58
- description: "Validate npm CLI authentication.",
59
- risk: "read-only",
60
- gate: noApprovalGate("npm whoami checks CLI authentication without publishing."),
61
- command: npmCommand(target, ["whoami", "--registry", target.registry], undefined, true)
62
- }),
113
+ npmAuthOperation(target),
114
+ ...(target.trustedPublishing?.verifyPackageExists === true ? [npmPackageExistsOperation(target)] : []),
63
115
  npmDryRunOperation(target),
64
116
  PublishCommandOperation.make({
65
117
  id: `${target.id}:npm-publish`,
66
118
  targetId: target.id,
67
- description: `Publish ${model.identity.name}@${model.identity.version} to npm.`,
119
+ description: `Publish ${target.packageName}@${model.identity.version} to npm.`,
68
120
  risk: "irreversible",
69
121
  gate: irreversibleGate("npm package versions are immutable once published."),
70
122
  command: npmCommand(target, npmPublishArgs(target), undefined, true)
123
+ }),
124
+ VerifyRemoteOperation.make({
125
+ id: `${target.id}:npm-version-verify`,
126
+ targetId: target.id,
127
+ description: `Verify ${target.packageName}@${model.identity.version} exists on npm.`,
128
+ risk: "read-only",
129
+ gate: noApprovalGate("npm view verifies published package metadata without publishing."),
130
+ command: npmCommand(target, ["view", `${target.packageName}@${model.identity.version}`, "version", "--registry", target.registry], undefined, false)
71
131
  })
72
132
  ];
73
133
  return operations;
@@ -1 +1 @@
1
- {"version":3,"file":"npm.js","sourceRoot":"","sources":["../../src/targets/npm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"npm.js","sourceRoot":"","sources":["../../src/targets/npm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const RELEASE_VERSION = "0.0.2";
2
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,UAAU,CAAA"}
@@ -0,0 +1,2 @@
1
+ export const RELEASE_VERSION = "0.0.2";
2
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAA"}
@@ -0,0 +1,81 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as FileSystem from "effect/FileSystem";
3
+ import * as Path from "effect/Path";
4
+ import * as Schema from "effect/Schema";
5
+ import { ConfigReadError } from "../config/errors.js";
6
+ import { ReleaseEligibilityCheckError } from "../planner/errors.js";
7
+ import { RELEASE_VERSION } from "../version.js";
8
+ export type * from "../types/effect-internal.js";
9
+ export { RELEASE_VERSION };
10
+ export declare const ReleasePlanFormat: Schema.Literals<readonly ["json", "text"]>;
11
+ export type ReleasePlanFormat = typeof ReleasePlanFormat.Type;
12
+ declare const ReleaseConfigOptions_base: Schema.Class<ReleaseConfigOptions, Schema.Struct<{
13
+ readonly root: Schema.optionalKey<Schema.String>;
14
+ readonly configPath: Schema.optionalKey<Schema.String>;
15
+ }>, {}>;
16
+ export declare class ReleaseConfigOptions extends ReleaseConfigOptions_base {
17
+ }
18
+ declare const PlanReleaseConfigOptions_base: Schema.Class<PlanReleaseConfigOptions, Schema.Struct<{
19
+ readonly root: Schema.optionalKey<Schema.String>;
20
+ readonly configPath: Schema.optionalKey<Schema.String>;
21
+ readonly format: Schema.optionalKey<Schema.Literals<readonly ["json", "text"]>>;
22
+ }>, {}>;
23
+ export declare class PlanReleaseConfigOptions extends PlanReleaseConfigOptions_base {
24
+ }
25
+ declare const RenderReleaseConfigOptions_base: Schema.Class<RenderReleaseConfigOptions, Schema.Struct<{
26
+ readonly root: Schema.optionalKey<Schema.String>;
27
+ readonly configPath: Schema.optionalKey<Schema.String>;
28
+ readonly execute: Schema.optionalKey<Schema.Boolean>;
29
+ }>, {}>;
30
+ export declare class RenderReleaseConfigOptions extends RenderReleaseConfigOptions_base {
31
+ }
32
+ declare const ReleaseExecutionOptions_base: Schema.Class<ReleaseExecutionOptions, Schema.Struct<{
33
+ readonly root: Schema.optionalKey<Schema.String>;
34
+ readonly configPath: Schema.optionalKey<Schema.String>;
35
+ readonly execute: Schema.optionalKey<Schema.Boolean>;
36
+ readonly approveIrreversible: Schema.optionalKey<Schema.Boolean>;
37
+ }>, {}>;
38
+ export declare class ReleaseExecutionOptions extends ReleaseExecutionOptions_base {
39
+ }
40
+ declare const ReleaseStatusOptions_base: Schema.Class<ReleaseStatusOptions, Schema.Struct<{
41
+ readonly root: Schema.optionalKey<Schema.String>;
42
+ readonly configPath: Schema.optionalKey<Schema.String>;
43
+ readonly format: Schema.optionalKey<Schema.Literals<readonly ["json", "text"]>>;
44
+ }>, {}>;
45
+ export declare class ReleaseStatusOptions extends ReleaseStatusOptions_base {
46
+ }
47
+ declare const ReleaseResumeConfigOptions_base: Schema.Class<ReleaseResumeConfigOptions, Schema.Struct<{
48
+ readonly root: Schema.optionalKey<Schema.String>;
49
+ readonly configPath: Schema.optionalKey<Schema.String>;
50
+ readonly execute: Schema.optionalKey<Schema.Boolean>;
51
+ readonly approveIrreversible: Schema.optionalKey<Schema.Boolean>;
52
+ }>, {}>;
53
+ export declare class ReleaseResumeConfigOptions extends ReleaseResumeConfigOptions_base {
54
+ }
55
+ declare const ReleaseReconcileConfigOptions_base: Schema.Class<ReleaseReconcileConfigOptions, Schema.Struct<{
56
+ readonly root: Schema.optionalKey<Schema.String>;
57
+ readonly configPath: Schema.optionalKey<Schema.String>;
58
+ readonly execute: Schema.optionalKey<Schema.Boolean>;
59
+ }>, {}>;
60
+ export declare class ReleaseReconcileConfigOptions extends ReleaseReconcileConfigOptions_base {
61
+ }
62
+ declare const ReleaseEligibilityConfigOptions_base: Schema.Class<ReleaseEligibilityConfigOptions, Schema.Struct<{
63
+ readonly root: Schema.optionalKey<Schema.String>;
64
+ readonly configPath: Schema.optionalKey<Schema.String>;
65
+ readonly packagePath: Schema.optionalKey<Schema.String>;
66
+ }>, {}>;
67
+ export declare class ReleaseEligibilityConfigOptions extends ReleaseEligibilityConfigOptions_base {
68
+ }
69
+ export declare const planReleaseConfig: (options?: PlanReleaseConfigOptions | undefined) => Effect.Effect<import("../domain/release.js").ReleasePlan, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../targets/registry.js").MissingTargetAdapterError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto>;
70
+ export declare const renderReleaseConfigPlan: (options?: PlanReleaseConfigOptions | undefined) => Effect.Effect<string, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../targets/registry.js").MissingTargetAdapterError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto>;
71
+ export declare const renderReleaseConfig: (options?: RenderReleaseConfigOptions | undefined) => Effect.Effect<import("../domain/evidence.js").EvidenceBundle, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../domain/operation.js").ExecutionApprovalError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../planner/errors.js").WorkspaceWriteError | import("../planner/errors.js").OperationFailedError | import("../targets/registry.js").MissingTargetAdapterError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto>;
72
+ export declare const validateReleaseConfig: (options?: ReleaseConfigOptions | undefined) => Effect.Effect<import("../domain/evidence.js").EvidenceBundle, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../domain/operation.js").ExecutionApprovalError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../planner/errors.js").OperationFailedError | import("../targets/registry.js").MissingTargetAdapterError | import("../host/host.js").CommandRunnerError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto>;
73
+ export declare const executeReleaseConfig: (options?: ReleaseExecutionOptions | undefined) => Effect.Effect<import("../domain/evidence.js").EvidenceBundle, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../domain/operation.js").ExecutionApprovalError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../planner/errors.js").OperationFailedError | import("../targets/registry.js").MissingTargetAdapterError | import("../host/host.js").CommandRunnerError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto>;
74
+ export declare const verifyReleaseConfig: (options?: ReleaseConfigOptions | undefined) => Effect.Effect<import("../domain/evidence.js").EvidenceBundle, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../domain/operation.js").ExecutionApprovalError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../planner/errors.js").OperationFailedError | import("../targets/registry.js").MissingTargetAdapterError | import("../host/host.js").CommandRunnerError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto | import("../host/http.js").ReleaseHttp>;
75
+ export declare const runReleaseConfig: (options?: ReleaseExecutionOptions | undefined) => Effect.Effect<import("../domain/evidence.js").ReleaseWorkflowEvidence, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../domain/operation.js").ExecutionApprovalError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../planner/errors.js").WorkspaceWriteError | import("../planner/errors.js").OperationFailedError | import("../targets/registry.js").MissingTargetAdapterError | import("../host/host.js").CommandRunnerError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto | import("../host/http.js").ReleaseHttp>;
76
+ export declare const statusReleaseConfig: (options?: ReleaseStatusOptions | undefined) => Effect.Effect<import("../domain/status.js").ReleaseStatusReport, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../planner/errors.js").EvidenceReadError | import("../targets/registry.js").MissingTargetAdapterError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto>;
77
+ export declare const renderReleaseStatus: (options?: ReleaseStatusOptions | undefined) => Effect.Effect<string, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../planner/errors.js").EvidenceReadError | import("../targets/registry.js").MissingTargetAdapterError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto>;
78
+ export declare const resumeReleaseConfig: (options?: ReleaseResumeConfigOptions | undefined) => Effect.Effect<import("../domain/evidence.js").ReleaseWorkflowEvidence, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../domain/operation.js").ExecutionApprovalError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../planner/errors.js").EvidenceReadError | import("../planner/errors.js").WorkspaceWriteError | import("../planner/errors.js").ResumeBlockedError | import("../planner/errors.js").OperationFailedError | import("../targets/registry.js").MissingTargetAdapterError | import("../host/host.js").CommandRunnerError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto | import("../host/http.js").ReleaseHttp>;
79
+ export declare const reconcileReleaseConfig: (options?: ReleaseReconcileConfigOptions | undefined) => Effect.Effect<import("../domain/evidence.js").EvidenceBundle, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | import("../domain/operation.js").ExecutionApprovalError | import("../planner/errors.js").ReleaseNormalizationError | import("../planner/errors.js").PlanConstructionError | import("../planner/errors.js").RemoteStateInspectionError | import("../planner/errors.js").ReconciliationBlockedError | import("../planner/errors.js").OperationFailedError | import("../targets/registry.js").MissingTargetAdapterError | import("../host/host.js").CommandRunnerError, FileSystem.FileSystem | Path.Path | import("../targets/registry.js").TargetRegistry | import("../host/host.js").ReleaseCommandRunner | import("effect/Crypto").Crypto | import("../host/http.js").ReleaseHttp>;
80
+ export declare const checkReleaseConfigEligibility: (options?: ReleaseEligibilityConfigOptions | undefined) => Effect.Effect<import("../domain/remote-state.js").ReleaseEligibilityDecision, ConfigReadError | import("../config/errors.js").ConfigParseError | import("../config/errors.js").ConfigValidationError | ReleaseEligibilityCheckError | import("../host/host.js").CommandRunnerError, FileSystem.FileSystem | Path.Path | import("../host/host.js").ReleaseCommandRunner>;
81
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/workflows/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,IAAI,MAAM,aAAa,CAAA;AACnC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAuBrD,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAE/C,mBAAmB,6BAA6B,CAAA;AAEhD,OAAO,EAAE,eAAe,EAAE,CAAA;AAE1B,eAAO,MAAM,iBAAiB,4CAAoC,CAAA;AAClE,MAAM,MAAM,iBAAiB,GAAG,OAAO,iBAAiB,CAAC,IAAI,CAAA;;;;;AAE7D,qBAAa,oBAAqB,SAAQ,yBAGxC;CAAG;;;;;;AAEL,qBAAa,wBAAyB,SAAQ,6BAI5C;CAAG;;;;;;AAEL,qBAAa,0BAA2B,SAAQ,+BAI9C;CAAG;;;;;;;AAEL,qBAAa,uBAAwB,SAAQ,4BAK3C;CAAG;;;;;;AAEL,qBAAa,oBAAqB,SAAQ,yBAIxC;CAAG;;;;;;;AAEL,qBAAa,0BAA2B,SAAQ,+BAK9C;CAAG;;;;;;AAEL,qBAAa,6BAA8B,SAAQ,kCAMjD;CAAG;;;;;;AAEL,qBAAa,+BAAgC,SAAQ,oCAMnD;CAAG;AAmGL,eAAO,MAAM,iBAAiB,6jBAQ5B,CAAA;AAEF,eAAO,MAAM,uBAAuB,yhBAOlC,CAAA;AAEF,eAAO,MAAM,mBAAmB,wuBAK9B,CAAA;AAEF,eAAO,MAAM,qBAAqB,4tBAKhC,CAAA;AAEF,eAAO,MAAM,oBAAoB,+tBAK/B,CAAA;AAEF,eAAO,MAAM,mBAAmB,owBAK9B,CAAA;AAEF,eAAO,MAAM,gBAAgB,q0BAK3B,CAAA;AAEF,eAAO,MAAM,mBAAmB,mnBAK9B,CAAA;AAEF,eAAO,MAAM,mBAAmB,wkBAO9B,CAAA;AAEF,eAAO,MAAM,mBAAmB,+6BAK9B,CAAA;AAEF,eAAO,MAAM,sBAAsB,q4BAKjC,CAAA;AAEF,eAAO,MAAM,6BAA6B,oaASxC,CAAA"}
@@ -0,0 +1,191 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as FileSystem from "effect/FileSystem";
3
+ import * as Path from "effect/Path";
4
+ import * as Schema from "effect/Schema";
5
+ import { ConfigReadError } from "../config/errors.js";
6
+ import { parseReleaseIntent } from "../config/load.js";
7
+ import { DEFAULT_CONFIG_PATH } from "../config/schema.js";
8
+ import { ExecutionApproval } from "../domain/operation.js";
9
+ import { createReleasePlan } from "../planner/create-release-plan.js";
10
+ import { executePlan, renderPlan, runApprovedReleaseWorkflow, validatePlan, verifyPlan } from "../planner/executor.js";
11
+ import { renderPlanJson, renderPlanText } from "../planner/render-plan.js";
12
+ import { ReleaseResumeOptions, renderReleaseStatusJson, renderReleaseStatusText, resumeApprovedReleaseWorkflow, statusReleasePlan } from "../planner/status.js";
13
+ import { reconcileReleasePlan, ReleaseReconcileOptions } from "../planner/reconcile.js";
14
+ import { checkReleaseEligibility, ReleasePackageManifest, releaseEligibilityRemoteCheckFromIntent } from "../planner/release-eligibility.js";
15
+ import { ReleaseEligibilityCheckError } from "../planner/errors.js";
16
+ import { RELEASE_VERSION } from "../version.js";
17
+ export { RELEASE_VERSION };
18
+ export const ReleasePlanFormat = Schema.Literals(["json", "text"]);
19
+ export class ReleaseConfigOptions extends Schema.Class("ReleaseConfigOptions")({
20
+ root: Schema.optionalKey(Schema.String),
21
+ configPath: Schema.optionalKey(Schema.String)
22
+ }) {
23
+ }
24
+ export class PlanReleaseConfigOptions extends Schema.Class("PlanReleaseConfigOptions")({
25
+ root: Schema.optionalKey(Schema.String),
26
+ configPath: Schema.optionalKey(Schema.String),
27
+ format: Schema.optionalKey(ReleasePlanFormat)
28
+ }) {
29
+ }
30
+ export class RenderReleaseConfigOptions extends Schema.Class("RenderReleaseConfigOptions")({
31
+ root: Schema.optionalKey(Schema.String),
32
+ configPath: Schema.optionalKey(Schema.String),
33
+ execute: Schema.optionalKey(Schema.Boolean)
34
+ }) {
35
+ }
36
+ export class ReleaseExecutionOptions extends Schema.Class("ReleaseExecutionOptions")({
37
+ root: Schema.optionalKey(Schema.String),
38
+ configPath: Schema.optionalKey(Schema.String),
39
+ execute: Schema.optionalKey(Schema.Boolean),
40
+ approveIrreversible: Schema.optionalKey(Schema.Boolean)
41
+ }) {
42
+ }
43
+ export class ReleaseStatusOptions extends Schema.Class("ReleaseStatusOptions")({
44
+ root: Schema.optionalKey(Schema.String),
45
+ configPath: Schema.optionalKey(Schema.String),
46
+ format: Schema.optionalKey(ReleasePlanFormat)
47
+ }) {
48
+ }
49
+ export class ReleaseResumeConfigOptions extends Schema.Class("ReleaseResumeConfigOptions")({
50
+ root: Schema.optionalKey(Schema.String),
51
+ configPath: Schema.optionalKey(Schema.String),
52
+ execute: Schema.optionalKey(Schema.Boolean),
53
+ approveIrreversible: Schema.optionalKey(Schema.Boolean)
54
+ }) {
55
+ }
56
+ export class ReleaseReconcileConfigOptions extends Schema.Class("ReleaseReconcileConfigOptions")({
57
+ root: Schema.optionalKey(Schema.String),
58
+ configPath: Schema.optionalKey(Schema.String),
59
+ execute: Schema.optionalKey(Schema.Boolean)
60
+ }) {
61
+ }
62
+ export class ReleaseEligibilityConfigOptions extends Schema.Class("ReleaseEligibilityConfigOptions")({
63
+ root: Schema.optionalKey(Schema.String),
64
+ configPath: Schema.optionalKey(Schema.String),
65
+ packagePath: Schema.optionalKey(Schema.String)
66
+ }) {
67
+ }
68
+ const configRoot = (path, options) => {
69
+ if (options.root !== undefined) {
70
+ return options.root;
71
+ }
72
+ if (options.configPath !== undefined && path.isAbsolute(options.configPath)) {
73
+ return path.dirname(options.configPath);
74
+ }
75
+ return ".";
76
+ };
77
+ const configPath = (options) => options.configPath ?? DEFAULT_CONFIG_PATH;
78
+ const packagePath = (options) => options.packagePath ?? "package.json";
79
+ const configReadPath = (path, options) => {
80
+ const pathName = configPath(options);
81
+ return path.isAbsolute(pathName) ? pathName : path.resolve(configRoot(path, options), pathName);
82
+ };
83
+ const packageReadPath = (path, options) => {
84
+ const pathName = packagePath(options);
85
+ return path.isAbsolute(pathName) ? pathName : path.resolve(configRoot(path, options), pathName);
86
+ };
87
+ const approvalFromOptions = (options) => ExecutionApproval.make({
88
+ execute: options.execute ?? false,
89
+ approveIrreversible: options.approveIrreversible ?? false
90
+ });
91
+ const resumeOptionsFromConfigOptions = (options) => ReleaseResumeOptions.make({
92
+ execute: options.execute ?? false,
93
+ approveIrreversible: options.approveIrreversible ?? false
94
+ });
95
+ const reconcileOptionsFromConfigOptions = (options) => ReleaseReconcileOptions.make({
96
+ execute: options.execute ?? false
97
+ });
98
+ const renderApprovalFromOptions = (options) => ExecutionApproval.make({
99
+ execute: options.execute ?? false,
100
+ approveIrreversible: false
101
+ });
102
+ const readReleaseConfig = Effect.fn("workflows.config.readReleaseConfig")(function* (options) {
103
+ const fs = yield* FileSystem.FileSystem;
104
+ const path = yield* Path.Path;
105
+ const pathName = configPath(options);
106
+ const readPath = configReadPath(path, options);
107
+ return yield* fs.readFileString(readPath).pipe(Effect.mapError((error) => ConfigReadError.make({
108
+ path: pathName,
109
+ reason: error.message
110
+ })));
111
+ });
112
+ const decodePackageManifest = Schema.decodeUnknownEffect(ReleasePackageManifest);
113
+ const readPackageManifest = Effect.fn("workflows.config.readPackageManifest")(function* (options) {
114
+ const fs = yield* FileSystem.FileSystem;
115
+ const path = yield* Path.Path;
116
+ const pathName = packagePath(options);
117
+ const readPath = packageReadPath(path, options);
118
+ const contents = yield* fs.readFileString(readPath).pipe(Effect.mapError((error) => ConfigReadError.make({
119
+ path: pathName,
120
+ reason: error.message
121
+ })));
122
+ const parsed = yield* Effect.try({
123
+ try: () => JSON.parse(contents),
124
+ catch: (cause) => ReleaseEligibilityCheckError.make({
125
+ reason: `package manifest is not valid JSON: ${cause instanceof Error ? cause.message : String(cause)}`
126
+ })
127
+ });
128
+ return yield* decodePackageManifest(parsed).pipe(Effect.mapError((error) => ReleaseEligibilityCheckError.make({
129
+ reason: `package manifest is missing release identity fields: ${error.message}`
130
+ })));
131
+ });
132
+ export const planReleaseConfig = Effect.fn("workflows.config.planReleaseConfig")(function* (options = PlanReleaseConfigOptions.make({})) {
133
+ const path = yield* Path.Path;
134
+ const pathName = configPath(options);
135
+ const contents = yield* readReleaseConfig(options);
136
+ const intent = yield* parseReleaseIntent(contents, pathName);
137
+ return yield* createReleasePlan(intent, configRoot(path, options), pathName);
138
+ });
139
+ export const renderReleaseConfigPlan = Effect.fn("workflows.config.renderReleaseConfigPlan")(function* (options = PlanReleaseConfigOptions.make({})) {
140
+ const plan = yield* planReleaseConfig(options);
141
+ return (options.format ?? "text") === "json"
142
+ ? renderPlanJson(plan)
143
+ : renderPlanText(plan);
144
+ });
145
+ export const renderReleaseConfig = Effect.fn("workflows.config.renderReleaseConfig")(function* (options = RenderReleaseConfigOptions.make({})) {
146
+ const plan = yield* planReleaseConfig(options);
147
+ return yield* renderPlan(plan, renderApprovalFromOptions(options));
148
+ });
149
+ export const validateReleaseConfig = Effect.fn("workflows.config.validateReleaseConfig")(function* (options = ReleaseConfigOptions.make({})) {
150
+ const plan = yield* planReleaseConfig(options);
151
+ return yield* validatePlan(plan);
152
+ });
153
+ export const executeReleaseConfig = Effect.fn("workflows.config.executeReleaseConfig")(function* (options = ReleaseExecutionOptions.make({})) {
154
+ const plan = yield* planReleaseConfig(options);
155
+ return yield* executePlan(plan, approvalFromOptions(options));
156
+ });
157
+ export const verifyReleaseConfig = Effect.fn("workflows.config.verifyReleaseConfig")(function* (options = ReleaseConfigOptions.make({})) {
158
+ const plan = yield* planReleaseConfig(options);
159
+ return yield* verifyPlan(plan);
160
+ });
161
+ export const runReleaseConfig = Effect.fn("workflows.config.runReleaseConfig")(function* (options = ReleaseExecutionOptions.make({})) {
162
+ const plan = yield* planReleaseConfig(options);
163
+ return yield* runApprovedReleaseWorkflow(plan, approvalFromOptions(options));
164
+ });
165
+ export const statusReleaseConfig = Effect.fn("workflows.config.statusReleaseConfig")(function* (options = ReleaseStatusOptions.make({})) {
166
+ const plan = yield* planReleaseConfig(options);
167
+ return yield* statusReleasePlan(plan);
168
+ });
169
+ export const renderReleaseStatus = Effect.fn("workflows.config.renderReleaseStatus")(function* (options = ReleaseStatusOptions.make({})) {
170
+ const report = yield* statusReleaseConfig(options);
171
+ return (options.format ?? "text") === "json"
172
+ ? renderReleaseStatusJson(report)
173
+ : renderReleaseStatusText(report);
174
+ });
175
+ export const resumeReleaseConfig = Effect.fn("workflows.config.resumeReleaseConfig")(function* (options = ReleaseResumeConfigOptions.make({})) {
176
+ const plan = yield* planReleaseConfig(options);
177
+ return yield* resumeApprovedReleaseWorkflow(plan, resumeOptionsFromConfigOptions(options));
178
+ });
179
+ export const reconcileReleaseConfig = Effect.fn("workflows.config.reconcileReleaseConfig")(function* (options = ReleaseReconcileConfigOptions.make({})) {
180
+ const plan = yield* planReleaseConfig(options);
181
+ return yield* reconcileReleasePlan(plan, reconcileOptionsFromConfigOptions(options));
182
+ });
183
+ export const checkReleaseConfigEligibility = Effect.fn("workflows.config.checkReleaseConfigEligibility")(function* (options = ReleaseEligibilityConfigOptions.make({})) {
184
+ const pathName = configPath(options);
185
+ const contents = yield* readReleaseConfig(options);
186
+ const intent = yield* parseReleaseIntent(contents, pathName);
187
+ const manifest = yield* readPackageManifest(options);
188
+ const remoteCheck = yield* releaseEligibilityRemoteCheckFromIntent(manifest, intent);
189
+ return yield* checkReleaseEligibility(remoteCheck);
190
+ });
191
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/workflows/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Schema from "effect/Schema";
3
+ import { EvidenceBundle, ReleaseWorkflowEvidence, ReleaseWorkflowFailureEvidence } from "../domain/evidence.js";
4
+ import { ReleasePlan } from "../domain/release.js";
5
+ export type * from "../types/effect-internal.js";
6
+ declare const WorkflowEvidencePathsWritten_base: Schema.Class<WorkflowEvidencePathsWritten, Schema.Struct<{
7
+ readonly render: Schema.optionalKey<Schema.String>;
8
+ readonly validation: Schema.optionalKey<Schema.String>;
9
+ readonly execution: Schema.optionalKey<Schema.String>;
10
+ readonly verification: Schema.optionalKey<Schema.String>;
11
+ }>, {}>;
12
+ export declare class WorkflowEvidencePathsWritten extends WorkflowEvidencePathsWritten_base {
13
+ }
14
+ export declare const releaseEvidencePath: (plan: ReleasePlan, name: string) => string;
15
+ export declare const writeNamedEvidence: (plan: ReleasePlan, name: string, evidence: EvidenceBundle) => Effect.Effect<string, import("../planner/errors.js").EvidenceWriteError, import("effect/FileSystem").FileSystem | import("effect/Path").Path>;
16
+ export declare const writeFailedOperationEvidence: (plan: ReleasePlan, name: string, error: {
17
+ readonly evidence?: EvidenceBundle | undefined;
18
+ }) => Effect.Effect<string | undefined, import("../planner/errors.js").EvidenceWriteError, import("effect/FileSystem").FileSystem | import("effect/Path").Path>;
19
+ type WritableWorkflowEvidence = ReleaseWorkflowEvidence | ReleaseWorkflowFailureEvidence;
20
+ export declare const writeWorkflowEvidence: (plan: ReleasePlan, evidence: WritableWorkflowEvidence) => Effect.Effect<WorkflowEvidencePathsWritten, import("../planner/errors.js").EvidenceWriteError, import("effect/FileSystem").FileSystem | import("effect/Path").Path>;
21
+ //# sourceMappingURL=evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/workflows/evidence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAA;AAC/G,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAIlD,mBAAmB,6BAA6B,CAAA;;;;;;;AAEhD,qBAAa,4BAA6B,SAAQ,iCAOhD;CAAG;AAEL,eAAO,MAAM,mBAAmB,GAAI,MAAM,WAAW,EAAE,MAAM,MAAM,KAAG,MAC5B,CAAA;AAE1C,eAAO,MAAM,kBAAkB,8MAQ7B,CAAA;AAEF,eAAO,MAAM,4BAA4B;wBAGV,cAAc,GAAG,SAAS;+JAMvD,CAAA;AAEF,KAAK,wBAAwB,GAAG,uBAAuB,GAAG,8BAA8B,CAAA;AAExF,eAAO,MAAM,qBAAqB,gOA8BhC,CAAA"}
@@ -0,0 +1,45 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Schema from "effect/Schema";
3
+ import { writeEvidenceBundle } from "../planner/evidence-recorder.js";
4
+ import { workflowEvidencePaths } from "../planner/status.js";
5
+ export class WorkflowEvidencePathsWritten extends Schema.Class("WorkflowEvidencePathsWritten")({
6
+ render: Schema.optionalKey(Schema.String),
7
+ validation: Schema.optionalKey(Schema.String),
8
+ execution: Schema.optionalKey(Schema.String),
9
+ verification: Schema.optionalKey(Schema.String)
10
+ }) {
11
+ }
12
+ export const releaseEvidencePath = (plan, name) => `${plan.evidenceDirectory}/${name}.json`;
13
+ export const writeNamedEvidence = Effect.fn("workflows.evidence.writeNamedEvidence")(function* (plan, name, evidence) {
14
+ const path = releaseEvidencePath(plan, name);
15
+ yield* writeEvidenceBundle(path, evidence, plan.source.root);
16
+ return path;
17
+ });
18
+ export const writeFailedOperationEvidence = Effect.fn("workflows.evidence.writeFailedOperationEvidence")(function* (plan, name, error) {
19
+ if (error.evidence === undefined) {
20
+ return undefined;
21
+ }
22
+ return yield* writeNamedEvidence(plan, name, error.evidence);
23
+ });
24
+ export const writeWorkflowEvidence = Effect.fn("workflows.evidence.writeWorkflowEvidence")(function* (plan, evidence) {
25
+ const paths = workflowEvidencePaths(plan);
26
+ const written = {};
27
+ if (evidence.render !== undefined) {
28
+ written.render = paths.render;
29
+ yield* writeEvidenceBundle(paths.render, evidence.render, plan.source.root);
30
+ }
31
+ if (evidence.validation !== undefined) {
32
+ written.validation = paths.validation;
33
+ yield* writeEvidenceBundle(paths.validation, evidence.validation, plan.source.root);
34
+ }
35
+ if (evidence.execution !== undefined) {
36
+ written.execution = paths.execution;
37
+ yield* writeEvidenceBundle(paths.execution, evidence.execution, plan.source.root);
38
+ }
39
+ if (evidence.verification !== undefined) {
40
+ written.verification = paths.verification;
41
+ yield* writeEvidenceBundle(paths.verification, evidence.verification, plan.source.root);
42
+ }
43
+ return WorkflowEvidencePathsWritten.make(written);
44
+ });
45
+ //# sourceMappingURL=evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/workflows/evidence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAI5D,MAAM,OAAO,4BAA6B,SAAQ,MAAM,CAAC,KAAK,CAC5D,8BAA8B,CAC/B,CAAC;IACA,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IACzC,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IAC7C,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5C,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;CAChD,CAAC;CAAG;AAEL,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAiB,EAAE,IAAY,EAAU,EAAE,CAC7E,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,OAAO,CAAA;AAE1C,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC,uCAAuC,CAAC,CAAC,QAAQ,CAAC,EAC5F,IAAiB,EACjB,IAAY,EACZ,QAAwB;IAExB,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC5C,KAAK,CAAC,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC5D,OAAO,IAAI,CAAA;AACb,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC,EAAE,CAAC,iDAAiD,CAAC,CAAC,QAAQ,CAAC,EAChH,IAAiB,EACjB,IAAY,EACZ,KAAyD;IAEzD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,KAAK,CAAC,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;AAC9D,CAAC,CAAC,CAAA;AAIF,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,EAAE,CAAC,0CAA0C,CAAC,CAAC,QAAQ,CAAC,EAClG,IAAiB,EACjB,QAAkC;IAElC,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAA;IACzC,MAAM,OAAO,GAKT,EAAE,CAAA;IAEN,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;QAC7B,KAAK,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC7E,CAAC;IACD,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAA;QACrC,KAAK,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACrF,CAAC;IACD,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAA;QACnC,KAAK,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACnF,CAAC;IACD,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAA;QACzC,KAAK,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IACzF,CAAC;IAED,OAAO,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACnD,CAAC,CAAC,CAAA"}
@@ -0,0 +1,7 @@
1
+ import * as Layer from "effect/Layer";
2
+ import * as HttpClient from "effect/unstable/http/HttpClient";
3
+ import { ReleaseHttp } from "../host/http.js";
4
+ import { TargetRegistry } from "../targets/registry.js";
5
+ export type * from "../types/effect-internal.js";
6
+ export declare const LiveReleaseWorkflowLayer: Layer.Layer<ReleaseHttp | TargetRegistry, never, HttpClient.HttpClient>;
7
+ //# sourceMappingURL=live.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../src/workflows/live.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,UAAU,MAAM,iCAAiC,CAAA;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAG7C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD,mBAAmB,6BAA6B,CAAA;AAEhD,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC,KAAK,CAChD,WAAW,GAAG,cAAc,EAC5B,KAAK,EACL,UAAU,CAAC,UAAU,CAItB,CAAA"}
@@ -0,0 +1,5 @@
1
+ import * as Layer from "effect/Layer";
2
+ import { LiveReleaseHttpLayer } from "../host/http-live.js";
3
+ import { LiveTargetRegistryLayer } from "../targets/live.js";
4
+ export const LiveReleaseWorkflowLayer = Layer.mergeAll(LiveReleaseHttpLayer, LiveTargetRegistryLayer);
5
+ //# sourceMappingURL=live.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live.js","sourceRoot":"","sources":["../../src/workflows/live.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAGrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAA;AAK5D,MAAM,CAAC,MAAM,wBAAwB,GAIjC,KAAK,CAAC,QAAQ,CAChB,oBAAoB,EACpB,uBAAuB,CACxB,CAAA"}
@@ -18,12 +18,15 @@ Focused examples:
18
18
 
19
19
  - `multi-target`: one release coordinated across GitHub Releases, npm, and Homebrew.
20
20
  - `npm-only`: npm package directory with native npm dry-run validation.
21
+ - `npm-first-publish`: token-based npm bootstrap config for the first version before switching to trusted publishing.
21
22
  - `github-release`: GitHub release asset with simulated GitHub dry-run validation.
22
23
  - `homebrew-tap`: Homebrew tap formula rendering with simulated formula validation.
23
24
  - `pypi-registry`: prebuilt Python distribution planned for TestPyPI with Twine.
24
25
  - `scoop-bucket`: Scoop bucket manifest rendering with simulated validation.
25
26
  - `non-strict-skips`: non-strict config that records skipped dry-run evidence.
26
27
 
27
- TestPyPI is still a real registry publish target, not a dry-run. The example
28
- only renders the plan; do not run publish operations without intentional
29
- credentials and approval flags.
28
+ `npm-first-publish` demonstrates only the bootstrap shape for a package that
29
+ does not exist on npm yet. Replace it with trusted publishing after the first
30
+ version exists. TestPyPI is still a real registry publish target, not a dry-run.
31
+ The examples only render plans; do not run publish operations without
32
+ intentional credentials and approval flags.
@@ -36,8 +36,13 @@
36
36
  "_tag": "NpmRegistryTarget",
37
37
  "id": "npm",
38
38
  "registry": "https://registry.npmjs.org",
39
+ "packageName": "release-example-multi-target",
39
40
  "packagePath": ".",
40
- "tokenEnv": "NPM_TOKEN",
41
+ "trustedPublishing": {
42
+ "provider": "github-actions",
43
+ "workflow": "release.yml",
44
+ "packageExists": true
45
+ },
41
46
  "dryRunSupport": "native",
42
47
  "mutability": "immutable",
43
48
  "recovery": "publish-new-version"