#602 ·
plutoPrácticas rectificar + bidirectional comment/email-notification workflow (port/adapt from Mars)
- Ref
#602(#602)- Project
pluto- Status
- blocked
- Priority
- normal
- Type
- feature
- Assigned
- evolutiva-pm-cc-w pm
- Created by
- —
- Blocked reason
- awaiting elazar
- Created
- 2026-06-01T17:30:16.063Z
- Updated
- 2026-06-01T22:02:24.961Z
Questions (2 open)
-
Pluto prácticas rectificar workflow (gap-3) - D2: gate student comment-WRITE to the rectificar state ONLY (mirror Mars) vs keep Pluto's CURRENT looser behavior where students can comment any time? This is a TIGHTENING of existing Pluto student UX. RECOMMENDATION: mirror Mars (rectificar-only) for fleet consistency, since the ask was to bring Mars's workflow to Pluto - but it removes a capability students have today, so your call. Reply A=rectificar-only / B=keep current looser.
-
Pluto prácticas rectificar workflow (gap-3) - D3: scope of the student edit->resubmit form (Pluto has NONE today; only numeroHistoriaClinica is editable, ungated). Options: (i) minimal = numeroHistoriaClinica + comentario only; (ii) full core-práctica re-edit. Both gated to noRevisado/rectificar, LOCKED once aprobado/desaprobado. RECOMMENDATION: (ii) full core re-edit - 'rectificar' means fix-and-resubmit, and minimal may be too narrow if a teacher rectifies for a data error. Reply i / ii. (This defines the gap-3 build size.)
Event log
-
wi cli
-
REQUIREMENT (Elazar brainstorm 2026-06-01, built with Mars; assess/port to Pluto). Workflow: (1) rectificar - teacher sends a práctica back to the student with a message. (2) teacher comments on a práctica -> student gets an email with the comment. (3) student comments on a práctica -> teacher gets an email with the comment. (4) app emails sent from a no-reply address with an auto-reply: if a teacher/student REPLIES to the app email, they're told replies don't reach anyone - use in-app comments. (5) student can EDIT a práctica WHILE the teacher has NOT yet set Aprobado/Desaprobado; edit locks once graded. ASK to evolutiva-pm: brainstorm best Pluto implementation, assess how much ALREADY exists in Pluto (modify vs build), and capture lessons learned from the Mars implementation that apply to Pluto. DELIVERABLE = design brainstorm by evolutiva-pm (post-compact, fresh context), then route to pm-pluto for implementation. NOTE: comment-not-nota naming (commons), email via the app's send path, Spanish UX, no raw IDs in UI.
-
MARS PORT REFERENCE (pm-mars, shipped WI#309 SHA cfc9db5): WHAT MARS BUILT: (1) practicaComentarios append-only table; authorRole DERIVED at read (autorUserId===studentUserId => student), NOT stored - no drift. (2) Bidirectional notify: teacher comment->email student; student comment->email the last-rectificar teacher; seen-guard debounce = ONE email per burst until counterpart opens the thread. (3) Student may WRITE comentarios gated to approvalState=rectificar (read-only otherwise); student edit->resubmit while NOT Aprobado/Desaprobado is the explicit re-entry path. (4) Comments ORTHOGONAL to approvalState - never auto-flip state; re-review always explicit edit->resubmit. (5) Reply-To per-email override -> rectificar-practica@pensanta.com (live GWS mailbox + autoresponder: 'use in-app comments, replies do not reach teachers'); no moderation, all phases. LESSONS FOR PLUTO: (A) ROOT CAUSE - check Pluto mailer.ts FIRST: global soporte@ Reply-To meant student replies landed in support, never reached teacher. Fix = per-email Reply-To to a dedicated mailbox. Likely the real Pluto gap. (B) ZERO schema ALTER - Mars reused existing notifications/toastSeenAt infra (mars bwi#295) for seen-guard; Pluto likely has an equivalent, prefer reuse over a new notifiedAt column. (C) OPS: the rectificar mailbox + autoresponder must be provisioned (live GWS) BEFORE the Reply-To flip, else replies bounce. (D) Toast UX deferred (mars bwi#310), not a blocker. pm-pluto owns the Pluto-state assessment (practicaComentarios + notify infra may already cover 2-3; Reply-To root-cause A is the likely gap). My brainstorm post-compact builds on this; route agreed design to pm-pluto.
-
PLUTO ASSESSMENT (pm-pluto 14:32): Pluto already has MORE than Mars - reuse, don't rebuild: unified comment timeline practicaDocenteNotas (student+teacher via createComentario/createPracticaDocenteNota, WI#388, shared Comentarios component) covers Mars#1 + comment-half of #2 [VERIFY authorRole DERIVED at read, not stored]; comments already orthogonal to reviewStateOptionId (Mars#4 satisfied); notifications table + createNotification() = seen-guard substrate (reuse IF it has a read/seen timestamp - coder confirms). 3 GAPS: (1) REPLY-TO ROOT CAUSE confirmed = Pluto sets GLOBAL Reply-To soporte@pensanta.com on every email (email.ts); student/teacher replies die in support. Fix=per-email Reply-To override to dedicated rectificar-practica mailbox+autoresponder. (2) EMAIL-ON-EVENT: Pluto sends ZERO practica email; build sendPracticaComentarioEmail (teacher->student, student->last-rectificar teacher) w/ one-email-per-burst debounce + wire grading email. (3) RECTICAR STATE + EDIT->RESUBMIT: estadoRevision has only noRevisado/aprobado/desaprobado (NO rectificar); Pluto has NO core-practica edit form (only numeroHistoriaClinica editable, ungated). Biggest build. OPEN DECISIONS: D1 distinct rectificar value vs reuse noRevisado (pluto rec distinct). D2 gate student comment-WRITE to rectificar-only (TIGHTENS current looser Pluto behavior) vs keep. D3 edit->resubmit form scope (numeroHistoriaClinica+comentario vs full core re-edit). MAILBOX: reuse Mars rectificar-practica@pensanta.com or Pluto own? EVOLUTIVA-PM RULING: D1=DISTINCT rectificar (endorsed). Gaps 1+2 = proceed now (bug fix + missing emails, no product input needed); build per-email Reply-To override code but the live FLIP waits on mailbox provisioning. D2+D3+mailbox = ELAZAR product calls (D2 changes student UX, D3 defines editable scope, mailbox=ops/GWS) - FILE as wi ask to elazar post-compact, hold gap-3 WIs until answered.
-
q#42 to=elazar: Pluto prácticas rectificar workflow (gap-3) - D2: gate student comment-WRITE to the rectificar state ONLY (mirror Mars) vs keep Pluto's CURRENT looser behavior where students can comment any time? Thi
-
awaiting elazar
-
q#43 to=elazar: Pluto prácticas rectificar workflow (gap-3) - D3: scope of the student edit->resubmit form (Pluto has NONE today; only numeroHistoriaClinica is editable, ungated). Options: (i) minimal = numeroHistori
-
awaiting elazar