@functional-systems/lambdadb-mcp 0.2.0-dev.1 → 0.2.0-dev.2
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 +6 -0
- package/CONTRIBUTING.md +8 -2
- package/README.md +7 -0
- package/RELEASING.md +119 -21
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
- Gate every publication run on the deployed live smoke: dev builds run all live
|
|
6
|
+
suites against the dev environment before publication, and release
|
|
7
|
+
verification and GitHub Releases run them against production. The project key
|
|
8
|
+
is read from Secrets Manager through a GitHub OIDC role and passed only to the
|
|
9
|
+
test process. `npm run test:live:all` runs every live suite sequentially.
|
|
10
|
+
|
|
5
11
|
- Move releases to trunk-based `main`; `develop` is retired. `main` carries the
|
|
6
12
|
next version as `X.Y.Z-dev.0` (now `0.2.0-dev.0`), and each eligible merge
|
|
7
13
|
publishes `X.Y.Z-dev.N`, where N counts first-parent commits since the newest
|
package/CONTRIBUTING.md
CHANGED
|
@@ -28,14 +28,20 @@ lifecycle scripts in a temporary consumer directory, and runs the MCP contracts
|
|
|
28
28
|
against the installed executable over stdio. An optional tarball argument tests
|
|
29
29
|
an already packed file without rebuilding it. Fixtures use loopback HTTP and
|
|
30
30
|
synthetic credentials; they never call a LambdaDB service. Live verification is
|
|
31
|
-
separate and requires explicit designation of a
|
|
31
|
+
separate and requires explicit designation of a project. `npm run test:live:all`
|
|
32
|
+
runs every live suite sequentially; the publication job runs it as a deployed
|
|
33
|
+
smoke gate (dev environment for dev builds, production for release verification
|
|
34
|
+
and releases) before any registry write. See RELEASING.md for the gates and how
|
|
35
|
+
to run them locally.
|
|
32
36
|
|
|
33
37
|
The `CI` workflow in `.github/workflows/publish.yaml` runs for PRs into and pushes
|
|
34
38
|
to `main`, manual validation and published GitHub Releases. Require the
|
|
35
39
|
`Node.js 22.14.0`, `Node.js 22` and `Node.js 24` checks in branch protection;
|
|
36
40
|
replace any old `Node 20*` / `Node 22` / `Node 24` check requirements when adopting
|
|
37
41
|
this workflow. Branch protection is an administrator setup step, not configured
|
|
38
|
-
by this change. Validation has read-only permissions and no service credentials
|
|
42
|
+
by this change. Validation has read-only permissions and no service credentials;
|
|
43
|
+
only the publication job on `main` pushes and GitHub Releases reads a dedicated
|
|
44
|
+
smoke project key.
|
|
39
45
|
|
|
40
46
|
## Releases and compatibility
|
|
41
47
|
|
package/README.md
CHANGED
|
@@ -505,6 +505,13 @@ retrieval scores and actual docsUrl hydration, then deletes and verifies absence
|
|
|
505
505
|
These live suites are outside default checks and credential-free CI. Verify the
|
|
506
506
|
target's deployment provenance before running; the source pin alone is insufficient.
|
|
507
507
|
|
|
508
|
+
To run all three live suites one after another with every opt-in, as the
|
|
509
|
+
publication workflow does (see [RELEASING.md](RELEASING.md)):
|
|
510
|
+
|
|
511
|
+
```bash
|
|
512
|
+
LAMBDADB_RUN_LIVE_TESTS=1 LAMBDADB_RUN_LIVE_RERANK_TESTS=1 LAMBDADB_LIVE_CONFIRM_PROJECT=YOUR_DEV_PROJECT npm run test:live:all
|
|
513
|
+
```
|
|
514
|
+
|
|
508
515
|
If the environment file is outside the worktree:
|
|
509
516
|
|
|
510
517
|
```bash
|
package/RELEASING.md
CHANGED
|
@@ -37,15 +37,19 @@ node scripts/version.mjs set 0.2.1-dev.0 # next development version
|
|
|
37
37
|
|
|
38
38
|
The `CI` workflow (`.github/workflows/publish.yaml`) selects one run mode:
|
|
39
39
|
|
|
40
|
-
- Pull requests into `main` and manual runs: validation only, no credentials
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
- Pull requests into `main` and manual runs: validation only, no credentials
|
|
41
|
+
and no live tests.
|
|
42
|
+
- `main` push with `X.Y.Z-dev.0`: validation, the deployed live smoke against
|
|
43
|
+
the dev environment, then an automatic dev build (see below).
|
|
43
44
|
- `main` push with `X.Y.Z-rc.N` or `X.Y.Z` (a release pull request merge):
|
|
44
45
|
validation plus the publication job's release metadata, changelog, ancestry,
|
|
45
|
-
pack and installed-package checks
|
|
46
|
-
passes.
|
|
47
|
-
- Published GitHub Release: the same checks against the tag,
|
|
48
|
-
its RC or stable version.
|
|
46
|
+
pack and installed-package checks and the deployed live smoke against
|
|
47
|
+
production, with no publication. Tag only after it passes.
|
|
48
|
+
- Published GitHub Release: the same checks against the tag, including the
|
|
49
|
+
production live smoke, then publication of its RC or stable version.
|
|
50
|
+
|
|
51
|
+
Every publication-job run passes the deployed live smoke (see "Deployed live
|
|
52
|
+
smoke gates") before any registry write; a smoke failure stops the job.
|
|
49
53
|
|
|
50
54
|
After an RC or stable publication succeeds, the "Open next development version"
|
|
51
55
|
workflow (`.github/workflows/next-dev-version.yaml`) opens a pull request that
|
|
@@ -250,15 +254,107 @@ failures, protocol-only stdout and termination. They do not prove production
|
|
|
250
254
|
service behavior or every MCP client UI. Installed dependencies are resolved by
|
|
251
255
|
npm (the package's development lockfile is not a consumer dependency lock).
|
|
252
256
|
|
|
253
|
-
Live tests are
|
|
254
|
-
|
|
255
|
-
not merely the presence of an existing `.env.local` or credential. See
|
|
256
|
-
for `LAMBDADB_RUN_LIVE_TESTS=1` and project confirmation.
|
|
257
|
-
credentials into package
|
|
258
|
-
|
|
257
|
+
Live tests are not part of PR validation. The publication job runs them as the
|
|
258
|
+
deployed live smoke gate described below. Manual live runs require a designated
|
|
259
|
+
project, not merely the presence of an existing `.env.local` or credential. See
|
|
260
|
+
README for `LAMBDADB_RUN_LIVE_TESTS=1` and project confirmation. Never load
|
|
261
|
+
production credentials into package tests or the validation matrix; only the
|
|
262
|
+
publication job's smoke reads the dedicated production smoke project key.
|
|
263
|
+
Authorized development-project live tests have passed; the
|
|
264
|
+
[validation record](https://github.com/lambdadb/lambdadb-mcp/blob/main/docs/validation/2026-09-20-npm.md) identifies the
|
|
259
265
|
tested source and installed package. These results do not automatically validate
|
|
260
266
|
a future release candidate.
|
|
261
267
|
|
|
268
|
+
## Deployed live smoke gates
|
|
269
|
+
|
|
270
|
+
| Run mode | Event | Live target | Variable prefix |
|
|
271
|
+
| --- | --- | --- | --- |
|
|
272
|
+
| None | Pull request, manual run | None (no credentials) | None |
|
|
273
|
+
| `dev` | `main` push with `X.Y.Z-dev.0` | Dev environment, then dev publication | `LAMBDADB_DEV_` |
|
|
274
|
+
| `verify` | `main` push with `X.Y.Z-rc.N` or `X.Y.Z` | Production, verification only | `LAMBDADB_PROD_` |
|
|
275
|
+
| `release` | Published GitHub Release | Production, then publication | `LAMBDADB_PROD_` |
|
|
276
|
+
|
|
277
|
+
`node scripts/version.mjs mode` selects the run mode and its Variable prefix. A
|
|
278
|
+
dev run superseded before preparation (no longer the head of `main`) skips the
|
|
279
|
+
smoke together with publication.
|
|
280
|
+
|
|
281
|
+
After the exact publication artifact passes its installed-package tests, the
|
|
282
|
+
publication job assumes the environment's AWS role through GitHub OIDC and runs
|
|
283
|
+
`node scripts/run-live-smoke.mjs`. The runner fails on missing configuration,
|
|
284
|
+
reads the project API key from Secrets Manager with the AWS CLI, masks it, and
|
|
285
|
+
passes it only in the environment of `npm run test:live:all`. It never puts the
|
|
286
|
+
key in files, command arguments, artifacts or GitHub Secrets, and loads no
|
|
287
|
+
dotenv file (`LAMBDADB_ENV_FILE=/dev/null`). It sets every opt-in
|
|
288
|
+
(`LAMBDADB_RUN_LIVE_TESTS=1`, `LAMBDADB_RUN_LIVE_RERANK_TESTS=1`,
|
|
289
|
+
`LAMBDADB_MCP_ENABLE_WRITE_TOOLS=true` and `LAMBDADB_LIVE_CONFIRM_PROJECT` set
|
|
290
|
+
to the project name), and each suite fails rather than skips without them.
|
|
291
|
+
|
|
292
|
+
`test:live:all` builds once and runs `live`, `rerank-live` and `bayesian-live`
|
|
293
|
+
one file at a time (`--test-concurrency=1`); concurrent bulk writes can exceed
|
|
294
|
+
the project's writer capacity and return HTTP 429. Each suite creates its own
|
|
295
|
+
temporary collection, deletes it in cleanup and verifies its absence. The rerank
|
|
296
|
+
and Bayesian suites incur real embedding and reranking inference. The
|
|
297
|
+
publication job allows 60 minutes for these suites.
|
|
298
|
+
|
|
299
|
+
Each smoke target uses these repository Variables. A missing Variable is empty
|
|
300
|
+
and fails the run; it never falls back to the other environment.
|
|
301
|
+
|
|
302
|
+
| Variable | Value |
|
|
303
|
+
| --- | --- |
|
|
304
|
+
| `LAMBDADB_DEV_BASE_URL` | `https://internal-dev-aws-apne2-v3-c05a2b5d492a.lambdadb.ai` |
|
|
305
|
+
| `LAMBDADB_DEV_PROJECT_NAME` | Dedicated MCP smoke project in `dev-aws-apne2-v3` (`mcp-ci`) |
|
|
306
|
+
| `LAMBDADB_DEV_SMOKE_AWS_ROLE_ARN` | Dev AWS OIDC role ARN (`lambdadb-mcp-smoke`) |
|
|
307
|
+
| `LAMBDADB_DEV_SMOKE_SECRET_ARN` | Exact ARN of the dev project's API key secret |
|
|
308
|
+
| `LAMBDADB_PROD_BASE_URL` | `https://aws-ap-northeast-2-v3.lambdadb.ai` |
|
|
309
|
+
| `LAMBDADB_PROD_PROJECT_NAME` | Dedicated MCP smoke project in `prod-aws-apne2-v3` (`mcp-ci`) |
|
|
310
|
+
| `LAMBDADB_PROD_SMOKE_AWS_ROLE_ARN` | Production AWS OIDC role ARN (`lambdadb-mcp-prod-smoke`) |
|
|
311
|
+
| `LAMBDADB_PROD_SMOKE_SECRET_ARN` | Exact ARN of the production project's API key secret |
|
|
312
|
+
|
|
313
|
+
Each key is a plain SecretString in `ap-northeast-2`. Each project is dedicated
|
|
314
|
+
to this smoke, where temporary collections may be created and deleted, with a
|
|
315
|
+
`rateLimit` of at least 100 requests per second. Each role trusts audience
|
|
316
|
+
`sts.amazonaws.com` and only these subjects; the dev role:
|
|
317
|
+
|
|
318
|
+
```text
|
|
319
|
+
repo:lambdadb/lambdadb-mcp:ref:refs/heads/main
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
The production role (release verification on `main`, Releases on tags):
|
|
323
|
+
|
|
324
|
+
```text
|
|
325
|
+
repo:lambdadb/lambdadb-mcp:ref:refs/heads/main
|
|
326
|
+
repo:lambdadb/lambdadb-mcp:ref:refs/tags/v*
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
Each role may only call `secretsmanager:GetSecretValue` on its own environment's
|
|
330
|
+
smoke secret (plus `kms:Decrypt` on the exact key if a customer-managed KMS key
|
|
331
|
+
is used). Do not grant the workflow an admin key, project creation, deployment
|
|
332
|
+
or secret write permissions. Provisioning the roles, projects, keys and
|
|
333
|
+
Variables is a separate environment setup step; key rotation updates the secret
|
|
334
|
+
without changing the workflow. A smoke failure caused by a server change not yet
|
|
335
|
+
deployed to production blocks verification and release; record the exact error.
|
|
336
|
+
|
|
337
|
+
To run the same suite locally against a designated project, use AWS credentials
|
|
338
|
+
that can read its smoke secret. Outside GitHub Actions the runner prints no mask
|
|
339
|
+
command, so the key is never printed:
|
|
340
|
+
|
|
341
|
+
```sh
|
|
342
|
+
npm ci
|
|
343
|
+
AWS_PROFILE=YOUR_PROFILE LAMBDADB_BASE_URL=https://... LAMBDADB_PROJECT_NAME=mcp-ci \
|
|
344
|
+
LAMBDADB_SMOKE_SECRET_ARN=arn:aws:secretsmanager:... node scripts/run-live-smoke.mjs
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
With credentials in `.env.local` (including `LAMBDADB_MCP_ENABLE_WRITE_TOOLS=true`)
|
|
348
|
+
instead, set the opt-ins yourself:
|
|
349
|
+
|
|
350
|
+
```sh
|
|
351
|
+
LAMBDADB_RUN_LIVE_TESTS=1 LAMBDADB_RUN_LIVE_RERANK_TESTS=1 \
|
|
352
|
+
LAMBDADB_LIVE_CONFIRM_PROJECT=YOUR_PROJECT npm run test:live:all
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
Record the environment, MCP commit, duration, outcome and cleanup result. A
|
|
356
|
+
source revision alone does not establish the deployed server revision.
|
|
357
|
+
|
|
262
358
|
## First package publication: separate manual bootstrap
|
|
263
359
|
|
|
264
360
|
npm trust configuration requires an existing package. See the official
|
|
@@ -316,10 +412,11 @@ bootstrap and trust setup. Only after authorizing ongoing dev publication, set i
|
|
|
316
412
|
to `true` in GitHub **Settings → Secrets and variables → Actions → Variables**.
|
|
317
413
|
This repository completed that activation; the variable was verified as `true` on
|
|
318
414
|
2026-09-20 (KST). With it set, a reviewed `main` push whose committed version is
|
|
319
|
-
`X.Y.Z-dev.0` publishes after validation
|
|
320
|
-
workflow can publish. Pull requests, manual runs and
|
|
321
|
-
publish. Disable the variable to stop future
|
|
322
|
-
still prepares and tests the dev artifact
|
|
415
|
+
`X.Y.Z-dev.0` publishes after validation and the dev live smoke pass, and a
|
|
416
|
+
rerun of its existing push workflow can publish. Pull requests, manual runs and
|
|
417
|
+
release verification never publish. Disable the variable to stop future
|
|
418
|
+
automatic publication; the job then still prepares and tests the dev artifact
|
|
419
|
+
and runs the dev live smoke without a registry write. Do not cancel
|
|
323
420
|
an in-progress registry write as rollback.
|
|
324
421
|
|
|
325
422
|
The workflow checks out the exact push SHA and publishes `X.Y.Z-dev.N`, where N
|
|
@@ -355,8 +452,8 @@ release if it was superseded in the pending queue and still needs publication.
|
|
|
355
452
|
`## [VERSION] - YYYY-MM-DD` changelog entry. Retain validation/live-test
|
|
356
453
|
status for the candidate.
|
|
357
454
|
2. Merge it. That `main` push runs the publication job in verification mode:
|
|
358
|
-
release metadata, changelog and ancestry checks, one pack
|
|
359
|
-
installed-package tests, with no publication. Do not merge other pull
|
|
455
|
+
release metadata, changelog and ancestry checks, one pack, the
|
|
456
|
+
installed-package tests and the production live smoke, with no publication. Do not merge other pull
|
|
360
457
|
requests until the release is tagged, or tag the release pull request's merge
|
|
361
458
|
commit explicitly.
|
|
362
459
|
3. After verification passes, obtain authorization, tag that exact merge commit
|
|
@@ -364,8 +461,9 @@ release if it was superseded in the pending queue and still needs publication.
|
|
|
364
461
|
`prerelease: true` for rc or `false` for stable. Draft releases do not
|
|
365
462
|
publish. Do not create a dev GitHub Release.
|
|
366
463
|
4. The workflow validates the release tag, package versions, prerelease flag,
|
|
367
|
-
changelog and ancestry in origin/main; it packs/tests once
|
|
368
|
-
exact file to rc/latest with OIDC
|
|
464
|
+
changelog and ancestry in origin/main; it packs/tests once, runs the
|
|
465
|
+
production live smoke and publishes the exact file to rc/latest with OIDC
|
|
466
|
+
and provenance. A successful CI run alone
|
|
369
467
|
is not publication evidence. Verify npm.
|
|
370
468
|
5. Review and merge the next development version pull request opened by the
|
|
371
469
|
"Open next development version" workflow (see the release model above).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@functional-systems/lambdadb-mcp",
|
|
3
|
-
"version": "0.2.0-dev.
|
|
3
|
+
"version": "0.2.0-dev.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "MCP server for LambdaDB data plane",
|
|
6
6
|
"type": "module",
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
"test:live:bayesian": "npm run build && bash ./scripts/with-env.sh --test test/integration/bayesian-live.test.mjs",
|
|
15
15
|
"test:live:rerank": "npm run build && bash ./scripts/with-env.sh --test test/integration/rerank-live.test.mjs",
|
|
16
16
|
"test:live": "npm run build && bash ./scripts/with-env.sh --test test/integration/live.test.mjs",
|
|
17
|
+
"test:live:all": "npm run build && bash ./scripts/with-env.sh --test --test-concurrency=1 test/integration/live.test.mjs test/integration/rerank-live.test.mjs test/integration/bayesian-live.test.mjs",
|
|
17
18
|
"dev": "tsx watch src/index.ts",
|
|
18
19
|
"inspect": "bash ./scripts/inspect.sh",
|
|
19
20
|
"start": "node dist/index.js",
|
|
@@ -62,5 +63,5 @@
|
|
|
62
63
|
"access": "public",
|
|
63
64
|
"registry": "https://registry.npmjs.org"
|
|
64
65
|
},
|
|
65
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "34797abe6de6ca95d9a8f2d8b7238086dd19f38c"
|
|
66
67
|
}
|