| #323 |
mars |
chat-duo Elazar Pending pane refreshes mid-type → loses user input. Bug: pane re-render clobbers focused input field. Owner: llmmsg-srv-cc-w (chat-duo). |
backlog |
urgent |
— |
2026-05-12 02:06 |
| MARS-145 |
mars |
Mars DB scaling: migrate serverless runtime from direct-5432 to Supavisor transaction pooler (6543); reserve direct-5432 for weekly-kpi cron + migrations/seed; cut runtime pg.Pool max 16->~3; audit+cap per-request concurrent-query fan-outs (mirror Pluto mapWithConcurrency); pre-flight named-prepared-statement check (txn mode drops them). 3-PM consensus bs-mql6kqmrm6j, Venus=reference (already on pooler). One-env-var + cron carve-out, reversible. |
backlog |
high |
db-mars-cc |
2026-06-19 17:10 |
| MARS-84 |
mars |
Weekly hub-DM relay for the ux-pain-digest: a recurring agent-side step (CronCreate or proxy poll) reads the fresh appEvents action=ux-pain-digest row (detail.textReport, detail.relay) and DMs the report to PM + Elazar on the llmmsg hub, then flips detail.relay.delivered=true. Needed because the Vercel cron can't reach the tunnelled hub. Wire BEFORE first digest fires Mon 2026-06-15 13:00 UTC. Satisfies Elazar's 'dm you, me, email' bar (email+appEvents already done by MARS-83). |
backlog |
high |
pm-mars-cc |
2026-06-09 17:41 |
| MARS-38 |
mars |
Codex audit — P0 security/forensics: resume-link fail-closed + appEvents storage-key strip (7 sites) + userRoles role-change changelog |
backlog |
high |
--agent |
2026-06-09 17:03 |
| #322 |
mars |
eq (Elazar Questions) — decoupled-from-bwi pending-Qs tracker; 3-PM consensus + Elazar approval pm-mars-cc-18608/18632; venus stub in flight |
blocked |
high |
— |
2026-05-12 02:40 |
| MARS-147 |
mars |
Student duplicate-práctica deletion request: student requests delete (reason=duplicate), picks keeper from pulldown, teacher approves -> non-keeper soft-deleted |
backlog |
normal |
— |
2026-06-19 19:27 |
| MARS-146 |
mars |
Disable dormant never-onboarded students (never logged-in/authed this cycle) so they drop from reports + regular screens |
backlog |
normal |
— |
2026-06-19 19:25 |
| MARS-141 |
mars |
Vercel runtime-log API billing-capped (ExceedsBillingLimitError) — blinds PTD runtime-log gate until cap reset/raised |
backlog |
normal |
— |
2026-06-16 16:53 |
| MARS-136 |
mars |
Re-key grading attribution to práctica-pick (jtpUserId) — reverses live-SA model |
backlog |
normal |
— |
2026-06-16 06:04 |
| MARS-126 |
mars |
Real-life-as-SSOT JTP attribution analysis: quantify divergence between start-of-year studentAssignments (error-prone excel import) and actual student JTP picks (práctica.jtpUserId). Two mismatch classes: (1) JTP students picked but aren't assigned to; (2) students assigned to a JTP who picked a different one. Analysis only first (no writes); evidence base for evidence-based reassignment (NOT admin-pick UI). Links MARS-43 + live-vs-snapshot rule. (Elazar 2026-06-14) |
backlog |
normal |
— |
2026-06-14 22:30 |
| MARS-125 |
mars |
Proactive unreviewed-práctica backlog outreach: identify top 3-4 teachers (JTPs) by sin-revisión backlog, the active JTP in each's comisión, the adjunto + titular; draft email to adjunto/titular asking how to address the backlog before it's insurmountable. Real-audience outbound — held for Elazar approval before send. (Elazar 2026-06-14) |
backlog |
normal |
— |
2026-06-14 22:24 |
| MARS-122 |
mars |
DB (deferred/cold): 24 unindexed FKs on forensic/audit/housekeeping columns (archivedBy/deletedBy/restoredBy/resolvedByUserId/surrogateUserId/actorUserId/createdUserId/assignedTeacherUserId); none in hot paths; track, index only if a real query path emerges |
backlog |
normal |
— |
2026-06-14 06:40 |
| MARS-118 |
mars |
Audit PTD render-GET tooling: enable exercising authed routes (dedicated test-user + stored session, OR a server-side render-self-check route) — Mars leg of the cross-project gap that let Pluto's /informes 500 ship unexercised (audit unauth render-GET -> 302/login, authed routes never actually rendered in PTD) |
backlog |
normal |
— |
2026-06-14 05:35 |
| MARS-116 |
mars |
Mars logging structural hardening (R1 follow-up): middleware-injected requestId correlation + actor de-anon in onRequestError (F-3/F-4), isCritical sync-write for auth/authz/security cats (F-5), log-error 5min digest dedup (F-6) — audit design-review first (middleware is auth-adjacent) |
backlog |
normal |
— |
2026-06-14 02:36 |
| MARS-108 |
mars |
Teacher-facing student reassignment surface (JTP/Ayudante self-service, NOT on /alumnos) |
backlog |
normal |
— |
2026-06-13 06:46 |
| MARS-107 |
mars |
Mars appEvents conform to fleet standard (evolutiva-appevents-standard.md): add categoryId uuid FK->lookupOptions + seed appEventCategory group (16 canonical + practica/studentAssignment/assignment) + backfill 18 free-text values w/ mapping; add 4 promoted cols (httpStatus/durationMs/path/failureCode); add logError/logWarn/logInfo wrappers + pickKnown + isCritical sync-bypass; append-only trigger (GUC-bypass) AFTER appEventRelays sidecar cutover (replace detail.relay.delivered UPDATE pattern); replace level-only prune with 5-cat-security tiered retention; canonical v_appEvents_* views; legacy_events sink. Staged db+coder. BLOCKED on committed SSOT + Elazar priority call. |
backlog |
normal |
— |
2026-06-13 02:41 |
| MARS-106 |
mars |
No-404 directive: navigation/practica-link-dead fired 3x — find and eliminate the dead practica link source (broken link/route), not just relabel the event |
backlog |
normal |
— |
2026-06-13 02:23 |
| MARS-101 |
mars |
/practicas/[id] detail-grid: 25px overflow @768 (nowrap dt labels force 1fr tracks past tooth-panel) + label truncation @360 ('Restauraci…') — needs live-DOM-measured fix |
backlog |
normal |
— |
2026-06-12 06:40 |
| MARS-68 |
mars |
Audit Next.js/Node compute that should be pushed to Postgres (aggregations/filters/joins done in JS that belong in SQL or a view) |
inProgress |
normal |
— |
2026-06-12 05:56 |
| MARS-97 |
mars |
EPIC mobile-first refactor (Elazar directive, all 3 apps): Mars is desktop-CSS-with-patches, not mobile-first. Staged base-up rework. Stage0 foundation (44px tap floor + search/form fixes, mobile-only media blocks, desktop density unchanged); Stage1 DataTable mobile card mode (fixes /practicas + /docentes); Stage2 /mi-cursada; Stage3 /practicas/nueva form (+tooth-selector tap targets, +undefined .conducto-* classes latent bug); Stage4 filter-bar accordion; Stage5 practica detail (/practicas/[id]+/mi-cursada/[id]: info-bar, changelog, comentarios, review-form, image-viewer pinch-zoom currently broken on mobile); Stage6 secondary (soporte thread, notificaciones, perfil, postgrado-progression). Order 0>1>2>3>5>4>6. Owners: coder-mars 0/3/5, audit-mars-ca 1/6. Held on proxy-mars BEFORE baseline (Elazar launching). Admin wide-tables=P3 tail/defer. |
backlog |
normal |
pm-mars-cc |
2026-06-12 01:36 |
| MARS-87 |
mars |
EPIC: shift /users /estudiantes /docentes from admin-dashboard mgmt to self-managed roster (JTP/Ayudante/Adjunto/students self-pick relationships + self-confirmation workflow) |
backlog |
normal |
— |
2026-06-09 18:03 |
| MARS-86 |
mars |
Disable 107 orphan-auth users (auth huerfanas, never logged in) |
backlog |
normal |
— |
2026-06-09 18:03 |
| MARS-77 |
mars |
Sidebar/navbar per-role regroup (Stage A): execute the holistic restructure the /sidebars-preview diagnostic (75ad66f, 2026-06-04) was built to inform. Per-role nav still cluttered/inconsistent. Use the preview tool (renders real sidebar per role side-by-side) to design grouping, then regroup. Only piecemeal edits landed since (MARS-33/34, WI#327, WI#214); holistic cleanup dropped + untracked until now (Elazar 06-09). |
backlog |
normal |
— |
2026-06-09 16:17 |
| MARS-69 |
mars |
UX Friction (epic): reduce user pain points surfaced by toast/error telemetry |
backlog |
normal |
— |
2026-06-09 03:44 |
| MARS-64 |
mars |
Archive trigger captures NEW not OLD on UPDATE — verify forensic recovery coverage across audited tables (db) |
backlog |
normal |
— |
2026-06-07 10:56 |
| MARS-60 |
mars |
SOP-7 A: override-ayudante UI — authorized role can correct/remove the auto-added ayudante on a práctica (Romina complaint; auto-add is by-design, gap = no override path) |
backlog |
normal |
coder-mars-cc |
2026-06-07 08:34 |
| MARS-42 |
mars |
Check size of Mars images on Hostinger (api-images file store) — measure total disk + file count used by Mars JPEGs on the api.pensanta.com/mars FTP-jail host; report bytes + count, flag if cleanup/retention needed. |
backlog |
normal |
— |
2026-06-06 08:41 |
| MARS-35 |
mars |
Adjunto oversight/governability landing: adjunto logs in -> lands on a page showing comisión health, which JTPs need help, pending workload (Elazar 06-06, q3). NEEDS DESIGN/BRAINSTORM - distinct surface from /practicas |
backlog |
normal |
pm-mars-cc |
2026-06-06 05:50 |
| MARS-13 |
mars |
Tech-debt sweep: catalog unused DB objects (tables/columns/views, e.g. 0-row #395/#396, redundant text cols #394) + dead app-code fields/exports; file one deletion WI per finding (Elazar 06-05: stop brushing off 'legacy field we dont use') |
backlog |
normal |
— |
2026-06-05 18:40 |
| MARS-14 |
mars |
└─ Delete unused DB views (technical debt audit) |
backlog |
normal |
— |
2026-06-05 18:45 |
| MARS-17 |
mars |
│ └─ Delete unused views: vComisionAyudantesByJtp, vPendingAccessRequests, vStudentPostgradoProgression |
backlog |
normal |
— |
2026-06-05 18:41 |
| MARS-16 |
mars |
│ └─ Delete unused health/admin views (vHealth*, vActiveSupportTickets, vAccountSwitchLinks, vHelpArticles) |
backlog |
normal |
— |
2026-06-05 18:41 |
| MARS-15 |
mars |
│ └─ Delete unused error logging views (vErrorsLast5/10/20/25, vAppErrors*, vRecurringErrors, vAppEventsRecent) |
backlog |
normal |
— |
2026-06-05 18:41 |
| #487 |
mars |
Custom 404: add LLM-copy block to not-found page + enrich routing/not-found event (referrer, appVersion, requestId) + rate-limiter |
backlog |
normal |
coder02-mars-cc |
2026-06-05 18:38 |
| #7 |
mars |
CR-override-grade: adjunto/titular jumps in when JTP unavailable |
backlog |
normal |
— |
2026-04-30 11:12 |
| MARS-138 |
mars |
getJtpStats PENDING axis is SA-populated while admin-delta-report + vPracticasSinEvaluar are SA-free — informes oracle can miss a picked-but-no-active-SA práctica |
backlog |
low |
— |
2026-06-16 06:55 |
| MARS-137 |
mars |
Orphaned-pending picks: reassign-pending-practicas handling after write-path retire (MARS-136) |
backlog |
low |
— |
2026-06-16 06:19 |
| MARS-135 |
mars |
Rotate Mars Supabase DB (postgres) password — leaked in git history |
backlog |
low |
— |
2026-06-16 05:16 |
| MARS-132 |
mars |
EXPLAIN ANALYZE teeth_agg practica report query (1661ms mean, /informes teeth aggregation) |
backlog |
low |
— |
2026-06-16 02:37 |
| MARS-131 |
mars |
Mars DB hygiene (no IO risk, found in 06-15 Disk-IO self-check): (1) VACUUM ANALYZE teacherComisionMemberships (65d stale, 19.7% dead); (2) lower autovacuum_vacuum_scale_factor on notifications (high churn); (3) drop unused idx_st_createdbyuserid on supportTickets (0 scans, 13 rows); (4) index users.comisionId when query plans warrant. All reversible, audit pre-apply DDL review. |
backlog |
low |
— |
2026-06-15 16:12 |
| MARS-123 |
mars |
Broaden skew auto-reload classifier to chunk-load TypeErrors (Load failed / Failed to fetch / ChunkLoadError / dynamic-import errors) so stale-chunk refs self-recover via one-shot cache-bust — gated on recurrence; error-report-block.tsx isVersionSkew currently matches only the exact RSC stale-bundle string. Low risk (bounded by sessionStorage one-reload-per-session + __rscRetry guard). Do NOT ship for a single transient; revisit if Load-failed/chunk-load warns recur with volume. |
backlog |
low |
— |
2026-06-14 16:43 |
| MARS-117 |
mars |
Mars: track index/DDL changes in-repo — schema.md omits indexes (0 index refs) and DDL is applied via Supabase MCP (recorded only in Supabase migrations table), so index changes like ix_appEvents_category_action_createdAt have no git-side record. Add index export to export-db.py OR adopt a db/migrations file convention so DDL is reproducible/reviewable from the repo. |
backlog |
low |
— |
2026-06-14 03:32 |
| MARS-103 |
mars |
/notificaciones modest payload trim: paginate the 100-row list + replace 100 per-row server-action-bound <form>s with one delegated action/link nav (smaller RSC payload + less hydration). Not a perf bug — cold-start was the 6s cause; this is opportunistic. No DB/infra change. |
backlog |
low |
— |
2026-06-12 07:25 |
| MARS-102 |
mars |
Weekly ux-pain digest delivery: move to Vercel-cron→authenticated-POST-to-hub→PM-drains-on-reconnect (remove relay-row/always-on-agent dependency). Blocked on llmmsg-maintainer answers: (1) can Vercel POST to hub from outside the reverse tunnel with an auth key, (2) unread-buffer retention/TTL must exceed weekly digest interval so an offline PM still receives it. Applies to mars (replace MARS-84 relay-row) + venus + pluto toast-ports. db agents are NOT 24/7 so a db-host cron is not viable; only nw agents + maybe PMs run 24/7. |
backlog |
low |
— |
2026-06-12 07:08 |
| MARS-100 |
mars |
/informes table overflows 43px @360 (861px table-wrap) — needs mobile card/scroll mode |
backlog |
low |
— |
2026-06-12 06:37 |
| MARS-92 |
mars |
Drop legacy accessRequests.status text col — statusOptionId FK is the enforced gate; plain text col is unconstrained dead weight (surfaced during Pluto PLUTO-22 cross-app alignment) |
backlog |
low |
— |
2026-06-10 06:14 |
| MARS-67 |
mars |
Index cold FK columns deferred from advisor sweep |
backlog |
low |
— |
2026-06-09 02:53 |
| MARS-63 |
mars |
Cross-app: port Mars error-digest cron (errores 24h digest email) to Pluto + Venus — Elazar greenlit 2026-06-07, NOT now. Each app gets its own daily digest cron + threshold + recipient. Pluto/Venus PMs mirror in their backlogs when picked up; this is the tracking SSOT. |
backlog |
low |
— |
2026-06-07 09:37 |
| MARS-56 |
mars |
Stop the recurring push stash-dance: gitignore untracked auditor scaffolding + resolve parked pm/codex-says.md |
backlog |
low |
— |
2026-06-07 06:21 |
| MARS-53 |
mars |
Graceful handling of stale server-action-ID (deploy-skew) in global error boundary |
backlog |
low |
coder02-mars-cc |
2026-06-06 23:12 |
| MARS-43 |
mars |
11 active studentAssignments rows with NULL assignedTeacherUserId — students with no teacher assigned (pre-dates 2026-06-06, surfaced during MARS-40). Fix path: evidence-based auto-assign per no-operator model (NOT an admin-pick UI). Triage when bandwidth allows. |
backlog |
low |
— |
2026-06-06 09:01 |
| MARS-31 |
mars |
Animated/moving notification badge: make the notification bell badge pulse/animate to draw attention to unread notifications |
backlog |
low |
pm-mars-cc |
2026-06-06 05:18 |
| MARS-22 |
mars |
student-assignment-tcm.ts peer-inference fallback (L188-234) seeds a NULL SA from OTHER students' practicas.jtpUserId/ayudanteUserId snapshot; TCM-gated (deletedAt IS NULL + role-matched) so stale teachers rejected — NOT a rule-(b) violation, low risk. Tighten to prefer live peer SA over práctica snapshot. ↳#684 |
backlog |
low |
pm-mars-cc |
2026-06-05 19:22 |
| #394 |
mars |
Dual-column status antipattern: accessRequests (status text + statusOptionId) and notifications (type text + notificationTypeOptionId) are synced by triggers — assess dropping redundant text columns in favour of UUID FK only |
backlog |
low |
db02-mars-cc |
2026-06-05 18:38 |
| MARS-5 |
mars |
informes follow-up: grader keeps credit even after student SA lapses (LEFT-JOIN vStudentAssignments on the graded axis) |
backlog |
low |
— |
2026-06-05 09:57 |
| #502 |
mars |
Enable pg_cron + daily errorDigestSnapshots table so error trends survive appEvents pruning (WI#390) |
backlog |
low |
— |
2026-05-22 06:12 |
| #492 |
mars |
Plan: patient DNI/HC number storage + cross-record sharing - enable future autocomplete-suggest, mismatch warnings ('DNI ya existe con otro nombre'), statistics |
backlog |
low |
— |
2026-05-22 06:08 |
| #390 |
mars |
Pruning strategy for append-only growing tables: appEvents (2334 rows), notifications (5202 rows), imageUploadAnalysisEvents (4327 rows) — no TTL/rotation defined; design retention policy + purge job |
backlog |
low |
db-mars-cc |
2026-05-19 04:56 |
| #202 |
mars |
Standing audit: nextjs/nodejs → Postgres pushdown — find Node-side aggregations/filters that should be DB views/functions, refactor opportunistically |
backlog |
low |
audit-mars-cc |
2026-05-18 11:04 |
| #2 |
mars |
Rename studentAssignments.jtpUserId → assignedTeacherUserId |
backlog |
low |
— |
2026-05-18 10:14 |
| #396 |
mars |
helpArticles + helpArticleTags tables: 0 rows, no known app surface — PM decision: implement in-app help or drop scaffolding |
backlog |
low |
— |
2026-05-17 05:02 |
| #395 |
mars |
studentPostgradoProgression table: 0 rows, no known app surface — PM decision: implement feature or drop table |
backlog |
low |
— |
2026-05-17 05:02 |
| #241 |
mars |
Cátedra branding sweep p3: URL slug strategy |
backlog |
low |
— |
2026-05-08 07:21 |
| #9 |
mars |
CR-8 informes/calificaciones |
backlog |
low |
— |
2026-04-30 11:12 |
| #8 |
mars |
CR-7 comisionChangeRequests |
backlog |
low |
— |
2026-04-30 11:12 |