@m-kopa/launchpad-cli 0.52.0 → 0.53.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 +22 -0
- package/dist/bundle/cwd-walker.d.ts.map +1 -1
- package/dist/bundle/orchestrate.d.ts +2 -0
- package/dist/bundle/orchestrate.d.ts.map +1 -1
- package/dist/bundle/upload.d.ts +4 -1
- package/dist/bundle/upload.d.ts.map +1 -1
- package/dist/cli.js +773 -169
- package/dist/clone/base-sha-marker.d.ts +12 -3
- package/dist/clone/base-sha-marker.d.ts.map +1 -1
- package/dist/clone/tar-extract.d.ts +2 -0
- package/dist/clone/tar-extract.d.ts.map +1 -1
- package/dist/commands/deploy-flags.d.ts +2 -0
- package/dist/commands/deploy-flags.d.ts.map +1 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/pull.d.ts +2 -0
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/pull/source-sync.d.ts +11 -0
- package/dist/pull/source-sync.d.ts.map +1 -0
- package/dist/version.d.ts +1 -1
- package/package.json +1 -1
- package/skills/launchpad-content-pr/SKILL.md +3 -3
- package/skills/launchpad-deploy/SKILL.md +8 -1
- package/skills/launchpad-deploy-status/SKILL.md +3 -3
- package/skills/launchpad-destroy/SKILL.md +2 -2
- package/skills/launchpad-identity/SKILL.md +1 -1
- package/skills/launchpad-onboard/SKILL.md +6 -1
- package/skills/launchpad-report/SKILL.md +1 -1
- package/skills/launchpad-status/SKILL.md +20 -13
|
@@ -10,9 +10,8 @@ export declare function isValidBaseSha(value: string): boolean;
|
|
|
10
10
|
* is excluded from the deploy bundle via `.git/info/exclude`. Call this
|
|
11
11
|
* AFTER the initial commit so the marker is never committed.
|
|
12
12
|
*
|
|
13
|
-
* Throws on I/O failure
|
|
14
|
-
*
|
|
15
|
-
* as a clone taken from a pre-provenance bot).
|
|
13
|
+
* Throws on I/O failure. Clone treats persistence as mandatory, while
|
|
14
|
+
* deploy callers surface marker-advance failures without hiding them.
|
|
16
15
|
*/
|
|
17
16
|
export declare function writeBaseShaMarker(cwd: string, sha: string): Promise<void>;
|
|
18
17
|
/**
|
|
@@ -22,4 +21,14 @@ export declare function writeBaseShaMarker(cwd: string, sha: string): Promise<vo
|
|
|
22
21
|
* "no baseline to compare against".
|
|
23
22
|
*/
|
|
24
23
|
export declare function readBaseShaMarker(cwd: string): Promise<string | null>;
|
|
24
|
+
export type BaseShaMarkerState = {
|
|
25
|
+
readonly kind: "valid";
|
|
26
|
+
readonly sha: string;
|
|
27
|
+
} | {
|
|
28
|
+
readonly kind: "missing";
|
|
29
|
+
} | {
|
|
30
|
+
readonly kind: "malformed";
|
|
31
|
+
};
|
|
32
|
+
/** Distinguish missing provenance from malformed, explicitly untrusted state. */
|
|
33
|
+
export declare function readBaseShaMarkerState(cwd: string): Promise<BaseShaMarkerState>;
|
|
25
34
|
//# sourceMappingURL=base-sha-marker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-sha-marker.d.ts","sourceRoot":"","sources":["../../src/clone/base-sha-marker.ts"],"names":[],"mappings":"AA6BA,kEAAkE;AAClE,eAAO,MAAM,eAAe,yBAAyB,CAAC;AAEtD,qEAAqE;AACrE,eAAO,MAAM,UAAU,eAAe,CAAC;AACvC,2DAA2D;AAC3D,eAAO,MAAM,cAAc,wBAA2B,CAAC;AAQvD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErD;AAED
|
|
1
|
+
{"version":3,"file":"base-sha-marker.d.ts","sourceRoot":"","sources":["../../src/clone/base-sha-marker.ts"],"names":[],"mappings":"AA6BA,kEAAkE;AAClE,eAAO,MAAM,eAAe,yBAAyB,CAAC;AAEtD,qEAAqE;AACrE,eAAO,MAAM,UAAU,eAAe,CAAC;AACvC,2DAA2D;AAC3D,eAAO,MAAM,cAAc,wBAA2B,CAAC;AAQvD,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhF;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAS3E;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC;AAEnC,iFAAiF;AACjF,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,kBAAkB,CAAC,CAU7B"}
|
|
@@ -47,6 +47,8 @@ export interface ExtractOptions {
|
|
|
47
47
|
* peel that prefix.
|
|
48
48
|
*/
|
|
49
49
|
readonly stripComponents?: number;
|
|
50
|
+
/** Permit extraction into a controlled non-empty staging directory. */
|
|
51
|
+
readonly allowNonEmpty?: boolean;
|
|
50
52
|
}
|
|
51
53
|
/**
|
|
52
54
|
* Stream-extract a gzipped tarball into `destDir`. Creates the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tar-extract.d.ts","sourceRoot":"","sources":["../../src/clone/tar-extract.ts"],"names":[],"mappings":"AA2BA;;iCAEiC;AACjC,eAAO,MAAM,cAAc,QAAkB,CAAC;AAC9C,6DAA6D;AAC7D,eAAO,MAAM,eAAe,OAAO,CAAC;AAGpC,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B;;;;+DAI2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAG,qBAAqB,CAAU;CAChD;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAG,gBAAgB,CAAU;CAC3C;AAED;;;wBAGwB;AACxB,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,IAAI,EAAG,uBAAuB,CAAU;CAClD;AAED;;;;;GAKG;AACH,wBAAuB,kBAAkB,CACvC,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAC/B,cAAc,CAAC,QAAQ,CAAC,CAiH1B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"tar-extract.d.ts","sourceRoot":"","sources":["../../src/clone/tar-extract.ts"],"names":[],"mappings":"AA2BA;;iCAEiC;AACjC,eAAO,MAAM,cAAc,QAAkB,CAAC;AAC9C,6DAA6D;AAC7D,eAAO,MAAM,eAAe,OAAO,CAAC;AAGpC,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B;;;;+DAI2D;IAC3D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAG,qBAAqB,CAAU;CAChD;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAG,gBAAgB,CAAU;CAC3C;AAED;;;wBAGwB;AACxB,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,IAAI,EAAG,uBAAuB,CAAU;CAClD;AAED;;;;;GAKG;AACH,wBAAuB,kBAAkB,CACvC,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,GAC/B,cAAc,CAAC,QAAQ,CAAC,CAiH1B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,uEAAuE;IACvE,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,EAChC,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,YAAY,CAAC,CA4CvB"}
|
|
@@ -10,6 +10,8 @@ export type DeployMode = {
|
|
|
10
10
|
/** sp-vmj0j0 AC7 — in-place typed override: must echo the head SHA
|
|
11
11
|
* (≥7-char prefix) from the block. Null = not supplied. */
|
|
12
12
|
readonly overrideStale: string | null;
|
|
13
|
+
/** Explicit compatibility path for a non-clone tree with no baseline. */
|
|
14
|
+
readonly allowUnguarded: boolean;
|
|
13
15
|
} | {
|
|
14
16
|
readonly kind: "new";
|
|
15
17
|
readonly slug: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-flags.d.ts","sourceRoot":"","sources":["../../src/commands/deploy-flags.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAa,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,MAAM,UAAU,GAClB;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,oEAAoE;IACpE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B;uEACmE;IACnE,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC;gEAC4D;IAC5D,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy-flags.d.ts","sourceRoot":"","sources":["../../src/commands/deploy-flags.ts"],"names":[],"mappings":"AA0BA,OAAO,EAAa,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtD,MAAM,MAAM,UAAU,GAClB;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,oEAAoE;IACpE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B;uEACmE;IACnE,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC;gEAC4D;IAC5D,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,yEAAyE;IACzE,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;CAClC,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C,GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AACrD;;;;;;;GAOG;GACD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CAAE;AACpF;;;;;;;;;;GAUG;GACD;IACE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB;;;;;;OAMG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC,CAAC;AAEN,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,uDAAuD;IACvD,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAQD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW,GAAG,MAAM,CAqY9E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAsEA,OAAO,EAGL,4BAA4B,EAC7B,MAAM,uBAAuB,CAAC;AAc/B,OAAO,EAAa,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,KAAK,EAAS,OAAO,EAAY,MAAM,kBAAkB,CAAC;AAKjE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,CAAC;AAEjD,eAAO,MAAM,aAAa,EAAE,OAI3B,CAAC;AAEF,UAAU,UAAU;IAClB,6BAA6B;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"AAsEA,OAAO,EAGL,4BAA4B,EAC7B,MAAM,uBAAuB,CAAC;AAc/B,OAAO,EAAa,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,KAAK,EAAS,OAAO,EAAY,MAAM,kBAAkB,CAAC;AAKjE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,CAAC;AAEjD,eAAO,MAAM,aAAa,EAAE,OAI3B,CAAC;AAEF,UAAU,UAAU;IAClB,6BAA6B;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAgRD;;;;;;GAMG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAoBpC;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,GAAG,IAAI,CAwBpE;AAiMD,2BAA2B;AAC3B,OAAO,EAAE,4BAA4B,EAAE,CAAC"}
|
package/dist/commands/pull.d.ts
CHANGED
|
@@ -5,6 +5,8 @@ interface PullArgs {
|
|
|
5
5
|
readonly out: string | null;
|
|
6
6
|
/** `--status`: pull the role-redacted status block instead of the spec manifest. */
|
|
7
7
|
readonly status: boolean;
|
|
8
|
+
readonly manifest: boolean;
|
|
9
|
+
readonly bootstrap: boolean;
|
|
8
10
|
}
|
|
9
11
|
/** Pure arg parser. Returns parsed shape or human-readable error string. */
|
|
10
12
|
export declare function parseArgs(args: readonly string[], cwd?: string, warn?: (line: string) => void): PullArgs | string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAS,OAAO,EAAY,MAAM,kBAAkB,CAAC;AAGjE,eAAO,MAAM,WAAW,EAAE,OAIzB,CAAC;AAEF,UAAU,QAAQ;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,oFAAoF;IACpF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAmJD,4EAA4E;AAC5E,wBAAgB,SAAS,CACvB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,GAAE,MAAsB,EAC3B,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAC5B,QAAQ,GAAG,MAAM,CA6EnB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CliConfig } from "../config.js";
|
|
2
|
+
import type { CliIo, ExitCode } from "../dispatcher.js";
|
|
3
|
+
/** Reconcile one clone from recorded base to current managed main. */
|
|
4
|
+
export declare function runSourceSync(args: {
|
|
5
|
+
readonly cfg: CliConfig;
|
|
6
|
+
readonly cwd: string;
|
|
7
|
+
readonly slug: string;
|
|
8
|
+
readonly io: CliIo;
|
|
9
|
+
readonly bootstrap?: boolean;
|
|
10
|
+
}): Promise<ExitCode>;
|
|
11
|
+
//# sourceMappingURL=source-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-sync.d.ts","sourceRoot":"","sources":["../../src/pull/source-sync.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA2DxD,sEAAsE;AACtE,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B,GAAG,OAAO,CAAC,QAAQ,CAAC,CAoDpB"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "0.
|
|
1
|
+
export declare const CLI_VERSION = "0.53.0";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: launchpad-content-pr
|
|
3
3
|
description: Push a content change to a Launchpad app via `launchpad deploy` and verify it shipped via `launchpad status`. Covers the post-first-deploy iteration loop (edit → deploy → verify) — subsequent deploys commit directly to the app repo's main and the Pages build runs asynchronously, so verification is its own step. Use when someone says "push a content change", "ship an update", "/launchpad-content-pr", "verify my deploy", or after `/launchpad-deploy` reports `done` and they want to follow up with an edit.
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.53.0
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- BEGIN shell-contract (managed by scripts/sync-skill-contract.sh — edit skills/_partials/shell-contract.md) -->
|
|
@@ -224,7 +224,7 @@ for after a deploy:
|
|
|
224
224
|
confirm the outcome.
|
|
225
225
|
- **`drift: <fields>`** — your local manifest diverges from what's
|
|
226
226
|
deployed. Either re-run `launchpad deploy` to ship the local, or
|
|
227
|
-
`launchpad pull <slug> --out launchpad.yaml` to bring the local
|
|
227
|
+
`launchpad pull --manifest <slug> --out launchpad.yaml` to bring the local
|
|
228
228
|
into line with deployed.
|
|
229
229
|
- **provisioning / failed / destroy states** — route to
|
|
230
230
|
`/launchpad-deploy-status` or `/launchpad-destroy`.
|
|
@@ -259,7 +259,7 @@ Once you've shipped first content, the daily-use verbs are:
|
|
|
259
259
|
- **`launchpad status`** (`/launchpad-status`) — is my local
|
|
260
260
|
`launchpad.yaml` in sync with what's deployed, and did the last
|
|
261
261
|
build succeed?
|
|
262
|
-
- **`launchpad pull <slug>`** (`/launchpad-status`)
|
|
262
|
+
- **`launchpad pull --manifest <slug>`** (`/launchpad-status`) - read the
|
|
263
263
|
currently-deployed `launchpad.yaml`.
|
|
264
264
|
- **`launchpad deploy`** — bundle the working tree; the bot commits
|
|
265
265
|
it directly to the app repo's `main`.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: launchpad-deploy
|
|
3
3
|
description: Walk a Launchpad user through deploying an app from their local working directory (Model A — `launchpad init` + `launchpad deploy`). Wraps the CLI verbs end-to-end: detects the app shape, scaffolds `launchpad.yaml`, resolves the allowed Entra group via `launchpad groups`, bundles the CWD via `launchpad deploy`, and watches the rollout via `launchpad status`. Use when someone says "deploy a new app", "ship my app to Launchpad", "/launchpad-deploy", "I have an app locally — get it on Launchpad", or any variant. Resume/abandon for legacy in-flight provisioning is at the bottom.
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.53.0
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- BEGIN shell-contract (managed by scripts/sync-skill-contract.sh — edit skills/_partials/shell-contract.md) -->
|
|
@@ -63,6 +63,13 @@ static · react · react+api · container
|
|
|
63
63
|
|
|
64
64
|
## Pre-flight
|
|
65
65
|
|
|
66
|
+
When deploying from a clone that may be stale, run `launchpad pull` first.
|
|
67
|
+
It applies clean upstream changes, preserves local work, and writes upstream
|
|
68
|
+
artifacts under `.launchpad/pull-conflicts/` for conflicts.
|
|
69
|
+
Resolve those paths and rerun pull before deploying.
|
|
70
|
+
Use `--allow-unguarded` only for an intentional non-clone directory with no
|
|
71
|
+
source marker; it disables staleness protection for that deploy and is audited.
|
|
72
|
+
|
|
66
73
|
```bash
|
|
67
74
|
launchpad whoami
|
|
68
75
|
```
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: launchpad-deploy-status
|
|
3
3
|
description: Show the current provisioning stage + failure reason for a Launchpad app via `launchpad status` (Model A drift + deployment_verified) and `launchpad apps` (lifecycle bucket), or watch provisioning live with `launchpad watch`. Renders the M-892 stage trace for in-flight provisioning, and is the canonical home for `launchpad recover` (repair a terminal-failed app record that is actually live). Use when someone says "what's the status of demo-X", "/launchpad-deploy-status", "is my deploy stuck", "watch my deploy go live", "watch provisioning", "my app says failed but it's serving", or after `/launchpad-deploy` reports a non-`done` terminal stage.
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.53.0
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- BEGIN shell-contract (managed by scripts/sync-skill-contract.sh — edit skills/_partials/shell-contract.md) -->
|
|
@@ -59,7 +59,7 @@ inference source resolves.
|
|
|
59
59
|
| Watch a first deploy provision to live in real time | `launchpad watch <slug>` — see § Watch below |
|
|
60
60
|
| Is my local manifest in sync with what's deployed? | `launchpad status <slug>` |
|
|
61
61
|
| What lifecycle bucket is the app in? | `launchpad apps` |
|
|
62
|
-
| What was actually deployed? | `launchpad pull <slug>` |
|
|
62
|
+
| What was actually deployed? | `launchpad pull --manifest <slug>` |
|
|
63
63
|
| Is the app stuck in the legacy M-892 zero-touch flow? | See § Legacy below |
|
|
64
64
|
| What broke the most recent deploy? | `launchpad status <slug> --json` + the bot's PR check trail |
|
|
65
65
|
| It says `failed` but the app is live in a browser | `launchpad recover <slug>` — see § Recover below |
|
|
@@ -199,7 +199,7 @@ Next steps:
|
|
|
199
199
|
Edit ./launchpad.yaml to resolve the differences, then run
|
|
200
200
|
`launchpad deploy` to roll it out.
|
|
201
201
|
|
|
202
|
-
Or run `launchpad pull demo-9 --out deployed.yaml` to bring your
|
|
202
|
+
Or run `launchpad pull --manifest demo-9 --out deployed.yaml` to bring your
|
|
203
203
|
local manifest into line with what's deployed.
|
|
204
204
|
```
|
|
205
205
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: launchpad-destroy
|
|
3
3
|
description: Tear down a Launchpad app end-to-end via `launchpad destroy` — Cloudflare Pages project, edge-auth wiring (gateway KV/audience entries, or the Access app for `auth: access` apps), custom hostname, platform-repo TF, and the app repo (archive-renamed). Owner-only verb with a two-step destructive confirmation. Use when someone says "destroy this app", "/launchpad-destroy", "tear down `<slug>`", "delete the app", or asks to clean up a smoke-test / orphan / retired app.
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.53.0
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- BEGIN shell-contract (managed by scripts/sync-skill-contract.sh — edit skills/_partials/shell-contract.md) -->
|
|
@@ -373,7 +373,7 @@ On an idempotent re-run against a `destroyed` slug:
|
|
|
373
373
|
## Related skills
|
|
374
374
|
|
|
375
375
|
- **`/launchpad-status`** — read the deployed manifest, compare to
|
|
376
|
-
local. Pair this with `launchpad pull <slug> --out backup.yaml`
|
|
376
|
+
local. Pair this with `launchpad pull --manifest <slug> --out backup.yaml`
|
|
377
377
|
before destroy if you want to keep the manifest for reference.
|
|
378
378
|
- **`/launchpad-deploy`** — provision a new app via `launchpad init`
|
|
379
379
|
+ `launchpad deploy` (e.g. after a destroy that frees the slug).
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: launchpad-identity
|
|
3
3
|
description: Teach an app author how to use the signed-in user's identity inside a Launchpad app — read the gateway-forwarded X-Launchpad-User-Assertion in a Pages Function, VERIFY it with @m-kopa/platform-auth (fail-closed), and show who's logged in (sub/email/name). Use when someone says "who is logged in", "show the current user", "get the user's email in my app", "auth in my launchpad app", "read the user identity", "/launchpad-identity", or is wiring up an /api/me for a gateway-fronted app.
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.53.0
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- BEGIN shell-contract (managed by scripts/sync-skill-contract.sh — edit skills/_partials/shell-contract.md) -->
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: launchpad-onboard
|
|
3
3
|
description: One-time setup for the Launchpad CLI + Claude Code skill bundle. Verifies the `launchpad` CLI is installed and current, runs `launchpad whoami` to confirm the session is fresh, and checks the bundled skills are installed and in lock-step with the CLI. Idempotent — safe to re-run any time. Use when someone says "set me up for Launchpad", "I just got a new machine and want to use Launchpad", "/launchpad-onboard", or any of the other launchpad-* skills fails on a prereq check.
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.53.0
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- BEGIN shell-contract (managed by scripts/sync-skill-contract.sh — edit skills/_partials/shell-contract.md) -->
|
|
@@ -43,6 +43,11 @@ trigger `launchpad login` and suggest installs). The other skills
|
|
|
43
43
|
`/launchpad-identity`) assume the machine is already onboarded and fail
|
|
44
44
|
loudly if a prereq is missing — pointing back here.
|
|
45
45
|
|
|
46
|
+
After `launchpad clone <slug>`, refresh that same directory with bare
|
|
47
|
+
`launchpad pull`.
|
|
48
|
+
Do not recommend rename-and-reclone recovery for ordinary staleness.
|
|
49
|
+
The old deployed-manifest read is now `launchpad pull --manifest <slug>`.
|
|
50
|
+
|
|
46
51
|
## Zero non-Launchpad dependencies
|
|
47
52
|
|
|
48
53
|
Under Model A (M-1216), the CLI is fully self-contained: it signs in
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: launchpad-report
|
|
3
3
|
description: File a bug report or feature request to the Launchpad team's tracker from the CLI. Use when someone reports something broken, hits an error in a launchpad command, or wishes a feature existed — e.g. "this is broken", "report a bug", "can you file that", "I wish launchpad could…", "/launchpad-bug", "/launchpad-feature". Always confirm and show exactly what you'll send before filing; never file silently.
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.53.0
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- BEGIN shell-contract (managed by scripts/sync-skill-contract.sh — edit skills/_partials/shell-contract.md) -->
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: launchpad-status
|
|
3
|
-
description:
|
|
4
|
-
version: 0.
|
|
3
|
+
description: Safely refresh a Launchpad clone, show manifest drift, or read the deployed manifest. Wraps bare `launchpad pull` for source sync, `launchpad pull --manifest` for deployed YAML, and `launchpad status` for drift. Use for "sync my clone", "what's deployed", "show drift", "/launchpad-status", "/launchpad-pull", or post-deploy verification.
|
|
4
|
+
version: 0.53.0
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
<!-- BEGIN shell-contract (managed by scripts/sync-skill-contract.sh — edit skills/_partials/shell-contract.md) -->
|
|
@@ -30,8 +30,8 @@ esac
|
|
|
30
30
|
|
|
31
31
|
# /launchpad-status
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
credentials needed.
|
|
33
|
+
Launchpad-native source and status verbs. Zero local platform-repo /
|
|
34
|
+
terraform / GitHub credentials needed. Manifest reads go through the bot's `/manifest/state`
|
|
35
35
|
endpoint; the bot reads launchpad-platform's TF state to find the
|
|
36
36
|
last-applied manifest sha, then fetches launchpad.yaml from the app
|
|
37
37
|
repo at that sha. `launchpad status` additionally reads the bot's
|
|
@@ -42,7 +42,10 @@ is a thin client.
|
|
|
42
42
|
|
|
43
43
|
## When to use which verb
|
|
44
44
|
|
|
45
|
-
-
|
|
45
|
+
- **Bare `launchpad pull` inside a clone** - reconcile source from managed
|
|
46
|
+
`main` without overwriting local work. Conflicts keep the original and write
|
|
47
|
+
an upstream artifact under `.launchpad/pull-conflicts/`.
|
|
48
|
+
- **`launchpad pull --manifest <slug>`** - read the deployed `launchpad.yaml`.
|
|
46
49
|
Use when you want to see what's actually running, or when you need
|
|
47
50
|
a starting point for editing a manifest.
|
|
48
51
|
- **`launchpad status [<slug>] [--strict] [--json]`** — compare local
|
|
@@ -53,7 +56,7 @@ is a thin client.
|
|
|
53
56
|
If the operator is asking "did my deploy work" → `launchpad status`
|
|
54
57
|
inside the app repo's clone is the answer.
|
|
55
58
|
|
|
56
|
-
If they're asking "what was actually deployed" → `launchpad pull` is
|
|
59
|
+
If they're asking "what was actually deployed" → `launchpad pull --manifest` is
|
|
57
60
|
the answer.
|
|
58
61
|
|
|
59
62
|
## Pre-flight
|
|
@@ -75,7 +78,7 @@ Both verbs are owner/editor-scoped — non-members get HTTP 403 with
|
|
|
75
78
|
Both verbs accept the slug four ways, with this precedence:
|
|
76
79
|
|
|
77
80
|
1. **`--slug <slug>`** — explicit, wins over everything.
|
|
78
|
-
2. **Positional argument**
|
|
81
|
+
2. **Positional argument** - `launchpad pull --manifest horizon-clone`.
|
|
79
82
|
3. **Local manifest inference** — the slug declared by
|
|
80
83
|
`./launchpad.yaml` (or `--file` on `launchpad status`); v1
|
|
81
84
|
`metadata.name` / v2 `metadata.slug`. Works from any directory
|
|
@@ -90,22 +93,26 @@ If `launchpad status` has a slug but NO local manifest exists, it does
|
|
|
90
93
|
not error: it renders the live-truth-only view (lifecycle + deployment;
|
|
91
94
|
drift not checked) and exits 0.
|
|
92
95
|
|
|
93
|
-
## `launchpad pull`
|
|
96
|
+
## `launchpad pull` source sync and manifest read
|
|
94
97
|
|
|
95
98
|
```bash
|
|
96
99
|
# Write deployed launchpad.yaml to stdout
|
|
97
|
-
launchpad pull horizon
|
|
100
|
+
launchpad pull --manifest horizon
|
|
98
101
|
|
|
99
102
|
# Write to a file
|
|
100
|
-
launchpad pull horizon --out /tmp/deployed.yaml
|
|
103
|
+
launchpad pull --manifest horizon --out /tmp/deployed.yaml
|
|
101
104
|
|
|
102
|
-
# Inside an app-repo clone
|
|
105
|
+
# Inside an app-repo clone, refresh source safely
|
|
103
106
|
launchpad clone horizon
|
|
104
107
|
cd launchpad-app-horizon
|
|
105
108
|
launchpad pull
|
|
106
109
|
|
|
110
|
+
# Legacy markerless clone: only succeeds when the clean synthetic baseline
|
|
111
|
+
# exactly matches current managed main
|
|
112
|
+
launchpad pull --bootstrap
|
|
113
|
+
|
|
107
114
|
# Read the role-redacted status block instead of the spec manifest
|
|
108
|
-
launchpad pull horizon --status
|
|
115
|
+
launchpad pull --manifest horizon --status
|
|
109
116
|
```
|
|
110
117
|
|
|
111
118
|
Exit codes:
|
|
@@ -371,4 +378,4 @@ CI.
|
|
|
371
378
|
|
|
372
379
|
## Version
|
|
373
380
|
|
|
374
|
-
This skill ships in launchpad-cli v0.
|
|
381
|
+
This skill ships in launchpad-cli v0.53.0+.
|