Skip to content

fix(web,mobile): QA followups — calendar panel overlap, cheer-row profiles - #381

Merged
thomasluizon merged 1 commit into
mainfrom
fix/qa-followups
Jul 3, 2026
Merged

fix(web,mobile): QA followups — calendar panel overlap, cheer-row profiles#381
thomasluizon merged 1 commit into
mainfrom
fix/qa-followups

Conversation

@thomasluizon

Copy link
Copy Markdown
Owner

Pairs with thomasluizon/orbit-api#279 (notification localization — API side only, no contract coupling; merge order free).

User-reported after the #377 release:

  1. Calendar day panel overlap: with the page scrolled and a long day list, "Ver este dia" painted over list rows. Root cause: the sticky panel used max-h, so the flex-1 min-h-0 scroller chain resolved against an indeterminate height at some scroll states and rows escaped the scroll region. Fix: fixed h-[calc(100dvh-84px)] — the flex math is now determinate everywhere; the CTA is pinned at the panel bottom and can never overlap. New structural tests assert rows-inside-scroller, CTA-outside-after, fade non-interactive (63 calendar tests green).
  2. Cheer rows → friend profile: the Atividade tab's "Incentivos para você" (received cheers) rows weren't clickable — only the feed event rows got the click-through in fix(web,mobile,shared): post-release QA sweep — desktop width, Astra nav, palette, invite links, richer friend profile, create-habit sheet #377. Cheer identity rows now open the sender's profile on both platforms (reusing FriendProfileView/Sheet and the existing viewProfile a11y label); rows without a senderId stay plain. Tests added on both platforms.

Type-checks clean; no i18n changes needed (reused keys).

🤖 Generated with Claude Code

…ws open friend profile

- Calendar desktop day panel: sticky wrapper gets a fixed height instead of
  max-height so the internal scroller is bounded at every page-scroll state;
  "Ver este dia" can no longer overlap list rows (structural tests pin
  scroller/CTA/fade relationships)
- Social Atividade tab: received-cheer ("Incentivos") rows now open the
  sender's friend profile like the feed rows; cheers without a senderId stay
  non-interactive (both platforms, tests added)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 3, 2026

Copy link
Copy Markdown

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

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
orbit-ui-mobile-web Ignored Ignored Jul 3, 2026 7:31pm

Request Review

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Complete

Scope: PR #381 in thomasluizon/orbit-ui-mobile (fix/qa-followups → main)
Recommendation: APPROVE

Severity Count
Critical (incl. ⚠️ old-client breaks) 0
High 0
Medium 1
Low / Info 0

Summary

Two independent QA fixes to the #377 release: (1) apps/web/app/(app)/calendar/page.tsx:382 — the sticky desktop day panel switches from max-h-[calc(100dvh-84px)] to h-[calc(100dvh-84px)], a correct, minimal root-cause fix (fixed height makes the flex-1 min-h-0 scroller chain determinate, so the CTA can no longer overlap list rows) — verified structurally against CalendarDayDetail's fitViewport branch and covered by three new tests. (2) Received-cheer rows on the Atividade/Feed tab (apps/web/.../social-feed.tsx, apps/mobile/.../social-feed.tsx) now open the sender's friend profile on both platforms, mirroring the existing FeedEventCard press-target pattern, with matching tests.

Medium finding

Speculative "no senderId" branch is unbacked by the actual Cheer contract (both platforms).
apps/web/app/(app)/social/_components/social-feed.tsx:37 and apps/mobile/app/social/_components/social-feed.tsx:41 add if (!cheer.senderId) { …non-interactive row… }. cheerSchema (packages/shared/src/types/social.ts:83-91) declares senderId/senderHandle/senderDisplayName as plain required z.string(), parsed strictly at the trust boundary (cheersPageSchema.parse(raw) in hooks/use-friends.ts). The sibling FeedEventCard treats actorUserId as always present with no equivalent guard, and there's no "system"/"deleted sender" cheer concept anywhere else in the codebase. As written, this branch is only reachable via the test fixture createMockCheer({ senderId: '' }), not via any real API response the current contract can produce — it reads as a defensive branch for a state the type system says can't happen (Code Standards #1/#2). Fix: either make the state explicit in the shared schema (senderId: z.string().nullable()) if it's real, verifying against the orbit-api CheerDto, or delete the branch and always render the row as clickable to match FeedEventCard's unconditional pattern. Not blocking — flagging for a fast follow-up.

Subagents

Agent Verdict
parity-checker PAIRED — cheer-row fix shipped identically on both platforms with matching tests; calendar fix is legitimately web-only (mobile has no wide-desktop inline panel, confirmed no max-h/fitViewport equivalent in apps/mobile/app/(tabs)/calendar.tsx)
i18n-syncer N/A — no i18n files touched; social.feed.viewProfile reused, already present in both en.json and pt-BR.json
contract-aligner N/A — diff touches neither packages/shared/src/types/* nor orbit-api
security-reviewer N/A — no orbit-api changes

Validation

Lint / type-check / tests: covered by this PR's own required CI checks (Build / Unit Tests / SonarCloud) — skipped here per workflow instructions.

Deferred

Backend hard rules and the backward-compat guard are N/A (no orbit-api or packages/shared type changes in this diff). Cross-repo dimensions (contract-aligner against orbit-api) not verifiable in this CI job since the sibling repo isn't checked out — none apply here anyway, so no gap. All 6 changed files received a verdict; nothing silently skipped.

Files touched: apps/mobile/app/social/_components/social-feed.tsx, apps/mobile/__tests__/components/social/cheer-row.test.tsx, apps/web/app/(app)/calendar/page.tsx, apps/web/app/(app)/social/_components/social-feed.tsx, apps/web/__tests__/components/calendar/calendar-day-detail.test.tsx, apps/web/__tests__/components/social/cheer-row.test.tsx.

@sonarqubecloud

sonarqubecloud Bot commented Jul 3, 2026

Copy link
Copy Markdown

@thomasluizon
thomasluizon merged commit 1e67a38 into main Jul 3, 2026
10 checks passed
@thomasluizon
thomasluizon deleted the fix/qa-followups branch July 3, 2026 19:42
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