Skip to content

Mobile: rebuild PR detail view (perf + desktop parity) + Work-tab 'Open in PRs tab'#701

Merged
arul28 merged 8 commits into
mainfrom
ade/ok-prs-tab-mobile-app-97244fb9
Jul 4, 2026
Merged

Mobile: rebuild PR detail view (perf + desktop parity) + Work-tab 'Open in PRs tab'#701
arul28 merged 8 commits into
mainfrom
ade/ok-prs-tab-mobile-app-97244fb9

Conversation

@arul28

@arul28 arul28 commented Jul 4, 2026

Copy link
Copy Markdown
Owner

What

Rebuilds the iOS PR detail view and adds a Work-tab context-menu shortcut to the PRs tab.

PR detail view (inside a mapped/unmapped PR)

  • Perf: the Overview thread is no longer one monolithic view inside a single `List` row — every card/event is its own row, so the list actually virtualizes. Timeline (+ thread split + fallback PR synthesis) is precomputed once per data change in `recomputeDerivedModels()`, never in `body`. Removed per-card `.ultraThinMaterial` blurs, `.plusLighter` gradient backdrops, text-shadow/blur halos, and the always-running sparkle pulse. Inline-code `AttributedString` parses are cached.
  • Design: flat adaptive palette mapped to desktop tokens (`--pr-surface` rgb(15,16,16), thread card rgb(23,23,24), panel card rgb(24,23,43) in dark; app tokens in light — the old palette was fixed dark and broke light mode).
  • Desktop parity: reading order mirrors PrDetailTimelineRails — AI summary → description → chronological event feed (ascending, commit-group folding, slim commit/force-push dividers, inline lifecycle rows, expandable comment cards) → review threads → composer → merge rail with the desktop requirement checklist → metadata cards (checks / commits / files / people incl. labels + linked issues / stack).
  • Webhook-relay freshness: projection-bump reloads now re-fetch the action sidecars (review threads, activity, action runs, deployments, capabilities) once the 25s warm window lapses — webhook → host hot-poll → CRR snapshot rows → changeset pump → projection bump now keeps an open detail screen live instead of one-shot.

Work tab

  • Long-press on any chat row with a linked PR (ADE-mapped or GitHub-by-branch) shows Open in PRs tab, routed through the existing `requestedPrNavigation` machinery.

Tests / docs

  • 3 new ADETests pinning the `buildPrTimelineDisplayItems` folding contract; existing timeline + merge-state suites green (scoped runs).
  • `ios-companion.md` + `pull-requests/README.md` updated; preview fixtures added for the rebuilt Overview (dark + light).

/quality: dual review, 0 Blocker/High; 4 Low fixes applied. Builds verified via xcodebuild (iPhone 17 Pro sim).

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Updated PR Details “Overview” and “Activity” screens with clearer, structured sections and a redesigned timeline with commit grouping.
    • Work list rows can now open the linked PR directly from the row menu.
  • Bug Fixes

    • Improved inline code rendering in review threads.
    • Refreshed merge readiness presentation using a checklist-style model.
    • Refined visual styling for PR cards, rails, buttons, and iconography for better consistency.
  • Tests

    • Added unit test coverage for grouped commit timeline items and stable ordering.

Greptile Summary

This PR rebuilds the mobile PR detail experience and adds a Work-tab shortcut into PRs. The main changes are:

  • Virtualized PR overview rows with precomputed timeline, thread, and fallback PR models.
  • Flat adaptive PR styling for dark and light mode parity with desktop tokens.
  • Desktop-style overview order with AI summary, description, timeline, review threads, composer, merge rail, and metadata cards.
  • Live sidecar refresh after warm-cache expiry for threads, activity, runs, deployments, and capabilities.
  • Work-row context menu action to open a linked PR in the PRs tab.
  • Preview fixtures and tests for the rebuilt overview and timeline commit folding.

Confidence Score: 5/5

This PR appears safe to merge with low risk.

The changed PR detail, Work-tab navigation, helper logic, and tests were reviewed with no accepted bugs found.

No files require special attention.

T-Rex T-Rex Logs

What T-Rex did

  • Checked for iOS build tools on the Linux runner and confirmed that xcodebuild, swift, and xcrun are not available, even though the iOS project files are present.
  • Attempted to run the requested xcodebuild test, but the run is blocked because xcodebuild is not installed (exit code 127).

View all artifacts

T-Rex Ran code and verified through T-Rex

Important Files Changed

Filename Overview
apps/ios/ADE/Views/PRs/PrDetailScreen.swift Reworks PR detail loading, derived timeline caching, unified overview rows, and live sidecar refresh gating.
apps/ios/ADE/Views/PRs/PrDetailOverviewTab.swift Replaces the monolithic overview with reusable row components, merge rail, metadata cards, and corrected reviewer state handling.
apps/ios/ADE/Views/PRs/PrDetailActivityTab.swift Refactors review thread rendering and adds cached inline-code text plus folded timeline row components.
apps/ios/ADE/Views/PRs/PrHelpers.swift Adds cached date parsing, updated timeline/activity helpers, and adaptive PR palette aliases.
apps/ios/ADE/Views/Work/WorkRootComponents.swift Adds the Work row context-menu hook for opening a linked PR in the PRs tab.
apps/ios/ADE/Views/Work/WorkRootScreen+Actions.swift Implements Work-tab PR navigation requests for mapped and GitHub-by-branch PR tags.
apps/ios/ADETests/ADETests.swift Adds tests covering PR timeline commit folding and ordering contracts.

Sequence Diagram

%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
  participant Work as Work tab row
  participant Sync as SyncService navigation request
  participant PRs as PRs tab/detail router
  participant Detail as PrDetailView
  participant Host as Host sidecars

  Work->>Sync: requestedPrNavigation(prId or prNumber)
  Sync->>PRs: tab observes request
  PRs->>Detail: open mapped detail or GitHub-number route
  Detail->>Detail: seed warm cache
  Detail->>Host: fetch snapshot + sidecars when stale/live
  Host-->>Detail: threads, activity, runs, deployments, capabilities
  Detail->>Detail: recompute timeline + folded display rows
  Detail-->>PRs: render virtualized Overview list rows
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
  participant Work as Work tab row
  participant Sync as SyncService navigation request
  participant PRs as PRs tab/detail router
  participant Detail as PrDetailView
  participant Host as Host sidecars

  Work->>Sync: requestedPrNavigation(prId or prNumber)
  Sync->>PRs: tab observes request
  PRs->>Detail: open mapped detail or GitHub-number route
  Detail->>Detail: seed warm cache
  Detail->>Host: fetch snapshot + sidecars when stale/live
  Host-->>Detail: threads, activity, runs, deployments, capabilities
  Detail->>Detail: recompute timeline + folded display rows
  Detail-->>PRs: render virtualized Overview list rows
Loading

Comments Outside Diff (1)

  1. apps/ios/ADE/Views/PRs/PrDetailScreen.swift, line 285-289 (link)

    P1 Required approvals ignored
    reviewsNeeded now uses only requestedReviewers.count, but branch protection requirements live on snapshot.status.requiredApprovals and reviewDecision. When a protected PR requires one approval and has no current requested reviewers, this returns 0, prComputeMergeGate can go green, and overviewMergeRailModel.canMerge enables the merge button before review approval.

    Artifacts

    Repro: focused merge-gate harness

    • Contains supporting evidence from the run (text/x-python; charset=utf-8).

    Repro: harness output showing required approval ignored

    • Keeps the command output available without making the summary code-heavy.

    Repro: native Swift and Xcode toolchain availability check

    • Keeps the command output available without making the summary code-heavy.

    View artifacts

    T-Rex Ran code and verified through T-Rex

    Prompt To Fix With AI
    This is a comment left during a code review.
    Path: apps/ios/ADE/Views/PRs/PrDetailScreen.swift
    Line: 285-289
    
    Comment:
    **Required approvals ignored**
    `reviewsNeeded` now uses only `requestedReviewers.count`, but branch protection requirements live on `snapshot.status.requiredApprovals` and `reviewDecision`. When a protected PR requires one approval and has no current requested reviewers, this returns `0`, `prComputeMergeGate` can go green, and `overviewMergeRailModel.canMerge` enables the merge button before review approval.
    
    How can I resolve this? If you propose a fix, please make it concise.

    Fix in Claude Code

Reviews (6): Last reviewed commit: "review: resolved-lane fallback for row P..." | Re-trigger Greptile

arul28 and others added 3 commits July 4, 2026 15:02
…b Open-in-PRs-tab menu

- Flat adaptive PR palette (desktop --pr-surface/thread/panel tokens, light-mode
  correct) replacing the fixed dark liquid-glass purple/pink gradients
- prGlassCard/backdrop flattened: no materials, blend modes, blur or 24pt
  shadows inside scroll content; always-on pulse/blur halos removed
- Overview thread split into per-row List items (real virtualization) with
  timeline built once per data change, ascending order, commit-group folding,
  slim commit/force-push dividers, inline lifecycle rows, tap-to-expand
  comment cards, cached inline-code AttributedStrings
- Merge rail gains the desktop requirement checklist; metadata cards added
  (checks/commits/files/people incl. labels + linked issues/stack)
- Projection-bump reloads now refetch detail sidecars once the 25s warm window
  lapses, so webhook-relay-driven host updates keep threads/activity live
- Work tab: chat rows with any linked PR (mapped or GitHub-by-branch) get an
  'Open in PRs tab' context-menu item routed through requestedPrNavigation
- Preview fixtures for the rebuilt Overview thread (dark + light)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- delete dead PrGlassPalette.pink / .purpleSoft aliases
- AI-summary +/- totals share the Files card's snapshot-file source
- namespace PrInlineCodeText cache keys away from the full-markdown renderer
- sheet drag handles use adaptive token instead of fixed white

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- 3 new ADETests pinning buildPrTimelineDisplayItems (fold, author split,
  pass-through) alongside the existing timeline order test — all green scoped
- ios-companion.md: PR detail screen subsection (row order, derived models,
  adaptive tokens, 25s sidecar freshness gate), Work-tab menu item, stale
  browser-fallback claim fixed
- pull-requests README: mobile freshness-gate note

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

cursor Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@vercel

vercel Bot commented Jul 4, 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)
ade Ignored Ignored Preview Jul 4, 2026 8:37pm

@coderabbitai

coderabbitai Bot commented Jul 4, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This PR updates PR detail and work-tab SwiftUI flows to use adaptive palette tokens, rebuilds activity and overview content into row-based components with structured merge checklist data, caches derived detail state, adds overview preview fixtures and timeline tests, and wires Work tab rows to open linked PRs.

Changes

PR Detail UI Refresh

Layer / File(s) Summary
Adaptive palette and surface tokens
apps/ios/ADE/Views/PRs/PrHelpers.swift, apps/ios/ADE/Views/PRs/PrMergeGateCard.swift, apps/ios/ADE/Views/PRs/PrListRowModifier.swift, apps/ios/ADE/Views/PRs/PrAiSummaryCard.swift, apps/ios/ADE/Views/PRs/PrCommitRailView.swift
Palette aliases now resolve through adaptive ADEColor and theme tokens, and the PR glass card and list-row styles use adaptive fills, borders, shadows, and flatter accent treatments.
Activity timeline and inline content
apps/ios/ADE/Views/PRs/PrDetailActivityTab.swift, apps/ios/ADETests/ADETests.swift
The activity tab removes approval/reviewer sections, caches inline-code rendering, and adds grouped timeline rows, inline event rows, expandable commit groups, and timeline tests for commit folding behavior.
Overview thread and merge checklist
apps/ios/ADE/Views/PRs/PrDetailOverviewTab.swift
The overview tab adds thread headers, description and unmapped banners, a locked composer bar, checklist-driven merge rail rendering, metadata cards, and removes legacy helper views.
Detail screen derived state and row wiring
apps/ios/ADE/Views/PRs/PrDetailScreen.swift
PrDetailScreen caches synthesized PR data, grouped timeline items, and thread partitions, rebuilds them after reload and warm-cache seeding, replaces the unified overview row with sibling rows, and updates overview merge gating and sticky bar visuals.
Preview fixtures and timeline tests
apps/ios/ADE/Views/PRs/PrDetailOverviewPreviews.swift, apps/ios/ADETests/ADETests.swift
The preview file adds deterministic overview fixtures, a preview screen, and dark/light previews, while the test file adds helpers and coverage for commit grouping and pass-through behavior.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

  • arul28/ADE#197: Both PRs change PR navigation wiring to drive syncService.requestedPrNavigation using PR identifiers rather than just PR number.

Suggested labels: ios

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately captures the two main changes: rebuilding the PR detail view for performance/desktop parity and adding the Work-tab PR shortcut.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ade/ok-prs-tab-mobile-app-97244fb9

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@arul28 arul28 changed the title Ok Prs Tab Mobile App Mobile: rebuild PR detail view (perf + desktop parity) + Work-tab 'Open in PRs tab' Jul 4, 2026
@arul28

arul28 commented Jul 4, 2026

Copy link
Copy Markdown
Owner Author

@copilot review but do not make fixes

Comment thread apps/ios/ADE/Views/PRs/PrDetailOverviewTab.swift Outdated

@coderabbitai coderabbitai 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.

Actionable comments posted: 2

🧹 Nitpick comments (1)
apps/ios/ADE/Views/PRs/PrMergeGateCard.swift (1)

58-94: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Remove the unused highlightOpacity parameter. PrGlassCardStyle no longer reads it, and prGlassCard(...) only forwards it, so the public API suggests a customization that no longer changes rendering.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/ios/ADE/Views/PRs/PrMergeGateCard.swift` around lines 58 - 94, Remove
the unused highlightOpacity customization from PrGlassCardStyle and any call
sites that forward it, since body(content:) no longer uses it. Update the
prGlassCard(...) modifier/helper to stop accepting or passing highlightOpacity,
and keep the remaining parameters aligned with the actual rendering behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/ios/ADE/Views/PRs/PrDetailActivityTab.swift`:
- Around line 804-816: The Show more gate in PrDetailActivityTab should use the
same collapse criteria as the PrInlineCodeText lineLimit, not raw
character/newline checks. Update the button condition near the expanded/bodyText
logic to mirror the 10-line clamp used by Self.collapsedLineLimit so wrapped
bodies that visually exceed the limit still show the expansion control.

In `@apps/ios/ADE/Views/PRs/PrDetailOverviewTab.swift`:
- Around line 677-695: The reviewerEntries builder in PrDetailOverviewTab
currently adds requestedReviewers before reviews, so a matching login is kept as
pending even when a submitted review exists. Update reviewerEntries to prefer
the state from reviews when a reviewer has any review entry, and only fall back
to the pending requestedReviewer entry when no review is present; keep the
dedupe logic around seen and the prBotProvider(from:) filter intact.

---

Nitpick comments:
In `@apps/ios/ADE/Views/PRs/PrMergeGateCard.swift`:
- Around line 58-94: Remove the unused highlightOpacity customization from
PrGlassCardStyle and any call sites that forward it, since body(content:) no
longer uses it. Update the prGlassCard(...) modifier/helper to stop accepting or
passing highlightOpacity, and keep the remaining parameters aligned with the
actual rendering behavior.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 0df9e861-9797-40fb-b9c9-8bf5f5bf4de0

📥 Commits

Reviewing files that changed from the base of the PR and between 12aca21 and 44e5631.

⛔ Files ignored due to path filters (3)
  • apps/ios/ADE.xcodeproj/project.pbxproj is excluded by !**/*.xcodeproj/project.pbxproj
  • docs/features/pull-requests/README.md is excluded by !docs/**
  • docs/features/sync-and-multi-device/ios-companion.md is excluded by !docs/**
📒 Files selected for processing (13)
  • apps/ios/ADE/Views/PRs/PrAiSummaryCard.swift
  • apps/ios/ADE/Views/PRs/PrCommitRailView.swift
  • apps/ios/ADE/Views/PRs/PrDetailActivityTab.swift
  • apps/ios/ADE/Views/PRs/PrDetailOverviewPreviews.swift
  • apps/ios/ADE/Views/PRs/PrDetailOverviewTab.swift
  • apps/ios/ADE/Views/PRs/PrDetailScreen.swift
  • apps/ios/ADE/Views/PRs/PrHelpers.swift
  • apps/ios/ADE/Views/PRs/PrListRowModifier.swift
  • apps/ios/ADE/Views/PRs/PrMergeGateCard.swift
  • apps/ios/ADE/Views/Work/WorkRootComponents.swift
  • apps/ios/ADE/Views/Work/WorkRootScreen+Actions.swift
  • apps/ios/ADE/Views/Work/WorkRootScreen.swift
  • apps/ios/ADETests/ADETests.swift

Comment thread apps/ios/ADE/Views/PRs/PrDetailActivityTab.swift
Comment thread apps/ios/ADE/Views/PRs/PrDetailOverviewTab.swift
arul28 and others added 2 commits July 4, 2026 15:36
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…and gate

- reviewerEntries: a requested reviewer with a submitted review now shows
  approved/changes/commented instead of being masked as pending (Greptile P1,
  CodeRabbit); latest review per reviewer wins
- PrTimelineCommentCard: 'Show more' now appears for any body that could
  exceed the 10-line clamp (>280 chars or >=10 newlines) (CodeRabbit)

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

arul28 commented Jul 4, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 6c09e7307b

ℹ️ 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".

.padding(.leading, 2)
}
}
statusLine(icon: "exclamationmark.octagon.fill", tint: ADEColor.danger, title: "Merging is blocked")

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Keep non-checklist merge blockers visible

When prComputeMergeGate returns red because of reviewThreadsUnresolved > 0 or capabilities.mergeBlockedReason, the new rail drops model.gate.subline and removed the previous model.blockers list, while PrMergeChecklist.build has no row for unresolved threads or arbitrary blocked reasons. In that scenario the Overview rail shows only “Merging is blocked” plus passing checklist rows, so users cannot tell why the merge button is disabled.

Useful? React with 👍 / 👎.

laneId: laneId.isEmpty ? nil : laneId
)
} else {
syncService.requestedPrNavigation = PrNavigationRequest(prNumber: tag.githubPrNumber)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Preserve repo identity for GitHub-only PR navigation

When the row’s PR tag is GitHub-only (tag.prId == nil, the branch-matched-but-unmapped case), this request carries only the PR number. prNavigationTarget resolves number-only requests by taking the first matching PR number across the repo items, so in a multi-repo project where two repos both have, for example, PR #12, this context-menu action can open or link the wrong PR instead of the PR represented by the row’s tag.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

Verified against the code and declining this one: the mobile GitHub snapshot is single-repo (GitHubPrSnapshot.repo + repoPullRequests, filtered to scope == "repo" for lane tags). The row's by-branch LanePrTag and prNavigationTarget's number-only match both resolve within that same repo-scoped list, so a cross-repo PR-number collision can't arise from this path. This also mirrors the pre-existing chat-header openLaneOpenPr fallback.

Unresolved review threads and host mergeBlockedReason have no checklist row,
so a red rail could read 'Merging is blocked' over all-passing rows (Codex P2).
The gate subline now renders under the red/amber status line.

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

arul28 commented Jul 4, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bf2d0fd2bc

ℹ️ 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".

}

// Inline merge rail with the requirement checklist (desktop merge rail).
PrOverviewMergeRail(model: overviewMergeRailModel, checklist: mergeChecklistItems)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Gate merge action on failed checklist rows

When a protected PR reports status.reviewDecision == .reviewRequired/requiredApprovals but has no currently requested reviewers, mergeChecklistItems contains a failing review requirement while overviewMergeRailModel.canMerge can still be true because it only uses the older requested-reviewer count via mergeGateInfo. This new rail passes the failed checklist alongside that model, and PrOverviewMergeRail disables its primary merge button only from model.canMerge, so the mobile detail view can present the merge sheet even though the displayed checklist says review is still required. Derive canMerge from the same structured merge/checklist state, or disable when any checklist row is .fail.

Useful? React with 👍 / 👎.

Gate green is derived from requestedReviewers counts, which read 0 when
reviewDecision is reviewRequired with nobody currently requested — the rail
could enable merge under a visible failing checklist row (Codex P1). Green
enablement (rail + sticky bar) now also requires zero failing rows; the
blocked-attempt/bypass affordance is unchanged.

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

arul28 commented Jul 4, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@cursor

cursor Bot commented Jul 4, 2026

Copy link
Copy Markdown
Contributor

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

pullRequest: rowPrTagsByLaneId[session.laneId],

P2 Badge Resolve the lane before looking up a row PR tag

When a session's stored laneId is missing or stale but its lane name/branch still resolves to a real lane, this direct lookup returns nil, so the new Open in PRs tab context-menu item is omitted even though goToLane/openPullRequest already handle that scenario through resolvedWorkNavigationLaneId(for:lanes:). Use the resolved lane id for this PR-tag lookup as well (and for the child-row lookup below) so legacy/branch-named sessions with linked PRs get the shortcut.


Button(action: model.onChangeMethod) {

P2 Badge Disable the merge-method picker when merge is blocked

The primary merge button is disabled when model.canMerge is false or a PR action is busy, but this adjacent method button still opens the merge sheet; that sheet's footer calls onMerge unconditionally. In draft/review-required/check-failing or busy states, users can therefore dispatch prs.land through the chevron even though the rail shows merge as unavailable. Gate this button with the same model.canMerge && !model.isBusy condition or disable the sheet's merge action.

ℹ️ 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".

…vron

- Work rows with a stale laneId now resolve their LanePrTag through the same
  name/branch fallback that navigation uses, so legacy sessions keep the
  'Open in PRs tab' shortcut (Codex P2)
- The merge-method chevron shares the primary button's canMerge/busy gate —
  the method sheet's footer executes the merge (Codex P2)

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

arul28 commented Jul 4, 2026

Copy link
Copy Markdown
Owner Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. What shall we delve into next?

Reviewed commit: 371d528878

ℹ️ 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".

@arul28 arul28 merged commit 5a6b823 into main Jul 4, 2026
29 checks passed
@arul28 arul28 deleted the ade/ok-prs-tab-mobile-app-97244fb9 branch July 4, 2026 23:25
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