Skip to content

chore: release v0.4.0#418

Merged
bensonwong merged 2 commits intomainfrom
release/v0.4.0
Apr 12, 2026
Merged

chore: release v0.4.0#418
bensonwong merged 2 commits intomainfrom
release/v0.4.0

Conversation

@bensonwong
Copy link
Copy Markdown
Collaborator

@bensonwong bensonwong commented Apr 12, 2026

Summary

Notable changes in this release

Test plan

  • npm run lint — passes (271 files, no violations)
  • npm test — 88 suites, 2309 tests, all passing
  • npm run build — clean build
  • npm run size — all bundles within limits
  • npm pack --dry-run — README.md present in tarball

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel bot commented Apr 12, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

4 Skipped Deployments
Project Deployment Actions Updated (UTC)
agui-chat-deepcitation Ignored Ignored Preview Apr 12, 2026 2:04am
deepcitation-langchain-rag-chat Ignored Ignored Preview Apr 12, 2026 2:04am
mastra-rag-deepcitation Ignored Ignored Preview Apr 12, 2026 2:04am
nextjs-ai-sdk-deepcitation Ignored Ignored Preview Apr 12, 2026 2:04am

@claude
Copy link
Copy Markdown

claude bot commented Apr 12, 2026

Code Review — chore: release v0.4.0

This is a clean, well-structured release PR. The diff is minimal (CHANGELOG promotion + version bump + size-limit update), and the PR description is thorough. A few observations:

✅ What looks good

  • CHANGELOG structure follows Keep a Changelog conventions correctly: [Unreleased] is left as an empty header, and the promoted block is cleanly reorganised into Added / Changed / Fixed subsections.
  • PR references (#411#417) on each entry make it easy to trace back to the source of every change.
  • Size-limit bump (71 KB → 73 KB) is proportional for 4 new React exports (DefaultPopoverContent, SnippetZone, getStatusFromVerification, getStatusLabel).
  • Test plan is complete and passes across all 4 checks — nice to see npm run size gated in CI.

Minor observations

  1. PR chore: bump the dev-dependencies group across 1 directory with 7 updates #414 is not referenced in the CHANGELOG. The PR description says "incorporating all 7 commits since the last release (fix(cli): cowork verify hang + RC5 hydrate + parser/merge regressions #411fix: popover position:fixed, miss/not_found ghost scale-up #417)" but the CHANGELOG entries reference only fix(cli): cowork verify hang + RC5 hydrate + parser/merge regressions #411, refactor: rename fullPhrase/anchorText → sourceContext/sourceMatch #412, feat(animation): page-expand ghost refactor + page-collapse reverse animation #413, fix: review_extract false-positives, prepareUrl status:error, date-only timezone #415, chore(examples): TS 6.0 prep, metrics timing, and partial-status fix #416, and fix: popover position:fixed, miss/not_found ghost scale-up #417. Either chore: bump the dev-dependencies group across 1 directory with 7 updates #414 was a no-op / revert, or it was missed. Worth a quick audit to confirm nothing got dropped.

  2. denseAnnotatePage() entry has no PR reference. Every other Added item links to a source PR except this one:

    - **`denseAnnotatePage()`** — annotates un-tagged page text with dense sequential `<line id="N">` tags…
    

    If it landed in one of the listed PRs, adding (#NNN) would keep the changelog consistent.

  3. CHANGELOG date is 2026-04-11, today is 2026-04-12. Harmless if the release commit was authored yesterday, but worth confirming the tag/publish date matches.

  4. sourceContext/sourceMatch rename is a breaking consumer API change. It's listed under "Changed" which is correct, but given that downstream callers may be reading raw Citation objects (e.g. via CitationRecord), it might be worth calling out more explicitly in the PR description that the backward-compat shim lives only in normalizeCitationInput — raw object destructuring of LLM output will still get the old names until it passes through that normalizer.

No blockers

Nothing here warrants holding the release. The version bump (0.3.11 → 0.4.0) is justified by the new exports and the renamed fields. Looks good to merge once #414 is accounted for.

🤖 Review generated with Claude Code

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 12, 2026

✅ Playwright Test Report

Status: Tests passed

📊 Download Report & Snapshots (see Artifacts section)

What's in the Visual Snapshots

The gallery includes visual snapshots for:

  • 🖥️ Desktop showcase (all variants × all states)
  • 📱 Mobile showcase (iPhone SE viewport)
  • 📟 Tablet showcase (iPad viewport)
  • 🔍 Popover states (verified, partial, not found)
  • 🔗 URL citation variants

Run ID: 24296431242

…d guard

When the scroll area sits below a fixed header (e.g. deepcitation-web's
~64px marketing header), the usable space above a trigger is
triggerTop - containerTop, not triggerTop. Two compounding bugs caused the
popover to bleed into / be clipped by the header:

1. lockSide measured spaceAbove = triggerTop (overestimated by headerHeight),
   allowing side="top" when there wasn't enough real space above.

2. guardClamp clamped to elRect.top >= 0 (viewport top), but the Radix Root's
   overflow:hidden clips at containerTop — so the guard was leaving the popover
   partially behind the header.

Fix: thread containerTop (= findPageScrollEl(trigger).getBoundingClientRect().top)
into both functions via new default-0 params. useLockedPopoverSide and
useViewportBoundaryGuard compute it once per open from the trigger's scroll
ancestor. No change when portaling into document.body (containerTop = 0).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@bensonwong bensonwong merged commit 38bb0fc into main Apr 12, 2026
14 checks passed
@bensonwong bensonwong deleted the release/v0.4.0 branch April 12, 2026 02:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant