mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-17 12:22:34 +03:00
* fix(oauth): keep Claude personal and Team organizations apart One Anthropic identity reaches its personal workspace and every Team organization it belongs to with the same email AND the same accountUUID, each with its own tokens, plan and rate limits. The OAuth dedup matched on email alone for every provider except Codex, so authenticating the second organization overwrote the first connection instead of adding one: only the most recent organization stayed usable. organizationUUID is the field that separates them (cliUserID cannot be used, it changes on every login). Disambiguate on organizationUUID, mirroring how Codex uses workspaceId/chatgptUserId (#7737): - findExistingOAuthConnectionMatch routes claude through a new isSameClaudeAccount helper, so a login only merges into an existing row when the organization agrees; - isMatchingOauthIdentity gains organizationUUID as a third optional disambiguator, compared strictly two-sided; - createProviderConnection passes the incoming organizationUUID, closing the same hole on the create path. Rows stored before Claude returned organizationUUID keep the bare-email match, so re-authenticating an existing connection still updates it in place instead of forking a duplicate. No behaviour change for other providers. * docs(oauth): changelog fragment for #12222
changelog.d/ — changelog fragments
A PR never edits CHANGELOG.md directly during the cycle. Instead it adds ONE new
file here — its changelog entry as a fragment. Two PRs never touch the same file, so
changelog merge conflicts (the "CHANGELOG-eat" cascade that forced a re-sync push + full
CI re-run after every sibling merge) are structurally impossible.
Convention
| Directory | Aggregates under |
|---|---|
features/ |
### ✨ New Features |
fixes/ |
### 🐛 Bug Fixes |
maintenance/ |
### 📝 Maintenance |
- Filename:
<PR-number>-<short-slug>.md(e.g.fixes/6700-dockerfile-better-sqlite3.md). The PR number prefix keeps aggregation order deterministic. - Content: the exact bullet line(s) that should land in
CHANGELOG.md, starting with-. Multi-line (continuation) bullets are fine. Keep the repo's credit format:(#PR — thanks @user). - One fragment per PR (rarely more, e.g. a PR that both fixes and adds).
Example
changelog.d/fixes/6496-cloudflare-relay-worker-syntax.md:
- **fix(providers):** Cloudflare relay Worker deploys use Service Worker syntax with `body_part` metadata ([#6496](https://github.com/diegosouzapw/OmniRoute/pull/6496)) — thanks @SeaXen
Aggregation
The release captain (or /generate-release) folds all fragments into CHANGELOG.md and
deletes them:
node scripts/release/aggregate-changelog.mjs # write + delete fragments
node scripts/release/aggregate-changelog.mjs --dry-run # preview only
Fragment well-formedness is enforced by npm run check:changelog-integrity (the same
gate that guards against CHANGELOG-eat for legacy direct edits).