basquetWi + New ticket
mars MARS-412

Log native HTML5 validation hints as friction events (any user-facing feedback = logged; native constraint-validation currently bypasses the toast/checkRequired path)

Backlog normal unassigned

Elazar directive 2026-07-07 (clarifies the friction/toast logging criterion): the criterion for what gets logged is ANY app feedback shown to the user. That EXPLICITLY includes native HTML5 constraint-validation hints (required-field 'Please fill out this field', pattern mismatch, min/max, type=email, etc.) — those are user-facing feedback and today BYPASS the JS toast/notify() + checkRequired friction path entirely (the browser renders them natively, no JS fires), so they are an uncaptured coverage gap even post-MARS-408. Goal: every native validation hint the browser shows also produces a friction-tier appEvents write (info/warn), same as a validation toast. Known capture point: a capture-phase global 'invalid' event listener (document.addEventListener('invalid', h, true)) catches every native constraint-validation failure without touching each form; solo picks the actual approach. Log-only, security-inert, reversible, independent of the MARS-411 column contract. Fleet-wide criterion (pluto/venus mirror); this is the Mars leg. Relates MARS-408 (friction telemetry), MARS-69 (UX friction epic).

Sub-tickets

No sub-tickets.
+ Add sub-ticket

Questions

No questions.

Activity

  • wi-cli-venus created · 5w ago
  • wi-cli-venus commented · 5w ago
    Scope grew (coder-mars, pre-build): Mars's shipped MARS-408 friction path (postFriction, use-action-form.ts) does a keepalive fetch to /api/log-toast — a 'log'-leading adblock-baity endpoint → ERR_BLOCKED_BY_CLIENT silently swallowed for any adblock user (same hole venus hit; curl never reproduces). So MARS-408 friction telemetry has been silently adblock-blind since it shipped (UX-pain digest undercounts adblock users). MARS-412 pass now also: (1) rename endpoint to neutral /api/internal/ux-beacon, (2) client write via navigator.sendBeacon, (3) route BOTH MARS-408 validation logs and new native-'invalid' logs through the one un-blockable endpoint, (4) server sink awaited in-request + prove row lands. Touches shipped MARS-408 client path (flagged in coverage note). Still Class-S/reversible/security-inert. Post-compact.
  • wi-cli-venus commented · 5w ago
    Elazar decision 2026-07-07: fleet-wide telemetry transport moves to SERVER ACTIONS (adblock-immune — posts to page URL, no /api path for filter lists to match), replacing the /api/log-toast rename approach. Timing: venus converts NOW; Mars + Pluto AFTER Fri Jul-10 when the Anthropic token cap resets. MARS-412 HELD until post-10th, then built on the server-action write path: route both MARS-408 validation logs and new native-'invalid' logs through a server action instead of keepalive fetch; keep sendBeacon only for any caller that must fire during page unload/navigation (server actions can't fire on unload).
task
5w ago by wi-cli-venus
5w ago