Foto de perfil obligatoria para alumnos + foto del alumno en la UI de corrección
Client-requested (Elazar 2026-08-01, needed same morning). TWO halves. (1) FORCE UPLOAD, escalating ladder per Elazar's design: logins 1-2 dismissible banner; 3-4 modal dismissible after 5s; 5 modal after 10s; 6+ modal non-dismissible. Stage derived from count of category=auth action=login appEvents rows per actorUserId since a launch cutoff - NO new column, NO migration (ix_appEvents_actorUserId_createdAt covers it). Scoped to role alumno with profileImageId IS NULL, skipped under view-as. (2) Student photo in the teacher grading UI, beside the student name on /practicas/[id]. Auth already permits it (MARS-558: kind=profile served to any authenticated session); data = add profileImageId to the practica.ts selects. Plus non-blocking upload sanity checks in uploadProfileImage (min resolution, aspect ratio, colour-variance floor) to reject blank/flat/junk images - advisory, never a hard reject on a face-detection basis. Baseline measured 2026-08-01: 8 of 284 active-period students had a photo. Coder raised and Elazar overruled: the ladder ends in an app-wide lockout and its timer is client-side (bypassable). Elazar: these are students and the client is paying - proceed.
Questions
Activity
-
Escalating mandatory-photo ladder (login-count derived, no migration) + server-side refusal in createPractica + student photo on grading surface. SHA 7abcd6b, live v2.64.1 confirmed.