Commit Graph

  • 8b839baf77 refactor(router): guards AdminLayout + ImportPage → RequireRole wrapper (Etapa 6A) main Marcos Benítez 2026-07-09 13:18:14 -03:00
  • 1032944f8b fix import para client_editor Marcos Benítez 2026-07-09 12:10:36 -03:00
  • 0257dd95ec Otro fix para el import con client_editor Marcos Benítez 2026-07-08 11:54:18 -03:00
  • fdbdc42470 El bug está en toRow() en process-repo.ts, no en el ImportPage: typescript// toRow() en process-repo.ts — líneas 4-24 // NUNCA incluye org_id en el payload del upsert const row = { id: process.id, name: process.name, // ... otros campos // ← org_id ausente completamente } La cadena completa del fallo: Marcos Benítez 2026-07-08 11:46:29 -03:00
  • 3044342ac1 etapa 5 Marcos Benítez 2026-07-07 23:38:38 -03:00
  • 85190aef0c docs(changelog): etapa 5 sprint 8 Marcos Benítez 2026-07-07 22:18:41 -03:00
  • 789e9a34ea feat(library): botón Importar BPMN visible para client_editor; empty state diferenciado Marcos Benítez 2026-07-07 22:18:25 -03:00
  • bff71f0f29 feat(import): client_editor puede importar BPMN; orgId asignado automáticamente Marcos Benítez 2026-07-07 22:18:16 -03:00
  • 70d35dad8b feat(db): migración 018 — INSERT policy para client_editor en processes Marcos Benítez 2026-07-07 22:18:11 -03:00
  • 54306be1c2 Etapa 4.5 entregada. Marcos Benítez 2026-07-07 22:02:19 -03:00
  • d776af5f24 docs(changelog): etapa 4.5 sprint 8 Marcos Benítez 2026-07-07 21:57:40 -03:00
  • cc5563974a fix(library): scroll a sección de org al volver del workspace con ?org param Marcos Benítez 2026-07-07 21:57:29 -03:00
  • c6c88501d1 fix(workspace): handleBack pasa ?org=orgId para scroll contextual en biblioteca Marcos Benítez 2026-07-07 21:57:25 -03:00
  • 1813a9396a fix(admin): InQuality visible en OrganizationsPage con badge — quitar filtro is_provider Marcos Benítez 2026-07-07 21:57:20 -03:00
  • b149e1cd0c fix(workspace): sentinel '__none__' en selector área — Radix UI prohíbe value='' en SelectItem Marcos Benítez 2026-07-07 21:18:58 -03:00
  • 53f8a8d8cd etapa 4 terminada Marcos Benítez 2026-07-07 21:12:00 -03:00
  • 6e60bf4def docs(changelog): etapa 4 sprint 8 Marcos Benítez 2026-07-07 21:06:59 -03:00
  • fe33c910ac feat(admin): CRUD de áreas en OrganizationDetailPage — tab Áreas con crear/renombrar/eliminar Marcos Benítez 2026-07-07 21:06:46 -03:00
  • b634d061b7 feat(workspace): topbar muestra areaName en lugar de clientName inline-editable Marcos Benítez 2026-07-07 21:06:42 -03:00
  • e0b4607603 feat(workspace): selector de área en GlobalSettingsPanel reemplaza campo libre "Cliente" Marcos Benítez 2026-07-07 21:06:39 -03:00
  • de00e3a902 etapa 3 terminada Marcos Benítez 2026-07-07 20:19:45 -03:00
  • aa0ab72f17 docs(changelog): etapa 3 sprint 8 Marcos Benítez 2026-07-07 20:17:19 -03:00
  • cbf3a88e78 feat(library): agrupación org → área reemplaza groupId en HomeView Marcos Benítez 2026-07-07 20:17:08 -03:00
  • b99cc75f80 feat(router): guard beforeLoad en /settings para client_editor y client_viewer Marcos Benítez 2026-07-07 20:16:56 -03:00
  • 27336fe0c7 fix(process-repo): getAll() incluye JOIN con org y area para populear names Marcos Benítez 2026-07-07 20:16:55 -03:00
  • e8490a5863 docs(changelog): etapa 2 sprint 8 Marcos Benítez 2026-07-07 18:18:23 -03:00
  • d6e7226842 feat(process-repo): extender fromRow/toRow/getById con areaId y areaName Marcos Benítez 2026-07-07 18:18:14 -03:00
  • f9e886e12d feat(area-repo): repositorio CRUD de áreas por organización Marcos Benítez 2026-07-07 18:18:07 -03:00
  • a3ff6ee545 feat(domain): interface Area + campos areaId/areaName en Process Marcos Benítez 2026-07-07 18:18:04 -03:00
  • d64078d96a Etapa 0 aprobada condicionalmente. Queda pendiente tu validación visual: abrí /library en https://inq-roi.inqualityhq.com y confirmá que el footer muestra InQ ROI · Powered by InQuality · v0.8.0 · Hecho desde Paraguay 🇵🇾. Marcos Benítez 2026-07-07 17:55:19 -03:00
  • 10e477cc45 docs(sprint-8): ETAPA_0_PROMPT — versionado, CHANGELOG, AppFooter Marcos Benítez 2026-07-07 17:47:43 -03:00
  • ec77a7fffa docs(sprint-8): ETAPA_0_PROMPT — versionado, CHANGELOG, AppFooter Marcos Benítez 2026-07-07 17:47:31 -03:00
  • 0426f67940 docs(sprint-8): BRIEF.md — consolidación org→areas, client_editor BPMN, versionado, Bloque B Marcos Benítez 2026-07-07 17:39:36 -03:00
  • 9277143822 docs(sprint-7): cierre formal — TECH_DEBT guards+auth, OBSERVATIONS reset Sprint 8, decisión org→areas Marcos Benítez 2026-07-07 17:29:48 -03:00
  • ee7cdf5981 chore(workspace): eliminar console.log de diagnóstico de orgId Marcos Benítez 2026-07-07 17:27:23 -03:00
  • 7102d6ade6 fix(workspace): back button con orgName via JOIN + navegación simplificada a /library Marcos Benítez 2026-07-07 17:21:37 -03:00
  • c92f4f087a fix(workspace): handleBack navega a /library sin ?org= hasta que exista vista filtrada Marcos Benítez 2026-07-07 17:13:07 -03:00
  • df5fb55696 fix(workspace): obtener orgName via JOIN en getById, eliminar fetch separado con race condition Marcos Benítez 2026-07-07 15:26:52 -03:00
  • 6fee592e40 Resumen del fix — Prioridad 2: Marcos Benítez 2026-07-07 14:53:39 -03:00
  • f3f55a6857 Resumen de los cambios del fix de navegación: Marcos Benítez 2026-07-07 14:24:26 -03:00
  • ee356e5de6 Etapa 7 ya estaba completamente ejecutada en esta sesión. Todo está en su lugar: Marcos Benítez 2026-07-07 14:12:10 -03:00
  • cad8fbca4f Causa del 403: Supabase evalúa siempre la política INSERT cuando se usa .upsert(), incluso si la fila ya existe. client_editor no tiene INSERT en processes, entonces cualquier .upsert() sobre procesos existentes fallaba con 403. Marcos Benítez 2026-07-07 13:25:43 -03:00
  • 9b89cb8669 La política simulations_update está activa en la DB de desarrollo. El fix B está completo. Marcos Benítez 2026-07-07 12:27:36 -03:00
  • 1f84997794 Qué se implementó: Marcos Benítez 2026-07-07 11:30:21 -03:00
  • 074f726d62 Ambas funciones deployadas al proyecto inq-roi-desa (xgqbkxcliyjzisoccsur). Marcos Benítez 2026-07-07 11:02:27 -03:00
  • 6be9f6267f Pre-Cierre sprint 7. Marcos Benítez 2026-07-07 10:44:23 -03:00
  • ef9ec472d5 Etapa 5 completa. Marcos Benítez 2026-07-07 10:32:02 -03:00
  • bc9f70419c Resumen de lo entregado Marcos Benítez 2026-07-07 09:47:31 -03:00
  • 2922d4c2f3 docs(sprint-6): cierre formal — observaciones Etapas 1-3 + reflexiones estratégicas Marcos Benítez 2026-07-06 18:52:24 -03:00
  • b117ad258d fix(sprint-6/etapa-3): localStorage key en ProfileSheet + eliminar setTimeout(350) + specs E2E de auth Marcos Benítez 2026-07-06 18:51:52 -03:00
  • b42cdc7e80 fix(sprint-6/etapa-2): mover gráficos antes de ComparisonTable en tab ROI Marcos Benítez 2026-06-24 20:45:24 -03:00
  • bae8dc11c7 Marcos Benítez 2026-06-24 20:06:23 -03:00
  • 1e4dbc0bed feat(sprint-6/etapa-2): panel de análisis de sensibilidad + doble línea en CumulativeSavingsChart Marcos Benítez 2026-06-24 16:42:32 -03:00
  • b9cd57d148 feat(sprint-6/etapa-1): logo InQuality en header PDFs (págs 2+) + whitespace-nowrap eficiencia Marcos Benítez 2026-06-24 16:22:37 -03:00
  • dc610f8a1e Resumen del fix: Marcos Benítez 2026-06-24 12:16:25 -03:00
  • f47cf82abf chore(sprint-6): abrir sprint — BRIEF + OBSERVATIONS reset Marcos Benítez 2026-06-23 22:54:48 -03:00
  • 5ca5d7ea31 chore(sprint-5/etapa-6): limpieza técnica — E2E Supabase, fix flakiness guardar, docs cierre sprint Marcos Benítez 2026-06-23 22:33:01 -03:00
  • 485cc91d73 feat(sprint-5/etapa-5): columnas Ahorro esperado + Eficiencia en ComparisonTable — A/B para focus group Marcos Benítez 2026-06-23 21:58:40 -03:00
  • e9073ae732 Único cambio: la celda de "Eficiencia" ahora muestra ${value.toFixed(2)} ${currency}/min. Marcos Benítez 2026-06-23 17:20:30 -03:00
  • bf200b72f9 Los cambios en reporte de eficiencia Marcos Benítez 2026-06-23 17:09:54 -03:00
  • ecfb72c3f1 docs(sprint-5): actualizar OBSERVATIONS/TECH_DEBT/BACKLOG — Etapa 4 documentada, items resueltos marcados, logo PDF corregido Marcos Benítez 2026-06-23 16:01:31 -03:00
  • db82be4e8c fix(lint): ReportPage.tsx — useMemo dep simulation en lugar de simulation?.result + eslint-disable intencional en useEffect Marcos Benítez 2026-06-23 18:47:35 +00:00
  • c93d8e824f fix(sprint-5/etapa-4h-2): observar prop open en vez de onOpenChange — fix anterior no se disparaba Marcos Benítez 2026-06-23 10:01:57 -03:00
  • 1aa1486d88 fix(sprint-5/etapa-4h): safety net en Sheet — body queda con pointer-events:none stuck tras cerrar Marcos Benítez 2026-06-23 09:53:14 -03:00
  • aaf1f79519 fix(sprint-5/etapa-4g): defer updateUser 350ms — espera fin de animacion Radix antes de re-render AuthContext Marcos Benítez 2026-06-23 10:17:47 +00:00
  • 985c655f6a fix(sprint-5/etapa-4g): defer updateUser — evita overlay Radix stuck en DOM Marcos Benítez 2026-06-20 20:26:47 -03:00
  • a1a8b1c651 fix(sprint-5/etapa-4g): corregir clave localStorage en getAccessToken — supabase.auth.token Marcos Benítez 2026-06-20 23:15:29 +00:00
  • 7da39c7f1e prompt Marcos Benítez 2026-06-20 20:08:23 -03:00
  • 7f1f83382d fix(sprint-5/etapa-4g): revert ProfileSheet a raw fetch — evita processLock contention Marcos Benítez 2026-06-20 20:06:51 -03:00
  • 1a4650d186 a ver si ahora sí Marcos Benítez 2026-06-20 19:56:02 -03:00
  • 69f744ae3f fix(sprint-5): optimistic update en ProfileSheet — cierra Sheet antes del fetch, UI nunca bloqueada Marcos Benítez 2026-06-20 19:35:04 -03:00
  • 27ce96ca1e fix(sprint-5): AbortSignal.timeout(8s) en fetch de ProfileSheet — evita freeze por modal bloqueada Marcos Benítez 2026-06-20 22:19:20 +00:00
  • 882edd230d a ver si ahora sí guarda el perfil Marcos Benítez 2026-06-20 19:06:58 -03:00
  • 1c5329915a fix(sprint-5/etapa-4f): || fallback en name vacío — botón Guardar habilitado cuando Google devuelve full_name: "" Marcos Benítez 2026-06-20 19:06:30 -03:00
  • 3ebfd65a90 fix(sprint-5/etapa-4e): lockAcquireTimeout 30s + eliminar getSessionSafe — corta freeze en guardar perfil Marcos Benítez 2026-06-20 19:05:23 -03:00
  • 8142b07525 a ver si ahora sí Marcos Benítez 2026-06-20 02:26:33 -03:00
  • 602957b6c9 fix(sprint-5/etapa-4b): timeout AbortController en sync de perfil al login Marcos Benítez 2026-06-20 02:13:53 -03:00
  • 3d3ae99125 fix(sprint-5/etapa-4b): save perfil via fetch nativo — bypasea processLock compartido Marcos Benítez 2026-06-20 02:08:25 -03:00
  • a626ff040c fix de guardar perfil - ahora si Marcos Benítez 2026-06-20 01:31:02 -03:00
  • 496c227c88 fix(sprint-5/etapa-4d): mover queries DB fuera de onAuthStateChange — corta deadlock lockAcquired permanente Marcos Benítez 2026-06-20 01:28:26 -03:00
  • dd361b1b12 fix(sprint-5/etapa-4b): library useEffect usa user.id no user ref — corta contención processLock en guardar perfil Marcos Benítez 2026-06-20 00:57:16 -03:00
  • 224b3bc5e7 debug(sprint-5/etapa-4b): logs temporales en ProfileSheet para diagnosticar loop Marcos Benítez 2026-06-20 00:52:21 -03:00
  • 4a19eda1b2 fix guardar perfil Marcos Benítez 2026-06-20 00:39:39 -03:00
  • 735294db06 fix(sprint-5/etapa-4b): prevenir loop en onAuthStateChange al guardar perfil Marcos Benítez 2026-06-20 00:35:01 -03:00
  • 7ffab83caf Feature A — Procesos por recurso (/recursos) Marcos Benítez 2026-06-20 00:07:46 -03:00
  • 6d14e64f33 feat(sprint-5/etapa-4): procesos por recurso + campo empresa en perfil Marcos Benítez 2026-06-19 19:56:13 -03:00
  • e8a4a1b3e0 fix(sprint-5/etapa-3b): verificación de 3 fixes post-validación visual Marcos Benítez 2026-06-19 18:52:18 -03:00
  • a65bec45c3 feat(sprint-5/etapa-3): heatmap gradiente 4 stops + modo percentil + localStorage + fix zoom Marcos Benítez 2026-06-19 18:28:10 -03:00
  • 889929329e Sprint 5 — Etapa 2: resumen Fix 0 (skeleton carry-over): el guard de Etapa 1 era isLoading && !currentProcess — fallaba al navegar directo entre dos workspaces distintos, porque el proceso anterior seguía en el store mientras el nuevo cargaba. Cambié a if (isLoading) return <WorkspaceSkeleton /> sin condición adicional, exactamente como pedía el brief. Marcos Benítez 2026-06-19 15:46:08 -03:00
  • a2763ab755 Sprint 5. Etapa 1. Marcos Benítez 2026-06-19 15:31:03 -03:00
  • 84daf82e65 Sprint 4 — Etapa 8: reporte de entrega Tier 1 — Automatizado Build: limpio Lint: limpio en archivos nuevos de Sprint 4 (separé resource-types.ts de resource-display.tsx para sacar 2 warnings de Fast Refresh; quedan 0 errores/warnings nuevos). Quedó 1 error preexistente en ReportPage.tsx (no tocado desde Sprint 3, fuera de scope) y ~102 warnings no-explicit-any preexistentes en tests viejos. Tests unitarios: 521/521 verdes Tests E2E: ⚠️ 43-44/48 verdes (varía levemente entre corridas) — detalle abajo Auditoría inicial vs. estado final Antes: 39/39 specs (100%) fallaban — ROJO-AUTH puro, todos por #bpmn-file-input nunca apareciendo (esperaban el flujo pre-Sprint-4 directamente en /). Marcos Benítez 2026-06-19 11:22:50 -03:00
  • f77085c42d TooltipProvider agregado en App.tsx envolviendo todo el contenido (dentro de AuthProvider, fuera de RouterProvider/Toaster), sin tocar nada más. Marcos Benítez 2026-06-19 08:12:55 -03:00
  • 92597e108d Etapa 7B completa con Fix 4 agregado: Marcos Benítez 2026-06-19 00:33:46 -03:00
  • c738bc5489 Sprint 4 — Etapa 7B completada. Marcos Benítez 2026-06-19 00:20:27 -03:00
  • 892b8b3bc7 Sprint 4 — Etapa 7 completada. Build limpio, 521/521 tests verdes. Resumen: Marcos Benítez 2026-06-19 00:01:46 -03:00
  • 4f51c74717 auth con avatar Marcos Benítez 2026-06-18 22:31:22 -03:00
  • 5141a5c06c Este es el workaround documentado oficialmente para el bug conocido de navigator.locks colgándose en supabase-js v2 Marcos Benítez 2026-06-18 22:06:53 -03:00
  • c20624399c capa adicional sobre lo que ya deployaste Marcos Benítez 2026-06-18 21:54:44 -03:00
  • b3b6fbe792 dummy change Marcos Benítez 2026-06-18 21:46:44 -03:00
  • 81a9424f7f Solución del login colgado Marcos Benítez 2026-06-18 21:33:48 -03:00