Skip to content

feat(app): refine mobile diff review and wrapping preferences - #46390

Merged
Brendonovich merged 13 commits into
v2from
mobile-review-polish
Aug 31, 2026
Merged

Brendonovich merged 13 commits into
v2from
mobile-review-polish

Conversation

@Brendonovich

@Brendonovich Brendonovich commented Aug 31, 2026 •

Copy link
Copy Markdown
Member

Summary

  • Make mobile Changes diffs edge-to-edge and square, with expanded-only sticky per-file summaries and a centered total changes count.
  • Add Open file to the expanded summary and select its requested Files tab immediately, without waiting for loading or allowing delayed responses to steal selection.
  • Show mobile diff line numbers and put the persisted Wrap lines preference in General settings, supporting wrapping or horizontal scrolling.
  • Match the Changes header divider to mobile navigation and remove touch hover/pressed feedback from accordion headers.

Stack

  1. feat(app): refine mobile shell home and settings #46388: mobile shell, Home, and settings (base v2).
  2. feat(app): add mobile session panels and detail drawers #46389: mobile session views, Files, Status, and details (base feat(app): refine mobile shell home and settings #46388).
  3. feat(app): refine mobile diff review and wrapping preferences #46390: mobile Changes summaries, Open file, and wrapping preferences (base feat(app): add mobile session panels and detail drawers #46389).

Merge in that order; each PR's diff and before/after evidence compare against its immediate base. Independent #46391 (touch controls/PWA) can land separately.

Sessions

  • ses_fa8e8d9a1ffedn46jvXHQkVsgx: diff summaries/layout, touch header states, immediate file selection.
  • ses_fa8c9b9c6ffeULe3oLIORr07X2: summary Open file, mobile line numbers and wrapping.
  • ses_fa8b1e744ffe1OzY51WvOANIwC: child of the preceding session; move Wrap lines to General preferences and update regression coverage.
  • ses_fa8b34988ffdpVySqqaO61cULj: final Changes header divider.

Before / After

Mobile review polish compared with its actual stacked panel base, plus desktop shared-component coverage.

Surface Before After
Mobile Changes: edge-to-edge square list, header divider and centered totals Before: Mobile Changes: edge-to-edge square list, header divider and centered totals After: Mobile Changes: edge-to-edge square list, header divider and centered totals
Added file: summary counts, Open file action and line numbers Before: Added file: summary counts, Open file action and line numbers After: Added file: summary counts, Open file action and line numbers
Deleted file: Removed summary and deletion counts Before: Deleted file: Removed summary and deletion counts After: Deleted file: Removed summary and deletion counts
Modified file: wrapped realistic long line and line-number gutter Before: Modified file: wrapped realistic long line and line-number gutter After: Modified file: wrapped realistic long line and line-number gutter
Scrolled review: sticky file header and new sticky summary (scrollTop 80) Before: Scrolled review: sticky file header and new sticky summary (scrollTop 80) After: Scrolled review: sticky file header and new sticky summary (scrollTop 80)
Forced RTL: expanded summary and Open file action at logical end Before: Forced RTL: expanded summary and Open file action at logical end After: Forced RTL: expanded summary and Open file action at logical end
Touch-held accordion: touch hover behavior, without CSS overrides Before: Touch-held accordion: touch hover behavior, without CSS overrides After: Touch-held accordion: touch hover behavior, without CSS overrides
Corrected full-width General preferences: Wrap lines enabled (absent on base) Before: Corrected full-width General preferences: Wrap lines enabled (absent on base) After: Corrected full-width General preferences: Wrap lines enabled (absent on base)
Corrected full-width General preferences: Wrap lines disabled (absent on base) Before: Corrected full-width General preferences: Wrap lines disabled (absent on base) After: Corrected full-width General preferences: Wrap lines disabled (absent on base)
Horizontal diff mode after preference toggle (base honestly remains wrapped) Before: Horizontal diff mode after preference toggle (base honestly remains wrapped) After: Horizontal diff mode after preference toggle (base honestly remains wrapped)
Horizontal code panned 180px with fixed line numbers (base remains wrapped) Before: Horizontal code panned 180px with fixed line numbers (base remains wrapped) After: Horizontal code panned 180px with fixed line numbers (base remains wrapped)
Open action outcome: base stays on Changes; head selects Files and checkout.ts Before: Open action outcome: base stays on Changes; head selects Files and checkout.ts After: Open action outcome: base stays on Changes; head selects Files and checkout.ts
Desktop real shared SessionReview story: centered totals and Collapse all sizing Before: Desktop real shared SessionReview story: centered totals and Collapse all sizing After: Desktop real shared SessionReview story: centered totals and Collapse all sizing
Desktop real shared SessionReview accordion hover Before: Desktop real shared SessionReview accordion hover After: Desktop real shared SessionReview accordion hover
Desktop real shared SessionReview pointer-pressed background Before: Desktop real shared SessionReview pointer-pressed background After: Desktop real shared SessionReview pointer-pressed background
  • Mobile Chromium touch-emulated viewport 390x844, deviceScaleFactor 1; desktop 1280x900. Light theme, English locale, identical deterministic API fixture within each pair. No source/CSS imitation or fixed-delay synchronization.
  • Mobile route /server/<base64 http://127.0.0.1:4490 or :4491>/session/ses_smoke_target. Production dist served on isolated base4490/head4491; no app build or benchmark performed by capture agent.
  • Original diff evidence captured against cd6e351 vs 21cc894. Corrected settings and final readiness refresh against stacked base325ba2150e/head19af7f56a4, including inherited settings-layout fix4e0db6a875. Readiness refresh replaces both collapsed images, both added-file images, and base modified/sticky images. Other correct evidence preserved.
  • Base has no Wrap lines preference. Before images in preference-off and horizontal-mode pairs deliberately retain actual base UI rather than simulate the missing feature.
  • Old nested Open icon opens checkout.ts but leaves Changes selected. Separate 12b-manual-files-navigation-before.png verifies that manual Files navigation reveals the opened file. New summary button selects Files automatically; both exact file identities/content asserted.
  • Forced RTL uses document.dir=rtl with English copy, not a translated locale; code and paths stay LTR. Expanded action placement is visually inspected.
  • Touch-held screenshot uses real CDP touchStart/touchCancel. Chromium did not expose :active for that touch event, so it is not claimed as a verified CSS active-state capture. Desktop mouse-held :active is independently asserted.
  • Desktop app uses separate ReviewPanel. Desktop evidence instead uses existing production SessionReview Storybook /iframe.html?id=components-session-review--unified&viewMode=story&globals=theme:light;direction:ltr;locale:en on isolated4492/4493. Story has constant controlled open list and no onOpenChange, so desktop collapsed story is unavailable without editing source; expanded, real hover and pressed states are captured.
  • All 15 raw screenshot pairs visually inspected with rendered syntax highlighting and file icons. Final refresh waits for actual shadow-DOM span styles referencing --syntax-keyword and --syntax-string plus at least three computed syntax-token colors (excluding line-number colors), and nonempty SVG use.getBBox() geometry proving external file-icon sprites are instantiated. No loading-state caveat remains for paired screenshots.
  • Head raw recording review-flow-head.webm is 390x844 VP8, 1.84 seconds. No presentation sleeps; some intermediate preferences states are too fast or omitted by recorder sampling. Prefer clearly labeled review-flow-milestones-head.mp4, a 12.04-second screenshot milestone walkthrough (not a realtime recording) with asserted expansion, corrected General Wrap lines on/off, horizontal code pan, and automatic Files selection. No fabricated transitions.
  • No source edits, commits, pushes, uploads or PR operations performed. Existing untracked Storybook generated declarations left untouched.

Recording

Asserted screenshot milestone walkthrough, NOT a realtime recording: expand a mobile diff, enable/disable Wrap lines in corrected General preferences, pan horizontal code, then automatically select Files and checkout.ts. Light theme, 390x844, 12.04 seconds; no fabricated transitions.

review-flow-milestones-head.mp4

Validation

  • Updated shared mobile session readiness checks to verify titlebar identity rather than the intentionally removed heading. Eighteen affected notice/history/projection regressions and the mobile line-comment regression pass after updating the selected Changes expectation.
  • A full combined local E2E run was not green. After fixing mobile readiness/selection expectations, all ten remaining failures reproduced identically on clean v2: macOS keyboard assumptions in large-paste caret movement, MCP dialog shortcuts, and Shift+F10 context-menu tests. Baseline run: 10 failed, 14 passed; alternative native key probes passed. These unrelated harness fixes are excluded. Do not treat focused passes as a full-suite pass.
  • Follow-up screenshot verification found and fixed a production settings CSS-cascade issue; all 16 focused stack regressions now pass, including full-width settings geometry and updated drawer/sidebar expectations.
  • All four PR groups merge cleanly in an isolated integration worktree; the combined production build passes all eight mobile browser regressions and app typechecking.
  • App, session-ui, and ui package typechecks pass.
  • Three production-build mobile regressions pass: LTR/RTL summaries, line numbers, wrapping persistence, Open file, and delayed-loading file selection.
  • All 620 app unit tests and all 166 session-ui unit tests pass.
  • Pre-push full workspace typecheck passes all 33 tasks, with hooks enabled.
  • Production home-to-session navigation benchmark passes before and after: stable content observation 143.1ms on the base and 168.5ms on the head. These are single machine-local samples, not statistical performance conclusions; unrelated capture activity may affect timings.
  • E2E typecheck has one pre-existing error in new-session-workspace-pending.spec.ts:38 (dir on HTMLElement | SVGElement); reproduced on clean v2.
  • Shared review header totals/Expand all sizing affect shared desktop consumers too; accordion pressed-background removal also affects desktop.
  • Actual iOS Safari touch behavior still requires device verification.
  • Original user worktree/staging and existing app/server processes were not modified or restarted. Merged CORS/icons and generated declaration artifacts are excluded.

OpenCode-Session: ses_fa9929a54ffeG0AAK1g2BwuFHj
OpenCode-Session: ses_fa96329bbffdPCp54xCdIn18M0
OpenCode-Session: ses_fa94e625fffdatsz7sy2hC4tMI
OpenCode-Session: ses_fa93a9c41ffdv86XF9fhdYPok9
OpenCode-Session: ses_fa9375bf2ffd1qwP3qNWRyj1dW
OpenCode-Session: ses_fa92bcf95ffefmn2bqtEY6z23J
OpenCode-Session: ses_fa9375bf2ffd1qwP3qNWRyj1dW
OpenCode-Session: ses_fa8e8d9a1ffedn46jvXHQkVsgx
OpenCode-Session: ses_fa8d40a0bffelgYWDAaU1XvYj8
OpenCode-Session: ses_fa8b885a0ffdKRQ0V2AMcGEu9a
OpenCode-Session: ses_fa8c9b9c6ffeULe3oLIORr07X2
OpenCode-Session: ses_fa8b34988ffdpVySqqaO61cULj
OpenCode-Session: ses_fa8e8d9a1ffedn46jvXHQkVsgx
OpenCode-Session: ses_fa8c9b9c6ffeULe3oLIORr07X2
OpenCode-Session: ses_fa8b1e744ffe1OzY51WvOANIwC
OpenCode-Session: ses_fa8b34988ffdpVySqqaO61cULj
OpenCode-Session: ses_fa91badecffeXpbAgW57aYbHif
Add isolated fixture coverage for project selection, drawer navigation, and settings menu dismissal. The full-width settings assertion currently reproduces the committed mobile CSS load-order regression and requires the production selector fix before merge.
Fix the production CSS cascade discovered during screenshot verification and update legacy tab/sidebar regressions for the mobile drawer.

OpenCode-Session: ses_fa91badecffeXpbAgW57aYbHif
OpenCode-Session: ses_fa91badecffeXpbAgW57aYbHif
OpenCode-Session: ses_fa91badecffeXpbAgW57aYbHif
Base automatically changed from mobile-session-panels to v2 August 31, 2026 14:04
@Brendonovich

Copy link
Copy Markdown
Member Author

Synced with current v2 in 628c32d using a merge (no history rewrite). Preserved the merged 16px mobile timeline/Usage spacing and top-only session view tabs, while retaining this PR’s full-width diff review, expanded change summaries, Open file behavior, and wrapping preference.

Validation: 8 focused production-build mobile browser regressions, 4 virtualizer component tests, and all 620 app unit tests pass. Full pre-push workspace typecheck passes all 33 tasks with hooks enabled. The ACP permission-concurrency test responsible for both previous CI unit failures passes locally; fresh CI still needs to confirm Linux/Windows behavior. Production streaming benchmark completed in 1011ms before and 979ms after, with zero bottom drift or remounts (single local samples, not a statistical performance claim).

The remaining diff against v2 is now limited to 13 mobile-review-related files.

@Brendonovich
Brendonovich merged commit 6b1ed39 into v2 Aug 31, 2026
8 checks passed
@Brendonovich
Brendonovich deleted the mobile-review-polish branch August 31, 2026 14:32
jinhuang712 pushed a commit to jinhuang712/opencode that referenced this pull request Sep 26, 2026
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