▣ wi

All work items (latest 500)

refprojecttitlestatuspriorityassigneeupdated
MSG-73 llmmsg-srv cdw: Caddy flush_interval -1 for SSE reconnecting issue (Caddyfile) backlog low nw-venus-cc 2026-06-19 17:54
MSG-72 llmmsg-srv Bug: brainstorm_close_forbidden fires when sender=opener=pm_agent done high coder-llmmsgsrv-cc 2026-06-19 17:48
MSG-71 llmmsg-srv Bug: PM kind=brainstorm in active ARO opens sibling session instead of being rejected done high coder-llmmsgsrv-cc 2026-06-19 17:48
MSG-70 llmmsg-srv MSG-73: settled brainstorm mode (kind=settled, mode=settled, bs_settled_by) done high coder-llmmsgsrv-cc 2026-06-19 17:48
PLUTO-146 pluto DB connection scaling: verify Supavisor txn-pooler + query-shape pass (pre-scale) backlog normal 2026-06-19 17:16
MSG-69 llmmsg-srv MSG-72: hub DM to PM when all brainstorm turns complete done high coder-llmmsgsrv-cc 2026-06-19 17:15
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-139 mars Weekly-KPI JTP self-digest does not reach ayudante-picked-as-JTP recipients — JTP_SQL scopes recipients to TCM roleLabel='JTP', so an ayudante carrying real picked-práctica backlog gets no self-nudge to grade it done normal 2026-06-19 17:02
MSG-68 llmmsg-srv MSG-71: bare-DM gate for Elazar (reject_bare_dm flag) done high coder-llmmsgsrv-cc 2026-06-19 14:40
EVO-4 evolutiva Render/server errors in appEvents (appLog): verify capture parity across pluto, mars, venus + fill gaps backlog high pm-pluto-cc 2026-06-19 10:49
MARS-144 mars Práctica create: duplicate-on-retry when committed POST loses its response done someday 2026-06-17 05:38
MSG-67 llmmsg-srv MSG-67: brainstorm protocol fixes — enforce opener/PM-only close + skip post-close coaching done high coder-llmmsgsrv-cc 2026-06-17 04:30
CLEDGER-1 cledger E1: Audit & Standardize backlog high nw-whey-cc 2026-06-17 04:17
MARS-142 mars Migration-file hygiene: file 8 loose mars/db/*.sql into db/migrations/applied/NNN per fleet decision bs-mqgwqsix9s0 done low 2026-06-16 19:19
MARS-143 mars createUser GoTrue NULL-token lockout: blank 8 auth.users token cols to '' (helper + repair) — cross-project, mirrors venus 5f4e8cb done normal 2026-06-16 18:51
VENUS-21 venus bug(auth): login-lockout — roster-import createUser left NULL GoTrue token columns → 500 on login done high pm-venus-cc 2026-06-16 18:47
VENUS-20 venus bug(auth): seed scripts use raw admin.createUser → NULL-token login-lockout in seeded users backlog low 2026-06-16 18:43
MSG-66 llmmsg-srv MSG-66: blocked_agent_names table — hard-reject register/send/join for blocked names with redirect message done high coder-llmmsgsrv-cc 2026-06-16 17:48
PLUTO-144 pluto fn_getInformesBundle: include 0-practica JTPs (Opt A) across jtpStats + comparativaJtp + jtpBenchmark done urgent db-pluto-cc 2026-06-16 17:33
PLUTO-145 pluto Per-agent git worktree / path-scoped add for coder-pluto + db-pluto on venus (end shared-checkout git-add-all race) blocked normal nw-venus-cc 2026-06-16 17:24
PLUTO-143 pluto /practicas Resumen de Comisiones + per-comision cards: same KPI treatment as PLUTO-142 done high coder-pluto-cc 2026-06-16 17:18
MARS-140 mars Downgrade benign client aborted-stream errors from error→warn done low 2026-06-16 16:59
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
PLUTO-142 pluto /informes 'Practicas por JTP' KPI refinement + fix Comparativa por Adjunto done high coder-pluto-cc 2026-06-16 13:56
MSG-65 llmmsg-srv MSG-65: allow kind=brainstorm fan-out in non-whitelisted AROs done high coder-llmmsgsrv-cc 2026-06-16 13:28
#136 pluto Stage 4: Comisiones + Períodos grids — operational editing en el mismo workspace style done normal 2026-06-16 06:59
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
PLUTO-141 pluto Grading authz audit: práctica-grade permission scope vs Puia rule (comisión-wide adjunto/jtp/ayudante + titular-all) done urgent audit-pluto-cc 2026-06-16 06:27
MARS-137 mars Orphaned-pending picks: reassign-pending-practicas handling after write-path retire (MARS-136) backlog low 2026-06-16 06:19
MARS-136 mars Re-key grading attribution to práctica-pick (jtpUserId) — reverses live-SA model backlog normal 2026-06-16 06:04
OPS-20 agent-ops cc-context-monitor: send ss+Enter, wait 60s, then send /compact (not back-to-back) done high bin-whey-cc 2026-06-16 05:35
MSG-64 llmmsg-srv MSG-64: /setpm admin form — /setpm <aro> <agent> lets elazar set any ARO member as PM done high coder-llmmsgsrv-cc 2026-06-16 05:31
MARS-135 mars Rotate Mars Supabase DB (postgres) password — leaked in git history backlog low 2026-06-16 05:16
MARS-134 mars Externalize inline superuser DSN in db/backup-db.sh done normal 2026-06-16 05:03
MARS-133 mars Pin NEXT_SERVER_ACTIONS_ENCRYPTION_KEY in Vercel prod (stop per-deploy server-action-ID churn) done normal 2026-06-16 05:02
MSG-63 llmmsg-srv MSG-63: brainstorm pass/abstain after stuck-watchdog exhausts nudges done high coder-llmmsgsrv-cc 2026-06-16 05:00
MSG-56 llmmsg-srv ccs.sh: write LLMMSG_AGENT=$LABEL to .llmmsg-env on launch so UserPromptSubmit hook always registers with suffix-correct identity (fleet-wide phantom-seat fix) done high bin-whey-cc 2026-06-16 04:28
MSG-62 llmmsg-srv hub MSG-59: stuck watchdog must skip only offline/dormant agents — exclude registered+online agents from auto-skip (compaction != absent) done high coder-llmmsgsrv-cc 2026-06-16 04:23
MSG-61 llmmsg-srv hub: brainstorm busy-nudge exclusion + threshold bumps — exclude kind=brainstorm from BUSY_NUDGE; BUSY_NUDGE_HUMAN_S 5→300, BUSY_NUDGE_AGENT_S 30→600, REPLY_NUDGE_AGE_S 180→900 done high coder-llmmsgsrv-cc 2026-06-16 04:23
MSG-60 llmmsg-srv hub: close-quorum soft warn — kind=decision with pending expected turns warns PM (force:true to override), does not hard-block done high coder-llmmsgsrv-cc 2026-06-16 04:23
MSG-59 llmmsg-srv hub: brainstorm-stuck-alert — setInterval watchdog DMs ARO PM when pending turns > 5min idle, auto-skips pending agents after 2 DMs with no movement (drops from expected_json, unblocks brainstorm) done high pm-llmmsgsrv-cc 2026-06-16 03:51
MSG-58 llmmsg-srv hub /send + MCP shim: multi-destination send (to as string|array, N rows one call, recipients[] in response) done high pm-llmmsgsrv-cc 2026-06-16 03:20
MSG-57 llmmsg-srv hub /send + MCP shim: improve aro_fanout_denied error message (explain reason, redirect to DM or multi-dest) done normal pm-llmmsgsrv-cc 2026-06-16 03:20
PLUTO-140 pluto DB-perf collector — Pluto app leg (fleet bs-mqg1357zx6m decision): provide Pluto's leg of the evolutiva-dbperf@pluto snapshot+diff collector. (1) dbperfSnapshots table via migration — PARITY with venus's canonical schema (get the DDL + 4-query set from db-venus/pm-venus so all 3 apps match byte-for-byte, like the applog rail); telemetry-table discipline (NO archive-context, short retention prune mirroring appEvents). (2) GRANT the existing applog least-priv reader role SELECT on the snapshot table + the catalog/stat views the 4 queries read (cache / pg_stat_statements top-50 / seq-scans / dead-tuples). (3) hand nw-venus the reader-grant confirmation so it can stand up the systemd timer (daily 04:30 ART → biweekly → monthly). Reversible: drop table + disable timer. Coordinate schema parity with venus BEFORE applying. done normal db-pluto-cc 2026-06-16 03:00
VENUS-19 venus feat(infra): DB perf snapshot+diff collector (dbperfSnapshots) backlog normal 2026-06-16 02:41
PLUTO-139 pluto DB-health sweep follow-ups (from PLUTO-138, non-urgent): (1) verify practicas.idx_practicas_editlocked query path — drop if genuinely cold; (2) confirm userAuditLogLegacy table is retired → archival candidate (table+idx); (3) FK-usage audit: of 64 advisor-flagged unindexed FKs, identify which appear in live WHERE/JOIN (hot) vs audit/write-path (createdBy/deletedBy/archivedBy — leave cold), index only the hot ones via migration w/ archive-context. Don't index/drop blindly — query-path verify first. backlog low coder-pluto-cc 2026-06-16 02:39
PLUTO-138 pluto DB-health one-shot inspect sweep (Supabase inspect-db via MCP): outliers/cache-hit/unused-indexes/seq-scans/bloat/vacuum-stats/locks-blocking/long-running + get_advisors(performance). Triage real findings, keep/drop to PM. Fleet inspect-db monitoring rollout (bs-mqg1357zx6m). Caveat: pg_stat_statements recently reset (PLUTO-134), lookback thin. done high db-pluto-cc 2026-06-16 02:39
MARS-132 mars EXPLAIN ANALYZE teeth_agg practica report query (1661ms mean, /informes teeth aggregation) backlog low 2026-06-16 02:37
PLUTO-137 pluto Inactivity-warning baseline floor: don't count dormancy before 2026-06-09 clinical go-live done normal db-pluto-cc 2026-06-16 02:10
PLUTO-134 pluto Supabase Disk-IO budget alert (2026-06-15) disposition: reads clean (99.96% cached). Two analyses diverge on write driver — (1) */2 rate-spike cron churn vs (2) one-time Jun-14 PLUTO-128/130 DDL burst + pg_dump catalog walks. Discriminator = IO graph shape (spike=one-time self-clearing; plateau=cron lever PLUTO-67). GATED on Elazar interval ruling if plateau. No compute upgrade warranted. done normal 2026-06-16 02:05
MSG-55 llmmsg-srv cc-context-monitor: remove drain poke, fix zombie alerts (route+cooldown+threshold+allowlist) done high bin-whey-cc 2026-06-16 01:39
MSG-54 llmmsg-srv KPI Track A: ADD pg views (usage.v_kpi_tokens_7d + context.v_kpi_compact_7d) + extend scrp-kpiweekly-whey (email + snapshot/live-read) backlog high bin-whey-cc 2026-06-16 01:23
PLUTO-133 pluto feat(toast-telemetry): log guardrail toasts to appEvents as toast/error-shown (bs-mqfa6wg9bi8 (b)) done normal coder-pluto-cc 2026-06-15 17:16
PLUTO-135 pluto bug: pluto-lifecycle-inactivity cron FAILED nightly since 2026-06-09 — fn_lifecycleInactivity() UPDATEs users without SET LOCAL app.user_id GUC, so fn_archive_users() trigger rejects (line 21). 7+ days silent-dead, prod. Fix: set archive-context (app.user_id sentinel + app.archive_reason) in-txn before the users UPDATE per archive discipline; audit pre-apply review (fn + trigger-archived users table). done high db-pluto-cc 2026-06-15 17:14
PLUTO-136 pluto PLUTO-133 follow-up (Elazar 5b, sequenced AFTER the main toast sweep ships): should-be-required / data-integrity candidates needing a verify pass then fix — (1) periodo date-range fechaFin<=fechaInicio unvalidated client+server; (2) practica rejection comentario not required; (3) destructive activo toggles (periodo/comision) no confirm dialog → toggle-off cascades; (4) admin create-user with no role → primaryRoleId NULL → blank-redirect login. Verify each path first (2nd-sweep agent guessed some), then fix. Do NOT start until PLUTO-133 main sweep is shipped. backlog normal 2026-06-15 16:33
VENUS-18 venus fix(perf): drain-outbox slow-query — idle-gate + idx_emailOutbox_active partial index done normal 2026-06-15 16:19
VENUS-17 venus chore(db): emailOutbox terminal-row retention prune — sent/permanentlyFailed rows never deleted, accumulate unbounded (was factor in drain-outbox seq-scan slow-query). Add retention prune for sent/permanentlyFailed older than ~30d (evolutiva-commons retention hygiene; emailOutbox not audited → no setArchiveContext needed). Non-urgent: partial index on status IN ('pending','sending') already neutralizes perf impact; this caps table growth. Note: drain-outbox idle-gate + partial-index fix in flight separately. backlog normal 2026-06-15 16:13
VENUS-16 venus chore(db): index unindexed FKs on live query paths backlog low 2026-06-15 16:13
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-128 mars UX: take-to-gap inline cue for 'Seleccioná al menos una pieza dental' no-teeth-selected submit gate (practica-form line 401) — match MARS-99 pattern done low 2026-06-15 16:09
VENUS-13 venus feat(telemetry): device/viewport coarse-banded capture + most-used-viewport report for mobile UX, riding appEvents rail done normal 2026-06-15 16:07
MARS-130 mars Data-min hardening of client-env viewport telemetry: drop raw userAgent + exact px + session_id, store fine width buckets + dpr bucket + orientation + deviceType + OS-family, keep actorUserId for role tie done normal 2026-06-15 16:03
VENUS-12 venus feat(cursada): sede self-selection UNBUILT — students cannot pick rotation sede (mi-cursada only filters); go-live blocker per client 2026-06-09 done high pm-venus-cc 2026-06-15 15:59
VENUS-15 venus chore(db): prune legacy viewport fingerprint rows — 132 pre-reshape client-env/viewport rows store exact-px+full-UA+userId, IMMUTABLE (wi302 appevents-immutable), no retention-prune job → persist indefinitely. Reshape (VENUS-13) stops new fingerprints only. Prune via db-venus SET LOCAL app.bypass_immutable. Irreversible deletion → Elazar go/no-go required. Pre-go-live test-user data (21 testers), low stakes. blocked normal 2026-06-15 15:46
MARS-129 mars Device viewport telemetry: one-per-session client-env/viewport appEvent + /api/log-client-env route + breakpoint-band aggregation for mobile UX done normal 2026-06-15 14:41
VENUS-14 venus feat(ptd): authed-route PTD tooling — PTD render-GET can't exercise authed routes (302/login); authed pages + authed-only behavior (toast/error-shown producer, práctica gates) never runtime-verified. Fix: in-process self-check route (preferred) or least-priv stored session for manual authed pass. Sibling: MARS-118. backlog normal 2026-06-15 14:39
VENUS-11 venus bug(validation): D3-4/5 antecedentes parent-checked-no-children + complicaciones notas/ids mismatch — advisory-log-only to measure real-user frequency deferred normal 2026-06-15 14:38
VENUS-10 venus feat(ux): práctica-form UX-friction sweep — all-errors-inline (Model-A), zero-operador+sede=Otros gates, toast/error telemetry PRODUCER, D3-4/5 advisory log-only done normal 2026-06-15 14:37
MARS-127 mars UX: eliminate /practicas/nueva guardrail toasts (piece-required add+submit, combined-image-size) via inline affordance enforcement done normal 2026-06-15 14:06
#619 llmmsg-srv aro_leave-on-idle rule: llmmsg-protocol.md ARO-Membership canonical + per-agent CLAUDE.md one-liner (self-leave non-essential AROs when last task done, stay registered, rejoin on assignment) ↳#617 done high pm-llmmsgsrv-cc 2026-06-15 09:15
MSG-52 llmmsg-srv Post-migration team restructure: PM=single always-on front door + retire support + rename hub-llmmsgsrv-cc to coder-llmmsgsrv-cc (ARO-less on-demand) done normal pm-llmmsgsrv-cc 2026-06-15 08:39
MSG-51 llmmsg-srv Triage edge LLMMSG_HUB_BEARER rotation: exposed on GitHub via api-images repo (NOT llmmsg-only exposure, so no-rotate rule does not apply) backlog normal coder-llmmsgsrv-cc 2026-06-15 08:39
MSG-50 llmmsg-srv dm-* send-authorization: reject non-owner/non-host-nw/non-Elazar sends to or origin_aro'd-as aro:dm-* backlog low coder-llmmsgsrv-cc 2026-06-15 08:39
MSG-49 llmmsg-srv Unknown /command errors back to sender (not silent-send); usage-error on malformed known verb backlog normal coder-llmmsgsrv-cc 2026-06-15 08:39
MSG-38 llmmsg-srv POST /unregister route: deregister permanence for VENUSINF waves - {agent,caller,[bearer]}; txn validate->capture-PM-AROs->deleteAroByAgent->electPm-each->deleteRosterRow; PRESERVE cursors (optional purge_cursor:true default false); idempotent 200 already_absent; auth self-dereg ungated + admin-dereg edge-bearer interim soft-dep #599; HTTP-only (no MCP tool). Replaces hand-SQL roster DELETE dereg-at-cutover. backlog high coder-llmmsgsrv-cc 2026-06-15 08:39
MSG-32 llmmsg-srv init-db.sh drift: stale messages schema (generated tag + phantom cols) contradicts hub.mjs self-create / live DB - reconcile or demote backlog high coder-llmmsgsrv-cc 2026-06-15 08:39
MSG-23 llmmsg-srv hub.mjs latent SQLITE_ERROR: 'no such column: ""' at Database.prepare (seen 00:47:15 pre-restart). Route interpolates empty string into query as = "" (SQLite parses "" as column id). Find the unparameterized query, convert to bound params. Route-triggered, not fixed by restart. Also tidy hub.mjs:1007 error string to match widened regex. backlog normal coder-llmmsgsrv-cc 2026-06-15 08:39
MSG-13 llmmsg-srv Hub leaks direct DMs into sender's home ARO: kind=dm fanned to origin_aro roster (cc-context-monitor-venus DMs reaching nw-venus-cc) backlog high coder-llmmsgsrv-cc 2026-06-15 08:39
MSG-5 llmmsg-srv Post-/compact re-register reliability: hook-fire blind spot + hook-independent shim re-register net backlog high coder-llmmsgsrv-cc 2026-06-15 08:39
#597 llmmsg-srv Hub cleanup traps (post-#594): systemd unit sets LLMMSG_SRV_DB but code reads LLMMSG_DB (no-op env var); stale llmmsg.sqlite + init-db.sh schema conflicts with live v2.sqlite backlog low coder-llmmsgsrv-cc 2026-06-15 08:39
#596 llmmsg-srv Refresh venus /opt/llmmsg-srv flat copy from whey (hub.mjs+shim) - stale May-18 scp caused misdiagnosis; do NOT delete (venus MCP shim runs from it) backlog low coder-llmmsgsrv-cc 2026-06-15 08:39
#540 llmmsg-srv Shim transport prefer-list: loopback -> ZT -> public DNS (defer until W3+W4 prove design) ↳#531 backlog low coder-llmmsgsrv-cc 2026-06-15 08:39
#634 llmmsg-srv Durable GC for stale bridge registrations (TTL prune) - no more retired-codex corpses in registrations.json deferred normal coder-llmmsgsrv-cc 2026-06-15 08:39
#621 llmmsg-srv WI592 nag: drop CronCreate /compact from emit_context_budget_nag interactive branch once send-keys watchdog verified fleet-wide ↳#617 backlog normal coder-llmmsgsrv-cc 2026-06-15 08:39
#616 llmmsg-srv Push llmmsg protocol mechanics into MCP send tool + hub (shrink model-held context) backlog normal coder-llmmsgsrv-cc 2026-06-15 08:39
#615 llmmsg-srv chat-duo-web 9704 to lezama: move off whey-initiated -R (VPN-dependent) to lezama-initiated -L over public route ↳#531 backlog normal coder-llmmsgsrv-cc 2026-06-15 08:39
#577 llmmsg-srv Fix static ~/.codex/config.toml footgun: wrong key LLMMSG_AGENT->LLMMSG_AGENT_NAME + LLMMSG_SRV_HOST 127.0.0.1->public; bare codex (not via ca.sh) currently falls back to cc= in /opt/llmmsg-srv = registers as pm-llmmsgsrv-cc on loopback. Non-blocking; ca.sh -c overrides already bypass it ↳#572 backlog normal coder-llmmsgsrv-cc 2026-06-15 08:39
#603 llmmsg-srv Alert when a CC session is blocked on interactive prompt (AskUserQuestion menu / permission approval / ExitPlanMode): wire CC Notification hook (or transcript-watcher fallback) to DM elazar via llmmsg-srv naming the blocked agent+host. Solves operator having to hunt tmux windows. Research dispatched to claude-code-guide. backlog high coder-llmmsgsrv-cc 2026-06-15 08:39
#599 llmmsg-srv Close aro_config auth gap: token-gate POST /aro_config + other privileged hub writes so a forged caller=elazar fails (coder-applog-cc exploited it to flip aro:applog PM). Elazar approved ship. backlog high coder-llmmsgsrv-cc 2026-06-15 08:39
#573 llmmsg-srv Design + LIVE-TEST ca.sh: reads ca= from .agent-name, codex --dangerously-bypass-approvals-and-sandbox, injects -c mcp_servers.llmmsg-srv.env.LLMMSG_AGENT_NAME + LLMMSG_HUB_URL; PROVE shim auto-registers under ca name (roster check) before calling done ↳#572 backlog high coder-llmmsgsrv-cc 2026-06-15 08:39
OPS-13 agent-ops Implement scrp-<script_name>-<host> sender naming: notify-elazar.sh + notify-nw.sh derive scrp-$(basename caller, strip ext, - to _)-<host> and stamp it as hub sender + email From-name/subject prefix; rename direct-hub-poster scripts (evolutiva-errscan errscan-whey-cc to scrp-evolutiva_errscan-whey, llmmsg-kpi-report llmmsg-srv-cc fallback to scrp-kpi_report-whey, sweep rest). -cc/-ca reserved for real agents. Convention: agent-conventions.md Script/Automated Sender Naming (Elazar 2026-06-10) done normal bin-whey-cc 2026-06-15 08:32
MSG-53 llmmsg-srv Hub-side script-rename impact confirm: nothing keys off old cc-context-monitor-<host> sender name (roster.host backfill, /fleet_health, routing) after rename to script-ctxmonitor-<host> done low hub-llmmsgsrv-cc 2026-06-15 08:30
OPS-19 agent-ops cc-context-monitor FIX#1+#2: idle-sense (last-ASSISTANT-ts not getmtime) + safe-compact REPL-ready marker done normal nw-whey-cc 2026-06-15 08:29
OPS-18 agent-ops monitor peer-watchdog: roster-presence→probe-age (post-wave-1 prune-churn fix) done normal nw-whey-cc 2026-06-15 08:29
PLUTO-131 pluto Email deliverability: Pluto-specific spam deltas vs mars/venus (from-identity noreply-class + 'BMF 1' display, text-only not multipart, Reply-To mismatch). F1 named-from, F2 auto-render html multipart (standing Elazar rule), F3 align Reply-To. Audit report audit-pluto-cc-mqdhup806iis. done normal 2026-06-15 08:20
MSG-30 llmmsg-srv VENUSINF: venus infrastructure migration coordination (Phase 0-3) done high pm-llmmsgsrv-cc 2026-06-15 08:08
PLUTO-132 pluto feat(soporte): copy mars soporte into pluto deferred normal 2026-06-15 07:32
VENUS-9 venus feat(soporte): copy mars soporte into venus deferred normal 2026-06-15 07:24
MSG-48 llmmsg-srv Brainstorm sessions follow speaking-order protocol end-to-end (cdw+hub) + coach violators + terse AI-shorthand brainstorm protocol in llmmsg-protocol.md done normal pm-llmmsgsrv-cc 2026-06-15 04:54
MARS-30 mars Adopt .gitpush-strict marker in Mars repo root to prevent add -A peer-WIP sweeps done high coder02-mars-cc 2026-06-15 03:56
MSG-47 llmmsg-srv MSG-30 lezama: coordinated full-tree pull-forward (shim v2.9.47 + bootstrap v1.19 + package.json, atomic) - replaces nw-lezama hand-patch, un-dirties staged v1.18 bootstrap backlog low pm-llmmsgsrv-cc 2026-06-15 03:37
MSG-46 llmmsg-srv cdw PWA: make chat-duo-web installable (manifest+icons+service worker, Add-to-Home-Screen) backlog normal coder-chatduo-cc 2026-06-15 02:51
MSG-45 llmmsg-srv /setpm regex: tolerate optional space after slash ('/ setpm') - human typo-forgiveness on the cdw-facing command done normal hub-llmmsgsrv-cc 2026-06-14 22:37
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
MSG-44 llmmsg-srv Hub control-verb /setpm <aro> <agent>: Elazar self-service PM reassignment from cdw chat (gated sender==elazar, roster-validated) done high hub-llmmsgsrv-cc 2026-06-14 22:11
MARS-98 mars Migrate 3 raw <select>s to the Select primitive (mobile-first debt) done low 2026-06-14 22:08
MARS-49 mars KPI email templates emit full <!doctype> nested inside wrapHtml (double-chrome) — return inner-content-only like support-digest done low 2026-06-14 21:36
MARS-113 mars Add global client-error handler (window.onerror + onunhandledrejection) to Mars for telemetry parity — currently only React-boundary + server errors are captured; async unhandled rejections / raw event-handler throws go uncaptured (no clientWindowError family exists). Additive coverage, not a defect. MUST serialize err.message/.name/.stack as discrete fields (NOT raw object → '[object Object]') per the venus fc69b24 lesson. Surfaced by cross-app applog review. done low 2026-06-14 21:36
MARS-114 mars Delete dead code: SortableHeader component (zero usages; live tables go through DataTable) done someday 2026-06-14 21:26
MARS-124 mars MARS-84 durability follow-up: move the ux-pain-digest hub-DM relay from agent-side CronCreate to the venus host-poller (systemd-grade) — curl /api/internal/latest-ux-pain-digest weekly + DM PM+Elazar; needs CRON_SECRET in the host store + maintainer coordination. CronCreate dies with the agent session (misses a week if down at fire time); email leg backstops but DM should be durable. done normal 2026-06-14 21:25
#1 mars Drop comisionCode from vTeacherComisiones done low 2026-06-14 21:25
MARS-115 mars Profile-image IDOR: /api/image/[id] open-proxies profile blobs when no practicaImages row matches; gate on profileImageId ownership (self+admin) else 404 done normal 2026-06-14 21:19
MARS-105 mars appEvents severity misclassification: notify-email-failed + client/unhandled-error logged as warn (should be error); navigation/practica-link-dead logged as info (should be warn) done normal 2026-06-14 21:19
MARS-93 mars sa-teachers-cascade over-flags needsManualReview on unresolvable ayudante (recurring warn). Scope needsManualReview to JTP slot only — ayudante is informational per JTP-only-grading rule; + make the cascade warn idempotent (skip re-emit when SA already needsManualReview) so one batch \!= N pager hits done normal 2026-06-14 21:19
MARS-61 mars postgrado-progression.tsx Guardar lacks double-submit guard — bare async action (no useTransition), double-click fires two updatePostgradoProgression UPDATEs + two archive rows. Fix: wrap in useTransition + disabled={isPending} (~5 lines, same pattern as SupportReplyForm) done normal coder02-mars-cc 2026-06-14 21:19
MARS-59 mars Email outbox: persist + cron-retry user-facing sends so SMTP timeouts never block the user or drop mail done normal 2026-06-14 21:19
MSG-41 llmmsg-srv VENUSINF-5: public cdw URL (cdw-t.pensanta.com) - native venus cdw deploy + Caddy edge w/ human-auth, replacing Tailscale-only :9704 done high pm-llmmsgsrv-cc 2026-06-14 20:47
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
MSG-43 llmmsg-srv Rationalize errscan-vs-applog overlap fleet-wide (both = error->PM-DM; applog covers all 3 proj+now green, errscan mars-only, mars DOUBLE-covered) - decide consolidate-not-expand; needs PM/Elazar division-of-labor call deferred low pm-llmmsgsrv-cc 2026-06-14 15:04
MSG-42 llmmsg-srv Post-VENUSINF systemd-client bearer sweep: applog-pull/listen + errscan inject LLMMSG_HUB_BEARER (hubPost hardcoded bearerless, applog-pull.ts:121) + per-instance bearer env across hosts - restores fleet alerting (applog-pull@pluto unauthorized live) done high nw-venus-cc 2026-06-14 14:57
#553 llmmsg-srv chat-duo: rebuild Elazar Pending sidebar pane properly (removed v1.19.3) done low coder-chatduo-cc 2026-06-14 14:18
MSG-37 llmmsg-srv cdw periodic flicker: loadAgentStyles 60s poll triggers repaintStyles()->loadHistory() (feed.innerHTML='' + refetch = full feed teardown) on ANY agent_styles change. /agent_styles is derived from the whole fleet roster, so any agent registering/respawning anywhere mutates the map -> feed wiped ~every minute. Fix: repaintStyles must recolor names in-place, not reload the feed. done high pm-llmmsgsrv-cc 2026-06-14 14:17
MSG-40 llmmsg-srv SECURITY: rotate leaked LLMMSG_EDGE_BEARER (venus edge-bearer) - committed to PUBLIC GitHub (pluto feat/tenant-isolation commit 5ab8c34), history-purged+force-pushed but exposure window real = treat compromised. Fleet-wide blast: venus hub LLMMSG_EDGE_BEARER env + EVERY migrated agent .llmmsg-env (LLMMSG_HUB_BEARER, ~26) + cdw service env + possibly Caddy edge config. Method: dual-bearer grace (zero-outage) preferred over coordinated bounce. Owner pm-llmmsgsrv-cc coordinating; hub-llmmsgsrv hub-code, nw-whey .llmmsg-env sweep, nw-venus venus-host exec, coder-chatduo cdw. done high pm-llmmsgsrv-cc 2026-06-14 14:15
MSG-39 llmmsg-srv cc-context-monitor hub-aware unregistered-check: whey-only roster read false-flags every VENUSINF-migrated agent (off-host .llmmsg-env) as 'genuine registration failure' + auto-heal-then-reflag loop. Fix: check agent against the hub its launch-cwd .llmmsg-env names (or exclude off-host-.llmmsg-env agents from the whey-scoped check). Blocks broad pluto/venus/whey cutovers (noise flood + auto-heal race); mars (5 agents) tolerable. Owner bin-whey-cc (monitor script). done high bin-whey-cc 2026-06-14 10:05
OPS-17 agent-ops cc-context-monitor zombie-detector false-positives on reactive-idle agents: rule (turns>=2 && tool_calls==0 -> zombie) can't distinguish a self-armed-wakeup zombie from a reactive agent woken by inbound llmmsg DM that acked + stood down with no tools needed. At 05:00 it flagged audit-venus-cc (benign: empty CronList, zero ScheduleWakeup ever, 100% inbound-DM-driven) -> 2 dup alerts + cross-host investigation. Hits EVERY reactive agent (host nw between alerts, audit agents). Fix (nw-whey suggested): a wake is zombie-suspect only if NOT preceded by an inbound message in the window (self-triggered) AND/OR non-empty CronList; if wake correlates with inbound DM + empty CronList -> reactive-idle, suppress. Hub has inbound-msg timestamps to correlate. Related: OPS-11 last_turn stale-read. backlog normal bin-whey-cc 2026-06-14 08:03
PLUTO-130 pluto alumno->docente conversion leaves dangling studentAssignment (Elazar greenlit fix-the-flow). When a user is converted alumno->docente (alumno role soft-deleted + docente role added), the conversion does NOT soft-delete the user's active studentAssignment (enrollment) — so they remain a 'current student' of a comisión while being a docente. Found via Mariano Trigo (c8fe9bcb): active F-Sábado studentAssignment persists post-conversion. FIX: (1) coder — conversion code path must ALSO soft-delete the studentAssignment (archive-context, studentAssignments is trigger-archived); (2) db — clean existing stale stubs (all users with active studentAssignment + active docente role + no active alumno role) with archive-context+reason. SCOPE FIRST (db read-only): conversion code path + count/list inconsistent-state users. done high db-pluto-cc 2026-06-14 07:39
PLUTO-128 pluto PROD bug (Elazar blocked): no UI affordance to assign a teacher to a comisión. On /admin/usuarios/c8fe9bcb-03ac-45d1-8241-6e5d1420afe4 (a docente) there is NO button/link to add him to a comisión, nor to assign a comisión to him. Investigate: is the teacher->comisión assignment UI shipped anywhere (comisionJtps/comisionAdjuntos/titular write path) or absent (Stage 4 / PLUTO-133/136 blocked)? Missing-link vs missing-capability? Fix so an admin can assign. WRITE TARGET = fraud-sensitive assignment tables: soft-delete only + archive context + role-aware (titular/adjunto/jtp) + capability-gated. Likely unblocks PLUTO-61 (3 real unassigned docentes). Audit design-ping before implement (fraud-table write path). done high coder-pluto-cc 2026-06-14 07:19
PLUTO-129 pluto Hardening: roster-add forms allow adding a fraud-table membership into a NON-current/closed period — isPeriodoValid checks only deletedAt IS NULL, not isCurrent. Affects BOTH the new docente-detail add-form (PLUTO-128) AND the already-shipped list-page dialog (docentes/page.tsx) — PARITY, not a 128 regression. If cross-period roster-add is NOT an intended workflow (pre-stage future / correct past period), gate both forms on isCurrent. PENDING Elazar's intent call (is cross-period add a feature?). Surfaced by audit on PLUTO-128 pre-push review. backlog normal 2026-06-14 07:11
MARS-121 mars DB: drop 18 unused indexes (8 practicaTeeth clinical-filter + 3 practicaToothConductos + 3 practicas demographic + comisionId/accessRequestId/entitySeq/support/lock dead indexes); KEEP ix_appEvents_category_action_createdAt (new, stats unpopulated); reduces write amplification; audit pre-apply migration done normal 2026-06-14 06:57
PLUTO-38 pluto pg_cron pluto-drain-email-outbox fails 674/674: schema "net" does not exist (pg_net not installed) done normal db-pluto-cc 2026-06-14 06:55
MARS-120 mars DB hygiene sweep: pull Supabase security + perf/index advisors + log planes (postgres/auth/api/storage/edge); analyze real signals vs infra noise; keep/drop report to PM; DDL via audit pre-apply done normal 2026-06-14 06:51
MARS-119 mars DB: search_path hardening (lint 0011) — audit SECURITY DEFINER fn subset FIRST (privesc priority), then pin SET search_path=public on flagged fns; behavior-preserving; DDL via audit pre-apply done normal 2026-06-14 06:51
PLUTO-126 pluto Email retry/failure backstop gap (pre-existing, exposed by PLUTO-38 cron-drop): after dropping the dead drain-email-outbox cron, Pluto has NO email retry and NO failure alert. A failed send (SMTP timeout) strands the row 'pending' forever — no retry, no operator alert (the alert-after-5-attempts only ever fired from the now-dead drain, which never functioned anyway). Invisible today (0 pending). Live happy-path = Next.js after()-hook send. Restore options: (a) pg_net+pg_cron */5 GATED drain (sanctioned path; vercel.json CANNOT host sub-daily cron — fails the whole build); (b) external scheduler; (c) minimum cheap win = alert-on-strand observability (appEvents warn when a row sits pending > N min). Disposition: reliability vs cron-cost — Elazar's call. Not urgent. backlog normal db-pluto-cc 2026-06-14 06:50
PLUTO-122 pluto search_path hardening migration: pin SET search_path on all 36 public functions (function_search_path_mutable lint 0011). Behavior-preserving (most ref public -> SET search_path = public; do NOT use '' on any fn referencing public objects unqualified - verify each resolves identically). Additive/reversible. 0 SECURITY DEFINER fns so risk near-zero; Elazar greenlit anyway for a clean advisor. Audit pre-apply (schema DDL) -> apply -> db:export -> push via db exception lane. done normal 2026-06-14 06:47
PLUTO-125 pluto Advisory (low pri): enable auth_leaked_password_protection (HaveIBeenPwned check) in Supabase auth — currently disabled. Low value for Pluto (allowlist-only, no open signup) but a free defense-in-depth toggle. From PLUTO-123 security sweep. backlog low 2026-06-14 06:44
PLUTO-123 pluto Supabase security+logs analysis sweep (Elazar directive, all 3 apps): db agent pulls Supabase security advisor + logs (postgres/auth/api/storage/edge-function) and ANALYZES them - triage real signals (auth anomalies, error spikes, slow queries) vs known infra noise (JWKS, PostgREST probe, pool churn). Periodic DB-hygiene sweep per evolutiva-commons. Report findings to PM for consolidated report. done normal 2026-06-14 06:44
OPS-15 agent-ops settings.json PostToolUse push-to-gdrive-canonical silently no-ops: basquetwi.md local edits did NOT propagate up to /gdrive/config/claude-shared/ (canonical stayed mtime May-18), so SessionStart cp re-pulled STALE over the edit. Hook's 'cp ... 2>/dev/null' swallows failures = silent doc drift fleet-wide. Audit why push no-ops + surface failures. done high nw-whey-cc 2026-06-14 06:42
BWI-10 basquetwi wi ask: drop hardcoded assignedTo='elazar' default + retire stale_elazar_questions_gt_7d doctor check (OPS-16 code part) todo normal coder-basquetwi-cc 2026-06-14 06:40
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
OPS-16 agent-ops Scrub stale eq / Elazar Pending text from bwi-tool PROJECT canonical docs (MSG-36 followup): /home/rob/Documents/work/pensanta/projects/basquetWi/basquetWiInstructions.md + that project's CLAUDE.md still carry old eq/Pending wording. Not the global-rule SSOT (gdrive is, already fixed) but scrub for consistency. Owner: bwi-tool maintainer. backlog normal pm-basquetwi-cc 2026-06-14 06:39
PLUTO-121 pluto KPI-rework /informes (gathering inputs, do NOT implement yet): teacher-scoped report quality pass. Inputs so far: (a) wrap bare CohortAndProcedureCards grid (teacher-report.tsx:818) in titled ReportSection; (b) Moda operador/asistente cards mislabeled (modal per-student count, not most-frequent person) + redundant beside Promedio -> cut or relabel; (c) EPI RE-WEIGHT: Puia wants MORE epidemiology on pluto+venus -> KEEP/EXPAND porSexo/porProvincia/etc (REVERSES earlier generic-remove rec; do NOT cut epi buckets). Grounding: judge on ACTUAL teacher-scoped values via audit-venus KPI->source-view map + db-pluto value pull, NOT admin-proxy shape. Awaiting full KPI->view map (~20-30min from audit-venus) + Elazar per-item rulings before WI splits into coder/db work. backlog normal 2026-06-14 06:25
PLUTO-127 pluto └─ /informes top summary cards grouping (Elazar GO now): wrap the bare top-of-report totals cards — Total prácticas, Como operador (%), Como asistente (%), Alumnos activos — in a single titled ReportSection matching the sibling pattern (same as PLUTO-124's 'Resumen de cohorte y procedimientos'). Wrapper/title only, values+logic unchanged. teacher-report.tsx. UI-only, post-push PTD. done high coder-pluto-cc 2026-06-14 06:55
PLUTO-124 pluto └─ /informes immediate UI fixes (Elazar GO now): (a) wrap bare CohortAndProcedureCards grid (teacher-report.tsx:818) in a titled ReportSection matching sibling sections; (b) CUT 'Moda operador/asistente' cards (mislabeled modal-per-student count, redundant beside Promedio) + remove now-dead computeMode/opCounts plumbing ~1199-1201, keep Promedio. UI-only, post-push audit PTD. Rest of KPI-rework held under parent 121. done high coder-pluto-cc 2026-06-14 06:47
MSG-36 llmmsg-srv Strip eq / 'Elazar Pending' feature fleet-wide (Elazar directive 2026-06-14): hub routes, MCP eq_* tools, cdw web + chat-duo GTK panes, DB table, all docs/CLAUDE.md/memory. Replacement rule everywhere: ask Elazar via llmmsg-srv DM. Stale eq_add call -> hard 'eq retired' error. done high pm-llmmsgsrv-cc 2026-06-14 06:19
PLUTO-118 pluto Demo-data UI+route gating behind SHOW_DEMO_TOOLS flag (server-side, default FALSE, byte-identical fleet-wide). Conditional-render not CSS-hide (no DOM/view-source leak) for ALL roles incl admin; gate demo UI surfaces AND seed/teardown server actions/routes (403/404 when off — seal the injection path, not just the button). Keep code: flag-gated in main, CI typecheck touch so demo path compiles, one-line README. Pluto surfaces: createdVia='demo_seed', demo teardown route, @demo.pluto allowlist (email-allowlist.ts), seed-demo script, any isDemo/demo badge/filter/nav. Existing demo ROWS = separate db-op, Elazar's call (Pluto LIVE → purge demo-labeled only w/ archive-context, or leave hidden). BLOCKED on Elazar greenlight + nw-whey's cross-app enumeration checklist. done normal coder-pluto-cc 2026-06-14 06:13
#578 llmmsg-srv hub nudge to drive eq adoption: when an agent DMs Elazar a prose blocking-question and hasn't filed a matching eq, hub nudges sender to use eq_add (sibling to reply-nudger/idle-alert; conservative heuristic; env-disable flag) done normal hub-llmmsgsrv-cc 2026-06-14 06:11
MSG-19 llmmsg-srv eq stale-removal: one-click dismiss/stale in chat-duo Pending pane + auto-stale sweep (auto-dismiss when ref_bwi closes / N-day age) done normal coder-chatduo-cc 2026-06-14 06:11
MSG-18 llmmsg-srv chat-duo-web: auto-expire/hide eq entries when no longer relevant (stale Elazar questions clutter the Pending panel — e.g. the lezama cert/kernel eq Elazar just flagged 'this is old'). Hook to wi doctor's >7d Elazar-Q drift + an age TTL or resolve-on-supersede. done normal 2026-06-14 06:11
PLUTO-115 pluto Venus R2 Dim-8 perf findings (fec7fc4, read-only — db must EXPLAIN-verify each on live plans before fix; rank by absolute ms/day not label). HIGH: F1 adjuntoNames correlated subquery ×270 (vActiveRoster + vPracticasHierarchyRollup + getPracticasTeamStats queries.ts~1840) → pre-agg CTE/LEFT JOIN; F2 getDocenteProductivity MIN(createdAt) correlated subquery ×118 (queries.ts~1698) → reviewDates CTE; F3 missing btree practicaReviews.practicaId → CREATE INDEX CONCURRENTLY; F4 vUserLastLogin appEvents full-scan every admin page → partial idx (actorUserId,createdAt DESC) WHERE category=auth AND action=login. MED: F5 getCorrelationReport nested correlated (~1785); F6 getYoyComparison 6 scalar correlated → conditional agg. LOW: F7 getAnomalyReport UNION-ALL opportunity (~1450); F8 vUsersWithRoles 3 correlated/user (admin-only). done normal 2026-06-14 06:07
PLUTO-120 pluto Phase-2 demo cleanup (BLOCKED on demo-row purge): strip the now-unneeded demo filters/labels/tab once Elazar purges demo rows. These are PROTECTIVE while rows exist — removing earlier leaks demo data into real reports. Sites: admin/page.tsx:11 (@demo pendingUsers filter), informes/page.tsx:117-121 + practicas/page.tsx:139-142 ('Demo ' comision filter), admin-user-detail.tsx:68/127 + audit-log.tsx:122 (isDemo/demo_seed label map), complication-rate/dificultad-distribution/procedure-type cards '(no demo)' text, admin/usuarios 'Usuarios demo' tab. Coupled to PLUTO-118 phase-1 + the row purge. backlog low 2026-06-14 06:00
PLUTO-119 pluto Code sweep: retire stale eventType-based appEvents queries (pre-migration schema paths still running, 35-37ms × 112-257 calls/day). Surfaced in PLUTO-115 EXPLAIN. Find + update to the current level/category/action schema. Coder sweep. backlog normal 2026-06-14 05:55
PLUTO-114 pluto Venus R2 findings (fec7fc4, none high): R2-1 send-email 502 path leaks raw err.message (email-admin.ts:156→route.ts:126); R2-2 reviewUserDocumento (admin-actions:318) raw leak + NO logCaughtError (silent); R2-3 reactivateInactiveUser (admin-actions:1211) same; R2-4 LOW consistency (email.ts:483/legacy-export:145/poll-security-alerts:205 logged-first); R2-5 LOW getInactiveUsersPage:1147 bounded per-row subquery. Apply UserFacingError gate + logCaughtError to the MED leaks. done normal 2026-06-14 05:55
PLUTO-109 pluto Bridge CTA: from /admin/usuarios/[id] Roles card deep-link to /administrar/docentes/[id] (teaching role) + /administrar/alumnos/[id] (alumno) when that role is present done normal coder-pluto-cc 2026-06-14 05:45
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
PLUTO-108 pluto Archive-reason gap: require typed reason on silent human soft-deletes (periodo + comision soft-delete, access-request reject) via promptReason; no-double-ask (compliant paths untouched) done high coder-pluto-cc 2026-06-14 05:34
PLUTO-117 pluto Harden getInformesBundle fn-output↔consumer contract (durable fix beyond the 112 runtime guard). Root lesson: Pluto's fn emits UNTYPED jsonb (jsonb_build_object) that TS only CASTS — a key rename (porLookup vs porAnestesia) compiles clean and crashes at runtime. A bare 'as' cast gives FALSE confidence (compiles while runtime JSON lacks the key). Fix: zod-parse (or equivalent runtime validate) the RPC return at the queries.ts:3897 boundary so fn↔consumer key drift fails LOUDLY at the boundary with a clear error, not a deep .map crash. Contrast venus: its reshapes build typed objects in TS code, so key drop fails COMPILE — Pluto's SQL-built JSON can't be compile-checked that way, hence runtime validation. backlog normal 2026-06-14 05:33
PLUTO-116 pluto Real-time error tee: appEvents AFTER-INSERT pg_notify trigger on Pluto Supabase (error→PM DM, warn stays in digest). GATED on nw-venus's exact spec (channel name, WHEN-clause, payload — byte-identical channel+payload across 3 apps; host listener LISTENs + DMs PM). Pluto level vocab = error|warn|info (NO fatal) so WHEN-clause = level='error'. Pre-apply audit review per DDL discipline. Additive/reversible. Do NOT start until spec lands + 112 done. backlog high db-pluto-cc 2026-06-14 05:31
PLUTO-113 pluto Dead-code removal: softDeletePeriodo + softDeleteComision (admin-actions.ts:443/534) are exports with ZERO callers; live paths are removePeriodo/removeComision. Remove the dead exports. backlog low 2026-06-14 05:25
PLUTO-112 pluto Live 500 on /informes — fn_getInformesBundle returns porAnestesia (and likely sibling array keys) undefined for sparse/zero-row scope; client .map crashes. PLUTO-97 regression. Fix fn to COALESCE every array key to [] + client null-guard. PTD must GET /informes for the failing scope, not log-tail. backlog urgent db-pluto-cc 2026-06-14 05:24
OPS-14 agent-ops whey↔lezama global ~/.claude/CLAUDE.md §-level reconcile: lezama missing entire sections whey has (was missing ## Collaborate — added 2026-06-14; also lacks Permission, Communication, others). Audit all 3 hosts' global CLAUDE.md section sets, decide canonical fleet-neutral set, mirror missing sections per-host. Surfaced during the log-review-autonomy global-line rollout. backlog normal nw-whey-cc 2026-06-14 05:21
PLUTO-110 pluto Page title prefix: 'BMF 1 | <page>' -> 'P | <page>' (layout.tsx template literal; do NOT touch CATEDRA_SHORT which drives email branding) done normal coder-pluto-cc 2026-06-14 05:20
PLUTO-106 pluto R1 cross-audit app fixes: send-email err.message leak + UserFacingError class + perfil ImageApiError + completar-asignacion actor + bulk-ops batched UPDATE done high coder-pluto-cc 2026-06-14 05:18
PLUTO-111 pluto Observability: log /api/image 401/403 auth-denials to appEvents (category auth/authz, level info) so denial-storms are diagnosable; route currently logs only proxy-failures, not the gate denials backlog low coder-pluto-cc 2026-06-14 05:18
PLUTO-107 pluto R1 cross-audit db fixes: appEvents retention auth/session >=365d floor + notifications prune cron (read >30d) done high db-pluto-cc 2026-06-14 05:08
MSG-35 llmmsg-srv Spurious unread-poke loop: read_unread cursor-ack is fire-and-forget (race) + drain-on-other-tools acks only on next poll + poker lacks debounce/idle-gate backlog high pm-llmmsgsrv-cc 2026-06-14 04:58
PLUTO-105 pluto Replace native window.prompt/confirm with app-styled promise-based dialog primitive (promptReason/confirmAction) done high coder-pluto-cc 2026-06-14 04:55
MSG-34 llmmsg-srv VENUSINF cutover-prereq: add LLMMSG_HUB_BEARER Authorization header to llmmsg-bootstrap-session.sh (/register + /aro/join curls 401 against bearer-gated venus hub; no-op when unset = additively safe) done high pm-llmmsgsrv-cc 2026-06-14 04:49
PLUTO-97 pluto Collapse /informes 24-query fan-out into one set-based Postgres query (view/RPC) done normal 2026-06-14 04:47
MSG-33 llmmsg-srv Agent color+emoji recognition (cdw + hub): role-color taxonomy + override store done normal pm-llmmsgsrv-cc 2026-06-14 04:33
PLUTO-104 pluto Email subject format: BMF 1 / Pluto / <subject> — centralized prefix done high coder-pluto-cc 2026-06-14 04:31
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
PLUTO-103 pluto Hygiene: vPracticaParticipantFacts counts demo-practica-by-real-student in scoped teacher stats (pre-existing, surfaced during PLUTO-97 gate-A) backlog low 2026-06-14 03:30
PLUTO-102 pluto D8 Tier-1: collapse fan-out-vs-pool on 4 hot pages (admin/usuarios:97 8-wide, a-solucionar:37 6-wide, practicas:188/249, alumnos/[id]:86) via bundle-RPC/CTE per PLUTO-97 ↳#98 backlog high db-pluto-cc 2026-06-14 03:20
PLUTO-101 pluto D8 views+indexes (db lane): a-solucionar 6-scan view, academic-hierarchy + practicas team-stats/hierarchy views; verify 8d index candidates (deletedAt partial, periodoId, assignment*Id, comisionId/jtpId/adjuntoId, appEvents.createdAt, authId) vs actual index inventory ↳#98 backlog normal 2026-06-14 03:20
PLUTO-100 pluto D8 Tier-3: batch sequential per-row write loops (personas-actions:378/388 role add/remove) into set-based INSERT VALUES / UPDATE WHERE id=ANY ↳#98 backlog low 2026-06-14 03:20
PLUTO-99 pluto D8 Tier-2: compute-in-Node over DB rows (cron practicas-kpi-report:277/330/146/208, legacy-export-actions:68-88, hierarchy-utils:22-74/team-stats) -> SQL GROUP BY/ORDER BY ↳#98 backlog normal 2026-06-14 03:20
PLUTO-98 pluto PLUTO D8 compute-placement remediation (self-scan) backlog normal 2026-06-14 03:20
PLUTO-95 pluto Raw error text in HTTP response/UI — sanitize + log eventId (5 sites: log-404:45, cron/drain-email-outbox:34, api/image/[id]:76, administrar-actions:1527/1648). Return generic message + logged eventId, never raw err.name/message/String(err). From P0 cross-team error-handling audit, rubric #5. done normal coder-pluto-cc 2026-06-14 03:12
PLUTO-76 pluto F-3: practicaCreateFailed 9 hits Jun 3-4, detail=null (error thrown but not captured into logEvent). Add error-detail capture to the practica-create failure handler, then identify+fix the underlying create failure (check git log ~Jun 3 for practica changes). done normal coder-pluto-cc 2026-06-14 03:12
PLUTO-72 pluto appEvents logging-coverage + severity-correctness remediation (audit-pluto scan) done normal 2026-06-14 03:12
PLUTO-25 pluto Pluto P3: denyAccess logs accessDenied at ERROR not info — errscan pager noise (info helper exists logger.ts:230) done low 2026-06-14 03:12
PLUTO-96 pluto api-images blob orphan on profile/documento photo replace + user soft-delete (Pluto EVO-2 class). image-api.ts has NO deleteImage fn -> old blob orphans forever when /perfil replaces a photo or a user is deleted. coder-apiimages confirms api-images DELETE endpoint exists (->_trash 90d). Add best-effort deleteImage() cascade on photo-replace + user soft-delete. Confirm endpoint contract first. Low-impact data hygiene, found in P0 cross-app audit. canceled low coder-pluto-cc 2026-06-14 02:53
PLUTO-93 pluto /informes pool-acquire timeout: page fires ~24-query Promise.all (page.tsx:219-346) against deliberate pool max:2 / connectionTimeoutMillis:5s (pool.ts:11-17, WI#194 serverless conn-storm tuning). Heavy comisión (…006) drain >5s → trailing waiters throw 'timeout exceeded when trying to connect'; client echo surfaces Next digest 1177967776. Reproducible on any heavy comisión filter. Fix: bounded-concurrency wrapper on the fan-out (app/coder) and/or modest pool bump (db owns, trades vs conn-storm). 2 events/30d but reproducible. done normal 2026-06-14 02:44
#115 pluto 'Realizada por docente' tracking — métrica separada done someday 2026-06-14 02:43
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
PLUTO-74 pluto F-1 LIVE crash: clientError:global-error @ /mi-cursada (alumno landing), 4 hits 2026-06-12, no stack in appEvents. React global error boundary firing on student landing. Pull Vercel runtime logs for today's hits to get exception; fix root fetch/render. done high coder-pluto-cc 2026-06-14 02:26
PLUTO-94 pluto /solicitar-acceso fully broken: every access-request submission 500s. chk_accessRequests_requesterRole CHECK allows only legacy ('estudiante','docente','otro') but PLUTO-7 changed requesterRole to literal DB role names (SELF_REQUESTABLE_ROLES: alumno/docente_adjunto/docente_jtp/docente_ayudante_primera). Constraint never migrated w/ PLUTO-7 → all new submissions violate it. Real user cecilia.tebes blocked+retried (appEvents submitAccessRequestFailed 18:51 UTC). FIX (db): drop the CHECK (commons bans CHECK on enumerated label sets = native-enum-in-disguise; app already validates via isSelfRequestableRole) OR union legacy+new (49 legacy rows must not trip ALTER). Audit pre-reviews DDL. PUBLIC FRONT DOOR. done normal 2026-06-13 19:29
PLUTO-92 pluto App-wide recurrence of PLUTO-90: clicking a student/user NAME in a clickable row does nothing (hover-card trigger stopPropagation+preventDefault swallows the click) while clicking elsewhere in the row navigates. Seen on /practicas?jtp=...&comisiones=.... Audit to enumerate every table/list with name-inside-trigger pattern; coder fixes each to bubble name-click to row onClick. done normal 2026-06-13 11:43
PLUTO-89 pluto createPractica duplicate-prevention guard (2-tier): TIER1 same fecha+operador+asistente+pieza → hard redirect to existing práctica (no override); TIER2 same fecha+same 2 people swapped roles → soft dialog ir-a-existente vs crear-nueva. Idempotent return-existing, not 500 done normal 2026-06-13 11:04
MARS-109 mars /practicas?alumno tighten to per-student SA cross-check (not comision-level scope) done low 2026-06-13 10:59
PLUTO-91 pluto PLUTO-89 fast-follow hardening: multi-pieza dup-guard is order-sensitive ('11,12' vs '12,11' evades tier-1 because piezas keep insertion order). Canonicalize the pieza set for the dedup KEY only (sorted), preserving as-entered display/storage order. Needs functional index or normalized key column backlog low 2026-06-13 10:57
PLUTO-90 pluto /alumnos: clicking the student NAME does nothing; clicking elsewhere on the row navigates to /practicas?alumno=<id>. Name click should navigate too (likely hover-card/link swallows the click) done normal 2026-06-13 10:51
PLUTO-88 pluto Teacher login landing → /practicas (was /informes) for docente_* roles; default-sort the prácticas list by Pendiente hace (días) desc so oldest-pending surfaces first. Keep reportes→/informes, admin/alumno/bedelia unchanged done normal 2026-06-13 10:19
PLUTO-87 pluto Remove inline grade dropdown from prácticas list; per-row button: Calificar (sin calificar) / Ver detalles (graded), both route to detail view so teachers grade only after seeing content done normal 2026-06-13 10:02
PLUTO-86 pluto /alumnos?verComision=N shows '(día)' instead of the comisión name done normal 2026-06-13 09:54
PLUTO-84 pluto Admin 'Ver como [usuario]' view-as: read-only impersonation of ANY docente (not just owned personas) so admin sees a teacher's exact PLUTO-77-scoped view. Separate viewAsUserId cookie, admin-cap-gated startViewAs/stopViewAs, getCurrentUser resolves target (isViewAs, realUserId=admin), single read-only guard at requireAuthForAction (blocks all writes), benign view-load writes (markComentarioNotificationsRead) no-op under view-as, red banner + Volver a mi cuenta, start/stop audit-logged (authz). No schema change. Scope/grade-gates unchanged. Authz-sensitive: audit design-review + pre-push diff. done normal 2026-06-13 09:30
PLUTO-85 pluto public/formulario-practica.pdf rides unrelated commits — byte re-touch (identical size, no content change) re-touches in the push window, not present in pre-push git status. Recurring since PLUTO-77, again on PLUTO-84. Find what regenerates it (build step / file watcher) and either .gitignore it or normalize so it stops riding unrelated commits. Harmless but persistent noise. backlog low 2026-06-13 09:29
PLUTO-83 pluto client-error serializer: global-error.tsx/error.tsx + logClientError discard error.message/name/stack — appEvents clientError rows are opaque ({path,digest:null}), undiagnosable. Forward message/name/stack(trunc ~2KB) like venus VENUS-8 fix. Surfaced by applog: 1 crash @/mi-cursada + 3 @/login (anon, ~28s cluster, possibly stale-deploy Server-Action-not-found). done normal 2026-06-13 09:07
EVO-3 evolutiva api-images: immediate-erasure endpoint (GDPR/right-to-erasure) — DELETE /{id}?purge=1 or /erase/{id} that skips _trash + unlinks immediately, tenant-scoped, audit-logged. backlog low coder-apiimages-cc 2026-06-13 09:05
VENUS-5 venus Centralized log-analysis plane on venus (pull+analyze app events) done high nw-venus-cc 2026-06-13 08:57
VENUS-8 venus client-error serializer: window.onerror/onunhandledrejection logged '[object Object]' with NULL errorName/stack done normal coder-venus-cc 2026-06-13 08:35
MARS-112 mars api-images: 67 orphan files in shared flat uploads/2026/ with no DB owner (mars nor pluto) post tenant-isolation backfill — cross-app reconciliation pass: identify (pluto-deleted-file-remains / pre-DB test / stray), decide trash-vs-assign. Not Mars-exclusive; coordinate with pm-pluto + coder-apiimages. Mars set confirmed complete (5,690), so none are Mars's. canceled someday 2026-06-13 08:29
EVO-2 evolutiva api-images: reconcile 67 orphan images in flat uploads/2026/ with no mars/pluto DB owner — decide trash vs reassign backlog low 2026-06-13 08:29
EVO-1 evolutiva api-images tenant isolation: key->tenant binding, scoped serve/delete, per-tenant storage + stats, _trash TTL, server-side EXIF strip, backup (closes cross-tenant IDOR) done high coder-apiimages-cc 2026-06-13 08:29
MARS-110 mars api-images tenant-isolation cutover: hand owned image-id list for backfill + verify Mars images resolve post-cutover + confirm API_KEY_MARS scoped done normal 2026-06-13 08:28
PLUTO-80 pluto numeroHC edit UI/server permission mismatch: canEditHC UI offers HC-edit to all teachers but server gate always denied non-participant/non-admin teachers (latent assignmentComisionId-never-selected bug); decide intended HC-edit permission (enable graders via canGradePractica vs drop isTeacher from UI canEditHC) done normal 2026-06-13 08:22
PLUTO-82 pluto Historial de cambios rows appear duplicated (~4x) on practica change history; investigate root cause (view join fan-out / archive double-write / query) and fix at source - data should not be stored 4x backlog normal 2026-06-13 08:14
MSG-31 llmmsg-srv memory-lint.sh: refuse implicit host-wide scan as push gate (require explicit scope; only cron sweeps host-wide) done high pm-llmmsgsrv-cc 2026-06-13 08:10
PLUTO-79 pluto Historial de cambios: full-width component + CAMBIOS column not truncated; audit surveys all change-history tables, coder fixes the set done normal 2026-06-13 07:48
VENUS-7 venus practica-actions: unguarded pre-tx reads in sumarme/quitar/archivePractica/completarComplicaciones done normal coder-venus-cc 2026-06-13 07:47
PLUTO-77 pluto F-6/voice-note: jefe-de-TP cross-linking via ayudante role drags wrong roster. Real teacher (Ale): sees his own ~8-10 alumnos OK, but ALSO sees ALL alumnos of ANOTHER jefa from a different group/day, because he is ayudante of that jefa on Wednesday -> the vinculation links him to the Wed jefa and surfaces her students in his correction view (~20+ total -> confusion). PROD real user. Same class as PLUTO-70 (resolveTeacherFilterIds dual-role); investigate the jtpAyudantes->jefa linking path - is this a PLUTO-70 gap (ayudante path uncovered) or new. He CAN evaluate his own; the bug is the extra roster bleed-in. done high coder-pluto-cc 2026-06-13 07:43
VENUS-6 venus Server-side 404 detection/logging (request instrumentation) done normal coder-venus-cc 2026-06-13 07:42
PLUTO-81 pluto PLUTO-77 v1 LOW followup: comision-day secondary list capped at limit-200 first-page (no cursor pagination); add cursor paging if an ayudante's assisted-comision roster exceeds 200 backlog normal 2026-06-13 07:40
MARS-111 mars Teacher /alumnos redesign: row-click to student's practicas (active-periodo, JTP/ayudante-scoped) + drop email/inline-JTP-select + isStudentInScope ayudante-gate fix + denyAccess on /alumnos/[id] done normal 2026-06-13 07:18
MARS-108 mars Teacher-facing student reassignment surface (JTP/Ayudante self-service, NOT on /alumnos) backlog normal 2026-06-13 06:46
PLUTO-78 pluto Duplicate practicas: operador + asistente each create the SAME clinical event picking each other as counterpart -> 2 mirror practica rows for 1 real práctica. Need duplicate-detection + canonical-record rule (natural key candidates: fecha+comision+paciente/tratamiento+the operador/asistente pair). Design WITH Elazar; covers (a) prevent new dupes at create, (b) reconcile existing dupes in prod. Cross-team lessons-learned for mars/venus. backlog normal 2026-06-13 05:59
PLUTO-75 pluto F-2 LIVE crash: serverError+clientError @ /administrar/alumnos/[id] (digest 3278366549), 26 hits Jun 9-11. Server crash on GET student detail; paired 7 sendEmailFailed ETIMEDOUT are the alert-emails for this crash. Pull Vercel logs for digest, fix render/server-action. done high coder-pluto-cc 2026-06-13 05:27
VENUS-3 venus D2 relay leg (appEvents→agent): (1) commit db/migrations uxPainDigestRelay sidecar (eventId PK→appEvents.id, deliveredAt) — already applied on prod but uncommitted, parity; (2) latest-ux-pain-digest INSERT-based claim route (descoped from D1); (3) wire venus to the shared whey host relay daemon. BLOCKED on canonical SSOT sidecar shape + Elazar relay-owner pick. canceled normal 2026-06-13 05:15
BWI-9 basquetwi kpi-report.py digest-integration polish for kpi-weekly-report.sh: (1) add explicit --markdown flag alias (default stdout already md); (2) off-vocab line as count/total (e.g. 14/47) for the digest health metric. Section anchors ## 1/2/3 already grep-stable. backlog low db-basquetwi 2026-06-13 02:50
BWI-8 basquetwi kpi-report.py canonical eventType set is stale vs wi-http SSOT (titleChanged/audit-finding/packet false-flagged OFF-VOCAB). Fix: fetch canonical list from wi-http (or /utcp) instead of hardcoding, so it never drifts done low db-basquetwi 2026-06-13 02:47
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
VENUS-4 venus Venus appEvents conform to fleet standard: categoryId uuid FK->lookupOptions + seed appEventCategory group + backfill w/ renames (access->authz, app->system, client-env->client); add 4 promoted cols (httpStatus/durationMs/path/failureCode); canonical logError/logWarn/logInfo wrappers + pickKnown + isCritical sync-bypass; canonical v_appEvents_* views; error-tier retention job (180d, GUC-bypass); re-level 1435 perf/warn rows->info; legacy_events sink decision for ~1552 rows. BLOCKED on committed SSOT + Elazar priority call. backlog normal 2026-06-13 02:36
PLUTO-71 pluto error-tier appEvents digest (mars MARS-81 port): daily error-digest email cron + internal relay-claim routes done high coder-pluto-cc 2026-06-13 02:35
PLUTO-73 pluto conform appEvents to fleet SSOT (categoryId FK, promoted cols, append-only+GUC, appEventRelays sidecar, retention guard, logger, views) blocked normal 2026-06-13 02:32
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
PLUTO-70 pluto Informes filter by jefe-de-TP returns wrong/doubled student set (cross-jefe contamination) - was working before, regression done high audit-pluto-cc 2026-06-12 17:41
PLUTO-69 pluto Access regression: students who previously logged in are now blocked (agujero negro / blocked-user landing) - PROD, real users inProgress urgent coder-pluto-cc 2026-06-12 17:29
PLUTO-68 pluto /practicas/nueva form: lay fields side-by-side to save vertical space (currently stacked one-below-the-other) inProgress normal coder-pluto-cc 2026-06-12 17:24
MARS-104 mars Vercel edge-request cost: kill <Link> prefetch fan-out into force-dynamic routes (Mars was 42.6% of 1M Pro cap) done high pm-mars-cc 2026-06-12 16:40
AYUD-13 ayudarg UX /admin/usuarios: page looks bad — visual cleanup (Elazar report 2026-06-12). CR32 restyled buttons but page reads as broken/ugly. proxy visual capture first, then coder fix. Mobile-first. done high coder-ayudarg-cc 2026-06-12 12:27
#343 ayudarg Admin UI notification for new /sumate solicitudes (currently only email to Belén) done high 2026-06-12 10:56
AYUD-6 ayudarg CR21: implement person-data erasure (hard-delete cascade or anonymize) for cases/needs/events per data-protection req; reconcile with existing #290/#339/#345 done high db-ayudarg-cc 2026-06-12 10:42
AYUD-11 ayudarg Admin delete UI (CR21): route/buttons calling db's deletePersona/deleteEvento/deleteNecesidad hard-delete functions; show jsonb count summary of what was removed; admin-role gated; confirm dialog (irreversible) done high coder-ayudarg-cc 2026-06-12 10:42
AYUD-12 ayudarg Org delete UI: wire deleteOrganizationAction (exists, 0 callers) to a delete/archive control on /admin/organizaciones with confirm dialog done normal coder2-ayudarg-cc 2026-06-12 10:36
AYUD-9 ayudarg Add app version to an /api/health endpoint (return package.json version) so auditor/PM can curl prod and confirm which app version is live on Vercel done normal coder2-ayudarg-cc 2026-06-12 10:36
AYUD-7 ayudarg CR23: aspirant /sumate signup creates a PENDING account awaiting admin authorization (today only emails admin) + admin accept/authorize UI — client: 'no puedo aceptar voluntarios' done high coder-ayudarg-cc 2026-06-12 10:36
#291 ayudarg ABM de prestaciones por entidad done high coder2-ayudarg-cc 2026-06-12 10:30
AYUD-8 ayudarg CR28: add 'where am I' geolocation button on the map (center/locate user) done normal coder2-ayudarg-cc 2026-06-12 10:20
AYUD-10 ayudarg Regen schema.md (stale on personaEventPhotos line) — export-db.py blocked on venus (psycopg2 missing); run elsewhere or fix venv backlog low db-ayudarg-cc 2026-06-12 10:18
AYUD-5 ayudarg CR24-full: DROP personaEventPhotos table + stored photo rows (destructive, Elazar-confirmed) — ONLY after display code removed + deployed done normal db2-ayudarg-cc 2026-06-12 10:18
AYUD-4 ayudarg CR24-full: remove photo DISPLAY code (listEventPhotosQuery, EventPhotoRow, any /personas/[id] photo render) — Elazar confirmed full erasure backlog normal coder2-ayudarg-cc 2026-06-12 10:10
AYUD-2 ayudarg Login: harden Google OAuth against PKCE-verifier-missing failure (in-app browser / WhatsApp) done high coder-ayudarg-cc 2026-06-12 10:10
#340 ayudarg CRITICAL: cannot log in (client report via pluto) done urgent coder-ayudarg-cc 2026-06-12 10:04
AYUD-3 ayudarg Observability: add success-path logging (login success, key page loads) — currently only error branches log backlog normal coder-ayudarg-cc 2026-06-12 10:04
AYUD-1 ayudarg URGENT: app logger dead since 2026-05-28 — restore logging (logs table) so we have troubleshooting data done urgent coder-ayudarg-cc 2026-06-12 10:00
#303 ayudarg Fotos done normal coder-ayudarg-cc 2026-06-12 09:55
MSG-28 llmmsg-srv Elazar DM-guard (reject-v1): send-time reject of untagged DMs to Elazar + silent dm_guard_rejects counter + KPI line + kill-switch; bundle cursor-lag shim fix same deploy. Spec: docs/superpowers/specs/2026-06-12-elazar-dm-guard-design.md done high hub-llmmsgsrv-cc 2026-06-12 09:16
MSG-29 llmmsg-srv cc-context-monitor.sh: redirect send target OFF elazar-the-user-human-llmmsg-srv to the host nw relay (nw-<host>-cc). ~2650 untagged DMs to Elazar = his #1 inbox clutter; DM-guard MSG-28 will drop them once enforced. Fix canonical script send-call (host-parameterized); nw-venus-cc + nw-lezama-cc pull to their host copies. Elazar approved 2026-06-12. done high bin-whey-cc 2026-06-12 09:11
PLUTO-62 pluto fn_detectRateSpike index-starved: add archivedAt indexes to 6 archive tables (32% of DB time) done normal 2026-06-12 07:56
PLUTO-67 pluto fn_detectRateSpike cadence: every-2min cron is 91% of DB-time (frequency-driven, ~7.6s/day absolute) - weigh fraud-detection latency vs cost backlog low 2026-06-12 07:53
PLUTO-66 pluto log-toast ingest: no server-side rate limit (anon-flood appEvents amplification) backlog low 2026-06-12 07:26
PLUTO-63 pluto Regenerate stale src/db/schema.sql (2 generations behind prod; carries banned chk_appEvents_eventType CHECK) done low 2026-06-12 07:26
PLUTO-64 pluto Toast to appEvent UX-friction capture (port Mars pattern + Pluto deltas) done normal 2026-06-12 07:26
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
PLUTO-34 pluto Pluto P3: 7 of 21 fn_archive* functions use explicit VALUES (not to_jsonb) — MARS-78/88 dropped-column-in-trigger latent class; convert to to_jsonb, prioritize fn_archivePracticaDocenteNotaChange (8 domain cols) done low 2026-06-12 07:23
PLUTO-65 pluto PLUTO-34 contract step: DROP flat columns on 7 archive tables after jsonb expand verified in prod (irreversible) backlog low 2026-06-12 07:12
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-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-100 mars /informes table overflows 43px @360 (861px table-wrap) — needs mobile card/scroll mode backlog low 2026-06-12 06:37
#70 pluto CR 51: /solicitar-acceso: los docentes completan campos pensados para alumnos (comision/jtp/adjunto), lo cual confunde y demora la aprobación. Move done normal 2026-06-12 06:37
PLUTO-61 pluto Stop writing dot-stripped gmail form to users.email (commons Email-Norm violation, cosmetic) backlog normal 2026-06-12 06:34
PLUTO-56 pluto Onboarding: allowlisted-but-no-profile users (loginDeniedNoProfile) should be routed to request access, not dead-bounced done normal 2026-06-12 06:28
PLUTO-54 pluto Blind logging: capture detail in practicaCreateFailed, user-context in serverError, email in loginDeniedNoProfile done normal 2026-06-12 06:27
PLUTO-60 pluto Retire residual /login?error=no-profile UI path backlog low 2026-06-12 06:26
PLUTO-59 pluto Convenience VIEW joining clientError.digest -> serverError.detail (full message+stack) for client-error diagnosis backlog low 2026-06-12 06:17
PLUTO-52 pluto 404: /administrar/docentes/[id] dead link from /admin/solicitudes (live, 3 real-user hits) done normal 2026-06-12 06:11
PLUTO-58 pluto Table convergence: drop server page-size oddball 15 (->[10,25,50,100] fleet baseline); later adopt Mars-style column-config API over Pluto server stack backlog low 2026-06-12 06:09
PLUTO-55 pluto Investigate clientError:error (101 events / 20 distinct users) + access-denied UI link-leak done normal 2026-06-12 06:08
PLUTO-57 pluto UX: pre-filter practica list-row links by viewer scope so out-of-scope rows aren't clickable (avoids working-as-designed scope-deny on /practicas/[id]) backlog low 2026-06-12 06:08
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-73 mars └─ Rewrite teacher-practicas CTE: kill seq-scan on practicas (18.4% DB time) — LATERAL/direct JOIN from studentAssignments, est. 60-70% wall-time cut. Sites: weekly-kpi.ts + reporting.ts. See db/pg-stat-statements-report.md done normal 2026-06-14 22:56
MARS-74 mars └─ Cache unread-notifications count (5.1% DB time, 41k calls): SELECT count(*) FROM notifications WHERE userId AND readAt IS NULL fires every page load — counter column on users or 30s sessionStorage TTL. See db/pg-stat-statements-report.md done normal 2026-06-14 22:37
PLUTO-53 pluto 404: /notificaciones dead route — UI link points to nonexistent page (active Jun 3+9) backlog normal 2026-06-12 05:50
PLUTO-51 pluto Proxy viewport tooling: chrome-devtools-mcp (CDP) for Pluto needs an auth path — Pluto is OAuth-only backlog low 2026-06-12 04:21
PLUTO-47 pluto Proxy viewport tooling: chrome-devtools-mcp (CDP) for Pluto needs an auth path — Pluto is OAuth-only canceled normal 2026-06-12 04:21
PLUTO-50 pluto __probe__ canceled someday 2026-06-12 04:21
PLUTO-49 pluto __probe__ canceled low 2026-06-12 04:21
PLUTO-48 pluto __probe__ canceled normal 2026-06-12 04:21
MARS-99 mars Multi-tooth RX tagging UX: passive-strong signal, not nag. (a) dropdown already lists only the práctica's selected teeth [live]; (b) untagged RX card gets red border + 'elegí la pieza' placeholder as primary passive cue; (c) auto-open+flash ONLY the last-added image's dropdown (never all — batch-add of N would fire N opens); (d) submit-with-untagged scrolls to+opens first offender instead of a toast. No modal. Single-tooth keeps silent auto-pick. Brainstorm: coder-mars+audit-mars-cc, approved Elazar 2026-06-12. Build after B2 edit-path. done normal 2026-06-12 04:18
MARS-95 mars Edit-form RX upload parity (mi-cursada/[id]/editar): image-upload-area.tsx still has accept='image/jpeg' — same silent HEIC-drop class as SOP-13/MARS-94 but on the EDIT path. Apply the MARS-94 add-time fix: widen accept jpeg/png/heic/heif, de-silence with named toast, native HEIC->JPEG convert. Verify whether edit-form uses image-upload-area or its own handler first. Client-only fast-follow. done normal 2026-06-12 04:14
PLUTO-46 pluto Vercel log-drain setup: Elazar greenlit (2026-06-12) true 24h+ runtime-log retention (currently logs are point-in-time only via Vercel MCP). Scope: pick drain destination (log service/endpoint), configure Vercel log-drain, implementer is infra (nw-whey/nw-venus) not coder. PM owes Elazar the concrete scoped plan before dispatch. backlog normal 2026-06-12 03:35
PLUTO-45 pluto KPI weekly-cron staleness alert: last-success-timestamp check that pages if no kpiCronReport appEvent in >8 days. Weekly crons (0 9 * * 1) can fail silently for ~7d before anyone notices (PLUTO-39 showed how easily a weekly gap reads as 'dead'). Defensive observability add, NOT a bugfix. Touches email/alert path → audit pre-push. backlog low 2026-06-12 03:17
PLUTO-39 pluto KPI cron (Vercel) silent since 2026-06-08: no kpiCronReport appEvent on Jun 9/10/11 — daily comisión reports missing done normal 2026-06-12 03:17
PLUTO-43 pluto /administrar/alumnos/[id] throws 500 (Sin permisos) instead of graceful 403 for docente_titular w/ viewStudents but not manageUsers; list shows links into a detail page the user can't enter (list<->detail cap mismatch) — fix 500-handling + resolve cap shape done high coder-pluto-cc 2026-06-12 02:00
PLUTO-44 pluto Defense-in-depth: render-path requireCapForAction throw should render graceful acceso-denegado, not 500 + admin error-email storm (generic error-boundary / convert render-path cap checks to redirect variant). Surfaced by PLUTO-43 (dead-fetch was the trigger; this guards the class). backlog normal 2026-06-12 01:54
PLUTO-42 pluto /practicas mobile card is read-only: teachers cannot change practica estado/grade from a phone — handleChangeEstado control is desktop-table-only; add it to the md:hidden mobile card backlog normal 2026-06-12 01:44
PLUTO-41 pluto Migrate all touch primitives (Button/Select/Input) to uniform pointer-coarse:min-h-11 for 44px touch targets — replaces the 3-way convention (Button h-11 sm:h-9 / Select flat h-11 / Input sm:-gated); keys on input modality not viewport so a narrowed desktop window stays 36px. Ref Venus impl. Do AFTER PLUTO-40 lands. backlog low 2026-06-12 01:39
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-96 mars errscan noise: login-unknown mis-leveled (callback/route.ts) pages the frequent tier; re-level warn->info + make errscan spike detection signature-aware so credential-stuffing volume still alerts independent of level (same class as Pluto P3-2) done normal 2026-06-12 01:32
PLUTO-40 pluto Mobile-first refactor (Elazar all-app directive): audit + base-up redesign of layouts/nav/forms/touch-targets/breakpoints backlog high coder-pluto-cc 2026-06-12 01:29
#96 pluto /admin/usuarios route audit — list shaping y filtros duplicados done low 2026-06-11 03:22
PLUTO-37 pluto Pluto: Supabase free-plan egress fix (backup 30min→8h + data-only ephemeral excludes) + DB hygiene (notifications TTL, cron.job_run_details prune, drop stray bench schema) done normal 2026-06-11 02:59
MARS-94 mars SOP-13: práctica /nueva RX upload — iPhone HEIC 'Pre' RX silently dropped at add-time (accept=image/jpeg + silent non-JPEG continue); student submits incomplete 3-RX sets. Fix shipped v2.15.17 (f43733d): widen accept jpeg/png/heic/heif, de-silence w/ named toast, native HEIC->JPEG convert via createImageBitmap, + adaptive recompress for secondary aggregate-cap mode. Client-only. done normal coder-mars-cc 2026-06-11 00:15
MSG-27 llmmsg-srv Schema drift: persist messages.expects_reply + roster.role; self-healing view-migration on hub startup done high hub-llmmsgsrv-cc 2026-06-10 23:15
PLUTO-35 pluto Pluto: audit email normalization for non-gmail dot-stripping bug (gmail dots-ignored rule is gmail/googlemail-only; Workspace custom domains treat dots as significant) done high audit-pluto-cc 2026-06-10 13:21
PLUTO-36 pluto Pluto P3: canonicalizeEmail JS/DB parity edge — JS lastIndexOf('@') vs DB SPLIT_PART first-'@'; diverge only on malformed multi-@ input (dedup-parity, not dot-strip). Align the @-split semantics. backlog low 2026-06-10 13:16
PLUTO-22 pluto Pluto P2: accessRequests.status unconstrained text — add CHECK IN (pending/needs_info/approved/rejected) done normal 2026-06-10 07:44
PLUTO-33 pluto Pluto: logger info-gate drops isCritical events before force-sync + prod LOG_LEVEL=1 = security-observability hole. logger.ts:83-85 early-returns (skips appEvents INSERT) for level=info when logLevel<3, BEFORE the isCritical force-sync block (:119-124, auth/authz+forceSync = must-persist). Prod LOG_LEVEL empty→parseInt=1<3, so ALL info events (incl. info-level auth/authz security signals that pluto-commons retains >=365d) are NOT persisted in prod. Two-part fix: (a) code — exempt isCritical (auth/authz/forceSync) from the info-gate so security events always persist; (b) ops — decide prod LOG_LEVEL>=3 (Elazar/Vercel env, also unlocks PLUTO-24 nav-event queryability). Found via PLUTO-24. Needs audit severity-confirm (how many live security events are info-level vs ERROR per PLUTO-25) before Elazar escalation. logger.ts = coder lane. done normal 2026-06-10 07:18
PLUTO-26 pluto Pluto P3: global-error.tsx leaks raw error.message + internal appEvents SQL to end-users done low 2026-06-10 07:04
PLUTO-23 pluto Pluto P2: missing indexes practicas.assignmentComisionId + comisiones.periodoId done normal 2026-06-10 06:47
PLUTO-24 pluto Pluto P3: bare notFound() on missing practica (MARS-89/90 class) — port friendly not-found, /practicas/[id]:27 + /mi-cursada/[id]:30 done low 2026-06-10 06:41
PLUTO-32 pluto Pluto P3 residual: bulkInviteUsers welcome-email loop bypasses the /send-email HTTP rate limiter (PLUTO-20) — uncapped in-process sends on bulk invite. Decide cap (e.g. 100/batch or inter-send delay) vs accept (admin-initiated, low-freq, in-process-mail-undroppable per PLUTO-20 design). From audit round-1. backlog low 2026-06-10 06:37
PLUTO-21 pluto Pluto P2: edit-lock cols (006/007) added to practicas but not practicasArchive/trigger — edit-lock state unarchived done normal 2026-06-10 06:37
PLUTO-18 pluto Pluto P2: isDemo-in-archive-trigger time-bomb (fn_archivePracticaChange + fn_archivePracticaReviewChange) — convert to to_jsonb (MARS-78/88 class) done normal 2026-06-10 06:37
PLUTO-10 pluto Audit all DateDmyField required usages: required is inert on hidden input, each caller must validate explicitly done normal 2026-06-10 06:15
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
PLUTO-19 pluto Pluto P2: updateEstadoRevision post-commit email-throw → false 'Error' on committed grade + dup review/email — add inner try/catch done normal 2026-06-10 06:11
PLUTO-16 pluto Pluto P1: IDOR on /api/image/[id] — add access-scope check (patient photos fetchable by any authed user) done high pm-mars-cc 2026-06-10 06:11
PLUTO-20 pluto Pluto P2: send-email in-memory rate limiter resets on cold start — persistent store or document dedupeKey as throttle done normal 2026-06-10 06:05
PLUTO-17 pluto Pluto P1: vActiveStudentAssignments + vActiveRoster missing isDemo=false (demo bleed into teacher views) done high pm-mars-cc 2026-06-10 05:35
PLUTO-31 pluto Pluto P3: cold audit FK cols (createdBy/updatedBy) unindexed — defer to post-go-live advisor run backlog low 2026-06-10 05:12
PLUTO-30 pluto Pluto P3: periodos.isCurrent no uniqueness constraint — two isCurrent=true rows possible backlog low 2026-06-10 05:12
PLUTO-29 pluto Pluto P3: vPracticas* views don't filter isDemo — demo inflates grader stats (fix at vPracticas base) backlog low 2026-06-10 05:12
PLUTO-28 pluto Pluto P3: denyAccess UUID-in-URL + deny-vs-404 — practica-existence probe backlog low 2026-06-10 05:12
PLUTO-27 pluto Pluto P3: getCurrentPeriodoId + getComisionesForCurrentPeriodo no auth guard — comision enumeration backlog low 2026-06-10 05:12
MSG-25 llmmsg-srv retired_aros tombstone gate: stop deleted AROs resurrecting via stale .aro bootstrap rejoins. Table retired_aros(aro PK, retired_at, retired_by); gate in /aro/join returns aro_retired before INSERT; POST /aro_retire + GET /aro_retire_ls (Elazar-only auth, mirrors /aro_allow); CLI aro-retire.sh; schema in init-db.sh + hub.mjs migration. Migration seeds the 7 dead -core/-small names. Un-retire via action=remove (reversible). Rides next restart. Durable fix for MSG-24 resurrection whack-a-mole. done normal hub-llmmsgsrv-cc 2026-06-10 04:09
MSG-24 llmmsg-srv Retire -core/-small AROs fleet-wide (Elazar 2026-06-10): DELETED all 7 (llmmsg-srv-engineering-core, mars-core, venus-core/-small, pluto-core/-small, mba-l-small) from aros (19 rows) + aro_config (8, incl orphan mars-small). Unanimous PM consent, zero deps. Already inert via MSG-17 default-deny (token win banked); deletion=hygiene. OPEN: (1) per-project .aro scrubs to prevent bootstrap resurrection - our .aro done, mars/venus/pluto/mba-l notified (pluto acked); (2) chat-duo-web 2-tier collapse (Ctrl+Enter -core lane dead) - pending Elazar yes, owner coder-chatduo-cc ~20min. done normal pm-llmmsgsrv-cc 2026-06-10 04:09
MSG-26 llmmsg-srv llmmsg-kpi-report.sh: strip dead -small ARO branch from §PM .aro action list (lanes retired MSG-17) backlog low pm-llmmsgsrv-cc 2026-06-10 04:04
MSG-22 llmmsg-srv hub.mjs:574 isValidAgentName widen ^[a-z0-9][a-z0-9_-]{1,63}$ to allow _ in scrp- sender ids (OPS-13 word-joiner grammar); rides MSG-20/21 batch+restart; verified no _-sensitive hub routing (nw-whey). Blocks bin-whey errscan rename until live. done normal hub-llmmsgsrv-cc 2026-06-10 03:49
MSG-21 llmmsg-srv hub.mjs:1606 cold-start announce stops fanning to Elazar's inbox (team-internal event noise); hub keeps its own fixed sender llmmsg-srv-hub (exempt from scrp- per convention). Part of scrp- sender-naming rollout (agent-conventions.md, Elazar 2026-06-10) done normal pm-llmmsgsrv-cc 2026-06-10 03:49
MSG-20 llmmsg-srv Human/spectator client silently stripped from AROs by pruneStale on presence lapse - no rejoin path, PM ARO replies stop reaching Elazar done high hub-llmmsgsrv-cc 2026-06-10 03:49
MARS-90 mars Unauthenticated /practicas/[id] click → notFound() (bare 404) instead of /login?returnTo; MARS-89 friendly branch is session-gated so logged-out email-clicks bypass it done normal 2026-06-10 01:26
MARS-91 mars Optional: carry returnTo through OAuth round-trip (login-button + callback/route.ts) so a logged-out deep-link lands on the EXACT path post-login, not just home. Auth-gate path — needs audit design-ping done low 2026-06-10 01:15
MARS-89 mars UX: stale-bookmark 404 on /practicas/<deleted-id> should redirect student to their cursada/practica list, not a dead 404 (one student hit a months-deleted practica 10x in a day) done low 2026-06-09 23:29
MARS-88 mars PROD-DOWN: práctica create fails — studentAssignmentsArchive trigger fn still INSERTs dropped isDemo column (MARS-78 class, slipped table) done urgent db-mars-cc 2026-06-09 19:20
PLUTO-15 pluto Fix 500 on /informes?adjunto= — getComparativaBundle jtpExtra param pushed unconditionally when wantJtp=false done normal 2026-06-09 18:25
MARS-85 mars docentes/[id]: add 'Equipo a su cargo' section showing supervised JTPs/ayudantes under an Adjunto (split from MARS-6 defect 1). No supervisor FK exists — derive supervision as: teachers (role jtp/ayudante) sharing a comisión where THIS user has role=adjunto. Active-periodo scoped (teacher-views-active-periodo convention). Repro: Belén Montoya must appear under Nicolás Alfie in comisión F. Design ratified by PM: new nested section, same-comisión adjunto→jtp/ayudante derivation, active-periodo only. Open Q for Elazar: adjunto-only supervisor, or also titular? done normal coder-mars-cc 2026-06-09 18:09
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-6 mars docentes detail page: supervised ayudantes/JTPs must appear under their Adjunto (Belén Montoya missing under Nicolás Alfie in comisión F; alumnos-a-cargo all old year-comisiones, none from F) done normal 2026-06-09 17:55
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-83 mars Weekly info-event analyzer: NEW recurring job scanning INFO-level appEvents for UX pain points (600+ 'Seleccioná la pieza' nags etc) + useful data, DMs a report. Operationalizes MARS-70; consumes re-added info-level toast logging (A1). Elazar 06-09. done high coder-mars-cc 2026-06-09 17:41
MARS-82 mars Frequent analyzer (errscan ~2h) scope to error+warn ONLY — confirm/adjust errscan's event-level filter so the high-freq sweep ignores info. errscan owned by bin-whey-cc (cross-host); PM coordinates the change. Elazar 06-09. done high pm-mars-cc 2026-06-09 17:40
MARS-81 mars Logger severity-correctness audit: every appEvents write uses the right level (info/warn/error). Sweep all logEvent/appEvent call sites; flag mis-leveled signatures (user-correctable validation toasts at error, real failures at info, etc). Precondition for the two-tier analyzer. Elazar 06-09. done high db-mars-cc 2026-06-09 17:32
MARS-65 mars Weekly-KPI inline sends silently drop on transient SMTP 421: no retry + batch completion counter falsely reports fail:0 (5 teachers missed Monday digest 2026-06-08) done normal --agent 2026-06-09 17:22
MARS-66 mars Práctica identification: folio-primary UI polish — add Folio column to student/alumno práctica tables, lead changelog with folio, enable search-by-folio (keep HC as clinical secondary) done normal --agent 2026-06-09 17:16
MARS-79 mars MARS-78 follow-ups: (A) log-hygiene fixes — toast/error-shown drop-or-downgrade from error (540 noise rows), practica/edit-image-upload-failed downgrade to warn (MARS-75 parity, 78 rows), navigation/404 capture pathname in detail (currently NULL — can't diagnose), client/unhandled-error add error.stack fallback for null-message entries (56 undiagnosable). (B) clean up 11 api-images orphaned by today's isDemo trigger regression (db supplies the image IDs; delete via image-api DELETE). Elazar approved both 06-09. done normal coder-mars-cc 2026-06-09 17:07
MARS-72 mars updatePostgradoProgression: wrap in withTransaction + setArchiveContext so studentPostgradoProgression archive rows carry archivedBy/archiveReason (currently NULL — actor signal lost once its appEvent is cut in Phase A) done normal --agent 2026-06-09 17:05
PLUTO-14 pluto KPI cron sends N duplicate emails per recipient with multiple comision memberships — deduplicate per recipient before sending done normal 2026-06-09 17:04
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
MARS-80 mars errscan failed to alert on a real 6h prod outage (isDemo regression 2026-06-09): 43 error-events + 2 unhandled-server-error met BOTH spike-≥10 AND prod-down triggers, yet neither Elazar nor pm-mars-cc got a DM. errscan state is whey-local (NOT in Mars Supabase — db confirmed no seen_signatures table there). Diagnose on whey: did the cron/daemon fire today? did it connect to Mars DB + read appEvents? is alert-routing/DM broken? Owner bin-whey-cc (was offline when filed). Elazar 06-09. done high bin-whey-cc 2026-06-09 17:00
PLUTO-13 pluto Fix Gmail Android /n/ prefix: add next.config redirect /n/:path* → /:path* (preserve query params) done normal 2026-06-09 16:57
MARS-78 mars Investigate /administrar/logs errors: full triage of appEvents error/warn rows. Deliver (a) each error class + root cause + actionable fix, (b) logging hygiene audit — what is logged that should NOT be (noise/benign warns) + what is NOT logged that SHOULD be (coverage gaps). db categorizes appEvents; audit cross-checks Vercel runtime logs for failures never reaching appEvents. Elazar 06-09, explicitly wants real findings not reassurance. done high db-mars-cc 2026-06-09 16:51
PLUTO-12 pluto Fix timezone hydration flash: replace bare toLocaleString/toLocaleDateString (no timeZone) with formatDateTimeEsAr/formatDateEsAr from date-format.ts across 8 files done normal 2026-06-09 16:41
PLUTO-11 pluto Email durable outbox (replicate MARS-76): emailOutbox table + pg_cron */5 drain + exp backoff maxAttempts=10 alert@5 done normal 2026-06-09 16:41
#12 mars claude-in-chrome on /administrar/alumnos done low 2026-06-09 16:38
#11 mars User dedupes: Tavolaro + Olexen done normal 2026-06-09 16:38
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-76 mars Practica notification delivery gap: @odontologia.uba.ar SMTP CONN-ETIMEDOUT failures are permanent (no retry) — teachers silently miss new-practica emails (8+ active unreviewed, some 5+ wks). Need retry queue and/or in-app pending-practica fallback so delivery never depends on a single SMTP attempt. See db email triage 2026-06-09 done normal 2026-06-09 06:45
MARS-75 mars Downgrade image validation-rejection log level error→warn (size/dimension too small) so it self-excludes from the actual-error watcher; keep genuine upload-infra failures (image-API 500/PROCESSING_FAILED/timeout) at error. Sites: image upload + edit-image-upload-failed paths done normal 2026-06-09 05:32
MARS-71 mars Demo sample-image generation broken: missing a-/b- sanitized fixtures + pm/sample-images not traced into Vercel bundle done normal 2026-06-09 05:21
ADRIANAP-9 adriana-pavon Recuperación de Correos Históricos (condicional: requiere localizar la computadora) blocked low 2026-06-09 04:24
ADRIANAP-13 adriana-pavon └─ Generar informe de volumen y fechas de correos recuperados backlog low 2026-06-09 04:24
ADRIANAP-12 adriana-pavon └─ Importar mensajes recuperados a cuenta activa actual via IMAP backlog low 2026-06-09 04:24
ADRIANAP-11 adriana-pavon └─ Extraer almacén local de correos — Apple Mail: ~/Library/Mail/, o .pst si era Outlook backlog low 2026-06-09 04:24
ADRIANAP-10 adriana-pavon └─ Evaluar estado del equipo y del disco (¿bootea? ¿disco legible?) backlog low 2026-06-09 04:24
ADRIANAP-1 adriana-pavon Recuperación de Correos Históricos canceled normal 2026-06-09 04:23
ADRIANAP-3 adriana-pavon Normalización de Ambiente de Correos backlog high rob 2026-06-09 04:23
ADRIANAP-8 adriana-pavon └─ Coordinate handoff to IT tech who will apply IMAP config on devices backlog normal 2026-06-09 04:23
ADRIANAP-7 adriana-pavon └─ Write IMAP config guide for all 6 accounts (prensa@, hola@, 3x Gmail, iCloud) for iPhone + Mac backlog normal 2026-06-09 04:23
ADRIANAP-6 adriana-pavon └─ Fix Cloudflare DNS: merge duplicate SPF records, add DKIM key from DonWeb, add DMARC record backlog normal 2026-06-09 04:23
ADRIANAP-5 adriana-pavon └─ Disable POP3 on prensa@ and hola@ in DonWeb cPanel backlog normal 2026-06-09 04:23
ADRIANAP-4 adriana-pavon └─ Audit all accounts/devices: map which client (iPhone, Mac, old PC) has which account and protocol (POP vs IMAP) backlog normal 2026-06-09 04:23
ADRIANAP-2 adriana-pavon Asesoramiento en SEO backlog normal 2026-06-09 04:23
ADRIANAP-20 adriana-pavon └─ Informe escrito con plan de acción priorizado + llamada de presentación backlog normal 2026-06-09 04:24
ADRIANAP-19 adriana-pavon └─ Recomendaciones Schema.org: Organization, Event, DanceSchool/LocalBusiness por página backlog normal 2026-06-09 04:24
ADRIANAP-18 adriana-pavon └─ Recomendaciones de contenido: fix Cartelera (2024 events visible in 2026), expandir páginas de academias, proponer 3 landing pages SEO backlog normal 2026-06-09 04:24
ADRIANAP-17 adriana-pavon └─ Revisión on-page: title tags, H1 (homepage no tiene), meta descriptions, alt text de imágenes backlog normal 2026-06-09 04:24
ADRIANAP-16 adriana-pavon └─ Keyword research y análisis de competencia para flamenco Buenos Aires backlog normal 2026-06-09 04:24
ADRIANAP-15 adriana-pavon └─ Auditoría técnica: Core Web Vitals, canonicals, errores 404, velocidad, mobile backlog normal 2026-06-09 04:24
ADRIANAP-14 adriana-pavon └─ Configurar accesos: Google Search Console, verificar sitemap.xml, revisar robots.txt backlog normal 2026-06-09 04:24
OPS-12 agent-ops Recover lost 2026-05-26 evolutiva-commons patch: §Shared MD Flow + §Versioning + §Boundaries B1/B4/B5 — check llmmsg message DB for original content backlog high bin-whey-cc 2026-06-09 04:04
MARS-69 mars UX Friction (epic): reduce user pain points surfaced by toast/error telemetry backlog normal 2026-06-09 03:44
MARS-70 mars └─ Analyze all toast/error-shown messages in appEvents to map UX pain points (e.g. 600+ 'Seleccioná la pieza' nags on /practicas/nueva) and propose form/flow fixes done normal db-mars-cc 2026-06-12 04:26
HOAC-1 ha Vanilla rebuild: replace Divi/WordPress static export with hand-authored HTML/CSS/JS — 100% local, no jQuery, no external CDN, no wp-content/wp-includes inProgress normal webmaster-hormigonacero-cc 2026-06-09 03:36
HOAC-6 ha └─ Rebuild index.html as vanilla semantic HTML (header/nav/main/footer, single h1, reserve space to kill CLS) on the new design system inProgress normal 2026-06-09 05:02
HOAC-10 ha └─ Teardown: delete wp-content/ + wp-includes/ once unreferenced; strip wp-* cache rules from vercel.json; update sitemap.xml/robots.txt inProgress normal 2026-06-09 03:36
HOAC-7 ha └─ Rebuild the 4 landing pages (peritaje-estructural, regularizacion-de-obra, honorarios-calculo-estructural, steel-frame-requisitos) on the shared vanilla template done normal 2026-06-09 03:00
HOAC-9 ha └─ Vanilla JS (script.js): mobile nav toggle + anchor-scroll-with-offset + any motion; remove jquery.min.js, jquery-migrate, Divi scripts.min.js/common.js/motion-effects.js done normal 2026-06-09 03:00
HOAC-5 ha └─ Images: relocate wp-content/uploads -> /img/, recompress, correct responsive srcset/sizes, preload LCP hero, drop unused variants done normal 2026-06-09 03:00
HOAC-2 ha └─ Content & asset inventory: extract real copy, sections, links, images from all 6 Divi pages into a content map (pm/docs/content-map.md) done normal 2026-06-09 03:00
HOAC-4 ha └─ Self-host fonts: download Open Sans + Kanit woff2 subsets locally, @font-face font-display:swap; replace Divi/FontAwesome icon font with inline SVG; remove all fonts.googleapis.com CDN links done normal 2026-06-09 03:00
HOAC-3 ha └─ Design system: author one vanilla style.css (CSS custom properties, responsive flex/grid, breakpoints, typography, colors) — zero Divi classes done normal 2026-06-09 03:00
HOAC-13 ha └─ Phase 2 (ONLY after vanilla index.html ships + verifies): build index-new.html as a from-scratch redesign PROPOSAL to present to client; keep noindex,nofollow until client approves backlog low webmaster-hormigonacero-cc 2026-06-09 02:37
HOAC-8 ha └─ Resolve index-new.html vs index.html: pick canonical home, fold the winning content in, delete the other canceled normal 2026-06-09 02:37
HOAC-12 ha └─ Accessibility pass (DEFERRED per Elazar 2026-06-08): fix viewport user-scalable=0, footer contrast, heading-order, add main landmark backlog normal 2026-06-08 18:06
HOAC-11 ha └─ Verify: re-run PageSpeed mobile+desktop (target 90+ mobile), visual-parity check vs current live, confirm all internal links + sitemap resolve under cleanUrls backlog normal 2026-06-08 18:06
OPS-11 agent-ops cc-context-monitor last_turn() v2.14 residual stale-read: agent force-compacted 'for no reason' every other session. Verified 2026-06-09 nw-whey-cc reported 184k while live /context=63.6k (3x phantom). last_turn (~line 312) reads transcript's last usage block = summarizer's pre-compact cache_read until next real turn; compact_boundary reverse-walk skip has a hole (boundary outside TAIL_BYTES, or pre-compact reading sampled in the gap before boundary written). Fix: gate actuator on LIVE window occupancy, not stale transcript estimate. NOT a cap problem - do NOT bump nw ROLE_CAP (Elazar explicit). Recurring user-facing churn. inProgress high bin-whey-cc 2026-06-09 03:22
MARS-67 mars Index cold FK columns deferred from advisor sweep backlog low 2026-06-09 02:53
BWI-7 basquetwi Migrate bwi PG + wi-http from whey to venus deferred low 2026-06-09 02:51
BWI-6 basquetwi Improve 400 error for priority<=1: tell user to pass --agent <name> instead of bare "agent required" done low coder-basquetwi 2026-06-09 02:41
BWI-5 basquetwi wi rename/edit-title: wi rename <id> "<new title>" (logs titleChanged event) done normal coder-basquetwi 2026-06-09 02:41
BWI-4 basquetwi KPI report generator (phase-1 read-only PG script) done high db-basquetwi 2026-06-09 02:40
BWI-1 basquetwi null canceled normal coder-basquetwi-cc 2026-06-09 02:40
VENUSINF-5 venusinfra EPIC: whey + lezama thin-client cutover backlog normal nw-whey-cc 2026-06-09 02:20
VENUSINF-26 venusinfra └─ Per-cutover rollback plan + burn-in verification gates backlog normal 2026-06-09 02:21
VENUSINF-25 venusinfra └─ Define what stays local on whey vs moves to venus (role redefinition) backlog normal 2026-06-09 02:21
VENUSINF-24 venusinfra └─ lezama → thin client via public venus (simplify the whey-VPN dependency) backlog normal 2026-06-09 02:21
VENUSINF-23 venusinfra └─ whey → thin client (hub/pg/smtp point to venus) backlog normal 2026-06-09 02:21
VENUSINF-4 venusinfra EPIC: venus hardening (public-IP attack surface) — GATES service exposure backlog high nw-whey-cc 2026-06-09 02:20
VENUSINF-22 venusinfra └─ unattended-upgrades + basic intrusion/monitoring on venus backlog low 2026-06-09 02:21
VENUSINF-21 venusinfra └─ Per-service bind/least-exposure audit (pg/hub/smtp listen only where needed) backlog normal 2026-06-09 02:21
VENUSINF-20 venusinfra └─ ssh lockdown (key-only, no root login) + fail2ban backlog normal 2026-06-09 02:21
VENUSINF-19 venusinfra └─ nftables/ufw default-deny + per-service allow rules backlog normal 2026-06-09 02:21
VENUSINF-3 venusinfra EPIC: Self-hosted SMTP on venus backlog normal nw-whey-cc 2026-06-09 02:20
VENUSINF-18 venusinfra └─ Repoint notify-elazar.sh to venus SMTP; verify delivery to Elazar inbox backlog normal 2026-06-09 02:21
VENUSINF-17 venusinfra └─ PTR/reverse-DNS + SPF/DKIM/DMARC for deliverability backlog normal 2026-06-09 02:21
VENUSINF-16 venusinfra └─ Install + configure MTA (postfix) on venus backlog normal 2026-06-09 02:21
VENUSINF-2 venusinfra EPIC: llmmsg hub + runtime DB → venus backlog high nw-whey-cc 2026-06-09 02:20
VENUSINF-15 venusinfra └─ Burn-in then decommission whey hub backlog low 2026-06-09 02:21
VENUSINF-14 venusinfra └─ Point llmmsg-hub.pensanta.com (DNS) at venus public IP backlog normal 2026-06-09 02:21
VENUSINF-13 venusinfra └─ Repoint whey + lezama MCP shim + bootstrap to venus hub endpoint backlog normal 2026-06-09 02:21
VENUSINF-12 venusinfra └─ Migrate runtime DB v2.sqlite whey→venus (quiesce, copy, integrity-check) backlog normal 2026-06-09 02:21
VENUSINF-11 venusinfra └─ Stand up llmmsg hub service on venus (v2-hub.mjs, port 9703, systemd) backlog normal 2026-06-09 02:21
VENUSINF-1 venusinfra EPIC: ONEDB target flip — telemetry consolidation onto venus-pg (supersede whey-pg) backlog urgent nw-whey-cc 2026-06-09 02:20
VENUSINF-10 venusinfra └─ Cross-update ONEDB WIs (ONEDB-12 ingestion, ONEDB-10 pg-write flip) for new target host backlog normal 2026-06-09 02:21
VENUSINF-9 venusinfra └─ Repoint venus-kpi-collect + whey/lezama remote writers to venus-pg backlog normal 2026-06-09 02:21
VENUSINF-8 venusinfra └─ pg_hba + network: allow whey + lezama as remote writers to venus-pg backlog normal 2026-06-09 02:21
VENUSINF-7 venusinfra └─ Provision postgres17 on venus (data dir, listen_addresses, telemetry db + telemetry_rw role) backlog normal 2026-06-09 02:21
VENUSINF-6 venusinfra └─ Confirm + record: venus-pg is the consolidation target; supersede whey-pg in ONEDB-12/10 + one-db/DESIGN.md backlog normal 2026-06-09 02:21
#65 pluto CR 46: Mostrar apellidos en vez de nombres en tablas/avatars done normal 2026-06-08 15:57
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
MSG-17 llmmsg-srv ARO fan-out default-deny: allowlist gate at /send aro-expansion (Elazar-managed) done high hub-llmmsgsrv-cc 2026-06-07 09:57
MARS-62 mars Audit DateDmyField required-enforcement (parallel to Pluto PLUTO-10): src/components/form/date-dmy-field.tsx puts required on a HIDDEN input → browsers never constraint-validate it, so required is silently inert. Every caller relying on it for required-date enforcement has a validation gap (only explicit JS/server check actually blocks). 8 caller files in src. Audit each required DateDmyField caller, confirm an explicit check exists, add where missing. Root cause discovered via Pluto práctica DOB empty-date DB error. canceled normal 2026-06-07 09:39
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
PLUTO-9 pluto Práctica create: empty-date string reaches DB (invalid input syntax for type date) done normal 2026-06-07 09:28
MARS-57 mars Disable SupportReplyForm submit while pending (double-submit guard) done normal coder02-mars-cc 2026-06-07 08:38
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
OPS-10 agent-ops attach-tmux.sh nests tmux/stacks extra login shell on switch-client path (recurring, 'fixed 5x') backlog high bin-whey-cc 2026-06-07 08:31
PLUTO-8 pluto Notification email: malformed link URL (trailing \n in NEXT_PUBLIC_APP_URL) + label/route mismatch done normal 2026-06-07 07:06
PLUTO-7 pluto Solicitud form: require comision + adjunto (mandatory pulldowns) for teacher-role access requests — block submit without them (client + server validation) done normal 2026-06-07 06:42
MARS-58 mars Prod: support-reply action hangs on Enviando (no SMTP timeouts) done normal 2026-06-07 06:41
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-55 mars MARS-48-D rework: prominent top no-reply banner (not footer) on 6 auth/onboarding emails done normal 2026-06-07 06:20
PLUTO-6 pluto Solicitud detail: relabel id field to 'ID de Solicitud de ingreso' + make id a self-link (cross-app UI tweak, Elazar via pm-mars) done normal 2026-06-07 06:13
MARS-48 mars Standardize 'no respondas a este email — respondé en la app' banner + in-app CTA across ALL Mars outbound emails done normal 2026-06-07 06:12
MARS-52 mars solicitud detail /administrar/solicitudes/[id]: add 'ID de Solicitud de ingreso' label + self-link value (mirror MARS-51) done normal 2026-06-07 06:12
MARS-54 mars práctica detail Comentarios: remove redundant 'Nuevo comentario' heading (placeholder already says it), preserve input a11y label done normal 2026-06-07 05:36
MARS-51 mars práctica detail: relabel Código → ID de práctica + make código value a self-link to /practicas/[id] done normal 2026-06-07 05:36
MARS-50 mars Prod: práctica create broke — MARS-40 column drop left fn_archiveStudentAssignmentChange referencing dropped studentAssignments.jtpUserId; trigger rewritten in prod, must capture in repo SSOT + sweep for other stale refs done normal 2026-06-07 05:36
MARS-46 mars Support: replySupportTicket — mid-thread reply-to-reporter action (email free-text + log appEvent, no status change) done normal coder-mars-cc 2026-06-07 05:36
MSG-16 llmmsg-srv Shim/hub: auto re-register on reconnect after tunnel blip (roster-drop-until-manual-rrll) done high hub-llmmsgsrv-cc 2026-06-07 04:56
MSG-15 llmmsg-srv CC idle/launch auto-drain: unread-gated send-keys poke + bootstrap unread-reminder hook (CC-only, Codex auto-excluded via cmd!=claude guard) done high hub-llmmsgsrv-cc 2026-06-07 04:56
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
PLUTO-5 pluto appEvents category model (OWASP-aligned, NO native enum/CHECK) + retention prune-by-category job done normal db-pluto-cc 2026-06-06 20:04
PLUTO-4 pluto appEvents views: add semantic vAppEventsRelevant24h (deduped, all-levels) + consolidate 6 redundant LIMIT-N error views + schema.md; drop import% workaround in vAppErrorsRecent after source fix done normal db-pluto-cc 2026-06-06 20:04
PLUTO-3 pluto Events-table hygiene review (last 24h): labeling correctness, keep-vs-drop per event type, recent-events view done normal coder-pluto-cc 2026-06-06 20:04
ONEDB-13 one-db cc-context-monitor v3.0 M1 sys.exit(1) aborts MANUAL venus/lezama runs before pg-mirror write when CCM_HUB_URL=127.0.0.1 default. Unattended unaffected (service unit exports LLMMSG_HUB_URL ZT/tunnel). Fix post-ONEDB-12: document manual-run env requirement (export LLMMSG_HUB_URL) over per-host CCM_HUB_URL remap. Bump VERSION. backlog low 2026-06-06 20:04
PLUTO-2 pluto SC 500 on /admin/solicitudes/[id] — getAccessRequestMergeCandidates throws on NULL legajo (untyped $2 IS NOT NULL) done normal coder-pluto-cc 2026-06-06 13:02
MSG-14 llmmsg-srv ccs.sh:183 launcher gate fix: swap --dangerously-load-development-channels -> --channels server:KEY so team-launch needs no per-agent gate-accept + no manual rrll done high pm-llmmsgsrv-cc 2026-06-06 13:02
MARS-47 mars Práctica Historial leaks raw archiveReason codes to users (admin:backfill-practicaCodigo, admin:sa-update-replay) done normal 2026-06-06 12:55
MARS-45 mars supportTickets human-readable ref (SOP-NNNN) in UI+email+links + fix Estado raw-UUID leak done normal 2026-06-06 12:33
MARS-44 mars Human-readable práctica reference code (YYMMDD-NN, per-student-daily) done normal 2026-06-06 11:53
MARS-39 mars Schema cleanup drops — accessRequests.correoAlternativo (100% null), helpArticles+helpArticleTags+vHelpArticles (0-row never-used), vErrorsLast5/10/20 (keep vErrorsLast25), dead tickets+ticketEvents (16 closed rows/0 events vs live supportTickets). Verify zero src refs before each drop. done normal 2026-06-06 11:53
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-40 mars SA.jtpUserId live split-brain — coordinated 4-step fix (reconcile 40 rows → create/import writes+3 reads switch to assignedTeacherUserId → vStudentAssignments jtpName join+back-compat alias → drop legacy col+move partial index). Folds in vPracticasSinEvaluar + vComisionAyudantesByJtp snapshot-view leaks. Root of MARS-21/28/Montoya bug family. done high coder-mars-cc 2026-06-06 09:01
MARS-41 mars Audit quick HIGH wins — solicitudes N+1 (vAccessRequestsForReview LATERAL, 500q/load to 1) + analyzeModeOn=false (stop imageUploadAnalysisEvents +600/day growth) + practicas/[id] serial-await to Promise.all (mirror mi-cursada sibling). done high coder02-mars-cc 2026-06-06 08:57
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
#509 agent-ops evolutiva-backup down for mars+pluto: Supabase removed legacy db.<ref>.supabase.co direct hostnames (NXDOMAIN) - DSNs need pooler connection strings done high nw-whey-cc 2026-06-06 08:36
MARS-37 mars Codex audit — MED quick-wins: lang es-AR + image-route private cache + AR-tz format trio done normal 2026-06-06 08:20
OPS-9 agent-ops cc-context-monitor path-B/wind-down DM mis-targeting: db-mars-cc remediation delivered to nw-venus-cc backlog high nw-whey-cc 2026-06-06 07:17
#588 llmmsg-srv lezama hub tunnel stale-bind restart thrash (llmmsg-lezama-tunnel.service, counter 3124) done high pm-llmmsgsrv-cc 2026-06-06 07:00
MSG-12 llmmsg-srv Make context-budget nag idempotent: stop re-nagging every turn + stop stacking /compact crons after compact backlog high pm-llmmsgsrv-cc 2026-06-06 06:53
MSG-10 llmmsg-srv Codex receive-bridge: sidecar tmux-poke so Codex agents auto-drain llmmsg unread (no live push) backlog high pm-llmmsgsrv-cc 2026-06-06 06:24
MSG-11 llmmsg-srv └─ HARD PREREQ: derive + test a Codex-specific ready-prompt regex for idle-gating (CC matcher will NOT transfer; wrong matcher = corrupted-buffer poke). No send-keys goes live until validated. backlog high nw-whey-cc 2026-06-06 06:24
#510 mars Comb entire app for raw UUID/ID shown in UI instead of label; fix all (reported on /informes JTP/Ayudante column) done high coder02-mars-cc 2026-06-06 06:10
MARS-32 mars /practicas redesign (Elazar brainstorm 2026-06-06): unify list+grading into one role-aware page done normal pm-mars-cc 2026-06-06 06:09
MARS-34 mars └─ /practicas (b) role-aware JTP sectioned view: 1-line KPIs (getJtpStats), Por revisar tuyas, Por revisar en tus comisiones (NEW excludeJtpUserId param), Prácticas en tus comisiones (default scope); filters collapse to flat list; simplify BACKLOG_LANDING_ROLES landing. Builds on a/c/d done normal coder-mars-cc 2026-06-06 06:09
MARS-36 mars └─ Implement sidebar regroup from /sidebars-preview (Elazar 06-06): adopt the previewed per-role nav as the LIVE app-sidebar, preserving MARS-33/34 /practicas changes (merged Prácticas, no Por-calificar link, Nueva-práctica as button). Shares app-sidebar.tsx with MARS-34 -> coder-mars owns, sequence AFTER MARS-34. coderhelp to define concrete current->proposed diff first. done normal coder-mars-cc 2026-06-06 06:04
MARS-33 mars └─ /practicas a/c/d quick patch: (a) Nueva-práctica header button + drop teacher sidebar link; (c) drop Fecha-de-Carga col, student-name first; (d) inline Calificar button on sin-calificar rows -> /practicas/[id]#calificar, gated canReview(reviewPractica|fullAccess)&&noRevisado; graded rows show reviewedAt (Calificada el…) done normal coder-mars-cc 2026-06-06 05:59
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-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-28 mars /practicas: add visible teacher filter scoped to JTP-role only — show prácticas where the selected teacher is the JTP (assignedTeacherUserId, live), exclude prácticas where they're the ayudante. Surface the MARS-23 JTP-only ?jtp= drill as a first-class filter control. ↳#686 done normal coder-mars-cc 2026-06-06 05:09
MARS-29 mars Block JTP unassign-to-null in /alumnos dropdown: remove the empty '-' option for the JTP (assignedTeacherUserId) column so a student's JTP can only be reassigned to another teacher, never cleared to none. KEEP '-' for the ayudante column (ayudante is optional). Add server-side guard in reassignTeacher rejecting null when field=assignedTeacherUserId. ↳#686 done normal coder02-mars-cc 2026-06-06 05:09
MARS-27 mars Clean mislabeled appEvents: remove form-validation toast logger (toast/error-shown, level=error noise) + recategorize sa-teachers-cascade category admin→system ↳#686 done high coder-mars-cc 2026-06-06 05:03
MSG-9 llmmsg-srv venus /opt/llmmsg-srv is NOT a git checkout - no sync path for maintainer pushes (forces manual /gdrive/temp hops; v1.16 bootstrap had to be hand-installed). Make it a proper git checkout of origin/main like lezama (project_lezama_code_drift) so future pushes land via git pull. Care: venus dir has live local files (.agent-name, service config) - clone-in-place or backup+clone, don't clobber runtime config. backlog normal 2026-06-06 04:56
OPS-8 agent-ops Fleet model audit: many agents still pinned Opus 4.7; move to default-tracks-latest (verify default=Opus 4.8 + future models) or pin Opus 4.8; review model choice per agent by role backlog normal nw-whey-cc 2026-06-06 04:25
BWI-3 basquetwi Ship wi-web browsable UI on bwi.pensanta.com:8765 (HTTP-mode -> wi-http -> PG, systemd Restart=always) done high coder-basquetwi 2026-06-06 04:17
OPS-7 agent-ops attach-tmux.sh: list OFFLINE agents too; selecting one launches its ccs session and attaches you to it backlog normal nw-whey-cc 2026-06-06 03:53
MARS-26 mars Re-add ayudante notify at práctica creation as INFORMATIONAL (new type practicaAyudanteAsignada, in-app only, no email); JTP keeps grading practicaToReview+email. Elazar follow-up to MARS-23/25 — notify whoever was PICKED as JTP/ayudante, nobody else; no grading semantics for ayudante. ↳#686 done high coder-mars-cc 2026-06-06 03:45
ONEDB-1 one-db one-db: 5 telemetry sqlite -> Postgres17 consolidation (umbrella) backlog high nw-whey-cc 2026-06-06 03:42
ONEDB-2 one-db └─ No dual-write: cutover = flip reporter (netreport.sh) to pg + drop sqlite writes after parity. Per Elazar 2026-06-06. done high bin-whey-cc 2026-06-06 21:03
ONEDB-11 one-db │ └─ GATE#1 step iv: drop sqlite writes in 6 collectors after readers repointed+proven — pg-primary, JSONL-spool = resilience cache (Elazar: NO sqlite write-ahead). cc-context-monitor keeps LOCAL rolling cache for its own over-cap loop + pg mirror done high bin-whey-cc 2026-06-06 21:03
ONEDB-10 one-db │ └─ GATE#1 step iii: flip venus-kpi-collect.sh to pg-write (telemetry_rw via metrics_write) — kills kpi.sqlite split-brain co-writer; nw lane (cross-host) blocked high nw-whey-cc 2026-06-06 19:35
ONEDB-12 one-db │ └─ GATE#1 step v: remote-monitor ingestion — venus/lezama write whey-pg DIRECTLY per-host (NO ssh-pull). Transport: venus=ZeroTier 172.27.178.27 or Tailscale; lezama=ssh -w L3 tunnel only (GCABA blocks ZT+TS), pg client→172.30.0.1. whey: listen_addresses + pg_hba for both + telemetry_rw role. nw co-owns backlog high nw-whey-cc 2026-06-06 13:11
ONEDB-9 one-db │ └─ GATE#1 step ii: repoint 5 sqlite readers to pg telemetry_ro — netreport.sh, testnetwork --report, ccusage-daily-kpi.sh, llmmsg-kpi-report.sh, memory-lint.sh backlog high bin-whey-cc 2026-06-06 13:11
ONEDB-8 one-db │ └─ GATE#1 step i: add reporter-set pg views to schema.sql (network v_history/v_report/v_by_wifi; kpi 3-day window) — distinct from coder's dashboard views; back the 5 sqlite readers backlog high bin-whey-cc 2026-06-06 13:11
ONEDB-3 one-db └─ Telemetry collector registry: lazy-load .md - per source list systemd unit/timer -> collector script -> what data -> which reporter DMs Elazar+aro. done normal nw-whey-cc 2026-06-06 09:02
ONEDB-5 one-db └─ kpi.pensanta.com dashboard on whey (chat-duo-web model): single-file Node .mjs reads telemetry views -> static KPI pages. todo normal coder-chatduo-cc 2026-06-06 08:45
ONEDB-14 one-db │ └─ kpi-web MANIFEST: add Track A views (usage.v_kpi_tokens_7d + context.v_kpi_compact_7d) to server.mjs allowlist + restart done normal coder-chatduo-cc 2026-06-16 02:11
ONEDB-6 one-db │ └─ DECISION (Elazar): kpi.pensanta.com exposure - Tailscale-only (team rec: bind whey tailnet IP, no TLS/cert ops, no public attack surface) vs public-TLS backlog high nw-whey-cc 2026-06-06 04:24
ONEDB-4 one-db └─ SELECT * views: one wide view per table (+rollups) so agents never guess columns - default SELECT *, not named fields. done normal bin-whey-cc 2026-06-06 08:45
ONEDB-7 one-db └─ DECISION (Elazar): make ~/Documents/terminal/one-db its own git repo? bin (PM) owns the call backlog high bin-whey-cc 2026-06-06 04:24
OPS-2 agent-ops one-db: consolidate all whey telemetry/KPI sqlite into one local Postgres 17 db (telemetry), schema-per-domain, SELECT*-friendly views, reporting web UI. Goal: one place for all KPIs/perf/context data + Elazar can actually find/read them. canceled high bin-whey-cc 2026-06-06 03:40
OPS-6 agent-ops └─ one-db: cutover (NO dual-write — Elazar dropped it 2026-06-06). Collectors write straight to pg via metrics_write (spools to JSONL on pg-down, so no data loss); backfill already loaded full history. Flip 5 collectors + netreport off sqlite, retire sqlite files once pg-proven. canceled high bin-whey-cc 2026-06-06 03:40
OPS-5 agent-ops └─ one-db: kpi.pensanta.com web UI on whey — small read-only server (chat-duo-web model, single-file .mjs) that reads the SELECT* views and renders KPI pages, so Elazar has one habit-friendly place to glance at all KPIs and drill into any metric when something looks off. canceled normal coder-chatduo-cc 2026-06-06 03:40
OPS-4 agent-ops └─ one-db: views layer — every table gets enough pg views (latest / daily / report rollups) so agents query a view with SELECT * (never name fields). Goal: zero token waste guessing columns. Document view list in telemetry-inventory.md. canceled high bin-whey-cc 2026-06-06 03:40
OPS-3 agent-ops └─ one-db: lazy-load telemetry-inventory.md — single doc agents read on demand listing, per data stream: which systemd unit/timer/cron collects it, which script the unit runs, which table it writes, and which script reports to Elazar + which aro. Keep it the SSOT map of the whole telemetry pipeline. canceled high bin-whey-cc 2026-06-06 03:40
MSG-8 llmmsg-srv ARO display-metadata: sort_order + emoji on aro_config (/sort + /emoji, web sidebar) done normal 2026-06-06 02:38