diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 594a3ed5d..98efb1ba2 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.7.8" + ".": "0.7.9" } diff --git a/CHANGELOG.md b/CHANGELOG.md index 05656d290..a53109ca8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,81 @@ # Changelog +## [0.7.9](https://github.com/icoretech/codex-pooler/compare/codex-pooler-v0.7.8...codex-pooler-v0.7.9) (2026-09-11) + + +### Features + +* **admin:** show requested, upstream-reported, and priced service tiers separately ([072580e](https://github.com/icoretech/codex-pooler/commit/072580e19a3046fcdaef6a2e22024129d6afe83d)) +* **admin:** show the downstream delivery receipt in the request log attempt drawer ([457bfd9](https://github.com/icoretech/codex-pooler/commit/457bfd9a354b93d3c64cbf3528efe4b69abc01e0)) +* **admin:** tell the service tier apart from reasoning effort in request logs ([2601d36](https://github.com/icoretech/codex-pooler/commit/2601d36ec784657d5b46caa41309b7a0b8abcd8a)) +* **gateway:** derive the Codex routing hint for /v1 requests and keep it out of websocket reuse ([1934516](https://github.com/icoretech/codex-pooler/commit/1934516726d16aee58d2c622ca096fc10a2cec9e)) +* **gateway:** forward provider session headers on the native websocket handshake ([b3075a9](https://github.com/icoretech/codex-pooler/commit/b3075a9c379d0cb7f6be65e622ba8b98a59f6981)) +* **gateway:** record a downstream delivery receipt for native websocket terminals ([fbe2e71](https://github.com/icoretech/codex-pooler/commit/fbe2e715c812093660a809c879a99729e9bf7b19)) +* **gateway:** record the downstream delivery receipt for HTTP SSE turns ([6b31f1d](https://github.com/icoretech/codex-pooler/commit/6b31f1d4944b7a610a292506ba393ac1b16fe43d)) +* **gateway:** relay upstream parameter validation rejections to clients ([632d90b](https://github.com/icoretech/codex-pooler/commit/632d90bae53a5f43051cd144bc256bde6be94ba1)) +* **gateway:** send a derived session-id upstream for /v1 requests with a prompt_cache_key ([4e32aeb](https://github.com/icoretech/codex-pooler/commit/4e32aeb9db803b05bef1c842a096bd57e936eeb1)) +* **runtime:** name the blocking transaction when an owner lease renewal times out ([1f48723](https://github.com/icoretech/codex-pooler/commit/1f48723407183c2ceee28316ca8ab2d787828a29)) +* **status:** add OpenAI incidents feed and admin surface ([2a0f615](https://github.com/icoretech/codex-pooler/commit/2a0f6155dfa1efc3703b2d6c81c391672e14ebf9)) + + +### Bug Fixes + +* **accounting:** keep the delivery receipt projection a runtime reference and accept an already-dead owner in the witness test ([faaaef8](https://github.com/icoretech/codex-pooler/commit/faaaef85659d6cb1f6660bf3be5169dda2a3fe7c)) +* **accounting:** lock the session before the API key in the websocket resend claim ([cdb307b](https://github.com/icoretech/codex-pooler/commit/cdb307b34035656b14a3da3a48a6cbcb501c69dd)) +* **catalog:** accept the flat default per-minute pricing shape ([1348a59](https://github.com/icoretech/codex-pooler/commit/1348a596dd5372bf520bd99579c501ef53f5f348)) +* **gateway:** admit a byte-identical resend after a lifecycle-only upstream stream cut ([d1fb7ef](https://github.com/icoretech/codex-pooler/commit/d1fb7efed4c125f35b9384d6a60650775e70abbb)) +* **gateway:** admit a byte-identical websocket resend after a provider terminal failure ([af00377](https://github.com/icoretech/codex-pooler/commit/af00377b633e0e65d7884a647c964b080f0dea1f)) +* **gateway:** bound the idle lifetime of pooled upstream HTTP connections ([299bf37](https://github.com/icoretech/codex-pooler/commit/299bf370a14454950db268873d947d500b2fc4b5)) +* **gateway:** finalize a websocket turn whose response task died by exception ([f9bf8f9](https://github.com/icoretech/codex-pooler/commit/f9bf8f9e87894a74f461bfd8322175030ddd6dcb)) +* **gateway:** refresh and retry HTTP dispatch on a provider 401 instead of passing it to the client ([3f7b4ed](https://github.com/icoretech/codex-pooler/commit/3f7b4ed318547ffdd277c0a2686f6a2cd6d39979)) +* **gateway:** rewrite ultra to the highest catalog level when a model lists no max ([b737f4e](https://github.com/icoretech/codex-pooler/commit/b737f4e6914b388739a4402f934070547b38f35a)) +* **gateway:** scope the /v1 derived session-id to the Pool and API key ([dc16bb6](https://github.com/icoretech/codex-pooler/commit/dc16bb6a8acc46f7e9ee95d59b62b98ba389f502)) +* **platform:** bound idle pooled connections for every outbound HTTP caller ([41ea506](https://github.com/icoretech/codex-pooler/commit/41ea506a1110ea8e1eb64e341099ef0c3562311f)) +* **release:** restore the Repo config after a release task names its connections ([f457282](https://github.com/icoretech/codex-pooler/commit/f4572825ca1f61b4f6aba21f25ed3ec1e36333e1)) +* **runtime:** bound the synchronous owner lease renewal lock wait inside Postgres ([ec9f577](https://github.com/icoretech/codex-pooler/commit/ec9f577e53b9786f6ee82adcf555d7deab2f379c)) +* **runtime:** reference the lock wait diagnostics type through the owning module ([06c211a](https://github.com/icoretech/codex-pooler/commit/06c211a0b75a878219f8a227553c4fedf57000f2)) +* **status:** preserve feed errors for worker retries ([d9704fc](https://github.com/icoretech/codex-pooler/commit/d9704fc61fcd202457663e19b1cba75b2fe9b221)) +* **upstreams:** bound idle pooled connections for every provider HTTP caller ([db8380a](https://github.com/icoretech/codex-pooler/commit/db8380a6e0ef0fb035ab63dcc8cd4269674bdb51)) +* **websocket:** acknowledge a parked local-owner response task when the socket terminates ([2d21e4f](https://github.com/icoretech/codex-pooler/commit/2d21e4fdce96b8d7c1e176caf6da73fffa3ef3d1)) +* **websocket:** deliver at most one error frame per native turn on owner-forwarded sockets ([5d375fd](https://github.com/icoretech/codex-pooler/commit/5d375fdc421c8ba9465170d8f31e8c3b494c40ff)) +* **websocket:** keep native websocket turns off HTTP dispatch regardless of the stream flag ([7878f5e](https://github.com/icoretech/codex-pooler/commit/7878f5e256150a00a37a0d184474b1a5ab9462cd)) +* **websocket:** never relay a provider models ETag on native replay turns ([dc786f9](https://github.com/icoretech/codex-pooler/commit/dc786f93a8d6547900578fd0469ef716d9c2ccd9)) +* **websocket:** settle direct and proxy response tasks when their socket dies unacknowledged ([edbddb8](https://github.com/icoretech/codex-pooler/commit/edbddb82e19c7ecc8e9ef811104fae29a29816a0)) + + +### Performance Improvements + +* **access:** take a share lock on api_keys for read-only runtime paths ([4e679c8](https://github.com/icoretech/codex-pooler/commit/4e679c8485cf70c1eb91b1369b024cd40de450ac)) +* **gateway:** end socket terminate drains on signals and plumb owner timeouts through recovery ([d3c31cf](https://github.com/icoretech/codex-pooler/commit/d3c31cf39035a6a49f7f7e3c8b9a3566da9b4da4)) +* **gateway:** report pre-content owner terminals immediately, plumb handoff timeouts, and bound hosted shell validation ([75c97dd](https://github.com/icoretech/codex-pooler/commit/75c97dd5a9b1b4afeb05eda4f87e8086f6253fd3)) + + +### Tests + +* **gateway:** give the rejection drain, replay cleanup and saved-reset decision time test-facing knobs ([10b9d7f](https://github.com/icoretech/codex-pooler/commit/10b9d7f813c0ac31d7fabfeec62974a84fd3c319)) +* keep the suite fast, quiet, and off the network ([c53e54e](https://github.com/icoretech/codex-pooler/commit/c53e54ec0b684ec2618dc88f0ba4189e38dafc6e)) +* **platform:** give the replay migration rehearsal and the owner protocol test real detection budgets ([cd65d47](https://github.com/icoretech/codex-pooler/commit/cd65d47c87f51879d67787a51e95c419f5c203f4)) +* **platform:** pin one Finch pool per distinct outbound option set ([4a17825](https://github.com/icoretech/codex-pooler/commit/4a178255d5b7750de3976126b8e30ed83b471090)) +* **quota:** prime the header exhaustion row from the hard-pin recovery test itself ([7ca2782](https://github.com/icoretech/codex-pooler/commit/7ca2782af338a6b16f0f80ca8cd7c50ab740d506)) +* **runtime:** close the timing races in the backend HTTP owner lease tests ([28700ab](https://github.com/icoretech/codex-pooler/commit/28700ab2e267175fa42aee4c71a181e4e9d5458c)) +* **runtime:** give the local owner crash test its own sandbox connections ([b8020d6](https://github.com/icoretech/codex-pooler/commit/b8020d6ca0e643457806105819287f5058c59095)) +* **runtime:** purge the crash test's identity, secrets and assignment rows too ([2bb1d1b](https://github.com/icoretech/codex-pooler/commit/2bb1d1b314e4aad35febbfed0978f45618ea25fd)) +* **runtime:** purge the owner crash test's committed rows and scope table-wide assertions to the Pool ([a29aceb](https://github.com/icoretech/codex-pooler/commit/a29aceb328277a8ca30a472bb346712e703e60a2)) +* **runtime:** split the owner forwarding websocket test into family files ([1270b46](https://github.com/icoretech/codex-pooler/commit/1270b4626c0d48fb976c08d9187ef63e1b78608b)) +* **runtime:** split the websocket controller test into family files ([b752030](https://github.com/icoretech/codex-pooler/commit/b752030157d8142129309663549b1c10bfafaf15)) +* **support:** mark the lifecycle log capture helper for dialyzer ([945a1f9](https://github.com/icoretech/codex-pooler/commit/945a1f97afd590fc252a19ab5188e6844290c228)) +* **support:** release held FakeUpstream websocket barriers on shutdown instead of waiting out the 15 s kill ([ea9abb0](https://github.com/icoretech/codex-pooler/commit/ea9abb0734e0bedf9d85d99af2e354d458faace1)) +* **upstream:** add a native per-frame barrier mode to FakeUpstream and tag strict fixture provenance ([3eabd6a](https://github.com/icoretech/codex-pooler/commit/3eabd6a11d7eab84bc5030a42d99a4a841e10f2f)) +* **upstream:** finish the strict FakeUpstream migration ([e6210dd](https://github.com/icoretech/codex-pooler/commit/e6210dda2f22b13516b0fb2a6d48edb0e4fd4a2d)) +* **upstream:** migrate one protocol-sensitive test per family to strict fixtures ([5c6d346](https://github.com/icoretech/codex-pooler/commit/5c6d346a254a5c0e60d983ecaa50e9d7b00cd9fd)) +* **v1:** wait for each websocket terminal settlement before the next loop shape ([7a5e64f](https://github.com/icoretech/codex-pooler/commit/7a5e64f19a5800cc4bb0a4680be36069bd80c237)) + + +### Miscellaneous Chores + +* **deps:** update dependency helm/helm to v4.3.0 ([#382](https://github.com/icoretech/codex-pooler/issues/382)) ([423457d](https://github.com/icoretech/codex-pooler/commit/423457d216dc5c5f9c78ab758da59df92581b940)) +* **deps:** update dependency node to v26.8.2 ([#383](https://github.com/icoretech/codex-pooler/issues/383)) ([fbdd0c7](https://github.com/icoretech/codex-pooler/commit/fbdd0c7a87ee293baa4477a50cccb5b48f6ef7d1)) + ## [0.7.8](https://github.com/icoretech/codex-pooler/compare/codex-pooler-v0.7.7...codex-pooler-v0.7.8) (2026-09-10) diff --git a/docs-site/src/content/docs/deployment/docker-compose.mdx b/docs-site/src/content/docs/deployment/docker-compose.mdx index 45458bc28..bb6c46941 100644 --- a/docs-site/src/content/docs/deployment/docker-compose.mdx +++ b/docs-site/src/content/docs/deployment/docker-compose.mdx @@ -30,7 +30,7 @@ For every self-hosted install, choose a tagged stable release before creating ```bash export CODEX_POOLER_IMAGE=ghcr.io/icoretech/codex-pooler -export CODEX_POOLER_IMAGE_TAG=0.7.8 +export CODEX_POOLER_IMAGE_TAG=0.7.9 scripts/self-host/generate-env.sh ``` diff --git a/mix.exs b/mix.exs index bce48be44..2543b2d8b 100644 --- a/mix.exs +++ b/mix.exs @@ -5,7 +5,7 @@ defmodule CodexPooler.MixProject do [ app: :codex_pooler, # x-release-please-start-version - version: "0.7.8", + version: "0.7.9", # x-release-please-end elixir: "~> 1.20", elixirc_paths: elixirc_paths(Mix.env()),