release: 0.4.27 — synced to upstream vercel/chat@4.27.0#106
Conversation
Version bump from 0.4.27a1 to 0.4.27. Rewrites the CHANGELOG entry for this release from a sync-plan checklist to user-facing release notes covering all 14 commits since v0.4.26.3 — the upstream parity ports (#84-#92) and the Python-only bugfixes (#92, #99, #101, #103, #104, #105). Folds in the review-loop discipline documentation captured during this wave (formerly on claude/improve-sync-process-docs, commit a7587ab): docs/UPSTREAM_SYNC.md gains a "Review-Loop Discipline" section and a sub-rule on preferring official SDKs over hand-rolls; docs/SELF_REVIEW.md header rewritten to "before opening the PR" with a "Timing" subsection making the bot-round economics explicit. Updates README and CLAUDE.md to drop the "alpha / in-flight" wording. docs/UPSTREAM_SYNC.md versions table grows the 0.4.27 row. Fidelity workflow stays pinned to chat@4.26.0 — upstream did not publish a chat@4.27.0 tag for the Apr 30 monorepo cut (only @chat-adapter/shared got tagged); will move to a 4.27 SHA pin in the next sync.
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (7)
📝 WalkthroughWalkthroughThis PR finalizes the v4.27.0 upstream sync by bumping the package version from alpha to release status, updating project metadata and release notes, enhancing development process documentation with improved upstream-sync guidance and review discipline, and hardening a GitHub adapter test for cleaner CI behavior. ChangesRelease 0.4.27 Finalization
Development Process and Test Improvements
Estimated code review effort🎯 2 (Simple) | ⏱️ ~8 minutes Possibly related PRs
Poem
✨ Finishing Touches📝 Generate docstrings
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Code Review
This pull request finalizes the sync to upstream vercel/chat@4.27.0 by bumping the version to 0.4.27 across pyproject.toml, README.md, CLAUDE.md, and CHANGELOG.md. It also updates documentation in docs/SELF_REVIEW.md and docs/UPSTREAM_SYNC.md to establish guidelines on review-loop discipline, self-review timing, and a preference for official SDKs over hand-rolled implementations. A review comment identified a minor Markdown formatting issue with backticks in the newly added documentation.
| echoes (the system sometimes re-broadcasts a comment you just | ||
| posted). A silent acknowledgment is sufficient. | ||
|
|
||
| 10. **Parallelize multi-PR triage on day one.** When several PRs are |
There was a problem hiding this comment.
There is an unclosed backtick before git worktree add. It should be closed to ensure correct Markdown rendering.
| 10. **Parallelize multi-PR triage on day one.** When several PRs are | |
| 10. **Parallelize multi-PR triage on day one.** When several PRs are in the same review state, dispatch parallel agents (one per PR, each with its own `git worktree add`) immediately. The 4.27 wave converged 6 PRs in ~1 hour of wall time once parallelized; running them sequentially would have taken days. |
TestGitHubAdapterConstructor.test_throws_when_no_auth expected ValidationError on auth-less construction, but the GitHubAdapter constructor's env-fallback path silently satisfied auth from a GITHUB_TOKEN set by CI / dev shell — so the test failed wherever GITHUB_TOKEN was set in the environment. The duplicate test at line 827 in this same file already does the env-var cleanup correctly. Apply the same pattern to line 190 so the suite is fully green for the 0.4.27 release: pop GITHUB_TOKEN / GITHUB_APP_ID / GITHUB_PRIVATE_KEY before the assert, restore them in finally.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fee58ac6af
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| - Bumps lint.yml's pinned upstream ref to commit `f55378a` (or a later SHA if upstream cuts a `chat@4.27.0` tag in the meantime). | ||
| - Adds an entry under the next `CHANGELOG` heading (`0.4.27a2`, `0.4.27a3`, …). | ||
| 3. Once all 22 items are ported (or explicitly documented as divergence in `docs/UPSTREAM_SYNC.md`), the final PR cuts `0.4.27` and switches CI back to strict fidelity at the upstream tag. | ||
| Upstream cut versions for the entire monorepo on Apr 30 2026 (commit `f55378a`), but only `@chat-adapter/shared@4.27.0` got a git tag — no `chat@4.27.0` tag was published. The fidelity workflow (`scripts/verify_test_fidelity.py`, `.github/workflows/lint.yml`) stays pinned to `chat@4.26.0` for this release; it'll move to a 4.27 SHA pin (or a real tag if upstream publishes one) in the next sync. |
There was a problem hiding this comment.
Pin fidelity checks to the released upstream commit
This releases the package as synced to UPSTREAM_PARITY = "4.27.0", but the note explicitly leaves the fidelity workflow pinned to chat@4.26.0; .github/workflows/lint.yml clones that tag before running scripts/verify_test_fidelity.py --strict, so CI will compare the Python core tests against the previous upstream release and cannot catch mapped tests added or changed in the 4.27 release. Since the chat@4.27.0 tag is missing, the workflow should check out the release SHA (f55378a) or another 4.27 pin before this is shipped as 0.4.27.
Useful? React with 👍 / 👎.
Summary
Release prep for 0.4.27 — synced to upstream
vercel/chat@4.27.0(release commitf55378a). Draft — held per user request: tag/publish only after any further patches in flight have landed.Bumps
pyproject.tomlfrom0.4.27a1to0.4.27, rewrites the CHANGELOG entry from sync-plan checklist to user-facing release notes covering all 14 commits sincev0.4.26.3, folds in the review-loop discipline docs captured during the wave, and fixes the long-standingtest_throws_when_no_authfailure (test bug — duplicate forgot to clearGITHUB_TOKENenv, see commitfee58ac).What ships
Upstream parity ports (vercel/chat 4.27.0)
Chat.get_user(adapter, user_id)across all 8 adapters (feat(chat): add chat.get_user() for cross-platform user lookups (vercel/chat#391) #90, feat: add chat.getUser() for cross-platform user lookups vercel/chat#391)bot_tokenresolver + customwebhook_verifier(feat(slack): dynamic bot_token resolver and custom webhook_verifier (vercel/chat#421) #87, feat(slack): dynamic botToken resolver and custom webhookVerifier vercel/chat#421)team_id, link unfurl, emptythread_ts, email-safe@mention(fix(adapters): Slack streaming team_id + Teams DM Graph conversation IDs (vercel/chat#330, #403) #85, fix(adapters): bug-fix sweep from upstream 4.27.0 (slack/discord/telegram) #89, fix(slack): skip @ inside email localparts when wrapping mentions #91)ExternalSelect.initial_option+option_groups(feat(externalselect): add initialOption + option_groups (vercel/chat#410, #397) #84, feat(chat): add initialOption and option_groups to ExternalSelect vercel/chat#410, #397)Python-only improvements
_remend#101)files_upload_v2kwarg fix (fix(slack): use channel= kwarg for files_upload_v2 (closes #102) #103, issue SlackAdapter._upload_files passeschannel_id=to slack-sdkfiles_upload_v2→ TypeError "got multiple values for keyword argument 'channel_id'" #102)StreamChunksupport in slack/github/gchat (fix(adapters): accept dict StreamChunks in slack/github/google_chat streams #105)Sync-process docs
docs/UPSTREAM_SYNC.md: new "Review-Loop Discipline" section + SDK-preference sub-ruledocs/SELF_REVIEW.md: explicit "before opening the PR" timing + economicsTest cleanup
test_throws_when_no_authinTestGitHubAdapterConstructornow clearsGITHUB_TOKENenv before the assertion. The duplicate test at line 827 already had the cleanup; the line-190 copy was missing it, so the suite was reporting "1 failed" wherever the env var was set.Validation
uv run ruff check src/ tests/ scripts/— cleanuv run ruff format --check src/ tests/ scripts/— 197/197 formatteduv run python scripts/audit_test_quality.py— 0 hard failuresuv run pytest tests/ --tb=short -q— 4036 passed, 3 skipped, 0 failedUpstream tagging note
Upstream cut versions on Apr 30 2026 (commit
f55378a) but did NOT publish achat@4.27.0tag — only@chat-adapter/shared@4.27.0got a git tag. The fidelity workflow stays pinned tochat@4.26.0for this release; will move to a 4.27 SHA pin (or a real tag if upstream publishes one) in the next sync.Why draft
Per user note: additional patches may bundle into 0.4.27 before tagging. Hold this PR until those land; CHANGELOG can be amended in place.
Generated by Claude Code
Summary by CodeRabbit
New Features
Documentation
Tests