@jaypie/mcp 0.8.55 → 0.8.57
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/dist/suites/docs/index.js +1 -1
- package/package.json +1 -1
- package/release-notes/constructs/1.2.53.md +21 -0
- package/release-notes/constructs/1.2.54.md +19 -0
- package/release-notes/jaypie/1.2.46.md +13 -0
- package/release-notes/lambda/1.2.6.md +27 -0
- package/release-notes/mcp/0.8.56.md +14 -0
- package/release-notes/mcp/0.8.57.md +9 -0
- package/release-notes/testkit/1.2.37.md +9 -0
- package/skills/issues.md +1 -1
- package/skills/migrations.md +7 -3
- package/skills/web.md +15 -0
|
@@ -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.
|
|
12
|
+
const BUILD_VERSION_STRING = "@jaypie/mcp@0.8.57#b4f7b221"
|
|
13
13
|
;
|
|
14
14
|
const __filename$1 = fileURLToPath(import.meta.url);
|
|
15
15
|
const __dirname$1 = path.dirname(__filename$1);
|
package/package.json
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.2.53
|
|
3
|
+
date: 2026-05-07
|
|
4
|
+
summary: Truncate WAF log bucket names to fit S3's 63-char limit; add JaypieWebDeploymentBucket.exportOutputs()
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- WAF log bucket names created by `JaypieWebDeploymentBucket` and `JaypieDistribution` are now truncated to fit S3's 63-character limit. The `aws-waf-logs-` prefix and `-${PROJECT_NONCE}` suffix are preserved verbatim; the middle is shortened only when the full name would exceed the limit.
|
|
10
|
+
- Adds `constructWafLogBucketName(name?)` helper used by both constructs.
|
|
11
|
+
- Adds `JaypieWebDeploymentBucket.exportOutputs({ prefix?, scope? })` — emits stack-level `CfnOutput`s with stable, hash-free logical IDs (`DestinationBucketName`, `DestinationBucketDeployRoleArn`, `DistributionId`, `CertificateArn`) so consumers can read `cdk-outputs.json` without prefix-matching. Outputs whose underlying resource is absent are skipped. Pass `prefix` to namespace outputs when a stack has multiple instances.
|
|
12
|
+
|
|
13
|
+
## Motivation
|
|
14
|
+
|
|
15
|
+
WAF log bucket names: in long-named environments (e.g., `PROJECT_ENV=development`, construct id `DocumentationBucket`), the generated bucket name reached 64 characters, blocking CDK synth with `InvalidBucketNameValue`. Shorter environments like `sandbox` were unaffected, masking the regression introduced when WAF logging became default in 1.2.52.
|
|
16
|
+
|
|
17
|
+
`exportOutputs()`: the existing in-construct `CfnOutput`s get CDK-generated logical IDs like `WebDestinationBucketNameB89ADFD6`, forcing every `cdk-outputs.json` consumer to grep by prefix or duplicate outputs by hand. `exportOutputs()` is opt-in so single-bucket stacks get clean names without breaking multi-bucket use.
|
|
18
|
+
|
|
19
|
+
## Migration
|
|
20
|
+
|
|
21
|
+
No action required for the WAF bucket name fix. To opt into stable output names, call `bucket.exportOutputs()` on each `JaypieWebDeploymentBucket` (or pass `{ prefix }` for multi-instance stacks).
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.2.54
|
|
3
|
+
date: 2026-05-10
|
|
4
|
+
summary: JaypieMigration grants control-plane DynamoDB perms scoped to passed tables (issue #339)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- `JaypieMigration` now grants control-plane DynamoDB actions (`DescribeContinuousBackups`, `DescribeTable`, `DescribeTimeToLive`, `UpdateContinuousBackups`, `UpdateTable`, `UpdateTimeToLive`) on the ARNs of any tables passed via `tables`, scoped to the table ARN and its indexes (`/index/*`). Data-plane access is unchanged.
|
|
10
|
+
|
|
11
|
+
## Motivation
|
|
12
|
+
|
|
13
|
+
The migration Lambda was previously granted only data-plane access via `grantReadWriteData`. Migrations whose entire purpose is to evolve table shape (add a GSI, change TTL, toggle streams, update backups) `AccessDenied` on the first control-plane call. Combined with `lambdaHandler`'s default soft-fail, the deploy reported `CREATE_COMPLETE` while later migrations silently never ran.
|
|
14
|
+
|
|
15
|
+
Pair this with the new `migrationHandler` in `@jaypie/lambda` (1.2.6) for end-to-end loud-fail behavior.
|
|
16
|
+
|
|
17
|
+
## Migration
|
|
18
|
+
|
|
19
|
+
No action required. Existing migrations using only data-plane ops keep working; migrations that previously failed with `AccessDeniedException` on `dynamodb:DescribeTable` or `dynamodb:UpdateTable` should now succeed.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.2.46
|
|
3
|
+
date: 2026-05-10
|
|
4
|
+
summary: Re-export migrationHandler from @jaypie/lambda (issue #339)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- Re-exports `migrationHandler` from `@jaypie/lambda` 1.2.6.
|
|
10
|
+
|
|
11
|
+
## Motivation
|
|
12
|
+
|
|
13
|
+
Migration Lambdas should fail loudly so a failed migration fails the deploy. Use `migrationHandler` instead of `lambdaHandler` in migration entrypoints — see the migrations skill for usage.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 1.2.6
|
|
3
|
+
date: 2026-05-10
|
|
4
|
+
summary: Add migrationHandler that defaults throw: true so failed migrations fail the deploy (issue #339)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- New `migrationHandler` export. Wraps `lambdaHandler` with `throw: true` defaulted so a thrown error propagates out of the Lambda, causing the CFN custom resource (and the deploy) to fail loudly instead of swallowing the error and reporting `CREATE_COMPLETE`.
|
|
10
|
+
- Re-exported by `jaypie` and mocked by `@jaypie/testkit/mock`.
|
|
11
|
+
- Pass `{ throw: false }` to opt back into the soft-fail behavior.
|
|
12
|
+
|
|
13
|
+
## Motivation
|
|
14
|
+
|
|
15
|
+
`JaypieMigration` runs its Lambda via a CFN custom resource provider. With `lambdaHandler`'s default `throw: false`, a thrown migration error was caught, logged as `fatal`, and returned as a successful response — CFN saw a 200-shaped response and marked the resource `CREATE_COMPLETE`. The deploy turned green while later migrations silently never ran.
|
|
16
|
+
|
|
17
|
+
## Migration
|
|
18
|
+
|
|
19
|
+
Update migration entry points from `lambdaHandler` to `migrationHandler`:
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
import { migrationHandler } from "jaypie";
|
|
23
|
+
|
|
24
|
+
export const handler = migrationHandler(async (event) => {
|
|
25
|
+
// migration logic
|
|
26
|
+
});
|
|
27
|
+
```
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 0.8.56
|
|
3
|
+
date: 2026-05-07
|
|
4
|
+
summary: Issues skill references gh CLI; web skill documents JaypieWebDeploymentBucket.exportOutputs()
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- `skill("issues")` now instructs agents to use `gh issue create` after user approval. Previous wording referenced `mcp__github__issue_write`, which is not a generally available tool.
|
|
10
|
+
- `skill("web")` documents the new `JaypieWebDeploymentBucket.exportOutputs()` method (constructs 1.2.53) for emitting stable, hash-free output logical IDs.
|
|
11
|
+
|
|
12
|
+
## Motivation
|
|
13
|
+
|
|
14
|
+
The GitHub CLI (`gh`) is the standard way Claude Code agents create issues in this repo, so the skill should match what's actually available. Surfacing `exportOutputs()` in the web skill helps agents recommend it instead of hand-rolled `overrideLogicalId` workarounds.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: 0.8.57
|
|
3
|
+
date: 2026-05-10
|
|
4
|
+
summary: Migrations skill recommends migrationHandler and documents control-plane perms (issue #339)
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Changes
|
|
8
|
+
|
|
9
|
+
- `skill("migrations")` now recommends `migrationHandler` for the Lambda entrypoint and documents the control-plane DynamoDB permissions added by `JaypieMigration` 1.2.54.
|
package/skills/issues.md
CHANGED
|
@@ -17,7 +17,7 @@ Before creating an issue:
|
|
|
17
17
|
1. Draft the issue title and body
|
|
18
18
|
2. Present the draft to the user
|
|
19
19
|
3. Wait for explicit approval ("yes", "submit it", etc.)
|
|
20
|
-
4. Only then use `
|
|
20
|
+
4. Only then use `gh issue create` to create the issue
|
|
21
21
|
|
|
22
22
|
## Issue Format
|
|
23
23
|
|
package/skills/migrations.md
CHANGED
|
@@ -44,16 +44,18 @@ new JaypieMigration(this, "SeedData", {
|
|
|
44
44
|
- **Role**: Tagged as `CDK.ROLE.PROCESSING`
|
|
45
45
|
- **Execution**: Runs on every deploy via CloudFormation custom resource (uses a deploy nonce to force re-invocation even when only Lambda code changes)
|
|
46
46
|
- **Dependencies**: Use `dependencies` to ensure tables and other resources exist before the migration executes
|
|
47
|
+
- **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
|
|
47
48
|
|
|
48
49
|
## Migration Lambda Handler
|
|
49
50
|
|
|
50
|
-
The migration Lambda receives a CloudFormation custom resource event.
|
|
51
|
+
The migration Lambda receives a CloudFormation custom resource event. Use `migrationHandler` so a thrown error fails the CFN custom resource (and the deploy) — `lambdaHandler`'s default `throw: false` returns a success-shaped response on error and CFN reports `CREATE_COMPLETE` even when the migration failed.
|
|
51
52
|
|
|
52
53
|
```typescript
|
|
53
54
|
// src/migrations/seed/index.ts
|
|
54
55
|
import { initClient, seedEntities, APEX } from "@jaypie/dynamodb";
|
|
56
|
+
import { migrationHandler } from "jaypie";
|
|
55
57
|
|
|
56
|
-
export const handler = async (event
|
|
58
|
+
export const handler = migrationHandler(async (event) => {
|
|
57
59
|
await initClient();
|
|
58
60
|
|
|
59
61
|
await seedEntities([
|
|
@@ -62,9 +64,11 @@ export const handler = async (event: any) => {
|
|
|
62
64
|
]);
|
|
63
65
|
|
|
64
66
|
return { status: "complete" };
|
|
65
|
-
};
|
|
67
|
+
});
|
|
66
68
|
```
|
|
67
69
|
|
|
70
|
+
`migrationHandler` is `lambdaHandler` with `throw: true` defaulted. Pass `{ throw: false }` to opt back into soft-fail behavior.
|
|
71
|
+
|
|
68
72
|
## Building Migration Code
|
|
69
73
|
|
|
70
74
|
Bundle migrations separately using esbuild, then reference the output directory:
|
package/skills/web.md
CHANGED
|
@@ -121,6 +121,21 @@ Exposed as `CfnOutput`s for workflow consumption:
|
|
|
121
121
|
| `DistributionId` | CloudFront distribution for `aws cloudfront create-invalidation` |
|
|
122
122
|
| `CertificateArn` | ACM certificate ARN (when a certificate is created) |
|
|
123
123
|
|
|
124
|
+
By default these outputs live inside the construct, so CDK adds the parent path and a hash suffix (e.g., `WebDestinationBucketNameB89ADFD6`). To get stable, hash-free logical IDs in `cdk-outputs.json`, call `exportOutputs()`:
|
|
125
|
+
|
|
126
|
+
```typescript
|
|
127
|
+
const web = new JaypieWebDeploymentBucket(this, "Web", { host, zone });
|
|
128
|
+
web.exportOutputs();
|
|
129
|
+
// → DestinationBucketName, DestinationBucketDeployRoleArn, DistributionId, CertificateArn
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
For stacks with multiple `JaypieWebDeploymentBucket` instances, pass a `prefix` to avoid collisions:
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
appWeb.exportOutputs({ prefix: "App" }); // AppDestinationBucketName, ...
|
|
136
|
+
docsWeb.exportOutputs({ prefix: "Docs" }); // DocsDestinationBucketName, ...
|
|
137
|
+
```
|
|
138
|
+
|
|
124
139
|
See `skill("cicd-deploy")` for the workflow pattern that reads these outputs and deploys content.
|
|
125
140
|
|
|
126
141
|
## JaypieStaticWebBucket
|