@m-kopa/launchpad-cli 0.39.0 → 0.41.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 +84 -0
- package/dist/cli.js +400 -159
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/status.d.ts +8 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/deploy/manifest-state.d.ts +7 -0
- package/dist/deploy/manifest-state.d.ts.map +1 -1
- package/dist/http/api-client.d.ts.map +1 -1
- package/dist/report/classify-fault.d.ts +28 -0
- package/dist/report/classify-fault.d.ts.map +1 -0
- package/dist/report/fault-signal.d.ts +23 -0
- package/dist/report/fault-signal.d.ts.map +1 -0
- package/dist/report/report-nudge.d.ts +33 -0
- package/dist/report/report-nudge.d.ts.map +1 -0
- package/dist/version.d.ts +1 -1
- package/package.json +3 -1
- package/skills/launchpad-content-pr/SKILL.md +6 -1
- package/skills/launchpad-deploy/SKILL.md +26 -1
- package/skills/launchpad-deploy-status/SKILL.md +14 -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 +10 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,90 @@ 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.41.0 — 2026-06-28
|
|
10
|
+
|
|
11
|
+
Docs & skills: documented the **app catalogue** — a new
|
|
12
|
+
[`concepts/catalogue`](./docs/concepts/catalogue.md) page (listed by default,
|
|
13
|
+
opt out with `catalogue: { listed: false }`, and why **listing is not access**),
|
|
14
|
+
plus a **runtime-vs-administrative access** section (owner / co-owner / editor)
|
|
15
|
+
in the auth concept. Bundled skills refreshed (synced in place by
|
|
16
|
+
`launchpad update`): the `launchpad-status` skill now points access-drift
|
|
17
|
+
reconciliation at `launchpad deploy --apply`, `launchpad-deploy` notes the
|
|
18
|
+
catalogue opt-out at scaffold time, and `launchpad-content-pr` surfaces
|
|
19
|
+
`redeploy` as a general verb (activate a pushed secret on a Pages tier / force a
|
|
20
|
+
clean rebuild).
|
|
21
|
+
|
|
22
|
+
Feature (PS-1755 / PS-1762, T3): **`launchpad deploy` now refuses to ship
|
|
23
|
+
content when a gateway app's declared access groups don't match what the gateway
|
|
24
|
+
enforces** — the bot checks this server-side (unbypassable) on every deploy to
|
|
25
|
+
an existing gateway app and rejects with a clear message naming both directions
|
|
26
|
+
(over-grant + declared-not-enforced). `launchpad deploy` ships content only and
|
|
27
|
+
can't reconcile access; change it via the gated Terraform route, then redeploy.
|
|
28
|
+
The refuse is gated by a **default-OFF** server-side kill-switch, so the
|
|
29
|
+
operational rollout controls go-live and benign pre-existing drift can't break
|
|
30
|
+
deploys on day one; while OFF, drift is surfaced as a warning instead. See
|
|
31
|
+
[`deploy`](./docs/commands/deploy.md).
|
|
32
|
+
|
|
33
|
+
Feature (PS-1755 / PS-1763, T4): **`launchpad status` now reports access
|
|
34
|
+
drift** for gateway apps — whether the gateway actually enforces the Entra
|
|
35
|
+
groups your manifest declares. Because changing `access.allowed_entra_groups`
|
|
36
|
+
and re-running `launchpad deploy` ships content only (it does not re-apply the
|
|
37
|
+
gateway policy), the declared and enforced allow-lists can silently diverge.
|
|
38
|
+
|
|
39
|
+
- Surfaces both directions: **enforced but not declared** (an over-grant — still
|
|
40
|
+
reachable) and **declared but not enforced** (locked out despite the manifest).
|
|
41
|
+
Group names and UUIDs for the same group are treated as equal.
|
|
42
|
+
- `--strict` now exits `1` on access drift as well as manifest drift; `--json`
|
|
43
|
+
carries an `accessDrift` object. Non-gateway (Cloudflare Access) apps and
|
|
44
|
+
older bots show no access-drift line.
|
|
45
|
+
- A fleet-wide audit across all gateway apps lives at
|
|
46
|
+
`scripts/fleet/access-drift-audit.mjs` (`--list` for the offline app
|
|
47
|
+
enumeration). See [`status`](./docs/commands/status.md).
|
|
48
|
+
|
|
49
|
+
Feature (sp-bx7q2m, PS-1572 / PS-1584): the platform now runs a **server-side
|
|
50
|
+
anonymous-reachability check** at deploy time and blocks a deploy whose
|
|
51
|
+
`pages.dev` origin serves content/data to unauthenticated callers — closing the
|
|
52
|
+
class behind the dsr-photo-watch leak at the deploy layer.
|
|
53
|
+
|
|
54
|
+
- New optional manifest key **`verify.protected_path`** (`react`/`react+api`):
|
|
55
|
+
declare a representative protected route (e.g. `/api/health`) the deploy gate
|
|
56
|
+
probes anonymously and requires to return `401`/`403`, not `2xx`. `static`
|
|
57
|
+
apps need no declaration — their whole origin is probed. See the
|
|
58
|
+
[`verify`](./docs/manifest/index.md#verify-deploy-gate-checks) reference.
|
|
59
|
+
- `launchpad validate` accepts and shape-checks the new `verify` block
|
|
60
|
+
(root-relative path required). Backward-compatible — omitting it is valid.
|
|
61
|
+
- Enforcement is server-side in portal-bot; this CLI release only adds the
|
|
62
|
+
manifest field + validation. Version bump deferred to merge.
|
|
63
|
+
- New optional manifest key **`confine_origin`** (boolean, gateway pages apps):
|
|
64
|
+
opt a `react`/`react+api` app's `<id>.pages.dev` apex into service-token
|
|
65
|
+
confinement, once it verifies the gateway's `X-Launchpad-User-Assertion`
|
|
66
|
+
header. Default unchanged (verifier apps unconfined, static always confined);
|
|
67
|
+
`false` is rejected on static apps. See the
|
|
68
|
+
[`confine_origin`](./docs/manifest/index.md#confine_origin-apex-confinement)
|
|
69
|
+
reference (PS-1572 / ADR 0031).
|
|
70
|
+
|
|
71
|
+
## 0.40.0 — 2026-06-21
|
|
72
|
+
|
|
73
|
+
Feature (sp-rptndg, PS-1601): `launchpad` now nudges you toward `launchpad bug`
|
|
74
|
+
when a command fails because the **platform** misbehaved — so the reporting verbs
|
|
75
|
+
are discoverable at the moment they're needed, not only to people who already
|
|
76
|
+
know they exist.
|
|
77
|
+
|
|
78
|
+
- A single one-line, **non-actionable** reminder prints (stderr) on platform
|
|
79
|
+
faults only: a bot 5xx, a network error, `✗ NO NEW DEPLOYMENT WAS CREATED`
|
|
80
|
+
(exit 69), or an unexpected crash. Classified by the typed HTTP error, **not**
|
|
81
|
+
an exit-code allowlist — the common platform faults (5xx / network) are caught
|
|
82
|
+
and returned as exit 1 inside commands, so an exit-code check would miss them.
|
|
83
|
+
- Stays **quiet** for your-side failures (auth/401, forbidden/403,
|
|
84
|
+
not-found/404, `ApiError` 4xx, bad input, usage errors) and on non-interactive
|
|
85
|
+
output (CI, pipes, `--json`).
|
|
86
|
+
- It **never files anything** — filing still shows you the report and asks you to
|
|
87
|
+
confirm first; the report carries only the last command name, never its args.
|
|
88
|
+
- The `launchpad-deploy` and `launchpad-deploy-status` skills now point an agent
|
|
89
|
+
at `/launchpad-report` on a platform fault, preserving "never file silently".
|
|
90
|
+
|
|
91
|
+
No portal-bot change.
|
|
92
|
+
|
|
9
93
|
## 0.39.0 — 2026-06-20
|
|
10
94
|
|
|
11
95
|
Feature (sp-bld9kq, PS-1590): `launchpad deploy` now confirms a Cloudflare
|