@m-kopa/launchpad-cli 0.48.0 → 0.50.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/CHANGELOG.md +58 -0
- package/dist/bundle/orchestrate.d.ts +2 -2
- package/dist/bundle/orchestrate.d.ts.map +1 -1
- package/dist/bundle/upload.d.ts +26 -6
- package/dist/bundle/upload.d.ts.map +1 -1
- package/dist/cli.js +782 -173
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/groups.d.ts.map +1 -1
- package/dist/commands/recover.d.ts.map +1 -1
- package/dist/commands/status.d.ts +17 -2
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/deploy/access-drift-offer.d.ts +3 -0
- package/dist/deploy/access-drift-offer.d.ts.map +1 -1
- package/dist/deploy/apply.d.ts +8 -0
- package/dist/deploy/apply.d.ts.map +1 -1
- package/dist/groups/client.d.ts +3 -0
- package/dist/groups/client.d.ts.map +1 -1
- package/dist/http/api-client.d.ts +1 -1
- package/dist/http/api-client.d.ts.map +1 -1
- package/dist/http/error-envelope.d.ts +43 -0
- package/dist/http/error-envelope.d.ts.map +1 -0
- package/dist/http/errors.d.ts +15 -5
- package/dist/http/errors.d.ts.map +1 -1
- package/dist/report/fault-signal.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/package.json +1 -1
- package/skills/launchpad-content-pr/SKILL.md +10 -14
- package/skills/launchpad-deploy/SKILL.md +19 -28
- package/skills/launchpad-deploy-status/SKILL.md +1 -1
- package/skills/launchpad-destroy/SKILL.md +1 -1
- package/skills/launchpad-identity/SKILL.md +1 -1
- package/skills/launchpad-onboard/SKILL.md +1 -1
- package/skills/launchpad-report/SKILL.md +1 -1
- package/skills/launchpad-status/SKILL.md +11 -9
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,64 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
6
6
|
This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html);
|
|
7
7
|
pre-1.0 minor bumps may carry breaking changes per ADR 0005.
|
|
8
8
|
|
|
9
|
+
## Unreleased
|
|
10
|
+
|
|
11
|
+
Bot-side provisioning recovery safety spine: `launchpad recover` now classifies non-serving failed apps by their recorded provisioning stage.
|
|
12
|
+
Mutating dispatch is guarded by the original submission's single-flight lease, an original-Workflow terminal-state check, owner/co-owner/break-glass authorization for destructive or access-granting recovery, and the runtime `ROUTING_KV.__recovery_disabled` kill-switch.
|
|
13
|
+
Reconcile-only recovery remains available to editors.
|
|
14
|
+
No CLI version bump is required for this bot-side change.
|
|
15
|
+
|
|
16
|
+
Bot-side pre-Terraform recovery: an owner-run `launchpad recover` now abandons a wedged pre-TF workflow, archive-renames its app repo through the existing destroy finalizer, releases the destroyed registry record, and names `launchpad create` with the original manifest as the single next step.
|
|
17
|
+
`launchpad destroy` applies the same no-TF teardown when the persisted stage proves the wedge happened before Terraform, while post-TF failures continue through the existing Terraform destroy workflow so all credential and edge surfaces are revoked.
|
|
18
|
+
No CLI version bump is required for this bot-side change.
|
|
19
|
+
|
|
20
|
+
Bot-side post-Terraform recovery: `launchpad recover` now triggers a fresh Cloudflare Pages production deployment when infrastructure exists but content is not serving, then returns an async handoff to `launchpad status` and a final `launchpad recover` reconciliation once the deployment serves.
|
|
21
|
+
The driver reuses the established Pages deployment trigger, stays behind the recovery kill-switch, single-flight lease, and original-Workflow terminal check, and remains available to owner, co-owner, editor, and break-glass identities like `deploy` and `redeploy`.
|
|
22
|
+
No CLI version bump is required for this bot-side change.
|
|
23
|
+
|
|
24
|
+
Bot-side Terraform-PR recovery: owner, co-owner, and break-glass callers can now use `launchpad recover` to regenerate a wedged provisioning PR from the managed app repo's current `main` manifest.
|
|
25
|
+
The driver reuses the exact-SHA manifest reconcile engine, including fresh group resolution, ADR 0035 proof and attestation, shape validation, and gated auto-merge.
|
|
26
|
+
It then comments and closes only the stale `portal-bot/add-*` PR tied to the original submission, by exact PR number, and refuses retirement while an apply run for that PR head is active.
|
|
27
|
+
Failed `tf_pr_merged` resumes no longer skip forward to `tf_applied`; they direct the owner to the fresh-PR recovery path.
|
|
28
|
+
No CLI version bump is required for this bot-side change.
|
|
29
|
+
|
|
30
|
+
Platform-side delivery hardening (PS-2419): portal-bot production releases now deploy a verified, content-addressed CI artifact without rebuilding in the deploy job.
|
|
31
|
+
The authenticated `/version` endpoint and standing drift detector expose and monitor the served source and artifact identity.
|
|
32
|
+
No CLI version bump is required for this platform-side change.
|
|
33
|
+
|
|
34
|
+
Bot-side fix (PS-2416): manifest apply PRs now gain a deterministic merge owner, superseded apply PRs are disarmed before closure, and the CLI accurately reports that an open apply PR auto-merges after required checks pass.
|
|
35
|
+
No CLI version bump is required for this bot-side fix.
|
|
36
|
+
|
|
37
|
+
Bot-side lifecycle safety fix (PS-2417): create, bundle deploy, and manifest apply now refuse destroyed slugs instead of rebuilding over a tombstone.
|
|
38
|
+
`launchpad recover` can reclaim a destroyed-but-live app only after Pages deployment and gateway-route verification, while genuinely destroyed slug reuse remains temporarily unavailable pending PS-2419.
|
|
39
|
+
No CLI version bump is required for this bot-side fix.
|
|
40
|
+
|
|
41
|
+
Bot-side reliability fix (PS-2418): all documented manifest status routes are now reachable, and read-only GitHub API calls retry bounded transient failures before failing closed.
|
|
42
|
+
No CLI version bump is required for this bot-side fix.
|
|
43
|
+
|
|
44
|
+
## 0.50.0 - 2026-07-17
|
|
45
|
+
|
|
46
|
+
**Async recovery initiation rendering.**
|
|
47
|
+
|
|
48
|
+
- `launchpad recover` now treats HTTP 202 as a successful async initiation, prints the server-provided watch and finalize message, and includes the deployment or Terraform PR identifiers returned by the bot.
|
|
49
|
+
- JSON output preserves the complete 202 response and exits successfully, so initiated post-Terraform and Terraform-PR recovery no longer appears to fail in scripts.
|
|
50
|
+
|
|
51
|
+
## 0.49.0 - 2026-07-15
|
|
52
|
+
|
|
53
|
+
**Exact-commit access reconcile and group-reference parity.**
|
|
54
|
+
|
|
55
|
+
- Bundle uploads advertise `access-reconcile-exact-sha-v1` and consume the committed SHA, durable reconcile state, and server-opened apply PR identity.
|
|
56
|
+
- `launchpad deploy` commits content first, then plans, applies, and polls access from that exact commit.
|
|
57
|
+
It never asks for a second deploy, never calls committed content rejected, and never reports access success before the apply reaches `applied`.
|
|
58
|
+
- `reconcile_pending` resumes idempotently from durable server state.
|
|
59
|
+
A local timeout exits non-zero while stating that server recovery remains active.
|
|
60
|
+
- `create`, `init`, `validate`, `groups`, `status`, and `deploy` consistently accept or preserve exact display names and UUIDs.
|
|
61
|
+
Tenant-wide resolution is the identity authority, while the assigned shortlist is used only to report the distinct `group_not_assigned` condition for `auth: access`.
|
|
62
|
+
- Shared structured API errors preserve endpoint, code, message, manifest and source SHA, offending references, retryability, issues, candidates, and explicit omission markers.
|
|
63
|
+
Whole-body preview truncation has been removed.
|
|
64
|
+
- Structured upload errors now retain only validated extension fields, and shared HTTP error bodies stop streaming at a 256 KiB aggregate limit.
|
|
65
|
+
- `launchpad status` evaluates enterprise-app assignment requirements per manifest auth mode and fails closed when assignment lookup cannot complete.
|
|
66
|
+
|
|
9
67
|
## 0.48.0 — 2026-07-08
|
|
10
68
|
|
|
11
69
|
**One-command access reconcile — `launchpad deploy` now applies access changes
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CliConfig } from "../config.js";
|
|
2
|
-
import { type DeployBundleResult } from "./upload.js";
|
|
2
|
+
import { type DeployBundleError, type DeployBundleResult } from "./upload.js";
|
|
3
3
|
import { type WalkResult } from "./cwd-walker.js";
|
|
4
4
|
export interface BundleAndDeployArgs {
|
|
5
5
|
readonly cfg: CliConfig;
|
|
@@ -27,7 +27,7 @@ export type BundleAndDeployResult = {
|
|
|
27
27
|
} | {
|
|
28
28
|
kind: "upload-error";
|
|
29
29
|
status: number;
|
|
30
|
-
body:
|
|
30
|
+
body: DeployBundleError;
|
|
31
31
|
} | {
|
|
32
32
|
kind: "ok";
|
|
33
33
|
result: Extract<DeployBundleResult, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrate.d.ts","sourceRoot":"","sources":["../../src/bundle/orchestrate.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKtE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;0CACsC;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"orchestrate.d.ts","sourceRoot":"","sources":["../../src/bundle/orchestrate.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAKtE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;0CACsC;IACtC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,GACjE;IACE,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,OAAO,CAAC,kBAAkB,EAAE;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC,UAAU,CAAC,CAAC;IAChE,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iFAAiF;IACjF,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC,CAAC;AAEN;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,qBAAqB,CAAC,CAuGhC"}
|
package/dist/bundle/upload.d.ts
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
import type { CliConfig } from "../config.js";
|
|
2
|
+
import { type StructuredErrorEnvelope } from "../http/error-envelope.js";
|
|
2
3
|
import type { WorkerArtifact } from "./cron-bundle.js";
|
|
4
|
+
export declare const ACCESS_RECONCILE_EXACT_SHA_V1 = "access-reconcile-exact-sha-v1";
|
|
5
|
+
export type AccessReconcileState = "prepared" | "committed" | "pr_open" | "applied" | "aborted";
|
|
6
|
+
export interface ApplyPrIdentity {
|
|
7
|
+
readonly number: number;
|
|
8
|
+
readonly url: string;
|
|
9
|
+
readonly head_sha: string;
|
|
10
|
+
}
|
|
11
|
+
/** Durable exact-SHA access outcome returned by a capable bot. */
|
|
12
|
+
export interface AccessReconcileOutcome {
|
|
13
|
+
readonly id: string;
|
|
14
|
+
readonly state: AccessReconcileState;
|
|
15
|
+
readonly manifest_sha: string;
|
|
16
|
+
readonly pr?: ApplyPrIdentity;
|
|
17
|
+
}
|
|
3
18
|
/** Drift report riding on a success response (sp-devlp1 T3 / D2):
|
|
4
19
|
* policy violations observed in content already live on managed
|
|
5
20
|
* main — non-blocking, recorded server-side in the queryable
|
|
@@ -39,6 +54,8 @@ export interface DeployBundleAccepted {
|
|
|
39
54
|
readonly boundary_stripped?: readonly string[];
|
|
40
55
|
readonly standing_exceptions?: StandingExceptionsSummary;
|
|
41
56
|
readonly staleness?: StalenessVerdict;
|
|
57
|
+
/** Present when the committed content also needs exact-SHA access apply. */
|
|
58
|
+
readonly reconcile?: AccessReconcileOutcome;
|
|
42
59
|
}
|
|
43
60
|
/**
|
|
44
61
|
* Response shape when managed main already matches the upload
|
|
@@ -73,13 +90,8 @@ export interface DeployBundleProvisioningStarted {
|
|
|
73
90
|
/** Any success shape (202 accepted / 202 provisioning / 200 no-op). */
|
|
74
91
|
export type DeployBundleSuccess = DeployBundleAccepted | DeployBundleProvisioningStarted | DeployBundleNothingToDeploy;
|
|
75
92
|
/** Structured error shape from the bot on validation failure. */
|
|
76
|
-
export interface DeployBundleError {
|
|
93
|
+
export interface DeployBundleError extends StructuredErrorEnvelope {
|
|
77
94
|
readonly error: string;
|
|
78
|
-
readonly message?: string;
|
|
79
|
-
readonly issues?: ReadonlyArray<{
|
|
80
|
-
path: string;
|
|
81
|
-
message: string;
|
|
82
|
-
}>;
|
|
83
95
|
readonly violations?: ReadonlyArray<{
|
|
84
96
|
path: string;
|
|
85
97
|
rule: string;
|
|
@@ -89,6 +101,14 @@ export interface DeployBundleError {
|
|
|
89
101
|
path: string;
|
|
90
102
|
rule: string;
|
|
91
103
|
}>;
|
|
104
|
+
readonly reconcileId?: string;
|
|
105
|
+
readonly state?: AccessReconcileState;
|
|
106
|
+
readonly pr?: ApplyPrIdentity;
|
|
107
|
+
readonly live_only?: readonly string[];
|
|
108
|
+
readonly manifest_only?: readonly string[];
|
|
109
|
+
readonly head_sha?: string;
|
|
110
|
+
readonly paths?: readonly string[];
|
|
111
|
+
readonly reason?: string;
|
|
92
112
|
}
|
|
93
113
|
export type DeployBundleResult = {
|
|
94
114
|
kind: "ok";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/bundle/upload.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../src/bundle/upload.ts"],"names":[],"mappings":"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"}
|