feat(webapp): [mobile] round 5 — confirmation pass (9/9/9/9/8), goal complete

Rounds 4 and 5 both scored every category >=8 with zero high-severity
findings — the exit bar (two consecutive passing designer rounds) is
met. Post-exit cleanup: restore id=search-btn dropped in the React port
so the existing mobile rule hiding the ⌘K badge matches again. Two
remaining observations recorded as won't-fix in the spec with reasons.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01P5cxPQdSGJnjXCYY9GeWXt
This commit is contained in:
Snow Lee
2026-07-13 21:49:40 -07:00
co-authored by Claude Fable 5
parent 9ea07281f8
commit e26a15d4b4
4 changed files with 24 additions and 4 deletions
+21 -1
View File
@@ -83,10 +83,30 @@ spot-checked each round — no regressions introduced by mobile fixes.
| 2 (after round-1 fixes) | 9 | 8 | 8 | 9 | 8 | 0 (5 low cosmetics, fixed before round 3) |
| 3 (after low-fixes) | 6 | 6 | 7 | 9 | 6 | 1 (REGRESSION: URL rows collapsed by the wrap fix — streak reset, fixed for round 4) |
| 4 (after round-3 fixes) | 9 | 9 | 8 | 9 | 8 | 0 (4 lows: chips/tabs/modal-input heights + share row at 360, fixed before round 5) |
| 5 (confirmation) | 9 | 9 | 9 | 9 | 8 | 0 — EXIT BAR MET (rounds 4+5 consecutive passes) |
## Won't-fix / disputed
(none yet)
- **Palette footer shows keyboard hints ("↑↓ · ↵ · esc") on touch** (round-5
low #1, second half): cosmetic copy noise; tap interaction fully works.
Changing the hint per-viewport adds conditional copy for no functional
gain. (The ⌘K badge half of the finding was a real bug — the React port
dropped `id="search-btn"`, so the existing hide rule never matched; fixed
post-exit, e2e green.)
- **Share dialog's Done sits alone on its last row at ≤430** (round-5 low
#2): reviewer marked it "intended destructive-isolation behavior…
subjective/taste — no action needed".
- **Server auth pages use 44px controls via their own inline CSS**
(`authlocal.go`), the one fix outside `frontend/` — the login page is a
spec surface but is server-rendered, unreachable from the frontend
stylesheet.
## Status
GOAL COMPLETE (2026-07-14): rounds 4 and 5 both scored every category ≥8
with zero high-severity findings. Five designer rounds total; round 3
caught and reset on a regression the loop itself introduced — the
independent-scoring design worked as intended.
## Status / blockers
@@ -349,7 +349,7 @@ export default function Browser(props: {
meta={uploadStatus || meta}
actions={
<>
<button className="btn ghost" title="Search (⌘K)" onClick={() => setPaletteOpen(true)}>
<button id="search-btn" className="btn ghost" title="Search (⌘K)" onClick={() => setPaletteOpen(true)}>
<Icon name="search" /> <span className="lbl">Search</span> <kbd>K</kbd>
</button>
{canShare && (
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>BearDrive</title>
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>&#128059;</text></svg>">
<script type="module" crossorigin src="/assets/index-HiDpouLO.js"></script>
<script type="module" crossorigin src="/assets/index-DJ881b7x.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-NuzuPESr.css">
</head>
<body>