@knitli/openapi-mcp 0.0.0 → 1.1.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/README.md CHANGED
@@ -16,10 +16,14 @@ established; use Node for `serve`. `/runtime` and `/conformance` pass an isolate
16
16
  WebWorker-only declaration check and browser bundle. This is not evidence of an
17
17
  actual Cloudflare D1 deployment or D1 conformance.
18
18
 
19
- The source version is `0.0.0`. Registry publication, trusted publishing, and
20
- registry provenance verification remain release gates, not claims made by this
21
- README. For a locally built and tested tarball, install its absolute path from a
22
- clean consumer directory:
19
+ The source version is `0.0.0`. That version was published under the `bootstrap`
20
+ dist-tag on 2026-09-05; its public installation, signatures, provenance, and
21
+ installed consumer were verified. See the [bootstrap release record](../../docs/superpowers/reviews/2026-09-05-openapi-mcp-bootstrap.md)
22
+ for the exact artifact and workflow binding. This is not a stable `latest`
23
+ release or evidence of a successful trusted-publishing release.
24
+
25
+ For a locally built and tested tarball, install its absolute path from a clean
26
+ consumer directory:
23
27
 
24
28
  ```sh
25
29
  npm install --ignore-scripts /absolute/path/to/openapi-mcp.tgz
@@ -28,8 +32,8 @@ node --version
28
32
 
29
33
  After a real stable version is observed in npm, pin that exact verified version
30
34
  with `npm install --save-exact @knitli/openapi-mcp@<verified-version>`. A bootstrap
31
- `0.0.0` publication, if needed, uses the `bootstrap` dist-tag and is not a stable
32
- release. The CLI examples below use the consumer's `node_modules/.bin` binary.
35
+ `0.0.0` publication uses the `bootstrap` dist-tag and is not a stable release.
36
+ The CLI examples below use the consumer's `node_modules/.bin` binary.
33
37
 
34
38
  ## Generate a signing key and compile a release
35
39
 
@@ -213,6 +217,17 @@ restart with the remaining valid catalogs. Config requires at least one catalog;
213
217
  leave the server stopped if disabling the last one. Removing a file while the
214
218
  process is using it is not a reliable disable procedure.
215
219
 
220
+ ## Complete release admission
221
+
222
+ `admitCatalogRelease(options, catalogId, releaseId)` from
223
+ `@knitli/openapi-mcp/runtime` verifies every signed inventory operation and
224
+ schema before admitting the generation through the configured `GenerationStore`.
225
+ It revalidates the manifest and inventory around generation CAS retries. Use
226
+ this supported portable API when activating an executable catalog; `admitManifest`
227
+ retains its signed-envelope-only contract. Storage must preserve immutable release
228
+ identities. Admission does not guarantee future availability, so runtime reads
229
+ continue verifying records at use time.
230
+
216
231
  ## Recover from a bad release
217
232
 
218
233
  Before release, record the prior **observed package version**, its tarball digest,
@@ -341,14 +356,21 @@ external setup and bootstrap-cleanup gates. Until then, build/test/validation
341
356
  still run and publication is explicitly reported as pending. A real build,
342
357
  publication, or audit failure continues to fail the job and its dependents.
343
358
 
344
- If the package does not yet exist, bootstrap is a separate exception requiring
345
- recorded named owner approval and protected-environment approval. It publishes
346
- only `0.0.0`, with `--access public --tag bootstrap --provenance`; it does not run
347
- semantic-release or create a Git tag/release. A short-lived granular token may be
348
- injected only into that protected job, never into local files, logs, commits, or
349
- artifacts. After bootstrap, configure the exact trusted publisher, remove token
350
- variables and the GitHub secret, revoke the token, and commit the OIDC-only
351
- workflow before allowing the first real `latest` release.
359
+ The one-time `0.0.0` bootstrap is complete. Its manual dispatch and token-backed
360
+ jobs have been removed; do not rerun publication of that version. The adapter
361
+ still rejects token environment mappings, including mappings in disabled jobs.
362
+ The [bootstrap release record](../../docs/superpowers/reviews/2026-09-05-openapi-mcp-bootstrap.md)
363
+ separates verified publication and secret removal from owner-reported npm setup
364
+ and the remaining first-`latest` gate.
365
+
366
+ After publication, the verification step waits for the exact version to appear
367
+ in the public package listing before attempting a fresh installation. Only a
368
+ missing package or missing version is retried: at most six requests, each with
369
+ a ten-second timeout, separated by ten-second waits. Invalid metadata and other
370
+ errors fail the check. This readiness probe cannot guarantee every registry
371
+ replica or tarball URL is ready. Installation, cryptographic verification, and
372
+ consumer checks remain mandatory; publication itself is never retried by this
373
+ probe.
352
374
 
353
375
  For bootstrap and every stable release, retain a fresh public install's
354
376
  `npm audit signatures --json --include-attestations` output in the protected job
@@ -0,0 +1,8 @@
1
+ import type { AdmittedManifest } from "./manifest.ts";
2
+ import { type OpenApiRuntimeOptions } from "./runtime.ts";
3
+ import type { CatalogId, ReleaseId } from "./types.ts";
4
+ /** Verify the complete release inventory before atomically admitting its generation.
5
+ * Storage must preserve immutable release identities; later runtime reads still
6
+ * verify records because this check cannot guarantee future storage availability.
7
+ */
8
+ export declare function admitCatalogRelease(options: OpenApiRuntimeOptions, catalogId: CatalogId, releaseId: ReleaseId): Promise<AdmittedManifest>;
@@ -0,0 +1,9 @@
1
+ import { admitExecutableRelease, verifyExecutableRelease, } from "./runtime.js";
2
+ /** Verify the complete release inventory before atomically admitting its generation.
3
+ * Storage must preserve immutable release identities; later runtime reads still
4
+ * verify records because this check cannot guarantee future storage availability.
5
+ */
6
+ export async function admitCatalogRelease(options, catalogId, releaseId) {
7
+ const preflight = await verifyExecutableRelease(options, catalogId, releaseId);
8
+ return admitExecutableRelease(options, preflight);
9
+ }
@@ -1,4 +1,5 @@
1
1
  export type { ActionDispatchPermit } from "./action-permit.ts";
2
+ export { admitCatalogRelease } from "./admission.ts";
2
3
  export { classifyOperation, type OperationClassification, } from "./classify.ts";
3
4
  export { digestCredentialAuthorizationBinding, snapshotCredentialAuthorizationBinding, } from "./credential-binding.ts";
4
5
  export { sha256, verifyEd25519 } from "./digest.ts";
@@ -1,3 +1,4 @@
1
+ export { admitCatalogRelease } from "./admission.js";
1
2
  export { classifyOperation, } from "./classify.js";
2
3
  export { digestCredentialAuthorizationBinding, snapshotCredentialAuthorizationBinding, } from "./credential-binding.js";
3
4
  export { sha256, verifyEd25519 } from "./digest.js";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@knitli/openapi-mcp",
3
3
  "private": false,
4
- "version": "0.0.0",
4
+ "version": "1.1.0",
5
5
  "type": "module",
6
6
  "description": "Compile signed OpenAPI catalogs and serve verified search and authorized API calls over MCP.",
7
7
  "license": "MIT OR Apache-2.0",
@@ -111,6 +111,16 @@
111
111
  "release": "patch"
112
112
  },
113
113
  {
114
+ "scope": "!@(openapi-mcp)",
115
+ "release": false
116
+ },
117
+ {
118
+ "scope": null,
119
+ "release": false
120
+ },
121
+ {
122
+ "scope": "openapi-mcp",
123
+ "type": "!@(feat|fix|perf)",
114
124
  "release": false
115
125
  }
116
126
  ]