diff --git a/CHANGELOG.md b/CHANGELOG.md index dc58397..35e200b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ Subscribe via RSS: ## 2026-05-17 +- **Distribution**: Tool-count standardised on **19** across all in-repo copy + cascade docs amended. `SITE_STATS.toolCount` and `SITE_STATS.mcpToolCount` in [`lib/constants/siteStats.ts`](lib/constants/siteStats.ts) both moved from `18` → `19`, propagating to the homepage, `/about`, and `/api-docs` automatically. `FREIGHTUTILS_STRATEGY.md` mcp.directory bullet updated to "live v2.1.1 / 19 tools". Historical narrative references to "11" and "18" in changelog entries, the cascade audit doc, and STATE.md PR-#45 record are intentionally LEFT — they correctly describe past or external state. CLAUDE.md "Distribution cascade" section + STATE.md distribution-surfaces table Glama row amended to encode the verified cascade behaviour: **Glama auto-publishes its build artefact on successful scrape-derived build — the "Build succeeded" maintainer email is informational, no "Create a release" click required**. Maintenance grade C → B confirmed post-publish. Added a one-liner mental-model rule: "verify Glama behaviour, do not predict it — Chrome it, do not infer it from registry semantics" (third drift in three days). Audit: [docs/audit/tool-count-standardise-2026-05-17.md](docs/audit/tool-count-standardise-2026-05-17.md). Cascade audit appended: [docs/audit/distribution-cascade-2026-05-16.md](docs/audit/distribution-cascade-2026-05-16.md) (2026-05-17 afternoon amendment). External follow-up — Soap-manual edits to `SoapyRED/freightutils-mcp` README + `server.json` (≤100 char) + npm `package.json` descriptions, and the Glama dashboard description field — listed with exact target text in the PR body. - **Distribution**: Glama Release-tracking gap closed. Chrome verification revealed Glama still on "Latest release: v1.0.0" + Tool Definition cache at 11 tools + Maintenance grade C — despite Sprint 1's MCP Registry cascade fix. Diagnosed that Glama scrapes the GitHub Releases API specifically; the publish workflow on [`SoapyRED/freightutils-mcp`](https://github.com/SoapyRED/freightutils-mcp) didn't cut Releases. Extended `publish-registry.yml` with a final step that creates a GitHub Release on every tag push (notes from `CHANGELOG.md`, `--latest=true` when the version matches MCP Registry isLatest); plus an idempotent guard on the publish step so re-runs on already-published versions are no-ops. Backfilled four historical Releases (v2.1.1 Latest, v2.1.0, v2.0.0, v1.1.0) via `workflow_dispatch`. Glama re-scrape lag is days, not hours — Chrome re-verify in 3–5 days. Companion PR: [SoapyRED/freightutils-mcp#3](https://github.com/SoapyRED/freightutils-mcp/pull/3) MERGED. Audit amendment: [docs/audit/distribution-cascade-2026-05-16.md](docs/audit/distribution-cascade-2026-05-16.md) (2026-05-17 section). CLAUDE.md "Distribution cascade" section amended. ## 2026-05-16 diff --git a/CLAUDE.md b/CLAUDE.md index a0ac8d3..ac9055f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -59,7 +59,8 @@ Canonical version source for the MCP surface is **`SoapyRED/freightutils-mcp/pac **Days-of-lag scrape (no event link; do not block sprint on movement):** - **Smithery** — re-fetches npm + HTTP MCP endpoint on its own cadence. Score won't move same-day a release publishes. If past 7 days and still stale, request manual rescan via dashboard. -- **Glama** — scrapes the **GitHub Releases API specifically** (not git tags, not the MCP Registry). The "Latest release" cache, Tool Definition cache, and Maintenance grade all refresh on the next Glama scrape AFTER a Release is published. Description field is dashboard-frozen (not in `glama.json`, which only accepts `maintainers`). To refresh the description, Soap edits via dashboard. The 2026-05-17 amendment to the audit doc covers the Release-API specifics — diagnosed because Sprint 1's tag-push cascade made Registry catch up but Glama remained on its first-ever scrape value. +- **Glama** — scrapes the **GitHub Releases API specifically** (not git tags, not the MCP Registry). The "Latest release" cache, Tool Definition cache, and Maintenance grade refresh on the next Glama scrape after a Release is published. **Glama auto-publishes its build artefact when the scrape-derived build succeeds — the "Build succeeded for FreightUtils MCP Server" email is informational, no maintainer "Create a release" click required.** Maintenance grade upgrades (e.g. C → B) occur on the next scrape after the Release is cut and the auto-publish runs. Description field is dashboard-frozen (not in `glama.json`, which only accepts `maintainers`); to refresh the description Soap edits via dashboard. The 2026-05-17 amendment(s) to the audit doc cover the Release-API specifics — diagnosed because Sprint 1's tag-push cascade made Registry catch up but Glama remained on its first-ever scrape value. +- **Glama mental-model history:** cascade was repeatedly mis-described in our docs/memory (three drifts since 2026-05-15). **Verify Glama behaviour, do not predict it** — Chrome it, do not infer it from registry semantics. **Manual UI work every release (no automation):** diff --git a/FREIGHTUTILS_STRATEGY.md b/FREIGHTUTILS_STRATEGY.md index 02f74f2..19ae3f0 100644 --- a/FREIGHTUTILS_STRATEGY.md +++ b/FREIGHTUTILS_STRATEGY.md @@ -51,7 +51,7 @@ Honest measured signals only: - GitHub `freightutils-mcp` — 2 stars - PulseMCP — listed at #3,270 global, "5.3k visitors all-time, 1.1k this week" = algorithmic estimate, not measured - Official MCP Registry — listed, manifest-only, no rank/install/popularity exposed -- mcp.directory — listed but stale (lists v1.0.0 / 11 tools vs live v2.1.0 / 18 tools); the "22 reviews / 4.4 rating" was SEO JSON-LD metadata, not real user reviews +- mcp.directory — listed but stale (lists v1.0.0 / 11 tools vs live v2.1.1 / 19 tools); the "22 reviews / 4.4 rating" was SEO JSON-LD metadata, not real user reviews - Glama — listed, 1 favorite (likely test/Soap) - Zero independent editorial coverage on Reddit, HN, dev.to, Medium, LinkedIn (beyond Marius's own posts) diff --git a/STATE.md b/STATE.md index bf1ec13..eb1c102 100644 --- a/STATE.md +++ b/STATE.md @@ -141,7 +141,7 @@ Scrape-path scope (single regex): `^/(hs/(code|heading|chapter|section)|adr|airl | MCP Registry | **v2.1.1 (isLatest)** | published 2026-05-16T10:12Z | Workflow fires on tag push (`v*`), Release published, or `workflow_dispatch`. Publish step is now idempotent (skip if version already in Registry history). Catch-up: `gh workflow run "Publish to MCP Registry" --repo SoapyRED/freightutils-mcp --ref main`. Reference: `docs/audit/distribution-cascade-2026-05-16.md`. | | GitHub Releases (freightutils-mcp) | **v2.1.1 (Latest)** + v2.1.0, v2.0.0, v1.1.0 | backfilled 2026-05-17 | Cut automatically by the publish workflow's final step on every tag push (notes from `CHANGELOG.md`). v1.0.5 / v1.0.4 historical tags deferred — no CHANGELOG entries; backfill is Soap-manual if ever needed. | | Smithery | listed | **88/100 · 28 uses · 13 daily sessions** (pre-rescrape) | Scrape-based, days-of-lag after `freightutils-mcp` publish. No event link from MCP Registry. Rescrape on v2.1.1 pending. | -| Glama | listed | License A · Quality A · **Maintenance C** | **Tracks the GitHub Releases API specifically.** Stale "Latest release: v1.0.0" + Tool Definition cache at 11 tools + Maintenance grade C were all downstream of the missing Releases — addressed by the 2026-05-17 release-gap sprint. Glama re-scrapes on its own cadence (days, not hours); Chrome re-verify in 3–5 days. Description still dashboard-frozen; `glama.json` schema only accepts `maintainers`. | +| Glama | listed | License A · Quality A · **Maintenance B (post-publish)** | **Tracks the GitHub Releases API specifically.** Stale "Latest release: v1.0.0" + Tool Definition cache at 11 tools + Maintenance grade C were all downstream of the missing Releases — addressed by the 2026-05-17 release-gap sprint. **Glama auto-publishes its build artefact on successful scrape-derived build; the "Build succeeded" maintainer email is informational, no manual "Create a release" click required.** Maintenance C → B confirmed post-publish (2026-05-17). Glama re-scrapes on its own cadence (days, not hours); Chrome re-verify lag. Description still dashboard-frozen (`glama.json` schema only accepts `maintainers`) — Soap-manual dashboard edit pending. | | awesome-mcp-servers | listed | PR #5358 OPEN (17→19, v2.1.1) | Punkpeye-merge pending. PR description carries Glama badge + grades per April 2026 policy. | | Postman | live | 0 views / 0 forks | — | | RapidAPI | Pro live | — | — | diff --git a/docs/audit/distribution-cascade-2026-05-16.md b/docs/audit/distribution-cascade-2026-05-16.md index db1d730..add6ff9 100644 --- a/docs/audit/distribution-cascade-2026-05-16.md +++ b/docs/audit/distribution-cascade-2026-05-16.md @@ -428,3 +428,39 @@ The Sprint 1 docs covered "Smithery + Glama scrape independently" correctly. Thi - CLAUDE.md "Distribution cascade" section: amend the Glama bullet to "re-scrapes GitHub Releases on its own cadence." - `STATE.md` distribution surfaces table — Glama row: add "tracks GitHub Releases" detail. - `freightutils-distribution` skill (external `Skills-Claude/freightutils-distribution.md`): same amendment. + +--- + +## Amendment 2026-05-17 (afternoon): Glama auto-publishes on successful build + +**Sprint:** `distribution-closure-tool-count-and-cascade-docs` +**Branch:** `chore/tool-count-standardize-19-and-cascade-docs` + +Chrome verification ~hours after the 2026-05-17 release-gap fix landed surfaced a third correction to the cascade mental model: + +- **Glama auto-publishes its build artefact when the scrape-derived build succeeds.** The "Build succeeded for FreightUtils MCP Server" email Soap received is informational — no maintainer "Create a release" click required, no dashboard action needed for the build to go live. The earlier framing in CLAUDE.md / STATE.md / this audit doc implied a manual maintainer publish step gating each new build; that's wrong. +- **Maintenance grade C → B is confirmed post-publish.** Driven by the successful Release cut + auto-publish run. The C grade was load-bearing on the missing-Releases signal alone, exactly as the 2026-05-17 (morning) amendment predicted. + +### Recurring lesson: verify Glama behaviour, do not predict it + +This is the **third time** in three days that the cascade has been mis-described in our docs/memory: + +| Date | Wrong claim | Verified reality | +|---|---|---| +| 2026-05-15 (Sprint 1) | "MCP Registry GH Action cascades to Smithery + Glama auto-sync" | Smithery + Glama are scrape-based with days-of-lag. No cascade. | +| 2026-05-17 (morning, release-gap sprint) | "Smithery + Glama scrape independently; tag push enough" | Glama specifically scrapes the **GitHub Releases API** — tag push without Release publish is invisible to Glama. | +| 2026-05-17 (afternoon, this amendment) | "After Release publish, maintainer cuts the Glama build via dashboard" | Glama **auto-publishes** the build artefact when its scrape-derived build succeeds. Email is informational. | + +CLAUDE.md "Distribution cascade" section now carries a "Glama mental-model history" one-liner: **verify Glama behaviour, do not predict it — Chrome it, do not infer it from registry semantics.** + +### Phase 2 of this amendment + +No code/workflow change required for this realisation — Glama's auto-publish is upstream of anything in our repos. The fix is documentation-only: + +- CLAUDE.md "Distribution cascade" section: Glama bullet updated to note the auto-publish behaviour + "email is informational" + new "verify, do not predict" mental-model line. +- STATE.md distribution surfaces table Glama row: Maintenance grade updated `C` → `B (post-publish)`, notes amended to drop any wording implying a manual maintainer publish step, mention the auto-publish explicitly. + +### What's still pending Soap-manual + +- **Glama description dashboard edit** — description field is dashboard-frozen ("11 freight calculation and reference tools …"); `glama.json` only accepts `maintainers`. Independent of build cascade. Soap-manual when convenient. +- **freightutils-mcp README + server.json + package.json descriptions** — out of this sandbox's repo access. External follow-up per the companion audit `docs/audit/tool-count-standardise-2026-05-17.md`. diff --git a/docs/audit/tool-count-standardise-2026-05-17.md b/docs/audit/tool-count-standardise-2026-05-17.md new file mode 100644 index 0000000..e3c8bb9 --- /dev/null +++ b/docs/audit/tool-count-standardise-2026-05-17.md @@ -0,0 +1,133 @@ +# Tool-count standardise audit — 2026-05-17 + +**Sprint:** `distribution-closure-tool-count-and-cascade-docs` +**Branch:** `chore/tool-count-standardize-19-and-cascade-docs` +**Phase:** 1 (diagnosis-only — this commit lands BEFORE any copy is changed) +**Auditor:** Claude Code (under Soap) +**Scope:** Find every stale tool-count occurrence in `SoapyRED/freighttools` and document what each should become. `SoapyRED/freightutils-mcp` is out of this sandbox's repo access — its findings are listed as external follow-up. + +--- + +## Canonical count + +Per sprint CONTEXT: **19** — matches `STATE.md`, MCP Registry, npm `freightutils-mcp`, and the smoke test assertion. Includes `get_subscribe_link`. + +Phase 1 sanity-check confirms: + +- `scripts/smoke-test.mjs` lines 633 / 647 / 660 / 675 — asserts `toolCount: 19` and `hasTool: 'get_subscribe_link'` on `tools/list` for `/api/mcp` and `/api/mcp/mcp` (anon / free / Pro tiers). MCP surface IS 19. +- `lib/api-tools-registry.ts` — REST API surface is 18 (18 `name:` entries, `TOOLS_COUNT = TOOLS.length`). `get_subscribe_link` is NOT a REST endpoint; it's an MCP-only meta-tool that returns a subscription URL. +- `STATE.md:10` — "19 tools live, 19 REST endpoints, 19 MCP tools" — note this is **internally inconsistent** with `api-tools-registry.ts` which has 18 REST entries. STATE.md treats the MCP-surface count as the headline number for both surfaces. +- `MCP_REVIEWER_README.md:71` — "tools/list returns 19 tools" ✓ already canonical. + +**Surface-by-surface truth:** + +| Surface | Underlying count | Notes | +|---|---|---| +| REST API (`/api/tools`, `/api/health`) | 18 | `api-tools-registry.ts` is the registry. `get_subscribe_link` is MCP-only. | +| MCP (`/api/mcp`, `/api/mcp/mcp`, npm `freightutils-mcp`, MCP Registry) | **19** | Includes `get_subscribe_link`. Verified by `scripts/smoke-test.mjs`. | +| Site copy (homepage, /about, /api-docs) | reads `SITE_STATS.toolCount` (currently 18) | UI propagates whatever siteStats says. | + +Per sprint hard rule "standardise on 19 across all copy. Do not introduce 18 anywhere new 'for nuance'", site copy should report 19 — even though it includes a meta-tool that's not a freight calculator strictly speaking. The cross-surface drift fight is the whole reason for this sprint. + +The sprint instruction "If Phase 1 finds that the count actually should be different … STOP and flag" applies to deprecation cases. My finding (19 = 18 REST + 1 MCP-only meta) is the documented architecture, not a discovered deprecation. Proceeding with 19. + +--- + +## In-repo findings — actionable (Phase 2 will change these) + +### `lib/constants/siteStats.ts` — single source of truth for site numerics + +| Line | Current | Target | Why | +|---|---|---|---| +| 5 | `toolCount: 18,` | `toolCount: 19,` | Propagates to homepage, /about, /api-docs. Per sprint, standardise on 19. | +| 7 | `mcpToolCount: 18,` | `mcpToolCount: 19,` | Genuinely stale — MCP surface IS 19, verified by smoke test. Currently unread by any UI code (only declared), but should be correct in case future copy reads it. | + +Consumers of `SITE_STATS.toolCount` (will auto-update once siteStats changes): + +| File:line | Copy | +|---|---| +| `app/page.tsx:479` | "No signup, no paywall, no vendor lock-in. {18 → 19} tools and {19} API endpoints, all free." | +| `app/about/page.tsx:11` | description meta — "{18 → 19} free freight calculators and open REST APIs" | +| `app/about/page.tsx:249` | "{18 → 19} tools across {19} REST API endpoints." | +| `app/api-docs/page.tsx:178` | "AI agents direct access to all {18 → 19} freight calculation and reference tools." | + +Note: `/api-docs:178` says "AI agents direct access" — this is MCP-surface copy where 19 is unambiguously correct. The `/about` and homepage references are looser; treating the MCP server as a 19th-surface fits the standardise-on-19 directive. + +### `FREIGHTUTILS_STRATEGY.md:54` + +``` +mcp.directory — listed but stale (lists v1.0.0 / 11 tools vs live v2.1.0 / 18 tools); the "22 reviews / 4.4 rating" was SEO JSON-LD metadata, not real user reviews +``` + +Stale on the "live" half — should read `v2.1.1 / 19 tools`. The mcp.directory cache claim (11 tools / v1.0.0) is describing the stale state of that surface and should stay as a description of what mcp.directory shows. The "live" assertion should reflect current reality. + +**Target:** +``` +mcp.directory — listed but stale (lists v1.0.0 / 11 tools vs live v2.1.1 / 19 tools); the "22 reviews / 4.4 rating" was SEO JSON-LD metadata, not real user reviews +``` + +### `app/api/mcp/[transport]/route.ts` and related — MCP server registration + +Already serves 19 tools (verified by smoke test). No file-level change needed here this sprint; the registration is the source-of-truth that the smoke test green-lights. + +--- + +## In-repo findings — historical / no-change (kept as-is) + +These describe past or external state correctly. Sprint hard rule: do NOT introduce 18 anywhere new, but historical narrative is allowed to record the past number. + +| File:line | Context | Decision | +|---|---|---| +| `STATE.md:63` | PR #45 changelog entry describing Glama "Tool Definition cache at 11 tools" pre-fix | LEAVE — historical state of external surface. | +| `STATE.md:144` | Distribution surfaces table Glama row — "Tool Definition cache at 11 tools" pre-fix | LEAVE — same. | +| `STATE.md:224` | "Glama description still says '11 tools' (dashboard-frozen field)" | LEAVE for now — this IS the current external Glama state. Will be updated post Soap-manual dashboard edit (listed as external follow-up below). | +| `CHANGELOG.md:8` | Public-changelog narrative of the Sprint 45 Glama release-gap fix | LEAVE — historical record. | +| `lib/changelog-data.ts:16` | Same entry mirrored to `/changelog` page | LEAVE — historical record. | +| `lib/changelog-data.ts:144` | Older changelog entry mentioning "18 tools" in past-state context | LEAVE — historical. | +| `lib/changelog-data.ts:157` | B003 changelog: "/api/health reported 18 tools while /api/tools listed 17" — historical bug-fix narrative | LEAVE — historical. | +| `docs/audit/distribution-cascade-2026-05-16.md` (multiple lines: 99, 104, 112, 192, 258, 322, 346) | Audit doc describing past Glama state + the awesome-mcp-servers BEFORE text | LEAVE — audit doc is a forensic record of what was found. The TARGET text on line 198 already correctly says "19 freight tools". | + +--- + +## External (out of repo) — Phase 2.4 external follow-up + +Cannot be edited from this sandbox (no `SoapyRED/freightutils-mcp` GitHub MCP access). To be addressed by Soap or a separate sprint targeting that repo: + +| Surface | Current value | Target value | URL | +|---|---|---|---| +| `SoapyRED/freightutils-mcp/README.md` | tool list section (current count unknown from this sandbox; likely 18 or "11" per Glama scrape) | Enumerate **19** tools; add a "Subscription helpers" subsection that explicitly tags `get_subscribe_link` as a meta-tool (not a freight calculator) so users don't expect another calculator | https://github.com/SoapyRED/freightutils-mcp/blob/main/README.md | +| `SoapyRED/freightutils-mcp/server.json` description | ≤100-char description (current value unknown from sandbox) | Must mention 19 tools and stay ≤100 chars (Sprint 1 trimmed once; do not regress past 100). Suggested: `"AI agent access to 19 freight tools — DG, HS, customs, airlines, UN/LOCODE, more"` (89 chars). | https://github.com/SoapyRED/freightutils-mcp/blob/main/server.json | +| `SoapyRED/freightutils-mcp/package.json` description (npm registry) | unknown — likely says "11" or "18" given the Glama scrape data | Match server.json description target above. | https://www.npmjs.com/package/freightutils-mcp | +| Glama listing description (dashboard-frozen field) | "AI agent access to 11 freight calculation and reference tools …" | Update via dashboard edit to mirror the server.json target text. `glama.json` schema only accepts `maintainers`; description is NOT editable via PR. | https://glama.ai/mcp/servers/SoapyRED/freightutils-mcp | +| Glama Overview text (live-grade summary, scrape-derived) | "18 freight calculation and reference tools" per Chrome verification | Will re-derive automatically on next Glama scrape after Soap's freightutils-mcp README + server.json + package.json land 19 in their descriptions. No direct edit possible. | +| `punkpeye/awesome-mcp-servers` README entry | "18 freight calculation and reference tools" per cascade audit line 192 | "19 freight tools — …" — target text already drafted in `docs/audit/distribution-cascade-2026-05-16.md:198`. PR #5358 is OPEN; needs to confirm it states 19. | https://github.com/punkpeye/awesome-mcp-servers/pull/5358 | +| mcp.directory listing | "v1.0.0 / 11 tools" cached | Re-scrape after `freightutils-mcp` is republished with correct descriptions. Per `FREIGHTUTILS_STRATEGY.md`, mcp.directory is "dropped — not pursuing" — but the listing is still public, so the description should reflect current reality if/when re-scraped. | +| Smithery listing | 88/100 · pre-rescrape | Will re-derive automatically. No direct edit possible. | +| Postman, RapidAPI listings | manual UI | Soap-manual; not blocking the in-repo sprint exit. | + +--- + +## Glama cascade behaviour — verified mental model (Phase 3.1 prep) + +Sprint CONTEXT noted that Chrome verification confirmed Glama auto-publishes builds when they succeed — the "Build succeeded for FreightUtils MCP Server" email is informational, no maintainer click required. CLAUDE.md and STATE.md currently lead with the GitHub-Releases-scrape framing without explicitly noting the auto-publish behaviour. Phase 3 fixes that. + +Mental-model history correction (Phase 3.1 will encode in CLAUDE.md): + +| When | Belief | Reality | +|---|---|---| +| Pre-Sprint 1 (≤2026-05-15) | "MCP Registry GH Action cascades to Smithery + Glama auto-sync" | Smithery + Glama are scrape-based with days-of-lag. No cascade. | +| Post-Sprint 1 (2026-05-16) | "Smithery + Glama scrape independently; tag push enough" | Glama specifically scrapes the GitHub Releases API — tag push without Release publish is invisible to Glama. | +| Post-Sprint 45 (2026-05-17 AM) | "Glama scrapes GitHub Releases; Release publish triggers re-scrape; Maintenance grade refreshes after next scrape" | Confirmed by Chrome verification. **Plus:** Glama itself auto-publishes its build artefact on success; the maintainer-facing "Build succeeded" email is informational, no further click needed. Maintenance grade C → B confirmed post-publish. | + +The recurring lesson: **verify Glama behaviour, do not predict it.** The cascade has been mis-described three times across our internal docs. + +--- + +## Exit criteria signoff for Phase 1 + +- [x] Every stale tool-count occurrence in `freighttools` enumerated with file:line and correction target. +- [x] Distinction between "actionable now" (siteStats.ts, FREIGHTUTILS_STRATEGY.md) and "historical — leave as-is" articulated. +- [x] External (freightutils-mcp + Glama dashboard + awesome-mcp-servers PR) listed with exact target text and URLs for the PR body to surface as external follow-up. +- [x] Glama mental-model history captured for Phase 3.1's CLAUDE.md amendment. + +Phase 2 (copy edits) lands in a separate commit on this branch. Phase 3 (cascade-doc amendments) lands in a third commit. diff --git a/lib/changelog-data.ts b/lib/changelog-data.ts index 4937298..cca5095 100644 --- a/lib/changelog-data.ts +++ b/lib/changelog-data.ts @@ -10,6 +10,12 @@ export interface ChangelogEntry { } export const entries: ChangelogEntry[] = [ + { + isoDate: '2026-05-17', date: 'May 17', tag: 'MCP Update', + title: 'Tool count standardised on 19; cascade docs amended to record Glama auto-publish', + desc: 'siteStats.ts toolCount + mcpToolCount both moved 18 → 19, propagating to homepage / /about / /api-docs. FREIGHTUTILS_STRATEGY.md mcp.directory bullet updated to live v2.1.1 / 19 tools. CLAUDE.md "Distribution cascade" + STATE.md surfaces table amended to encode Chrome-verified Glama cascade: Glama auto-publishes its build artefact on successful scrape-derived build — the "Build succeeded for FreightUtils MCP Server" maintainer email is informational, no "Create a release" click required. Maintenance grade C → B confirmed post-publish. Added a "verify Glama behaviour, do not predict it" one-liner — this was the third cascade drift in three days. Historical "11" / "18" mentions in past changelog entries + audit doc forensic record left intact. External follow-ups (freightutils-mcp README + server.json + package.json descriptions, Glama dashboard description) listed with exact target text in the PR body. Audits: docs/audit/tool-count-standardise-2026-05-17.md (Phase 1 diagnosis); docs/audit/distribution-cascade-2026-05-16.md (2026-05-17 afternoon amendment).', + link: '/changelog', + }, { isoDate: '2026-05-17', date: 'May 17', tag: 'MCP Update', title: 'Glama Release-tracking gap closed — workflow now cuts GitHub Releases on every tag push', diff --git a/lib/constants/siteStats.ts b/lib/constants/siteStats.ts index 5e9d438..3814301 100644 --- a/lib/constants/siteStats.ts +++ b/lib/constants/siteStats.ts @@ -2,9 +2,9 @@ // SINGLE SOURCE OF TRUTH — update here, all pages update automatically export const SITE_STATS = { - toolCount: 18, + toolCount: 19, apiEndpointCount: 19, - mcpToolCount: 18, + mcpToolCount: 19, adrEntries: 2939, hsCodeCount: 6940, airlineCount: 6352,