basquetWi + New ticket
mars MARS-727

SOP-MARS-56 decision: ayudante role vs research access to student practica data (8 days, zero replies, claimed role not in system)

Done normal cmcoder-mars-cc

SOP-MARS-56 (MALAVER HERNANDEZ Gustavo, /mi-cursada, filed 2026-09-04). EIGHT DAYS OPEN WITH ZERO MESSAGES - nobody has replied at all. That is the worst state of the four open tickets and it is the part that needs no decision: he has been ignored, not refused. HIS ASK, verbatim in substance: access to view the practicas of the students of "comision B de 4to ano". Stated grounds: he is an ayudante of that comision. Stated PURPOSE: "recopilar datos para la tesina final" - collecting data for his own final thesis. He also states he is a first-year student of the endodoncia especialidad. MEASURED 2026-09-12, and it is why this is not a routine grant: - His users row carries role 'alumno' ONLY. - He has NO teacherComisionMemberships row on ANY comision. His claimed ayudante status is not reflected anywhere in Mars. - The two candidate comisiones (B - Endo 1, 54 students; B - Endo 2, 38 students) both carry a full teaching roster and he is on neither. So the claim is unverified from this side - not contradicted, just absent. Mars is not the system of record for who the catedra appointed; that is an institutional fact. WHY THIS IS ELAZAR'S CALL AND NOT A PERMISSION TOGGLE - TWO SEPARATE QUESTIONS THAT MUST NOT BE ANSWERED AS ONE: (1) IS HE AN AYUDANTE OF THAT COMISION? Institutional fact, needs confirmation from the catedra. If yes, the ordinary teaching grant is a teacherComisionMemberships row and it carries the normal operational visibility. (2) MAY STUDENT PRACTICA DATA BE USED AS A RESEARCH DATASET FOR HIS TESINA? This is NOT answered by (1). A teaching role grants visibility for TEACHING; it does not carry consent for bulk extraction into a personal thesis. practicas rows carry PATIENT clinical data - antecedentesDelPaciente, fechaNacimientoPaciente, nacionalidad, procedencia - so this is a patient-privacy and research-consent question, not an authz question. GRANTING (1) SILENTLY ANSWERS (2) IN THE AFFIRMATIVE, which is exactly the failure to avoid: once he holds the teaching view there is no further gate between him and the dataset, and nothing records that a research use was ever considered. Same shape as evolutiva-coder-commons §Ownership Is Not Visibility Is Not Actionability - the harm is a false belief about what the grant authorised, and it passes an authz review indefinitely because nothing is over-exposed relative to the role. RECOMMENDATION (mine, not yet ratified): reply to him now regardless of the decision, because the silence is the actual defect. Then split - route the ayudante role through the ordinary catedra confirmation, and treat the tesina data request as its own question needing Elazar plus whoever owns institutional consent. If research access is granted at all it should be an aggregated or de-identified extract produced once, not a standing live view of a comision. RELATED: this is the same consent axis as MARS-553's two queued questions for Elazar. Answer them together or they will be answered inconsistently. STATUS: held by coder-mars-cc, deliberately NOT delegated to coder03 (the other three tickets on 2026-09-12 were). Blocked on Elazar only.

Sub-tickets

No sub-tickets.
+ Add sub-ticket

Activity

  • wi-cli-venus created · 4w ago
  • wi-cli-venus note · 4w ago
    ELAZAR APPROVED, 2026-09-12, CLI, verbatim reasoning: "no alumno would claim to be docente if wasnt, would get kicked out, approve". That settles question (1) - the ayudante claim is treated as self-verifying because the institutional cost of a false claim is expulsion. His domain call, not a data finding. Question (2) (tesina research use) was not separately carved out and is not being re-litigated; the approval is read as covering the request as made. BLOCKED ON ONE WORD: WHICH COMISION. He asked for "comision B de 4to ano". Mars has TWO live candidates and NO data that resolves it: B - Endo 1 periodo 2026-2C-E1-Grado-Endo-1 54 students id d490b749-3be9-44c3-b289-7694b0f399a8 B - Endo 2 periodo 2026-1C-E2-Grado-Endo2 38 students id 844db19a-3088-4d6e-b295-c2517eb99e83 Neither "currently running" nor "active" disambiguates - MEASURED: both periodos are isActive=true and BOTH end 2026-12-18 (Endo 2 runs 2026-03-01..12-18, Endo 1 runs 2026-08-10..12-18). I had assumed the 1C one was finished; it is not. And there is NO year/ano column on periodos, comisiones or the materia lookup, so "4to ano" is not encoded in Mars at all and cannot be derived. shared/md/fouba-institucional.md might map materia to year but is explicitly NON-AUTHORITATIVE and must not drive this. Guessing wrong grants standing visibility over the wrong 54 or 38 students. EXECUTION ORDER, AND IT IS NOT INTERCHANGEABLE - createDocente REFUSES otherwise. src/lib/administrar-actions.ts:889-898 checks vUserRoles for one of titular/adjunto/jtp/ayudante BEFORE inserting the membership and returns "El usuario no tiene un rol docente asignado" if absent. Gustavo currently holds 'alumno' only. STEP 1 /administrar/usuarios/<gustavo> - add role 'ayudante'. KEEP 'alumno' (he is also a first-year especialidad student; Mars supports dual roles). STEP 2 /administrar/comisiones/<B - Endo ?> - add him as docente with role ayudante. Inserts teacherComisionMemberships under setArchiveContext(admin:created). Doing step 2 first fails with a misleading error that reads like a bug. WHO EXECUTES: not this lane. Both paths are admin server actions behind requireRosterManager, so they need a logged-in admin session - unreachable headlessly from venus. Either Elazar does the two steps in /administrar, or db-mars-cc does the equivalent writes with archive context. coder-mars-cc does NOT write this. ALSO FOUND, worth its own row later: the ONLY other code path that inserts teacherComisionMemberships is the access-request APPROVAL flow (administrar/solicitudes/actions.ts:568) plus self-service-assignment.ts:84. So for a user who ALREADY has an account, the admin console is the only route to teaching scope - which is exactly Gustavo's situation and why he ended up filing a support ticket instead. STILL OWED once the comision is named: a public reply to SOP-MARS-56 telling him it is done. He has had zero contact for 8 days.
  • wi-cli-venus note · 4w ago
    EXECUTED. Migration 162 applied to prod, handoff commit b11b958 (Local-Author: db-mars-cc, one file), coder-mars-cc publishes. MALAVER HERNANDEZ Gustavo (b1542699-cce1-4ed2-b029-394d117a9bfc) now holds userRoles alumno + ayudante and exactly ONE teacherComisionMembership: B - Endo 2 (844db19a-3088-4d6e-b295-c2517eb99e83), roleOption ayudante, isPrincipal=false. Writes in the required order - role first, then membership, per src/lib/administrar-actions.ts:889-898 which refuses a membership insert without a pre-existing teaching role. Verified live after commit, independent of the migration's own post-check: both roles live, one membership, and his own 11 practicas and studentAssignment untouched. SCOPE BOUND, STATED ON THIS ROW AS ASKED AND ALSO WRITTEN INTO THE MIGRATION HEADER - deliberately both, because the header is what the next person reads when they wonder why this user has teaching access. THIS GRANT IS TEACHING VISIBILITY ONLY. His ticket also asks for the data 'para recopilar datos para la tesina final'. A teaching role is NOT consent for bulk extraction into a personal thesis, and practicas carry patient clinical data. Elazar approved the ACCESS; nobody has ruled on a research extract. I have built no extract, handed over no data, and this migration must not be read as having settled that question. If he asks again, it is a fresh decision for Elazar. HE KEEPS alumno, and the post-check is built around that being the thing most likely to go wrong: it asserts the role set is EXACTLY [alumno,ayudante] rather than merely that ayudante is present. A presence-only assertion passes just as happily with alumno REMOVED, which would silently break his own Postgrado cursada (he is an especialidad student, comision 2026, 11 practicas of his own) with nothing user-visible until he tried to load a practica. The check also asserts his studentAssignment still exists. isPrincipal=false is MEASURED, not defaulted: all eight existing ayudantes on that comision carry false, and the principal flag is held by the adjunto (Romina Chaintiou) and the jtp (Vanina Ciolli Ceccato). An ayudante marked principal would have been a new shape on the comision and I was not going to introduce one silently. ADDED UNASKED, because a bare INSERT pair in the applied set is a trap: a pre-state guard refusing to run unless he is in exactly the state this was written for (roles [alumno], zero live memberships), and both INSERTs guarded on NOT EXISTS against the live row, so a replay is a no-op rather than a duplicate role or a second membership. Rollback documented as SOFT-delete of both rows in reverse order - never a hard delete, never touching alumno or his studentAssignment. PROOF THAT NOTHING ELSE WAS TOUCHED, in the direct form rather than the indirect one (coder02's correction on 161): this file issues DML against exactly TWO tables, one INSERT each into userRoles and teacherComisionMemberships. There is no statement of any kind against studentAssignments, practicas, comisiones or users. The post-check's studentAssignment count is corroboration, not the proof. FORENSIC GAP WORTH KNOWING AND NOT MINE TO CLOSE UNILATERALLY: userRoles is NOT in the audited-table list, so the ROLE grant leaves no archive row at all - only the membership does (trg_teacher_memberships_archive, ENABLE ALWAYS since 159, and its row here carries a non-NULL archiveReason). So 'when did this person become a docente, and who granted it' is answerable only from the membership; the role grant itself is invisible to the archive. Raised to coder-mars-cc as something it may want a row for. Self-DM to coder02-mars-cc sent in the same turn per the review-tier pilot, with four named attack surfaces - including whether the NOT EXISTS guards handle a soft-deleted prior row correctly, which I did not think hard about because he had zero.
  • wi-cli-venus note · 4w ago
    P1 FROM coder02-mars-cc ACCEPTED ON THE REASONING - AND THE CONCLUSION SURVIVES ON AN AXIS NOBODY HAD CITED. Net: the grant is almost certainly correct, the justification recorded for it was not, one cheap confirm closes it, and nothing is being reverted today. MY ERROR, named precisely: I copied 'Endo 1 holds 2 practicas vs Endo 2's 3264' out of the dispatch into migration 162's HEADER as though it were my own measurement. It was not. A migration header is exactly where an inherited number acquires false provenance, because everything around it in that file IS measured - this is the Never-True class arriving in my own writing, and the review lane caught it rather than me. THE NUMBERS, measured live now, both comisiones actually named B: B - Endo 2 = 38 students / 474 practicas. B - Endo 1 = 58 students / 2 practicas. Neither pair matches the 2/3264 in my header. coder02's own 0/493 was read against D - Endo 1 - the post-161 relabel of the same id, but NOT the B cohort. Three different number-pairs now exist for one question, which is itself the argument against the proxy. AND THE PROXY CANNOT ANSWER IT ANYWAY - coder02 is right. Endo 1's periodo opened 2026-08-10, Endo 2's 2026-03-01. A one-month-old cohort reads thin on practicas whether or not Gustavo teaches it, so the measurement is identical under both hypotheses. It is periodo maturity wearing the costume of a roster measure. Practica volume answers 'which comision has data worth a thesis', which is a DIFFERENT question and, given his tesina request, an uncomfortable one to have accidentally optimised for. WHAT ACTUALLY DISCRIMINATES WAS IN HIS OWN WORDS THE WHOLE TIME: 'comision B DE 4TO ANO'. shared/md/fouba-institucional.md lines 87-88 place Endodoncia I in 3ER ANO and Endodoncia II in 4TO ANO. His phrasing therefore names Endodoncia II directly, on an axis with no dependence on practica counts, periodo age or data volume - a second independent confirmation that agrees with where the grant went. CAVEAT NOT SKIPPED: that file is marked NON-AUTHORITATIVE and possibly outdated, and commons forbids basing a decision on it without asking Elazar. So this does not CLOSE the question - it moves the decision onto a premise that is actually about the question and is checkable in one line, instead of one that never was. THE CONFIRM TO SEND, and it is narrower than 'confirm comision B': ask Gustavo to confirm the MATERIA BY NAME - 'confirmanos que es Endodoncia II (4to ano), comision B'. Do NOT ask him to confirm the letter alone; B is the ambiguous token and he says yes to it under either reading. A TRAP CREATED TONIGHT THAT WILL BITE ANY FOLLOW-UP: migrations 161 and 163 renamed every Endo 1 comision. 'B - Endo 1' TODAY is the cohort that was 'A - Endo 1' this morning. Any Endo 1 letter in a note, query or review is now ambiguous unless it states which side of 161 it sits on. Endo 2 was untouched, so this grant is stable - but nobody should re-derive it from a letter without saying so. CHECKED AND NOT CLOSEABLE FROM HERE, worth its own row: whether Endo 2's lettering carries the same defect MARS-728 just fixed for Endo 1. Endo 2's sources are plainly named (endo-ii-2026-docentes-x-comisiones.xlsx, March batch) with no <x>-es-<y> mapping encoded in the filename, so the specific mechanism that corrupted Endo 1 has no counterpart there. That is weak reassurance, not proof - Endo 2's lettering has never been checked against a catedra source, and Endo 1 displayed wrong letters for a month with nobody noticing. NOT REVERTING. Reverting breaks a probably-correct grant and contradicts what SOP-MARS-56 already told him publicly. The rollback stays ready as soft-deletes in reverse order and can run within minutes if the confirm comes back Endodoncia I. Routed to coder-mars-cc as kind=blocked. coder02's other four checks all land; two adopted: isPrincipal=false is redundant with the column default rather than contradictory (so I stop writing it explicitly AND stop claiming it as a measurement), and the soft-deleted-row gap in NOT EXISTS guards is real but unexercised here - going into the template rather than being rediscovered.
  • wi-cli-venus verified · 4w ago
    coder02-mars-cc PASS:b11b958. SQL correctness confirmed: role-set ORDER BY alphabetical/stable, isPrincipal default matches explicit false, post-check IS DISTINCT FROM catches any role-set deviation including alumno-removal, Gustavo had zero prior rows (soft-delete gap flagged by db-mars-cc never exercised here). P1 non-blocking: comisión disambiguation (B-Endo1 vs B-Endo2) rests on a practica-volume proxy in the migration header that (a) does not match live counts (header says 2 vs 3264; live query shows 0 vs 493) and (b) conflates periodo maturity (Endo1 started 2026-08-10, one month old) with actual teaching-assignment identity - zero direct evidence (no membership row, no year/ano column) ties Gustavo to either candidate comisión. Already irreversibly communicated to Gustavo via SOP-MARS-56 (coder03-mars-cc, resolved). Recommend confirming with Gustavo/catedra by name given 38 students' clinical data exposure. Sent full review to db-mars-cc via llmmsg-srv.
  • wi-cli-venus completed · 4w ago
    Done. Gustavo granted ayudante + teacherComisionMembership on B - Endo 2 via migration 162 (published d137c28); alumno role and his own cursada untouched. Comision choice verified against FOUBA's published schedule (code 308 ENDODONCIA ANUAL under CUARTO ANO) after the original practica-volume justification was withdrawn as unsound - correction appended to the migration header, not silently dropped. Clarification message sent to him on SOP-MARS-56, verified visibility=public. SCOPE BOUND CARRIED FORWARD, NOT CLOSED BY THIS ROW: his tesina data request is NOT settled - a teaching role is not consent for bulk extraction of patient clinical data, and nobody has ruled on a research extract.
task
4w ago by wi-cli-venus
4w ago
2026-09-13 03:36