chore: release v1.43.0 - #476
Merged
Merged
Conversation
commit: |
## [1.43.0] - 2026-09-22 > **BREAKING** — `aimock -h` is `--help`, not `--host`: `aimock -h 0.0.0.0` exits 1 with `Error: > Unexpected argument '0.0.0.0'. This command does not take positional arguments`. Migration: > `--host <string>` (long form only). The `llmock` bin (the Docker ENTRYPOINT) keeps `-h, --host` > (#453). ### Added - OpenAI GPT-Live mock, record and offline replay on `GET /v1/live/sessions`, with `onLive` fixtures (#468) - Live sessions enforce message/audio/queue/lifetime limits; recordings sanitize credentials (#468) - Live drift canaries for lifecycle, audio/transcript, delegation and usage, attributed to `openai-live` (#468) - Chaos `rateLimitRate` / `--chaos-ratelimit`: deterministic 429 with `Retry-After` (#449) - Chaos `latencyMs` / `--chaos-latency` now actually delays responses on every path (#449) - OpenAI Files API mock — byte-exact uploads, create-purpose enum, CORS on faults (#445) - OpenAI fine-tuning jobs mock — deterministic lifecycle, events, cursor pages (#447) - OpenAI Batches API mock — create/list/retrieve/cancel with real output files (#446) - `X-Request-Id` echoed or minted on every response; `?requestId=` filters the journal (#450) - `aimock validate` lints fixture files or directories offline, failing on broken files (#453) - ElevenLabs Voice Design record/replay — design, save-as-voice, and voice slot management (#452) - ElevenLabs Voice Design provenance block and strict-mode 503 coverage (#454) ### Changed - **BREAKING:** `aimock -h` is `--help`, matching `aimock convert -h` and `aimock validate -h`; the host override is `--host` only. The `llmock` bin (the Docker entrypoint) keeps its own `-h, --host` — see the note above (#453) - `aimock --config ""`, `--port ""` and `--host ""` are usage errors naming the option (#453) - Realtime `OpenAI-Beta: realtime=v1` now returns the real sunset rejection, not a session (#461) - `POST /v1/images/variations` now replays the real removal 404; OpenAI deleted it (#462) - `ChaosAction` gains `"rateLimit"` — an exhaustive switch over it needs a case (#449) - `applyChaosAsync()` returns `false | "handled" | "unwritable"` instead of a bare `boolean` (#449) - Journal `headers` now ALWAYS carry `x-request-id` — exact `toEqual` asserts break (#450) ### Deprecated - Synchronous `applyChaos()` warns once per process; it skips chaos latency. Use `await applyChaosAsync(...)` (#449) ### Fixed - Reasoning-first chat streams with content and tool calls carry the assistant role in the first chunk (#470) - Journals and metrics reflect delivered vs interrupted responses; one-shot errors never double-deliver (#466) - Nonstreaming OpenAI chat returns block text and tools; text-only blocks finish normally on every provider (#467) - AG-UI drift reads generated 1.0 schemas; `AGUIRunStartedEvent` gains optional `protocolVersion` (#469) - Drift reports list `unverifiedSurfaces`; offline Bedrock/Vertex checks no longer skip silently (#460) - Drift docs match actual coverage; ElevenLabs drift separates vendor observations from fixture checks (#465) - Chaos no longer treats committed headers as a dead response; only status-writing actions are skipped (#449) - Chaos skip logs name what happened; `aimock_chaos_triggered_total` counts only written responses (#449) - A request whose chaos latency was cancelled by client hang-up is no longer served or journalled (#449) - Moderations echoes the request's `model`; default is now `omni-moderation-latest` (#459) - Image endpoints default to `gpt-image-1` — `dall-e-2`/`dall-e-3` were removed (#459) - AG-UI record/proxy forwards the caller's headers and raw body upstream; `Accept` is forced to SSE (#455) - The AG-UI recorder refuses to write a fixture from a non-stream or empty 2xx upstream reply (#455) - A MINTED `x-request-id` is no longer forwarded upstream in record/proxy mode (#450)
tylerslaton
force-pushed
the
tyler/aimock-1-43-0-release-aeb94a
branch
from
September 22, 2026 20:36
3d138cd to
0b595ed
Compare
MikeRyanDev
approved these changes
Sep 22, 2026
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.
Cuts the accumulated
[Unreleased]work. MINOR (1.43.0), kept at a minor bump despite the-hBREAKING banner (#453): the pre-2.0 precedent (1.14.2 shipped a BREAKING note as a patch)applies, and the version was agreed ahead of this PR. Do not re-version to 2.0.0 at review.
Prepared, not merged.
publish-release.ymlfires on push-to-main, so merging thispublishes to npm, tags
v1.43.0, force-movesv1, cuts the GitHub Release, dispatches theDocker build, posts to Slack, and runs the PyPI job gated on
_version.py. Merge when youwant it live.
What ships
Added
GET /v1/live/sessions, withonLivefixtures (feat: mock, record and replay GPT-Live WebSocket sessions #468)openai-live(feat: mock, record and replay GPT-Live WebSocket sessions #468)rateLimitRate/--chaos-ratelimit: deterministic 429 withRetry-After(feat(chaos): add latency injection and 429 rate-limit fault #449)latencyMs/--chaos-latencynow actually delays responses on every path (feat(chaos): add latency injection and 429 rate-limit fault #449)X-Request-Idechoed or minted on every response;?requestId=filters the journal (feat(observability): propagate X-Request-Id and filter journal by requestId #450)aimock validatelints fixture files or directories offline, failing on broken files (feat(cli): add aimock validate subcommand for offline fixture lint #453)Changed
aimock -his--help, matchingaimock convert -handaimock validate -h; the host override is--hostonly. Thellmockbin (the Docker entrypoint) keeps its own-h, --host— see the note above (feat(cli): add aimock validate subcommand for offline fixture lint #453)aimock --config "",--port ""and--host ""are usage errors naming the option (feat(cli): add aimock validate subcommand for offline fixture lint #453)OpenAI-Beta: realtime=v1now returns the real sunset rejection, not a session (fix(realtime): return the real Beta sunset rejection instead of a handshake #461)POST /v1/images/variationsnow replays the real removal 404; OpenAI deleted it (fix(images): replay the real removal 404 for /v1/images/variations #462)ChaosActiongains"rateLimit"— an exhaustive switch over it needs a case (feat(chaos): add latency injection and 429 rate-limit fault #449)applyChaosAsync()returnsfalse | "handled" | "unwritable"instead of a bareboolean(feat(chaos): add latency injection and 429 rate-limit fault #449)headersnow ALWAYS carryx-request-id— exacttoEqualasserts break (feat(observability): propagate X-Request-Id and filter journal by requestId #450)Deprecated
applyChaos()warns once per process; it skips chaos latency. Useawait applyChaosAsync(...)(feat(chaos): add latency injection and 429 rate-limit fault #449)Fixed
AGUIRunStartedEventgains optionalprotocolVersion(Restore AG-UI 1.0 schema drift checks #469)unverifiedSurfaces; offline Bedrock/Vertex checks no longer skip silently (fix(drift): stop reporting nine surfaces as covered when nothing checks them #460)aimock_chaos_triggered_totalcounts only written responses (feat(chaos): add latency injection and 429 rate-limit fault #449)model; default is nowomni-moderation-latest(fix(moderation,images): stop returning OpenAI model ids that were removed #459)gpt-image-1—dall-e-2/dall-e-3were removed (fix(moderation,images): stop returning OpenAI model ids that were removed #459)Acceptis forced to SSE (fix(agui): forward inbound headers and raw body through the record proxy #455)x-request-idis no longer forwarded upstream in record/proxy mode (feat(observability): propagate X-Request-Id and filter journal by requestId #450)The 35
[Unreleased]bullets were condensed to 34 one-liners, most ≤100 chars, becausethis text is fed verbatim into the GitHub Release body and summarized into
#oss-alerts.Every
(#N)reference is preserved; the three un-numbered GPT-Live bullets now cite #468.Detail lives in the PRs.
Behaviour changes to read before you merge
aimock -his now--help.aimock -h 0.0.0.0exits 1. Migrate to--host 0.0.0.0.The
llmockbin (DockerENTRYPOINT) is unchanged and still accepts-h, --host.--config "",--port "",--host ""are now usage errors instead of "not given".headersalways carryx-request-id; exacttoEqualasserts on headers break.ChaosActiongains"rateLimit"(exhaustive switches need a case);applyChaosAsync()returnsfalse | "handled" | "unwritable"(truthiness unchanged, explicitbooleanbindings need updating); syncapplyChaos()warns once per process.gpt-image-1, moderationsto
omni-moderation-latest;OpenAI-Beta: realtime=v1returns the real sunset rejection;POST /v1/images/variationsreturns the real removal 404.fixtures finish with a normal terminal reason; suites asserting the old counts or
finish_reason: "tool_calls"on text-only blocks will see different values.Version surfaces
Enumerated with
git grep -F 1.42.0, not from a list. Seven carriers bumped:package.jsonversioncharts/aimock/Chart.yamlappVersion.claude-plugin/plugin.jsonversion.claude-plugin/marketplace.jsonplugins[0].source.version(^1.43.0)docs/index.htmlaimock v…bannerpackages/aimock-pytest/src/aimock_pytest/_version.pyAIMOCK_VERSIONpackages/aimock-pytest/README.md--aimock-versiondefaultDeliberately untouched:
packages/aimock-pytest/pyproject.toml(own PyPI cadence, stays0.5.3),charts/aimock/Chart.yamlversion: 0.1.0(the chart's own version), thehistorical
1.41.0mentions inpublish-release.ymlandnpm-publish-verify-workflow.test.ts, and CHANGELOG history._version.pyis bumped because #466 and #450 change/__aimock/journaland one-shot/__aimock/errordelivery — routes the pytest client calls — same rule as 1.42.0.1.42.1
npm
latestis currently 1.42.1, cut frommaintenance/v1.42.1-lgts-mcp(#471) and nevermerged to main, so main's CHANGELOG had no
[1.42.1]entry. Its fix (#470) is on main and shipshere. This PR adds the one-line
## [1.42.1] - 2026-09-18history entry so every publishedversion appears in the file; every prior patch release (1.37.1–1.37.4) already did.
README coverage
The Features list had no mention of the OpenAI Files API (#445), fine-tuning jobs (#447) or
Batches (#446), all shipped in this release — the same gap #443 closed for the control API.
Added one OpenAI platform APIs bullet under Multimedia APIs linking the Files and fine-tuning
docs pages; Batches has no docs page yet so it is described inline.
aimock validate,--host,chaos latency/rate-limit,
X-Request-Idand GPT-Live were already covered. The "11 providersacross 22 API surfaces" headline was left as-is: that line enumerates providers, and re-counting
it is a docs decision rather than a release step.
npm description sync
Ran the workflow's inline extractor against this branch's README (after the edit); output is
byte-identical to
package.json.description, so the on-merge sync is a no-op.Gates
Exit codes captured by redirect to separate files, never through a pipe. Fresh worktree,
pnpm install --frozen-lockfile.pnpm format:checkpnpm lintpnpm typecheckpnpm buildpnpm test:exportspnpm testnpx commitlint --from origin/main --to HEADfooter-leading-blankwarning)🤖 Generated with Claude Code