Port pluto's preventive friction-flash treatment to venus's live-friction required groups
Elazar follow-up on PLUTO-604 mining (missed in VENUS-277's scope — that mining pass scoped to the PLUTO-604 commit diff only; this flash treatment is earlier, separate pluto friction work, so db/audit never saw it). WHAT PLUTO HAS: globals.css @keyframes friction-flash — box-shadow pulse 0->4px opaque red rgba(220,38,38,.9) at 50%->transparent, .friction-flash-3x runs 3x over 1.5s (CSS comment: Elazar rejected 2 earlier weaker versions as invisible, final uses fixed opaque red). useFlashOnEnterView(invalid, ref) hook: IntersectionObserver (threshold .4), bumps a React key to remount+replay the flash when an EMPTY required group scrolls into view; re-fires on scroll-away-and-back. PREVENTIVE by explicit Elazar redesign — invalid* derived from EMPTINESS, not gated on a prior failed submit, visible the moment an empty required group enters view. Two layers: error-label gets the flash, group div gets ring-1 ring-destructive/50 while invalid. Scope widened to ALL 8 required groups on pluto (antecedentes, complicaciones, caracteristicas, diagnostico, anestesia, tecnica, sexo, dificultad + dates) — Elazar drove 3->all since several were toast-only. VENUS FIT: strong — same structural gap VENUS-274 #6 patched with only STATIC markers (required-ness invisible until failed submit). Flash is the preventive complement. Top venus target = pieza/región (top live friction, 34/30d), then anestesia/sexo/fecha/dob/período/sede. DECISION: preventive-on-emptiness (pluto's final shape), matching Elazar's stated intent (explicitly rejected weaker/reactive-adjacent versions, widened scope because reactive-only 'won't prevent the friction we discovered'). Process: db/audit consensus pass same as VENUS-277's P-A, then implement.
Questions
Activity
-
parent=#2159
-
SHA d08fce6, v0.99.7. Preventive friction-flash ported from pluto (box-shadow pulse on empty required groups entering view). Scope: fecha/periodo/sede/dni-o-hc/dob/sexo/anestesia/modulo(create)/cirugia/pieza-región. Gate-inert (submit stays checks[] SSOT). Added prefers-reduced-motion guard (a11y gap pluto lacks). db+audit consensus: kept periodo despite audit's low-yield flag (zero-cost parity). Live-verified prod 0.99.7.