Skip to content

Commit 5ae0c63

Browse files
jonathanMLDevzhao
andauthored
docs: add production readiness sign-off for npm 0.5.0 (#242)
* docs: add production readiness sign-off for npm 0.5.0 * resolved link errors * add release documentations * update release-verification-0.5.0.md * fixed date * fixed all reviews * addressed ai reviews * add a test and addressed all reviews --------- Co-authored-by: zhao <jornathanm910923@gmail.com>
1 parent c28e346 commit 5ae0c63

15 files changed

Lines changed: 401 additions & 25 deletions

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,11 @@ coverage/
4545

4646
# Misc
4747
.npmrc
48+
.temp/
49+
.tmp/
50+
cursor_logs/
4851

4952
# Scripts
5053
scripts/*.bat
5154
scripts/*.sh
55+
scripts/fix-core-imports.mjs

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ Tagged releases are published to npm from GitHub Actions when a **GitHub Release
88

99
## [Unreleased]
1010

11+
### Changed
12+
13+
- **`docs:link-check`:** validates Markdown heading fragment anchors (GitHub-style slugs) in addition to file/URL existence; unit tests cover slug helpers in `scripts/docs-link-check.mjs`.
14+
1115
## [0.5.0] - 2026-07-25
1216

1317
### Added
@@ -28,7 +32,7 @@ Tagged releases are published to npm from GitHub Actions when a **GitHub Release
2832

2933
### Removed
3034

31-
- **Breaking (library):** Trimmed internal-only re-exports from the package root and `/alliance` entry to shrink the public surface and blast radius: `trimOptional`, `createUnconfiguredAllianceContext` (core), and the concrete URL generators `generatorMailing`, `generatorSlackCpplang` (alliance). These were internal helpers, not part of the documented API; register built-ins via `registerBuiltinUrlGenerators` and build contexts via `createServer` / `createIsolatedContext`. A snapshot test now guards the runtime export surface so internal symbols cannot leak back in. See [MIGRATION.md](docs/MIGRATION.md#internal-only-re-exports-removed-203). (#203)
35+
- **Breaking (library):** Trimmed internal-only re-exports from the package root and `/alliance` entry to shrink the public surface and blast radius: `trimOptional`, `createUnconfiguredAllianceContext` (core), and the concrete URL generators `generatorMailing`, `generatorSlackCpplang` (alliance). These were internal helpers, not part of the documented API; register built-ins via `registerBuiltinUrlGenerators` and build contexts via `createServer` / `createIsolatedContext`. A snapshot test now guards the runtime export surface so internal symbols cannot leak back in. See [MIGRATION.md](docs/MIGRATION.md#050-internal-only-re-exports-removed-203). (#203)
3236

3337
### Fixed
3438

CONTRIBUTING.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ npm run ci
2828
| ------ | ------- |
2929
| `npm run build` | Clean `dist/` and `tsc` compile |
3030
| `npm run typecheck` | `tsc --noEmit` |
31-
| `npm run lint` | ESLint on `src/` |
31+
| `npm run lint` | ESLint on `src/` and `scripts/` |
3232
| `npm run lint:fix` | ESLint with `--fix` |
33-
| `npm run format` | Prettier write (`src/**/*.ts`, config JSON) |
33+
| `npm run format` | Prettier write (`src/**/*.ts`, `scripts/**/*.{mjs,ts}`, config JSON) |
3434
| `npm run format:check` | Prettier check |
3535
| `npm test` | Vitest once |
3636
| `npm run test:coverage` | Vitest + coverage thresholds (`vitest.config.ts`) |

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Current version: 0.5.0 (npm `latest` after publish). Pin `@0.5.0` in install and
1111

1212
## Upgrading to 0.5.0
1313

14-
Version **0.5.0** includes breaking MCP and library changes: `list_sources` returns `sources: { name, description? }[]`, `PineconeClient.listNamespacesWithMetadata()` returns `{ namespaces, warnings }`, internal-only package re-exports were removed (#203), the MCP SDK floor is **^1.29.0**, and hybrid leg failure with zero surviving hits is signaled under `experimental.degraded` / `experimental.hybrid_leg_failed` (#228). Legacy module facades remain deprecated but are **not** removed in this release. See [docs/MIGRATION.md § list_sources](docs/MIGRATION.md#050-list_sources-response-shape), [§ listNamespacesWithMetadata](docs/MIGRATION.md#050-pineconeclientlistnamespaceswithmetadata-return-shape), [§ internal re-exports (#203)](docs/MIGRATION.md#internal-only-re-exports-removed-203), and the [CHANGELOG](CHANGELOG.md#050---2026-07-25).
14+
Version **0.5.0** includes breaking MCP and library changes: `list_sources` returns `sources: { name, description? }[]`, `PineconeClient.listNamespacesWithMetadata()` returns `{ namespaces, warnings }`, internal-only package re-exports were removed (#203), the MCP SDK floor is **^1.29.0**, and hybrid leg failure with zero surviving hits is signaled under `experimental.degraded` / `experimental.hybrid_leg_failed` (#228). Legacy module facades remain deprecated but are **not** removed in this release. See [docs/MIGRATION.md § list_sources](docs/MIGRATION.md#050-list_sources-response-shape), [§ listNamespacesWithMetadata](docs/MIGRATION.md#050-pineconeclientlistnamespaceswithmetadata-return-shape), [§ internal re-exports (#203)](docs/MIGRATION.md#050-internal-only-re-exports-removed-203), and the [CHANGELOG](CHANGELOG.md#050---2026-07-25).
1515

1616
## Upgrading to 0.4.0
1717

docs/CI_CD.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
**Job `quality`**
2323

24-
- Ubuntu + Node 20: `npm audit --audit-level=moderate` (continue-on-error) → `npm pack --dry-run`**`npm run docs:link-check`** (single `npx markdown-link-check` over `README.md`, `CHANGELOG.md`, and all `docs/**/*.md`).
24+
- Ubuntu + Node 20: `npm audit --audit-level=moderate` (continue-on-error) → `npm pack --dry-run`**`npm run docs:link-check`** (`markdown-link-check` for file/URL targets plus heading-anchor validation in `scripts/docs-link-check.mjs`).
2525

2626
---
2727

docs/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,6 @@ Guides for operators, MCP client authors, and library embedders.
1414
| [deprecation-policy.md](./deprecation-policy.md) | Deprecation window, semver, CHANGELOG conventions |
1515
| [templates/breaking-change-release-notes.md](./templates/breaking-change-release-notes.md) | GitHub Release body template for breaking versions |
1616
| [RELEASING.md](./RELEASING.md) | npm publish via GitHub Releases |
17+
| [release-verification.md](./release-verification.md) | Post-publish verification and production-readiness sign-offs |
1718

1819
The main [README.md](../README.md) remains the high-level overview; deep reference lives here.

docs/RELEASING.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,7 @@ Packages are published to npm as **`@will-cppa/pinecone-read-only-mcp`**.
1616
## Version source
1717

1818
`SERVER_VERSION` is read from `package.json` at runtime so MCP `serverInfo` matches the published package.
19+
20+
## Post-publish verification
21+
22+
After a release is on npm, record artifact and CI alignment in [release-verification.md](./release-verification.md) (see [0.5.0 sign-off](./release-verification-0.5.0.md) for `v0.5.0`).

docs/deprecation-policy.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ Renames may ship the **replacement immediately** alongside the deprecated alias
3232

3333
APIs deprecated **before** this policy was published follow the removal target recorded in CHANGELOG and source comments at deprecation time. The `paper_number` field on query result rows (use `document_id` instead) was deprecated in **0.2.0** with removal planned no earlier than the **next major** release after `1.0.0`; it will not be removed in a `0.y` minor without an explicit CHANGELOG entry and MIGRATION update.
3434

35-
### Active deprecations - legacy module facades
35+
### Active deprecations: legacy module facades
3636

3737
Module-level singleton facades delegate to `getDefaultServerContext()`. Migrate to **`ServerContext`** instance methods via `createServer(config)` and pass `{ context: ctx }` to `setupCoreServer` / `setupAllianceServer`. Deprecated in **`0.3.0`**; earliest removal **`0.5.0`** (per [Deprecation window](#deprecation-window) above). See [MIGRATION.md § Legacy module-facade deprecations](./MIGRATION.md#030-legacy-module-facade-deprecations).
3838

@@ -132,7 +132,7 @@ Each breaking bullet should state:
132132

133133
- **What changed** — concrete behavior or schema difference.
134134
- **Who is affected** — MCP clients, library embedders, operators, etc.
135-
- **Migration** — link to [MIGRATION.md](./MIGRATION.md#anchor) (or “see MIGRATION.md § …”).
135+
- **Migration** — link to the specific [MIGRATION.md](./MIGRATION.md) heading covering the change (or “see MIGRATION.md § …”).
136136

137137
### Deprecated entries
138138

docs/release-verification-0.5.0.md

Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
# Production readiness sign-off: `@will-cppa/pinecone-read-only-mcp@0.5.0`
2+
3+
- **Package:** `@will-cppa/pinecone-read-only-mcp`
4+
- **Version:** `0.5.0`
5+
- **Git tag:** `v0.5.0``c28e346efafadbfef98891e523d566eebe957dad` (“Updated documents for new release (#236)”)
6+
- **Recorded:** 2026-07-29 (UTC+8 local)
7+
- **Verifier:** Jonathan (@jonathanMLDev), assignee for week 5 verification task
8+
- **Scope:** Verification and sign-off only. No product code changes. `ServerContext` decomposition and legacy facade removal remain deferred past July 2026.
9+
10+
## Acceptance criteria evidence
11+
12+
### AC 1 — npm registry version and publish time
13+
14+
| Field | Value |
15+
| ---------------------- | ------------------------------------------------------------------------------------------------------- |
16+
| `npm view … version` | `0.5.0` |
17+
| `dist-tags.latest` | `0.5.0` |
18+
| `time['0.5.0']` (UTC) | `2026-07-24T18:41:39.687Z` |
19+
| CHANGELOG release date | `2026-07-25` ([CHANGELOG.md](../CHANGELOG.md#050---2026-07-25); calendar date vs UTC publish timestamp) |
20+
21+
Commands used: `npm view @will-cppa/pinecone-read-only-mcp@0.5.0 version gitHead dist-tags time --json`
22+
23+
### AC 2 — `package.json` in tarball vs tagged tree
24+
25+
Repository state for verification: **detached HEAD at `v0.5.0`** (`c28e346`).
26+
27+
Compared packed `package/package.json` from:
28+
29+
1. Local `npm pack` after `npm ci` and `npm run build` on `v0.5.0`
30+
2. Registry `npm pack @will-cppa/pinecone-read-only-mcp@0.5.0`
31+
32+
These fields are **identical** in both tarballs (local pack vs registry pack; no differences in `version`, `files`, `exports`, or `bin`):
33+
34+
- `version`: `0.5.0`
35+
- `files`: `dist`, `README.md`, `LICENSE`, `CHANGELOG.md`
36+
- `bin`:
37+
38+
```json
39+
{
40+
"pinecone-read-only-mcp": "dist/index.js"
41+
}
42+
```
43+
44+
- `exports` (same object in both packed `package/package.json` files):
45+
46+
```json
47+
{
48+
".": {
49+
"types": "./dist/core/index.d.ts",
50+
"import": "./dist/core/index.js"
51+
},
52+
"./alliance": {
53+
"types": "./dist/alliance/index.d.ts",
54+
"import": "./dist/alliance/index.js"
55+
},
56+
"./package.json": "./package.json"
57+
}
58+
```
59+
60+
`npm pack --dry-run` on the tag reported **208** packaged files; registry pack lists the same paths (no `src/`).
61+
62+
### AC 3 — `dist/` contents and hygiene
63+
64+
- Fresh build on tag: `npm run build` (runs `clean` then `tsc -p tsconfig.build.json`) before pack.
65+
- **No** `*.test.*` (or other test sources) under packed `dist/`.
66+
- **File path set** under `package/` (local vs registry): identical.
67+
- **`dist/**` content:** SHA-256 compared for every file under `dist/` in both tarballs → **0 mismatches** (functional parity of compiled output).
68+
- **Tarball bytes:** full `.tgz` SHA-256 differs between local pack and registry. This is expected from tar entry ordering and gzip stream differences across npm/Node versions (local pack used Node v24.11.1; registry was published from CI on Node 20.x) — **not** content drift: `package.json`, `README.md`, `CHANGELOG.md`, and `LICENSE` are byte-identical between the packed tarball and `git show v0.5.0:<path>` for each file (verified independently of the local `npm pack`, so this holds regardless of the packer's Node version). Registry tarball matches npm `dist.shasum` `f912f88fee5a8499eadac70ddcbf4a25660fbe76`.
69+
- Local verification used **Node v24.11.1**; publish workflow uses **Node 20.x** on Ubuntu ([publish.yml](../.github/workflows/publish.yml)). Despite Node major difference, compiled `dist/` artifacts matched registry byte-for-byte.
70+
71+
### AC 4 — CI, CodeQL, and Publish workflow (release gate)
72+
73+
**npm `gitHead`:** `c28e346efafadbfef98891e523d566eebe957dad` — matches `git rev-parse v0.5.0^{commit}`.
74+
75+
Workflow runs confirmed via the public [GitHub Actions](https://github.com/cppalliance/pinecone-read-only-mcp-typescript/actions) UI on 2026-07-29 (listed as successful; no failure marker on these runs):
76+
77+
| Check | Run | Link |
78+
| ---------------------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
79+
| **CI** on merge commit `c28e346` (#236) | CI **#480** — “Updated documents for new release (#236)” on `main` | [Run #480](https://github.com/cppalliance/pinecone-read-only-mcp-typescript/actions/runs/30117302054) — Success |
80+
| **CodeQL** on `c28e346` | CodeQL **#505** — same commit on `main` | [Run #505](https://github.com/cppalliance/pinecone-read-only-mcp-typescript/actions/runs/30117301927) — Success |
81+
| **Publish to npm** for release `v0.5.0` | Publish **#11** — “Release v0.5.0 published” (~3m 25s) | [Run #11](https://github.com/cppalliance/pinecone-read-only-mcp-typescript/actions/runs/30117705749) — Success |
82+
83+
Direct run permalinks (not `?query=` filters, which GitHub Actions silently ignores for this UI and would otherwise land on the unfiltered run list).
84+
85+
Release: [v0.5.0](https://github.com/cppalliance/pinecone-read-only-mcp-typescript/releases/tag/v0.5.0) · [Commit checks](https://github.com/cppalliance/pinecone-read-only-mcp-typescript/commit/c28e346efafadbfef98891e523d566eebe957dad/checks)
86+
87+
Publish path aligns with [RELEASING.md](./RELEASING.md): `workflow_call` to `ci.yml`, then `npm publish --provenance --access public`; `prepublishOnly` runs `npm run ci`.
88+
89+
### AC 5 — Artifact alignment (npm vs tag `v0.5.0`)
90+
91+
**Artifact verification is complete.** The published npm package matches repository tag `v0.5.0` (`c28e346`) for the checks in AC 1–4:
92+
93+
- Registry version and `gitHead` align with tag `c28e346`.
94+
- Packed manifest (`version`, `files`, `exports`, `bin`) matches the tagged `package.json` (see AC 2).
95+
- Published `dist/` matches a clean tag build (no test sources in artifact; `dist/**` hash parity with registry).
96+
- CI (#480), CodeQL (#505), and Publish (#11) for the `v0.5.0` release completed successfully per GitHub Actions (see AC 4).
97+
98+
No re-publish or version bump is required based on this verification.
99+
100+
**Registry tarball:** `https://registry.npmjs.org/@will-cppa/pinecone-read-only-mcp/-/pinecone-read-only-mcp-0.5.0.tgz` (`dist.shasum` `f912f88fee5a8499eadac70ddcbf4a25660fbe76`).
101+
102+
**Process sign-off:** Organizational production-readiness sign-off (AC 6) remains **pending** until this documentation PR is approved and merged. Until then, do not treat the release process as fully signed off in-repo.
103+
104+
### AC 6 — Pull request and review
105+
106+
Sign-off is committed under `docs/`. **Requires:**
107+
108+
- [x] PR opened with this file and doc index updates ([README.md](./README.md), [RELEASING.md](./RELEASING.md)) — [PR #242](https://github.com/cppalliance/pinecone-read-only-mcp-typescript/pull/242)
109+
- [ ] ≥ 1 reviewer approval
110+
- [ ] Approver and approval date recorded here after review
111+
- [ ] Merged PR URL recorded here after merge (same as #242 when merged)
112+
113+
## Commands reference (replay on tag)
114+
115+
```powershell
116+
git checkout v0.5.0
117+
npm ci
118+
npm run build
119+
npm pack --dry-run
120+
npm pack
121+
npm pack @will-cppa/pinecone-read-only-mcp@0.5.0
122+
123+
# Extract local and registry tarballs; compare dist/** SHA-256 (expect 0 mismatches)
124+
$localTgz = (Get-ChildItem -Name 'will-cppa-pinecone-read-only-mcp-0.5.0.tgz' | Select-Object -First 1)
125+
$registryTgz = (Get-ChildItem -Name 'will-cppa-pinecone-read-only-mcp-*.tgz' | Where-Object { $_ -ne $localTgz } | Select-Object -First 1)
126+
Remove-Item -Recurse -Force .tmp\verify-local, .tmp\verify-registry -ErrorAction SilentlyContinue
127+
New-Item -ItemType Directory -Force .tmp\verify-local, .tmp\verify-registry | Out-Null
128+
tar -xf $localTgz -C .tmp\verify-local
129+
tar -xf $registryTgz -C .tmp\verify-registry
130+
$localDist = '.tmp\verify-local\package\dist'
131+
$registryDist = '.tmp\verify-registry\package\dist'
132+
$localFiles = Get-ChildItem $localDist -Recurse -File | ForEach-Object { $_.FullName.Substring((Resolve-Path $localDist).Path.Length + 1) }
133+
$registryFiles = Get-ChildItem $registryDist -Recurse -File | ForEach-Object { $_.FullName.Substring((Resolve-Path $registryDist).Path.Length + 1) }
134+
Compare-Object $localFiles $registryFiles
135+
$mismatches = @()
136+
foreach ($rel in $localFiles) {
137+
$lHash = (Get-FileHash -Algorithm SHA256 (Join-Path $localDist $rel)).Hash
138+
$rHash = (Get-FileHash -Algorithm SHA256 (Join-Path $registryDist $rel)).Hash
139+
if ($lHash -ne $rHash) { $mismatches += $rel }
140+
}
141+
if ($mismatches.Count -gt 0) { throw "dist hash mismatches: $($mismatches -join ', ')" }
142+
'dist/** SHA-256 parity: 0 mismatches'
143+
```
144+
145+
On Ubuntu (publish workflow host), after extracting both tarballs under `.tmp/verify-local/package/dist` and `.tmp/verify-registry/package/dist`, compare with `sha256sum` on each relative path; expect identical digests for every file under `dist/`.
146+
147+
**Docs link-check:** `npm run docs:link-check` — exit **0** on 2026-07-30 (local, after extending the checker with heading-anchor validation and fixing the anchors it flagged). **Pending:** record the PR #242 `quality` job run URL here once CI finishes on the pushed commit — see the [PR #242 checks tab](https://github.com/cppalliance/pinecone-read-only-mcp-typescript/pull/242/checks).

docs/release-verification.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Release verification
2+
3+
Post-publish records that npm artifacts match tagged repository state and release CI gates.
4+
5+
| Version | Sign-off |
6+
| ------- | -------- |
7+
| 0.5.0 | [release-verification-0.5.0.md](./release-verification-0.5.0.md) |
8+
9+
Add a new `release-verification-X.Y.Z.md` after each production release and link it from this table.

0 commit comments

Comments
 (0)