Skip to content

Commit fa9bde3

Browse files
ndycodeclaude
andcommitted
chore(release): cut v2.3.2
Patch release with self-healing recovery for an orphaned runtime-proxy app-bind (#614, #615). No runtime-rotation, storage, or auth behavior changed. - Bump version to 2.3.2 across package.json, package-lock.json, .codex-plugin/plugin.json, and AGENTS.md - Add docs/releases/v2.3.2.md - Promote v2.3.2 to current stable in README and docs portal; demote v2.3.1 to prior stable - Add CHANGELOG entry Full suite green (4950 passed, 3 skipped); typecheck clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent cd1a700 commit fa9bde3

8 files changed

Lines changed: 37 additions & 7 deletions

File tree

.codex-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "codex-multi-auth",
3-
"version": "2.3.1",
3+
"version": "2.3.2",
44
"description": "Install and operate codex-multi-auth for the official @openai/codex CLI with multi-account OAuth rotation, switching, health checks, and recovery tools.",
55
"interface": {
66
"composerIcon": "./assets/codex-multi-auth-icon.svg"

AGENTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Generated: 2026-04-25
44
Commit: a87e005
55
Validated: 2026-06-10 against commit 98d9819 (repo audit; claims re-checked against the tree, content not regenerated)
66
Branch: main
7-
Package version: 2.3.1
7+
Package version: 2.3.2
88

99
## OVERVIEW
1010

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,16 @@ This repository's current stable release line is `2.x`.
77
Current stable release notes live in `docs/releases/`.
88
This top-level changelog preserves the foundational `0.x` milestones and points older iteration history to `docs/releases/legacy-pre-0.1-history.md`.
99

10+
## [2.3.2] - 2026-06-16
11+
12+
Self-healing recovery for an orphaned runtime-proxy app-bind. No runtime-rotation, storage, or auth behavior changed.
13+
See [docs/releases/v2.3.2.md](docs/releases/v2.3.2.md) for full details.
14+
15+
### Fixed
16+
17+
- Orphaned app-bind: when `config.toml` was left bound to `codex-multi-auth-runtime-proxy` but the app-bind state/backup files were gone, `rotation status` reported "not configured" and `unbind-app` was a no-op, leaving Codex routed to a dead proxy port. `unbind-app` now self-heals (restoring the provider, falling back to `openai` with no backup), `getAppBindStatus` exposes `unmanagedBind`, and status surfaces "bound but unmanaged" (#614, #615)
18+
- Duplicate `model_provider` key in the no-backup recovery path for half-orphaned configs (proxy block present, top-level provider already native) — produced invalid TOML; the restore now never inserts a second top-level `model_provider` (#615)
19+
1020
## [2.3.1] - 2026-06-16
1121

1222
Adds the read-only `codex-multi-auth history` command. No runtime, storage, or auth behavior changed.

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,8 @@ codex-multi-auth doctor --json
383383

384384
## Release Notes
385385

386-
- Current stable: [docs/releases/v2.3.1.md](docs/releases/v2.3.1.md) — install via `npm i -g codex-multi-auth`
386+
- Current stable: [docs/releases/v2.3.2.md](docs/releases/v2.3.2.md) — install via `npm i -g codex-multi-auth`
387+
- Previous stable: [docs/releases/v2.3.1.md](docs/releases/v2.3.1.md)
387388
- Previous stable: [docs/releases/v2.3.0.md](docs/releases/v2.3.0.md)
388389
- Previous stable: [docs/releases/v2.2.2.md](docs/releases/v2.2.2.md)
389390
- Previous stable: [docs/releases/v2.2.1.md](docs/releases/v2.2.1.md)

docs/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ Public documentation for the `codex-multi-auth` Codex CLI multi-account OAuth ma
3232

3333
| Document | Focus |
3434
| --- | --- |
35-
| [releases/v2.3.1.md](releases/v2.3.1.md) | Current stable release notes (install via `npm i -g codex-multi-auth`) |
35+
| [releases/v2.3.2.md](releases/v2.3.2.md) | Current stable release notes (install via `npm i -g codex-multi-auth`) |
36+
| [releases/v2.3.1.md](releases/v2.3.1.md) | Prior stable release notes |
3637
| [releases/v2.3.0.md](releases/v2.3.0.md) | Prior stable release notes |
3738
| [releases/v2.3.0-beta.3.md](releases/v2.3.0-beta.3.md) | Prior prerelease notes |
3839
| [releases/v2.3.0-beta.2.md](releases/v2.3.0-beta.2.md) | Prior prerelease notes |

docs/releases/v2.3.2.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
## Runtime Rotation / App Bind
2+
3+
### Bugfixes
4+
5+
- Fixed an orphaned app-bind state that could leave `~/.codex/config.toml` pointing at the `codex-multi-auth-runtime-proxy` provider with no way to recover via the CLI. When app-bind rewrote the config but its state/backup files were later lost (cleanup, partial unbind, a marker-less re-run of first-run setup, or a crash), the config stayed bound while `getAppBindStatus` and `rotation unbind-app` — which inferred "bound" purely from the app-bind state files — reported "not configured" and refused to act. The official Codex CLI/Desktop was then routed to a dead proxy port with no automated fix. `unbindCodexAppRuntimeRotation` now self-heals: when there is no backup and no state but `config.toml` is still bound, it strips the proxy provider block, restores the top-level `model_provider` (falling back to `openai` when no original backup exists), and reports the recovery. `getAppBindStatus` now derives `bound` from the config when no state file is present and exposes an `unmanagedBind` flag, and `rotation status` surfaces "bound but unmanaged" with the `unbind-app` remedy instead of "not configured" (#614).
6+
- Fixed a duplicate `model_provider` key in the no-backup recovery path. A half-orphaned config (proxy block present but the top-level `model_provider` already pointing at a real provider) would have a second `model_provider` line spliced in during restore, producing invalid TOML that Codex refuses to parse. The shared restore now only inserts the original line when no top-level `model_provider` exists; an existing line is left untouched.
7+
8+
## Testing
9+
10+
### Improvements
11+
12+
- Added regression coverage for the recovery path: detection of a bound config from either the top-level provider or the proxy block (including stray-mention and empty-config cases); no-backup restore across full-orphan, half-orphan, block-only, custom-default-provider, and CRLF variants; `disable_response_storage` cleanup; `unmanagedBind` status detection; and integration-level self-heal through `unbindCodexAppRuntimeRotation` for both the full-orphan and half-orphan cases.
13+
14+
## Notes
15+
16+
- Patch release published under the `latest` dist-tag (`npm i -g codex-multi-auth`).
17+
- No runtime-rotation routing, account-selection, storage, or auth behavior changed; the normal backed-up bind/unbind path is unchanged.
18+
- If you previously hit the orphaned-bind state, run `codex-multi-auth rotation unbind-app` to restore your config (it now works even without a saved backup).

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "codex-multi-auth",
3-
"version": "2.3.1",
3+
"version": "2.3.2",
44
"description": "Codex CLI multi-account OAuth manager with account switching, health checks, runtime rotation, diagnostics, and recovery tools for @openai/codex",
55
"main": "./dist/index.js",
66
"types": "./dist/index.d.ts",

0 commit comments

Comments
 (0)