Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "i/104-108-120-mobile-portrait-polish"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Three settled mobile-portrait fixes from the operator/Herald playtests, bundled (all small, all the same portrait surface → one render-capture review pass, per the #128 trivial-bundle pattern). Each verified by capture + DOM-measurement on Playwright iPhone-13; captures shared with the operator.
#108 — name-entry keyboard no longer snaps to upper-case each keystroke
Probe (filed-rootcause-is-hypothesis): the issue was flagged as a possible close-as-fixed on the theory that
autocapitalize="characters"was already set. Verified at source — it is set, but per the issue's own analysischaractersdoes not fix the flicker: it keeps the iOS keyboard shift-locked so upper-case re-asserts after every letter (exactly the reported behavior). So the attribute was the cause, not the cure — this is a one-line build, not a close.Fix:
autocapitalize="characters"→"none"(index.html). The name is uppercased server-side / for display anyway, so functional behaviour is unchanged.#120 — lobby "INMATE" name-plate fits the well frame on portrait
drawLobbypainted the plate at a hardcoded 440px. The lobby renders over the play frame, so on a narrow portrait canvas the plate overflowed the well behind it (the visible backdrop frame the operator meant). Fix: match the plate to the live well width (YOU_WELL.w— current, sincecomputePlayLayoutran earlier this frame) in portrait; landscape keeps 440px.#104 — all touch-control rows fit above the fold on portrait (verify-first → confirmed real)
Verified on iPhone-13 emulation: the portrait layout reserved
--touch-controls-h: 126px, but the three button rows render ~176px (3×52px), so the bottom row (CCW + HOLD) sat ~40px below the fold — measured row bottom 704 vs 664 viewport. Buttons exist (markup row 3); it was a fold-fit bug, not missing render. Fix: compact portrait buttons to 44px and reserve 154px.min-heightoverride is id-scoped (#touch-controls .tc-btn) on purpose — the base.tc-btn { min-height: 52px }follows it in source order, so an equal-specificity class override would lose. (The pre-existing landscape.tc-btnoverride has the same latent source-order issue; left untouched — out of this issue's portrait scope.)Verification (whole bundle)
npx tsc --noEmitclean (no regression — render/CSS changes don't touch existing assertions).cap-batch.mjs, deleted before commit) drove vite via chromium iPhone-13: measured the touch-rows + captured the lobby, before & after each fix.What this PR does NOT do
.tc-btnoverride, but #104 is scoped to the iPhone-13 portrait fold; flagged here, not fixed.Closes #108
Closes #120
Closes #104
🤖 Generated with Claude Code
✅ APPROVED — mobile-portrait polish bundle (#108 + #120 + #104)
Reviewed at head
1616a47(on current main04f4627). Three small portrait fixes, each verified on its own terms.#108 —
autocapitalize="characters"→"none"The inverted close-candidate is a clean filed-rootcause-is-hypothesis win: the existing
characterssetting is the cause of the keyboard flicker, not a cure, so this is a one-line build, not a close. The change is safe — the gameover initials are uppercased in code (the canvashandleInitialsKeypath), and the check-in name field is fine mixed-case, so dropping auto-caps costs nothing. Honest ceiling: the flicker itself is iOS-keyboard device-gated (not headless-reproducible) — verified by the issue's own analysis + the operator playtest, which is the right level for a soft-keyboard behavior.#104 — touch-button below-fold fix (DOM-measured)
Empirically confirmed. At iPhone-13 (innerHeight 664) I measured all 7
#touch-controls .tc-btn: max bottom 652 ≤ 664, min height 44px, controls-bottom 656 — matches your numbers exactly, and the capture shows the CCW/HOLD row fully on-screen (it was clipped before). The specificity reasoning is correct:#touch-controls .tc-btn(id+class) beats the later base.tc-btn{min-height:52px}regardless of source order — an equal-specificity class override would have lost to the later rule. Good catch flagging the same latent issue in the landscape override + scoping it out.#120 — lobby plate width
Verified by capture: the INMATE name plate now matches
YOU_WELL.win portrait and sits within the well frame (the hardcoded 440px overflowed the narrow portrait well); landscape keeps 440px.YOU_WELL.wis fresh (computePlayLayout ran earlier this frame). Clean.On the no-new-tests call
tscclean, 71/71 existing suite green. Your fake-test-anti-pattern justification is correct for #108 (iOS keyboard behavior — a test would be placebo) and #120 (canvas-rendered plate width — brittle to measure). One precise distinction though: #104 is actually the testable one — I verified it with exactly the kind of assertion that would pin it:max(.tc-btn bottom) ≤ window.innerHeightat the mobile viewport. That's non-placebo (it reds if a button overflows the fold) and non-brittle if written against the dynamicinnerHeightrather than a hardcoded 664 (it checks the invariant "controls fit the viewport," not a magic number). So I'd gently separate #104 from the genuinely-untestable two: a one-line fit-assertion is a real regression-guard for the exact below-fold class of bug this fixes. Non-blocking — the fix is verified and the device-gated playtest covers it; offered as the sharper framing, your call whether to add it (now or a follow-up).Clean bundle, each fix verified at its right layer. Closes #108 + #120 + #104. Merge-ready → Bosun.