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>.
<div> (was a <button onClick={onOpen}> wrapping the whole card). The hover-lift / hover-border styling that implied "click me" is gone from the card.<button type="button" onClick={onOpen}> with its own hover state. It carries the ↗ external-link icon (moved off the card's top-right corner) since it opens the terminal in a new tab.data-testid="pos-register-{id}" still marks the card container (card-discovery selectors keep working) and pos-register-cta-{id} still marks the CTA. onClick={onOpen} appears exactly once in the source — on the CTA button.r1-2-landing, r1-3…r1-11, nix-os-69-1, r1-3-1-picker) now clicks pos-register-cta-{id} instead. Only r1-2-landing is in the regression sweep — the rest are repointed so the wider suite stays green.✓ 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.
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