basquetWi + New ticket
pluto PLUTO-531

Pluto Historial change-history panels: audit gap + build (HOLD for Elazar go)

Backlog low apaudit-pluto-cc

Elazar fleet directive (via pm-mars 2026-07-07): every route holding trackable/edit-bearing data should expose a 'Historial' change-history panel to the user. Reference impl = Mars /practicas/[id] 'Historial'. Pluto already has the data substrate (practicasArchive row-snapshots, userAuditLog field-deltas, archive tables for users/userRoles/periodos/comisiones/studentAssignments/accessRequests/lookupOptions). PHASE 1 (now, read-only): census every Pluto trackable/edit-bearing route + surface, list which already expose a Historial/change-history panel vs which lack it, rank by edit-frequency/operator-consequence, note the archive source each gap would read. PHASE 2 (HOLD): build the missing panels — do NOT start until Elazar gives the word. Track-only for now.

Sub-tickets

No sub-tickets.
+ Add sub-ticket

Questions

No questions.

Activity

  • wi-cli-venus created · 5w ago
  • wi-cli-venus commented · 5w ago
    PHASE-1 CENSUS (audit-pluto-cc, read-only). Pluto already has a config-driven Historial engine: EntityHistory -> getEntityAuditLog -> GENERIC_AUDIT_CONFIG (queries.ts:3112), wired for user/studentAssignment/comisionJtp/comisionAdjunto/jtpAyudante/comision/periodo + practica special-cased. Substrate = 22 archive tables + userAuditLogLegacy + vPracticasAuditEntries. NO new DB work for any gap. COVERED (Historial live): practicas/[id]+list, alumnos/[id]; administrar/{alumnos,docentes,personas}/[id]; administrar/{comisiones,alumnos,docentes,periodos} lists + comisiones/[id]; admin/usuarios/[id]. GAPS (edit-bearing, no Historial, archive source EXISTS; ranked edit-freq x operator-consequence): 1. HIGH admin/solicitudes/[id] (access approve/reject; grants login+role) <- accessRequestsArchive; 1 config + mount. 2. HIGH admin/opciones (lookupOptions CRUD; ripples into every practica form) <- lookupOptionsArchive; 1 config + mount. 3. HIGH/CHEAP admin/carga-anual (annual periodos+comisiones) <- periodos/comisionesArchive; engine already has configs -> MOUNT-ONLY. 4. MEDIUM admin/soporte/[id] + soporte/[id] (ticket reply/state) <- supportTicketsArchive+supportTicketMessagesArchive; 2 config + mount. 5. MED-LOW admin/banner (set/clear; fleet-visible) <- systemSettingsArchive; 1 config + mount. 6. LOW/TRIVIAL perfil (self-edit) <- usersArchive; ownerType 'user' exists -> MOUNT-ONLY. NOT OWED: informes, notificaciones, equipo-academico, admin/{logs,errores,actividades-inusuales,a-solucionar,inactividad}, acceso-denegado, branding. Phase-2 cost: gaps 3+6 mount-only; 1,2,4,5 = add GENERIC_AUDIT_CONFIG entry + mount existing component. No migration, no new component, no new query engine. PHASE-2 HELD for Elazar go.
task
5w ago by wi-cli-venus
5w ago