|
| 1 | +# Synthesis: Mobile Feedback Triage and Phase Sequence |
| 2 | + |
| 3 | +Date: 2026-08-12 |
| 4 | +Status: Phase 1B accepted; Phase 1C scoped for implementation review |
| 5 | +Source dossier: [`SPIKE-mobile-web-compatibility-20260812.md`](./SPIKE-mobile-web-compatibility-20260812.md) |
| 6 | +Foundation spec: [`mobile-platform-foundation-phase1-20260812.md`](../specs/mobile-platform-foundation-phase1-20260812.md) |
| 7 | + |
| 8 | +## Decision |
| 9 | + |
| 10 | +The accumulated physical-device review is sufficient. Do not ask the reviewer |
| 11 | +to repeat the Phase 1B composer checklist. The Safari stage failure was the |
| 12 | +blocking defect, and the final iPhone pass confirmed its correction. |
| 13 | + |
| 14 | +Work now proceeds in this order: |
| 15 | + |
| 16 | +1. **Phase 1C — shared touch and dialog contract.** Finish the small, |
| 17 | + capability-gated foundation without rearranging either product surface. |
| 18 | +2. **Phase 2A — mobile Code Review shell and arrival.** Replace the minified |
| 19 | + desktop composition with one primary phone surface and transient secondary |
| 20 | + navigation/context. |
| 21 | +3. **Phase 2B — mobile Plan shell and navigation.** Reduce persistent Plan |
| 22 | + chrome, restore the blocked folder/multi-file path, and stabilize edit and |
| 23 | + completion controls. |
| 24 | +4. **Phase 3 — touch selection and annotation semantics.** Prototype and |
| 25 | + validate multi-block Plan selection and multi-line Pierre selection as |
| 26 | + dedicated interactions. |
| 27 | + |
| 28 | +This order is not a ranking of product importance alone. It separates shared |
| 29 | +mechanical safety from information architecture, then separates layout from |
| 30 | +the harder selection semantics. That keeps every review gate understandable |
| 31 | +and prevents a phone workaround from mutating desktop preferences. |
| 32 | + |
| 33 | +## Closed or already moving in parallel |
| 34 | + |
| 35 | +| Area | Disposition | Evidence / constraint | |
| 36 | +|---|---|---| |
| 37 | +| Tailscale installation and HTTPS Serve | Working | Physical iPhone sessions opened through the tailnet and returned real Plan and Review feedback. | |
| 38 | +| Mobile Safari page stage | Closed in 1B | Body scrolling and non-sticky compact Plan chrome now allow both Safari control regions to collapse; the user passed the result. | |
| 39 | +| Primary comment composition | Closed in 1B | 16 px authoring text, deliberate touch focus, visible-viewport bounds, draft recovery, and explicit Save are implemented. | |
| 40 | +| Release / first-use noise | Parallel stack already implemented | The release promo became a compact Grid/Clean decision; Vim, Ask AI, and analysis-layer startup announcements no longer mount. Features remain in Settings and their real surfaces. | |
| 41 | +| New-user Code Review panel default | Merged independently | `origin/main` includes the Tree-first change. Mobile presentation must not overwrite that desktop-first product default. | |
| 42 | +| Guided Review intro | Preserve | The reviewer found the initial Guide explanation useful. Guide is a strong candidate for mobile comprehension, not noise to remove. | |
| 43 | +| Edit Code to Suggest | Preserve | The tested dialog was acceptable; suggestion editing is not pulled into the next layout phase. | |
| 44 | +| All Files | Preserve and learn from | It was the cleanest Code Review presentation observed on the phone. | |
| 45 | + |
| 46 | +## Triage matrix |
| 47 | + |
| 48 | +`Now` means the next implementation checkpoint. `Next` is the first structural |
| 49 | +surface phase. `Later` means deliberately deferred, not forgotten. |
| 50 | + |
| 51 | +| Owner | Findings | Severity | Why grouped here | Disposition | |
| 52 | +|---|---|---:|---|---| |
| 53 | +| Closed in Phase 1B | MOB-010, MOB-031 | P1 | Safari page-stage and primary composer defects passed the physical iPhone gate. They remain regression contracts, not open design work. | **Closed / protect** | |
| 54 | +| Phase 1C: shared touch/dialog | MOB-005, shared portion of MOB-012, shared dialog portion of MOB-014/MOB-030/MOB-032 | P1 | Undersized shared controls and unbounded shared dialogs are mechanical platform defects. Fixing the primitives first gives later layouts safe components without deciding their IA. | **Now** | |
| 55 | +| Phase 2A: Review shell/arrival | MOB-002, MOB-003, MOB-017, MOB-020, MOB-021, MOB-030, MOB-032, MOB-033 | P1 | These are one failure: desktop workspace regions remain simultaneous on a phone. Fixing panels separately would preserve the wrong composition. | **Next** | |
| 56 | +| Phase 2B: Plan shell/navigation | MOB-001, MOB-004, MOB-013, MOB-015, MOB-016, MOB-018, MOB-019, MOB-028 | P0/P1 | Plan reading now works, but navigation, editing completion, auxiliary arrival state, and persistent annotation chrome still fail or dominate. Folder navigation is the only current P0. | **After 2A** | |
| 57 | +| Phase 3A: Plan touch selection | MOB-008, MOB-009, MOB-029 | P1 | Pinpoint proves tap targeting can work, but ordinary native selection conflicts with Safari and multi-block intent has no interaction model. This needs prototypes, not CSS. | **Later, prototype first** | |
| 58 | +| Phase 3B: Review touch selection | MOB-006, MOB-007 | P1 | Single-line selection works; extending a range does not. Pierre rendering and line mapping are regression-sensitive and need their own guarded physical-device gate. | **Later, Pierre-guarded** | |
| 59 | +| Surface hardening | MOB-011 secondary inputs, MOB-014 Settings, MOB-022 HTML, MOB-024 diagnostics | P2 | These are real but should adopt the shared contract within their owning surfaces rather than expanding the first structural phase. | **Later** | |
| 60 | +| Delivery/performance/trust | MOB-023, MOB-025, MOB-026, MOB-027 | P1/P2 | Payload, tailnet trust, hook handoff, and reconnect behavior are cross-cutting delivery work, not layout work. They can be researched in parallel without changing current mobile IA. | **Independent track** | |
| 61 | + |
| 62 | +## Immediate next implementation: Phase 1C |
| 63 | + |
| 64 | +### Outcome |
| 65 | + |
| 66 | +Shared buttons and shared dialog close controls are physically safe to touch, |
| 67 | +shared dialogs remain reachable inside the visible Safari viewport, and fine- |
| 68 | +pointer desktop geometry is unchanged. |
| 69 | + |
| 70 | +### In scope |
| 71 | + |
| 72 | +- Introduce the shared `--pn-touch-target` token and |
| 73 | + `data-pn-touch-target` marker. |
| 74 | +- Apply coarse-pointer 44×44 minimum hit regions to the two incumbent shared |
| 75 | + button primitives and the shared dialog close control. |
| 76 | +- Bound the shared dialog primitive to the visible viewport and safe-area |
| 77 | + contract established in 1A/1B. |
| 78 | +- Gate hover-only effects to hover-capable fine pointers in touched primitives. |
| 79 | +- Provide immediate, restrained press feedback and a reduced-motion path. |
| 80 | +- Convert only representative shared dialogs needed to prove the contract. |
| 81 | +- Verify iPhone and iPad geometry, including hybrid iPad touch plus pointer. |
| 82 | + |
| 83 | +### Explicitly out of scope |
| 84 | + |
| 85 | +- No mass expansion of every hand-authored Plan or Review toolbar control. |
| 86 | +- No Plan toolstrip redesign, bottom action bar, or mobile navigation. |
| 87 | +- No Code Review panel, Dockview, header, Guide, or diff composition change. |
| 88 | +- No Split/Unified preference write based on viewport. |
| 89 | +- No Pierre, `DiffViewer`, line-selection, or suggestion-editing changes. |
| 90 | +- No new sheet system or visual language. |
| 91 | + |
| 92 | +### Implementation seam |
| 93 | + |
| 94 | +The expected source boundary remains: |
| 95 | + |
| 96 | +- `packages/ui/theme.css` |
| 97 | +- `packages/ui/components/ui/button.tsx` |
| 98 | +- `packages/ui/components/core/button.tsx` |
| 99 | +- `packages/ui/components/ui/dialog.tsx` |
| 100 | +- focused component and geometry tests |
| 101 | + |
| 102 | +If a correct 44 px target breaks a dense hand-authored row, record it for its |
| 103 | +surface phase rather than introducing an undocumented compact exception. |
| 104 | + |
| 105 | +### Gate for the next joint review |
| 106 | + |
| 107 | +The checkpoint is ready for review when: |
| 108 | + |
| 109 | +- representative button and dialog-close hit boxes measure at least 44×44 on |
| 110 | + a coarse pointer and do not overlap; |
| 111 | +- a shared dialog at 320×568, 390×844, and keyboard-reduced height keeps its |
| 112 | + close control and primary action reachable; |
| 113 | +- press feedback appears on touch-down without leaving sticky hover styling; |
| 114 | +- reduced-motion and hardware-keyboard dismissal remain functional; |
| 115 | +- iPad portrait/landscape and a touch-plus-trackpad path remain usable; |
| 116 | +- desktop screenshots and computed geometry show no layout change under a |
| 117 | + fine pointer; |
| 118 | +- production Plan and Review builds, focused tests, and typecheck pass. |
| 119 | + |
| 120 | +The reviewer should expect a short physical-device check of representative |
| 121 | +controls and one shared dialog—not another end-to-end Plan or Code Review |
| 122 | +critique. |
| 123 | + |
| 124 | +## Phase 2A preview: mobile Code Review shell and arrival |
| 125 | + |
| 126 | +Phase 2A is the first structural redesign. Its job is to make the review |
| 127 | +artifact, not the desktop workspace, own the phone viewport. |
| 128 | + |
| 129 | +### Fixed principles |
| 130 | + |
| 131 | +- One primary full-width surface at a time on phone. |
| 132 | +- Tree remains the best new-user desktop default and is never overwritten by a |
| 133 | + mobile presentation decision. |
| 134 | +- File navigation, PR context, annotations, AI, and agents become transient |
| 135 | + phone surfaces instead of flex siblings that squeeze the diff. |
| 136 | +- Empty PR sections do not render structure merely to announce absence. |
| 137 | +- The phone header exposes location, navigation, and one contextual action; |
| 138 | + desktop-only controls move behind progressive disclosure. |
| 139 | +- A phone-friendly Unified presentation may be a session/device override, but |
| 140 | + it must not rewrite the user's desktop Split preference. |
| 141 | +- Guide and All Files are the two strongest observed mobile starting points. |
| 142 | + The entry decision should be made through working prototypes and physical |
| 143 | + review, not assumed from responsive screenshots. |
| 144 | + |
| 145 | +### Phase 2A review gate |
| 146 | + |
| 147 | +Before implementation is accepted, the reviewer will compare at least two |
| 148 | +working phone compositions using the same GitHub PR: |
| 149 | + |
| 150 | +1. artifact-first All Files / Unified arrival; |
| 151 | +2. Guide-first arrival with a direct route to the raw diff. |
| 152 | + |
| 153 | +The chosen composition must preserve desktop behavior, make file/PR context |
| 154 | +reachable without narrowing the artifact, keep the destination decision fully |
| 155 | +visible, and support a complete single-line comment and approve/send journey. |
| 156 | +Multi-line touch selection is explicitly evaluated in Phase 3, not used as a |
| 157 | +gate for the shell. |
| 158 | + |
| 159 | +## Why selection is not bundled into layout |
| 160 | + |
| 161 | +The user's Plan feedback established that Pinpoint is currently the only |
| 162 | +reliable touch path. A tap opens its contextual toolbar; Comment then opens the |
| 163 | +composer. Ordinary Select taps do nothing, native drag selection invokes the |
| 164 | +iOS Copy / Find Selection menu, and neither Plan nor Code Review offers a |
| 165 | +credible way to accumulate several logical targets. |
| 166 | + |
| 167 | +This is not a hit-box bug. It is an unresolved gesture and state model. The |
| 168 | +selection phase must prototype explicit accumulation, visible range state, |
| 169 | +cancel/undo, scroll coexistence, and assistive-technology behavior. Review |
| 170 | +selection must additionally preserve Pierre's line mapping and desktop mouse |
| 171 | +range selection. Treating it as incidental work inside a layout PR would make |
| 172 | +both changes harder to review and easier to regress. |
| 173 | + |
| 174 | +## Desktop preservation contract |
| 175 | + |
| 176 | +Every phase keeps these invariants: |
| 177 | + |
| 178 | +- mobile presentation state is ephemeral or device/session-scoped; |
| 179 | +- desktop Tree/Split/panel preferences are never rewritten by phone width; |
| 180 | +- fine-pointer geometry and keyboard shortcuts remain incumbent unless the |
| 181 | + phase explicitly names a desktop defect; |
| 182 | +- shared changes are capability-gated and tested in a strict |
| 183 | + `@plannotator/ui` consumer; |
| 184 | +- no existing working surface is deleted until physical and desktop parity is |
| 185 | + confirmed. |
0 commit comments