@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 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 development project.
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
- - `main` push with `X.Y.Z-dev.0`: validation, then an automatic dev build (see
42
- below).
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, with no publication. Tag only after it
46
- passes.
47
- - Published GitHub Release: the same checks against the tag, then publication of
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 optional for PR validation, but release owners must explicitly
254
- record performed or not performed. They require a designated development project,
255
- not merely the presence of an existing `.env.local` or credential. See README
256
- for `LAMBDADB_RUN_LIVE_TESTS=1` and project confirmation. Do not load production
257
- credentials into package/CI tests. Authorized development-project live tests have
258
- passed; the [validation record](https://github.com/lambdadb/lambdadb-mcp/blob/main/docs/validation/2026-09-20-npm.md) identifies the
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, and a rerun of its existing push
320
- workflow can publish. Pull requests, manual runs and release verification never
321
- publish. Disable the variable to stop future automatic publication; the job then
322
- still prepares and tests the dev artifact without a registry write. Do not cancel
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 and the
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 and publishes the
368
- exact file to rc/latest with OIDC and provenance. A successful CI run alone
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.1",
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": "eb0081472b2517cfd24bd8276c815b6995b613d7"
66
+ "gitHead": "34797abe6de6ca95d9a8f2d8b7238086dd19f38c"
66
67
  }