MARS-21 ·
marsJTP/Ayudante live-vs-snapshot: reporting/drill/notifications must read CURRENT assignment not creation snapshot; null same-person backfill (ayudante=jtp); add both-roles guard
- Ref
MARS-21(#684)- Project
mars- Status
- done
- Priority
- high
- Type
- bug
- Assigned
- pm-mars-cc coder
- Created by
- wi-cli-venus
- Created
- 2026-06-05T19:14:21.561Z
- Updated
- 2026-06-05T19:27:09.378Z
- Closed
- 2026-06-05T19:27:09.378Z
Sub-items (0/1 done · 0%)
Questions
No questions.
Event log
-
Lane (a) DONE by db-mars: 4 self-both-roles SA rows nulled (ayudanteUserId=assignedTeacherUserId): Di Pietro x3 comisión A, Spinosa x1 comisión F, archive ctx set. Belén Montoya's 22 ayudante SAs are NOT same-person (distinct JTP each) = separate data-truth question, HELD pending Elazar ruling (real backlog vs bulk-backfill; same shape as Florencia Neput). Lane (b/c) CODE = coder-mars solo on practica.ts: drill /practicas?jtp= must read LIVE vStudentAssignments not snapshot (revises MARS-12) + JTP==ayudante guard. coder02 diagnosis correct but name-only/can't push, stood down off practica.ts. db mapping bulk-backfill blast radius read-only.
-
Owner coder-mars-cc. Lane b/c code: (1) getScopedPracticas drill→live SA dual-axis mirror of getJtpStats; (2) JTP==ayudante guard at persist + SA-save; (3) map other snapshot readers.
-
Part 1 drill→live shipped: SHA 8c67975. getScopedPracticas ?jtp= now mirrors getJtpStats (live SA for noRevisado, reviewedBy for graded). Awaiting audit. Part 2 (JTP==ayudante guard + snapshot-reader sweep) next.
-
Blast-radius map (db-mars, read-only): 7 zero-review ayudantes / 61 SA rows. ORGANIC cascade (legit, populateSaTeachersAtPracticaSubmit, NOT backfill): Belén Montoya 22, Carabajal 13, D.González 12, Florencia Neput 1, Villalba 1 = 49 rows, spread 05-26→06-05. TRUE bulk backfill (same ms 06-05 10:03:43): Schmer Camila x6 + Vicente Marcillo x6 = 12 rows. CONCLUSION: Belén's 100% sin-calificar is HONEST (real live ayudante load 31 noRevisado, graded 0) — not a data bug. Florencia's nag also from legit ayudante SA. ROOT behind both complaints = POLICY: app counts pending+nags AYUDANTES co-responsible (two-axis getJtpStats CROSS JOIN). Escalated 3 decisions to Elazar: (1) ayudante grading responsibility A=co-responsible keep / B=JTP-only drop ayudantes off sin-calificar+nags; (2) null 12 bulk rows y/n; (3) confirm 49 organic untouched. coder-mars drill->live fix ships regardless (mirrors getJtpStats, auto-follows policy).
-
Part 2 guard shipped: SHA c8410c4. dropDuplicateAyudante helper enforced at all SA teacher-write sites (resolver, cascade, createStudentAssignment, updateAlumno, reassignTeacher, persist snapshot). getJtpStats axis untouched (A/B pending). Awaiting audit.
-
Live-vs-snapshot fixed: 4 self-both-roles SA rows nulled (rule a); drill ?jtp= reads LIVE not snapshot (8c67975); JTP!=Ayudante write-guard at every SA write (c8410c4). Both audit-PASS. Rule (b) codebase audited clean. A/B ayudante-attribution policy + 12-bulk-row null deferred to Elazar (separate lane); tcm peer-inference = MARS-22.