← All tests

POS landing — only the CTA is clickable (local)

2026-05-14 Gate 1 local. Follow-up on the POS landing cards: per user feedback, clicking anywhere on a register card to open the terminal felt accidental — only the explicit CTA button (Continue Selling / Open Register) should open it. RegisterCard changes from a whole-card <button onClick> to a plain <div> container, with the onOpen handler moved onto the CTA <button>.

4/4 local test PASS. nix-cafe typechecks clean. No migration. 1 Cafe file + 12 workspace test files repointed.
BEFORE — whole card is a button ┌──────────────────────────────┐<button onClick> POS-TK 1 ↗ entire card ● OPEN is the click ┌────────┐ ┌────────┐ target │ Opening│ │ Cash │ … └────────┘ └────────┘ [ Continue Selling ] └──────────────────────────────┘ click anywhere → opens terminal
AFTER — only the CTA is a button ┌──────────────────────────────┐ ← plain <div> │ POS-TK 1 │ (not clickable) │ ● OPEN │ │ ┌────────┐ ┌────────┐ │ │ │ Opening│ │ Cash │ … │ │ └────────┘ └────────┘ │ │ [ Continue Selling ↗ ] │ ← <button onClick> └──────────────────────────────┘ only the CTA opens the terminal

Local test — 4/4

✓ PosLanding renders via react-dom/server for all 3 states (no thrown error)
✓ Card container is a plain <div> — NOT a <button> — for every state
✓ CTA (Continue Selling / Open Register) IS a <button> for every state
✓ Open handler lives only on the CTA button — the card-wide onClick is gone

The probe renders <PosLanding> for all 3 register states (open / closed /
none) via react-dom/server, then reads the tag name carrying each testid:
pos-register-{id} must be a <div>, pos-register-cta-{id} must be a
<button>. Plus a source assertion that onClick={onOpen} appears exactly
once. Gate 2 verifies on prod that clicking the card body does nothing and
the CTA still opens the terminal in a new tab.

Files

nix-cafe (1 file, no migration):
  app/(authed)/pos/pos-landing.tsx     RegisterCard: whole-card <button> → <div>;
                                       onOpen moved onto the CTA <button>; ↗ icon
                                       moved off the card corner onto the CTA

workspace test infra (12 files, not committed — workspace root isn't a repo):
  test-r1-2-landing-prod.mjs           card-click → CTA-click (in the regression sweep)
  test-r1-3-lockable-prod.mjs          ┐
  test-r1-3-1-picker-prod.mjs          │
  test-r1-4-drafts-prod.mjs            │
  test-r1-5-sequence-prod.mjs          │ each repointed from clicking the
  test-r1-6-close-shift-prod.mjs       │ card body to clicking the CTA button
  test-r1-7-display-prod.mjs           │
  test-r1-8-cash-helper-prod.mjs       │
  test-r1-10-cash-movements-prod.mjs   │
  test-r1-11-telegram-events-prod.mjs  │
  test-nix-os-69-1-prod.mjs            ┘
  test-pos-section-slice2-local.mjs    stale check name updated (testid still preserved)
  test-pos-card-cta-only-local.mjs     NEW — this Gate 1 test