PLUTO-133 ·
plutofeat(toast-telemetry): log guardrail toasts to appEvents as toast/error-shown (bs-mqfa6wg9bi8 (b))
- Ref
PLUTO-133(#1090)- Project
pluto- Status
- done
- Priority
- normal
- Type
- feature
- Assigned
- coder-pluto-cc coder
- Created by
- wi-cli-venus
- Created
- 2026-06-15T14:03:29.380Z
- Updated
- 2026-06-15T17:16:23.123Z
- Closed
- 2026-06-15T17:16:23.123Z
Questions
No questions.
Event log
-
Consensus (pluto-reviewer + pluto-dev, bs-mqfa6wg9bi8). FINDING: Pluto already logs toast.error to appEvents (category=toast, action=error-shown, compile-time code, 45s dedup) — matches Mars fleet shape, ahead in 2 ways. (b) Pluto scope = extend src/lib/toast.ts so toast.warning/info also emit toast/error-shown when code present (~10 lines); add code to dark guardrails incl practica-form.tsx:360 dup-detect .info. NO Pluto digest cron — aggregator on venus applog rail per close. (a) separate sweep: ~17 admin missing-affordance guardrail toasts, disable-submit-until-valid, all LOW effort (docentes-grid/membership forms, alumnos-grid:114, create-user-form-client:101, admin-user-detail:195, usuarios-admin bulk, documento-review-section:65, opciones/banner-admin). /practicas/nueva already correct (inline validation). Open: instrument inline validation fails too? + go/hold on (a) sweep — awaiting Elazar.
-
WIDENED (Elazar 11:06): full-app coverage audit done. ~16 surfaces, 27 proposed toast codes. SCOPE now = (1) convert inline setError→toast.error+code across surfaces currently invisible to appEvents; (2) extend toast.ts to log warning/info; (3) REAL BUG beyond telemetry: Radix Select/RadioGroup required-prop is NOT enforced — practica-form sexoPaciente/dificultadPercibida/companeroId + create-user tipoDocumento + solicitar-acceso/completar cascade Selects can submit BLANK to the server (no JS guard). HIGH: practica-form.tsx (all inline + 3 Radix-blank), access-request-form.tsx (highest-traffic public, all inline), completar-asignacion-form, solicitar-acceso/completar (cascade no guard). MED: access-requests-list approve/reject, carga-anual, create-user tipo_doc, admin-user-detail email-format. LOW: periodos/comisiones/alumno-reassign silent-return-no-toast (button-disabled covers UX, telemetry only). Clean: usuarios-admin, docentes-grid+membership, opciones, banner, alumnos-grid, perfil. Full 27-code list + file:line in pm working notes. Awaiting Elazar go before coder dispatch.
-
2nd full-app sweep adds should-be-required / data-integrity candidates beyond the telemetry+Radix list (NOTE: this agent guessed some paths — needs a verify pass before coder): (1) Periodo date-range fechaFin<=fechaInicio not validated client OR server — HIGH if confirmed; (2) Role-remove accepts empty deleteReason + no last-role-removal warning (ties PLUTO-130 invariant) — audit integrity + accidental de-access; (3) Practica rejection comentario not required — student-UX + empty deleteReason audit row; (4) destructive activo toggles (periodo/comision) no confirm dialog — toggle-off cascades to child comisiones; (5) admin create-user with no role -> NULL primaryRoleId -> user can login to blank redirect; (6) comision cupo=0, banner empty mensaje, lookupOption deactivate orphans labels (MED). Merge into the sweep scope after a verify pass confirms the paths/server-side state.
-
3-agent convergence on the telemetry+Radix bucket — now VERIFIED with precise file:line (third audit, 21 tool-uses). CONFIRMED Radix required-prop bypass (blank → server, real data-integrity bug): practica-form.tsx:300-326 companeroId/sexoPaciente/dificultadPercibida + teacher-mode operadorId/asistenteId; access-request-form.tsx tipoDocumento; create-user-form-client.tsx:191 tipoDocumento; solicitar-acceso/completar/completar-form.tsx:83-90 cascade hidden-inputs (ZERO client guard). CONFIRMED inline-setError-never-logged on practica-form (all 10 guards + server err 338/372), access-request-form (9 guards), completar-asignacion-form, completar-form. Authoritative code list = 30 codes (practica.validate.*, solicitud.validate.*, asignacion.completar.*, usuario.create.validate.tipoDocumento, etc.). LOW silent-return: comisiones/periodos/alumno-reasignar grids. The 2nd-sweep data-integrity candidates (date-range, rejection-reason, toggle-confirm, no-role) remain UNVERIFIED — separate verify pass. Coder dispatch gated on Elazar go.
-
4th (most exhaustive, 60 tool-uses) audit adds net-new surfaces beyond the converged list: GAP-22 SolicitudDetailClient approve/reject/edit/link — all inline setError, unlogged (MED); GAP-23 ActividadesInusuales handleResolve:68 — one-click irreversible 'marcar resuelta' with NO confirmAction/promptReason (MED, add confirm); GAP-19 PersonaIdentityForm — browser-constraint-only validation, not logged; GAP-20 PersonaRolesForm — no empty-roles guard (silent empty submit); GAP-5 AccessRequestForm — silent JTP/adjunto/titular dropdown LOAD failures (empty dropdowns, no feedback); GAP-24 InactiveUsersClient — acceptable (button-disabled). 4-agent convergence confirms the HIGH core (PracticaForm + AccessRequestForm inline-only + Radix bypass). Master list now spans ~25 surfaces; coder dispatch still gated on Elazar go.
-
Audit SATURATED — 5 independent passes converged. Consolidated authoritative gap-list (priority buckets, verified file:line, ~50 dedup'd codes, 3 work-buckets a/b/c) written to gdrive: projects/evolutiva/pluto/toast-coverage/PLUTO-133-gaplist.md. Coder dispatches from THAT file, not the 5 task transcripts. Net-new since the 4th pass: ActividadesInusuales one-click-resolve no-confirm, persona-roles 0-role silent cascade, profile-photo-upload inline, comentarios-composer inline, informe-email no-recipient guard, bulk-ops no-selection guard. Ready for one verify-then-fix coder sweep + audit pre-push (auth/role/audit-reason/email paths). GATED on Elazar go + his same-sweep-vs-split-bug ruling.
-
Elazar GO 2026-06-15: 1a dispatch now, 2a Radix guards SAME sweep, 3a all 3 buckets, 4a log /practicas/nueva inline-validation fails too, 5b defer should-be-required candidates to follow-up WI (sequenced after). Assigned coder-pluto-cc (queued; agent flagged zombie, nw-venus restarting). Spec = gdrive projects/evolutiva/pluto/toast-coverage/PLUTO-133-gaplist.md. Audit pre-push (auth/role/audit-reason/email). Push HELD behind db-pluto's PLUTO-135 migration push (shared tree, blocked on port 5432).
-
coder-pluto-cc / coder
-
Landed SHA 1a0ea77 v1.72.0 (23 src files: toast.ts warning/info logging + ~21 forms inline→coded toast.error + Radix required guards; all 3 buckets + Q4a). Audit pre-push PASS (23 files). :6543 DSN workaround unblocked the gitpush intake-PDF regen. Audit dual-SHA PTD (9fdeff6+1a0ea77) in progress; FINISHED pending dual PASS.