Repository navigation
docs: add matrix legends and abbreviate Not documented to ND - #535
Merged
Merged
Conversation
Each competitive comparison table now has a one-line legend directly beneath it, listing only the marks that table uses and reusing the cell glyph markup so the colours match. The homepage matrices replace their 45 "Not documented" cells with <abbr title="Not documented">ND</abbr>, so those cells no longer wrap to two lines. The VidaiMock migration table uses Yes/No text and no marks, so it gets no legend. The competitive scan parses ND cells as free text, and its dry run output is unchanged.
commit: |
Merged
jpr5
added a commit
that referenced
this pull request
Oct 21, 2026
> **DO NOT MERGE until Jordan says ship — merging publishes to npm.** > > `publish-release.yml` runs on every push to `main`. Merging this PR publishes npm > `@copilotkit/aimock@1.46.0`, the `v1.46.0` tag, the `v1` major-tag move, the GitHub Release, > the Docker images and the Slack announcement. Minor release npm/plugin **1.46.0** from `main` at 02c72c8 (#568 merged). Rebuilt on top of #563–#568. aimock-pytest keeps its own version (`pyproject.toml` unchanged); only its default aimock pin moves to 1.46.0, because this release adds server routes the pytest client can call. Every new behavior is additive or opt-in. The CHANGELOG has no `Changed` section. Defaults match v1.45.1: inbound-auth 401 bodies stay legacy (#566), non-streaming replies stay instant (#567), and shared `GET /v1/models` returns the OpenAI-format list for every header set (#568). The only default output changes are the bug fixes under Fixed. ## CHANGELOG ## [1.46.0] - 2026-10-20 ### Added - Gemini model list/detail, Anthropic model detail, and token-count routes (#542, #551) - Opt-in policies: `requiredHeaders`, native `authErrors`, native `modelCatalog` (#542, #566, #568) - Opt-in fixture `nonStreamingTiming: true` delays non-streaming OpenAI chat replies (#545, #567) - Anthropic/Bedrock cache usage kept in replay and record; Responses `phase` override (#531, #542) ### Fixed - Ollama embed batches, AG-UI thread/run IDs, empty MCP reads, Anthropic aborts (#533, #553, #557) ## What the bullets cover The `[Unreleased]` section had 16 entries, grouped into the 5 Slack-bound bullets above: - **Model routes (#542, #551):** Gemini `GET /v1beta/models` list/detail and the new `GET /v1/models/{id}` detail route, with provider paging and synthetic metadata; `count_tokens` / `:countTokens` estimates that never proxy or record. Anthropic `after_id`/`before_id` cursor validation applies only to the opt-in Anthropic list. - **Opt-in policies (#542, #566, #568):** all are off by default. Set them with the `policy` option, `llm.policy`, `--policy`, or the `X-AIMock-Policy` header. - `requiredHeaders: "enforce"` rejects Anthropic requests without `anthropic-version`. - `authErrors: "native"` returns provider-native 401 bodies on Anthropic Messages/count and Gemini/Vertex HTTP paths. The default `"legacy"` keeps `error.code: "invalid_api_key"`. - `modelCatalog: "native"` returns the Anthropic-format paged list on shared `GET /v1/models` for `anthropic-version` or `x-api-key`-only requests. The default `"legacy"` returns the 1.45 OpenAI-format list for every request. Anthropic SDK `models.list()` users must opt in. - **Opt-in non-streaming timing (#545, #561, #567):** OpenAI chat completions with `stream: false` only. A fixture with `nonStreamingTiming: true` plus a `streamingProfile` or `recordedTimings` delays the JSON reply by about its streamed duration (text, tool-call, combined content+tool-call and `blocks`). Without the field, `stream: false` replies return immediately, as in 1.45.1. - **Cache usage, phase (#531, #542):** Anthropic Messages and Bedrock Claude preserve fixture cache usage (with the TTL breakdown) in replay and record; Responses `phase` override (`commentary` | `final_answer`) on HTTP, SSE and WebSocket. - **Fixes (#533, #553, #557):** these are the only default output changes. Each one corrects output that real clients mishandled before. - Ollama `/api/embed` returns `embeddings: [[...]]` with one vector per input, and its errors are plain strings. Recorded embedding fixtures get optional `match.embeddingRequest` criteria. `/api/embeddings` keeps its legacy single-vector response. - AG-UI convenience builders echo the request's thread/run IDs and mint fresh message/tool-call IDs. Explicit event fixtures keep their authored IDs. - MCP `resources/read` for a resource with no content returns `"text": ""` and falls back to the definition's `mimeType`, so the response passes the MCP schema. - Anthropic Messages streaming stops on client disconnect. The journal records `interrupted: true` / `interruptReason: "client aborted"`. Left out of the bullets: the Bedrock SDK `NodeHttpHandler` example fix (#553, docs only). Not in the CHANGELOG: drift-sync, drift diagnostics, competitor-scan, adoption-wall, dependency and docs PRs (#532, #534, #535, #536, #541, #543, #546, #554, #555, #556, #558, #559, #560, #563, #564, #565). They do not change the published package. ## Versions | Surface | Before | After | |---|---|---| | `package.json` `version` | 1.45.1 | 1.46.0 | | `.claude-plugin/plugin.json` `version` | 1.45.1 | 1.46.0 | | `.claude-plugin/marketplace.json` `plugins[0].source.version` | ^1.45.1 | ^1.46.0 | | `charts/aimock/Chart.yaml` `appVersion` (chart `version` unchanged) | 1.45.1 | 1.46.0 | | `docs/index.html` CLI banner | aimock v1.45.1 | aimock v1.46.0 | | `packages/aimock-pytest/src/aimock_pytest/_version.py` `AIMOCK_VERSION` | 1.45.1 | 1.46.0 | | `packages/aimock-pytest/README.md` `--aimock-version` default | 1.45.1 | 1.46.0 | Left at 1.45.1 on purpose: CHANGELOG history; `src/__tests__/package-types-compat.test.ts`, which compiles a consumer against the published 1.45.1 types; and the `server.test.ts` comment that names the 1.45.1 default timing. `packages/aimock-pytest/pyproject.toml` keeps its own version. `CHANGELOG.md`: `[Unreleased]` became `[1.46.0] - 2026-10-20` with an empty `[Unreleased]` kept above it, as in prior releases. `package.json` `description` matches the README subtitle exactly (`publish-release.yml` re-syncs it on merge anyway). ## Local gates Run on the release commit tree (origin/main 02c72c8 + this commit): - `pnpm install --frozen-lockfile`: pass - `pnpm format:check`: pass - `pnpm lint`: pass - `pnpm typecheck`: pass - `pnpm build`: pass - `pnpm test`: pass (432 files; 17605 passed, 11 skipped), including `npm-publish-verify-workflow`, `unreleased-check-workflow`, `release-workflows`, `publish-pin-workflow`, `version` and `package-types-compat` - `pnpm test:exports` (publint + attw): pass - `pnpm api:report`: pass, 14 entries, `etc/` unchanged - `commitlint` on the release commit: pass - `unreleased-check.yml`: no `v1.46.0` tag exists, so the release push skips the check (by design)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
lists only the marks that table uses, and reuses the cell glyph markup so the colours match.
Not documentedcells with<abbr title="Not documented">ND</abbr>. Links and the<!-- C-X.. -->claim comments onthose cells are unchanged. No ✓/✗/partial judgment changed.
.matrix-legend(small, muted,margin: 0.35rem 0 0), is defined in thehomepage
<style>block and indocs/style.css. No cell padding, borders or spacing changed.Why
Not documentedwrapped to two lines in narrow competitor columns, which made rows taller andpushed the VidaiMock column wider.
NDwith a tooltip keeps the tables tight, and the legendexplains the marks.
Pages and legends
docs/index.html, LLM and protocol mockingdocs/index.html, Agent tool mockingmigrate-from-mock-llm,-mokksy,-msw,-piyook,-python-mocksmigrate-from-openai-responsesmigrate-from-vidaimockuses Yes/No text and no marks, so it gets no legend. Thepython-mocks "The libraries" table has no marks either, so it gets none.
RED (before the docs change)
GREEN (after)
Gates
pnpm format:check,pnpm lint,pnpm typecheck,pnpm build: passpnpm test: 378 files, 14141 passed, 3 skippedscripts/update-competitive-matrix.ts --dry-run: the summary file is byte-identical onorigin/mainand on this branch ("No homepage matrix changes detected"). The scan reads NDcells as free text, never as ✗. No script change was needed: neither scan script contains the
literal
Not documented.Visual check
I took screenshots and looked at them at 375x667, 430x932 and 1440x900 (the site has one dark
theme), before and after, for both homepage tables and the mock-llm, msw, openai-responses and
python-mocks tables:
At 375px it wraps to two compact lines. No page-level horizontal overflow is added.
140px shorter at 375px. The VidaiMock column is 12px narrower at desktop and 6px narrower at
375px. Other columns are held by their nowrap headers. At desktop the table stays 100% wide, so
the freed pixels move to the Capability column (+8px), which lets some row labels fit on one
line.