@m-kopa/launchpad-cli 0.23.0 → 0.24.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 CHANGED
@@ -6,6 +6,50 @@ 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
+ ## 0.24.0 — 2026-06-11
10
+
11
+ ### Changed
12
+
13
+ - **`launchpad status` is truthful for ALL deploy mechanisms** (sp-devlp1 AC6).
14
+ Status now reads the app's LIVE Cloudflare Pages deployment state via the
15
+ bot's new `/apps/<slug>/deployment-status` endpoint: last deployment time,
16
+ its trigger (git push vs `launchpad deploy`), and the build outcome. An app
17
+ that deploys via CF Pages native git integration (push-to-main) reports
18
+ `live — content deployed via git push` instead of the misleading
19
+ "no content deployed" (the sp-gitst1 incident class). `--json` carries a
20
+ `deployment` block and the new `live_content_untracked` state.
21
+ - **Failed builds are visible** (sp-devlp1 AC7). When the latest production
22
+ build failed, `launchpad status` shows the failed stage, a build-log
23
+ excerpt (proxied via the bot), what is still serving, and the CLI next
24
+ step — killing the sp-reloc1 silent-failed-build class. In-progress builds
25
+ say so. `launchpad deploy` (bundle path) and `launchpad merge` end with an
26
+ explicit "build pending — run `launchpad status`" handoff.
27
+ - **`launchpad pull`'s "no content deployed" claim comes from the live
28
+ source** (AC6): an app with live git-integration content gets a truthful
29
+ "has live content; deploys outside `launchpad deploy`" message.
30
+ - **Error messages never direct you at resources you can't access** (AC8).
31
+ Reworded messages that pointed at the Cloudflare dashboard / GitHub PR
32
+ page; every failure path names a CLI command (or local file fix) as the
33
+ next step, enforced by a message-catalogue audit test.
34
+
35
+ ### Added
36
+
37
+ - **App-boundary allowlist bundling** (sp-devlp1 / AC4 + AC5). Both deploy
38
+ paths (Model A CWD bundle + the content-PR path) filter the file list
39
+ through the engine's app-boundary contract: with an `app:` block in
40
+ `launchpad.yaml`, ONLY the declared app ships; without one, the whole
41
+ tree minus the platform deny-list ships (compat) and stripped files are
42
+ warned. `.launchpadignore` (repo root, gitignore subset, no `!`) adds
43
+ excludes. The build-inputs check fails a deploy whose `build.command`
44
+ references inputs missing from the bundle (sp-reloc1 class).
45
+ - **`launchpad validate` boundary checks**: warns to declare `app:` on
46
+ pre-contract manifests, surfaces the strips the next deploy would
47
+ perform, and exits 1 on declared-contract deny-list hits or confident
48
+ build-input misses. `--json` gains an `appBoundary` block.
49
+ - **`launchpad init` emits the `app:` contract explicitly** (root `.` +
50
+ the per-appType default include list) so new manifests never rely on
51
+ the inferred fallback.
52
+
9
53
  ## 0.23.0 — 2026-06-11
10
54
 
11
55
  ### Changed
@@ -0,0 +1,26 @@
1
+ export type BoundaryFilterResult = {
2
+ kind: "ok";
3
+ /** The post-boundary bundle file list (repo-relative, sorted). */
4
+ files: readonly string[];
5
+ /** Stripped-file notices (inferred mode) — surface to the user. */
6
+ warnings: readonly string[];
7
+ /** True when the manifest declares no `app:` block. */
8
+ inferred: boolean;
9
+ } | {
10
+ kind: "error";
11
+ message: string;
12
+ };
13
+ export interface ApplyBoundaryArgs {
14
+ /** Repo root the relative `files` resolve against. */
15
+ readonly cwd: string;
16
+ /** Raw `launchpad.yaml` bytes, or null when absent/unreadable. */
17
+ readonly manifestYaml: string | null;
18
+ /** Candidate file list (from the walker / `git ls-files`). */
19
+ readonly files: readonly string[];
20
+ }
21
+ /**
22
+ * Filter a candidate bundle file list through the app-boundary
23
+ * contract. See module header for the severity policy.
24
+ */
25
+ export declare function applyBoundaryToFiles(args: ApplyBoundaryArgs): BoundaryFilterResult;
26
+ //# sourceMappingURL=boundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../../src/bundle/boundary.ts"],"names":[],"mappings":"AAuCA,MAAM,MAAM,oBAAoB,GAC5B;IACE,IAAI,EAAE,IAAI,CAAC;IACX,kEAAkE;IAClE,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,mEAAmE;IACnE,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,uDAAuD;IACvD,QAAQ,EAAE,OAAO,CAAC;CACnB,GACD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvC,MAAM,WAAW,iBAAiB;IAChC,sDAAsD;IACtD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,GAAG,oBAAoB,CA8FlF"}
@@ -12,6 +12,9 @@ export type BundleAndDeployResult = {
12
12
  } | {
13
13
  kind: "no-manifest";
14
14
  message: string;
15
+ } | {
16
+ kind: "boundary-error";
17
+ message: string;
15
18
  } | {
16
19
  kind: "pack-error";
17
20
  message: string;
@@ -32,6 +35,8 @@ export type BundleAndDeployResult = {
32
35
  compressedBytes: number;
33
36
  /** The cron Worker script name that was built + shipped, if any. */
34
37
  workerScript: string | null;
38
+ /** App-boundary strip notices (pre-contract manifests) — surface to the user. */
39
+ boundaryWarnings: readonly string[];
35
40
  };
36
41
  /**
37
42
  * Bundle the user's CWD and ship it to the bot.
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrate.d.ts","sourceRoot":"","sources":["../../src/bundle/orchestrate.ts"],"names":[],"mappings":"AAYA,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;AAGtE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;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,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,OAAO,CAAA;CAAE,GACvD;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;CAC7B,CAAC;AAEN;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,qBAAqB,CAAC,CAoFhC"}
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;AAItE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;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,OAAO,CAAA;CAAE,GACvD;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,CAkGhC"}