@jaypie/mcp 0.8.139 → 0.8.140

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.
@@ -9,7 +9,7 @@ import { gt } from 'semver';
9
9
  /**
10
10
  * Docs Suite - Documentation services (skill, version, release_notes)
11
11
  */
12
- const BUILD_VERSION_STRING = "@jaypie/mcp@0.8.139#b5c90690"
12
+ const BUILD_VERSION_STRING = "@jaypie/mcp@0.8.140#19ea447a"
13
13
  ;
14
14
  const __filename$1 = fileURLToPath(import.meta.url);
15
15
  const __dirname$1 = path.dirname(__filename$1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jaypie/mcp",
3
- "version": "0.8.139",
3
+ "version": "0.8.140",
4
4
  "description": "Jaypie MCP",
5
5
  "repository": {
6
6
  "type": "git",
@@ -0,0 +1,11 @@
1
+ ---
2
+ version: 1.2.91
3
+ date: 2026-08-27
4
+ summary: Pulls @jaypie/lambda 1.2.15 (migrationHandler pending poll fix)
5
+ ---
6
+
7
+ # jaypie 1.2.91
8
+
9
+ ## Changed
10
+
11
+ - Depends on `@jaypie/lambda` 1.2.15.
@@ -0,0 +1,31 @@
1
+ ---
2
+ version: 1.2.15
3
+ date: 2026-08-27
4
+ summary: migrationHandler omits Data on pending polls and skips migrations on Delete
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - `migrationHandler` returns `{ IsComplete: false }` with no `Data` while a migration is pending.
10
+ - Completed polls return `{ Data: result, IsComplete: true }`, and omit `Data` when the handler result is not a plain object.
11
+ - `RequestType: "Delete"` short-circuits without invoking the migration: `onEvent` returns `PhysicalResourceId`, `isComplete` returns `{ IsComplete: true }`.
12
+
13
+ ## Motivation
14
+
15
+ The `cr.Provider` framework throws `"Data" is not allowed if "IsComplete" is "False"`
16
+ when a pending `isComplete` response carries any `Data` keys. Any migration set needing
17
+ more than one invocation therefore failed the custom resource on the first pending poll,
18
+ marking the resource `CREATE_FAILED`. The rollback then invoked the same handler for the
19
+ `Delete` request, ran the next pending migration, failed the same way, and left the stack
20
+ `ROLLBACK_FAILED`.
21
+
22
+ Scalar and array results were also submitted as `Data`, which CloudFormation rejects
23
+ because `Data` must be a map.
24
+
25
+ ## Migration
26
+
27
+ No changes required. Handlers returning `{ pending: true }` now poll correctly. Handlers
28
+ returning a scalar or array no longer expose that value through `Fn::GetAtt`; return a
29
+ plain object to keep resource attributes.
30
+
31
+ Fixes #510.
@@ -0,0 +1,12 @@
1
+ ---
2
+ version: 0.8.140
3
+ date: 2026-08-27
4
+ summary: Migrations skill documents the isComplete Data protocol and Delete short-circuit
5
+ ---
6
+
7
+ ## Changes
8
+
9
+ - `skill("migrations")` records that pending polls carry no `Data`, that completion
10
+ returns `Data` only for plain-object results, and that `Delete` requests skip the
11
+ migration.
12
+ - Release notes for `@jaypie/lambda` 1.2.15 and `jaypie` 1.2.91.
@@ -45,7 +45,7 @@ new JaypieMigration(this, "SeedData", {
45
45
 
46
46
  - **Timeout**: 15 minutes per invocation (Lambda max); `totalTimeout` controls the end-to-end ceiling across all polling invocations (default 2 hours)
47
47
  - **Role**: Tagged as `CDK.ROLE.PROCESSING`
48
- - **Execution**: Uses `cr.Provider` with both `onEventHandler` and `isCompleteHandler` pointing to the same Lambda. The `onEventHandler` returns `PhysicalResourceId` immediately; the migration code runs in `isCompleteHandler` invocations, which are polled by Step Functions until `IsComplete: true`.
48
+ - **Execution**: Uses `cr.Provider` with both `onEventHandler` and `isCompleteHandler` pointing to the same Lambda. The `onEventHandler` returns `PhysicalResourceId` immediately; the migration code runs in `isCompleteHandler` invocations, which are polled by Step Functions until `IsComplete: true`. `Delete` requests skip the migration entirely.
49
49
  - **Dependencies**: Use `dependencies` to ensure tables and other resources exist before the migration executes
50
50
  - **Permissions**: Tables passed via `tables` get data-plane (`grantReadWriteData`) plus control-plane access (`DescribeTable`, `UpdateTable`, `UpdateTimeToLive`, `UpdateContinuousBackups`) scoped to the table ARN and its indexes — migrations that add GSIs, toggle TTL, or change backups work without extra IAM
51
51
 
@@ -85,7 +85,20 @@ export const handler = migrationHandler(async (event) => {
85
85
 
86
86
  `migrationHandler` maps the `pending` flag onto CFN's `IsComplete` protocol:
87
87
  - `pending: true` → `{ IsComplete: false }` — waiter re-invokes after `queryInterval`
88
- - `pending: false` or omitted → `{ IsComplete: true }` — deploy proceeds
88
+ - `pending: false` or omitted → `{ IsComplete: true, Data: result }` — deploy proceeds
89
+
90
+ Pending responses carry no `Data`. The `cr.Provider` framework rejects
91
+ `Data` alongside `IsComplete: false` with `"Data" is not allowed if "IsComplete" is "False"`,
92
+ which fails the custom resource on the first pending poll. On completion the handler
93
+ result is returned as `Data` only when it is a plain object; scalar and array results
94
+ are reported complete without `Data` because CloudFormation accepts a map only.
95
+
96
+ ### Delete requests
97
+
98
+ `migrationHandler` short-circuits `RequestType: "Delete"` without invoking the migration
99
+ code. The resource being migrated is usually torn down in the same operation, so running
100
+ migrations against it is wasted work, and a failure there strands the stack in
101
+ `ROLLBACK_FAILED`.
89
102
 
90
103
  ## Building Migration Code
91
104