Bump Sentry.AspNetCore from 5.3.0 to 6.7.0 - #53
Closed
dependabot[bot] wants to merge 214 commits into
Closed
dependabot[bot] wants to merge 214 commits into
dependabot[bot] wants to merge 214 commits into
Conversation
## Cambios críticos de seguridad - Agregado .gitignore completo para .NET - Creado appsettings.Example.json como plantilla - Sanitizadas credenciales en appsettings.json - Corregido manejo de excepciones con logging apropiado - Cambiado DateTime.Now a DateTime.UtcNow para evitar problemas de zona horaria ## Mejoras de arquitectura - Reemplazado EnsureCreatedAsync() por MigrateAsync() en Program.cs - Movida lógica de negocio del método Fallar de controlador a servicio - Agregado método FallarHabito en IServicioHabitos y ServicioHabitos ## Mejoras de código - Creada clase ConstantesGamificacion para valores de XP - Extraída lógica de configuración de cookies a métodos helper - Reemplazados valores mágicos por constantes en sistema de gamificación - Eliminados archivos temporales (compare.py, diff.txt, run_output.txt) ## Documentación - Agregado CAMBIOS_REALIZADOS.md con resumen completo de cambios - Documentadas instrucciones de configuración post-cambios - Listadas próximas mejoras recomendadas 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
## Mejoras de Arquitectura - Eliminado acceso directo a DbContext en HomeController - Eliminado acceso directo a DbContext en AutenticacionController - Eliminado acceso directo a DbContext en ApiHabitosController - Agregado IServicioBienestar.ObtenerFraseMotivacionalAleatoria() - Agregado IServicioAutenticacion.ObtenerCarrerasActivas() - Agregados métodos en IServicioHabitos para obtener datos con DTOs ## DTOs Implementados - Creado HabitoRespuestaDto para respuestas de hábitos - Creado HabitoHoyRespuestaDto para hábitos activos del día - Creado RegistroSemanaDto para registros semanales - Creado CompletarHabitoRespuestaDto para completar hábitos - Creado FallarHabitoRespuestaDto para fallar hábitos - Reemplazados tipos anónimos por DTOs en servicios y controladores API ## Mejoras de Código - Extraído JavaScript inline de _Layout.cshtml a theme-manager.js - Extraído JavaScript inline de Index.cshtml a dashboard.js - Agregado evento personalizado 'themeChanged' para componentes reactivos - Eliminado paquete AutoMapper no utilizado del proyecto - Eliminados comentarios sobre AutoMapper de Program.cs ## Beneficios - Mejor separación de concerns (no más acceso directo a BD desde controladores) - Código JavaScript más mantenible y reutilizable - APIs más documentables con DTOs tipados - Reducción de dependencias no utilizadas - Mejor testing (servicios son testeables independientemente) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
…(hash + cryptographic generation), send Gemini API key in header, run seed only in Development, add CI/CD workflow; fix viewmodels and service methods to compile. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…vos deploy - Registrar IServicioIA en DI (faltaba, causaba crash en chat IA) - Corregir Gemini API: usar ?key= en lugar de Bearer token - Corregir bug en verificación de correo (enviaba email de recuperación) - Implementar ObtenerImagenPersonajeActual (era NotImplementedException) - Eliminar usuario de prueba del seed data - Ejecutar seed data en todos los entornos (roles, niveles, categorías) - Actualizar deploy.yml con nombre de proyecto correcto (EpycusApp.csproj) - Configurar MariaDB: epicus_db / epicus_user - Agregar archivos deploy: systemd service, nginx config, setup script - Actualizar README con instrucciones completas de deploy - Sanitizar appsettings: eliminar API keys expuestas
…vos deploy - Registrar IServicioIA en DI (faltaba, causaba crash en chat IA) - Corregir Gemini API: usar ?key= en lugar de Bearer token - Corregir bug en verificación de correo (enviaba email de recuperación) - Implementar ObtenerImagenPersonajeActual (era NotImplementedException) - Eliminar usuario de prueba del seed data - Ejecutar seed data en todos los entornos (roles, niveles, categorías) - Actualizar deploy.yml con nombre de proyecto correcto (EpycusApp.csproj) - Configurar MariaDB: epicus_db / epicus_user - Agregar archivos deploy: systemd service, nginx config, setup script - Actualizar README con instrucciones completas de deploy - Sanitizar appsettings: eliminar API keys expuestas
…ets expuestos) - #3: ApiPomodoroController ya no acepta entidad ConfiguracionPomodoro del cliente. Nuevo DTO ActualizarConfiguracionPomodoroDto con solo los 5 campos editables. UsuarioId siempre desde JWT. - #2: ServicioPerfil implementa ActualizarPerfil, CambiarPersonaje y ObtenerImagenPersonajeActual (antes throw NotImplementedException). - #5: git rm --cached a deploy/epycus-web.service, setup-vps.sh y package-lock.json. .gitignore actualizado. Creados templates .example sin credenciales reales.
…enticacion envio correo + renombrar slnx + ci-cd
…s, dependabot, índices, logging, race condition
…leaks, health checks, DiasSemana normalizado
… DateOnly FechaNacimiento
…ug en ServicioGamificacion - Crea EpycusApp.Tests con xUnit + Moq + FluentAssertions + EF InMemory - 133 tests organizados por capa: Ayudantes (27), Servicios (89), Controladores (17) - Servicios cubiertos: Gamificacion, Habitos, Misiones, Pomodoro, Bienestar, Progreso, Perfil, Admin - Controladores cubiertos: Autenticacion, Home, Habitos, Progreso - Helper CalculadorXP con tests de niveles, XP y progreso - Corrige bug en ServicioGamificacion.CalcularProductividadDiaria: funcion local dentro de expresion LINQ no traducible por EF Core - Agrega <Compile Remove> en EpycusApp.csproj para excluir tests del build principal
…n para deploy VPS
- Remover deploy/epycus-web.service y setup-vps.sh del tracking (secretos) - Cookie Secure dinamico con Request.IsHttps (compatible HTTP y HTTPS) - Nginx config actualizado para app.epycus.es y 147.93.119.193 - CI/CD: corregir VPS_PORT syntax, agregar sudo a chown - Example files: dominio, BD epicus_db, CORS, DisableHttpsRedirect - README actualizado con datos reales del VPS Debian 13 - Setup script adaptado a Debian 13 (nftables, MS repos, deploy user)
… versioning y mas
…2026-07-02 Backend: IPv6, sintaxis nginx deprecada, linea del .service, paso de migraciones EF Core en CI/CD (simplificado), AsNoTracking() restante, N+1 en ServicioGamificacion, gitleaks fetch-depth. Se documenta ademas el hallazgo del drift sites-enabled/sites-available de nginx, la exposicion accidental de credenciales durante el diagnostico (con recomendacion de rotarlas) y el estado de la investigacion sobre secretos en el historial de git (sin purgar, requiere decision aparte). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…unirseAlGrupo, bugs-pendientes) Espeja lo documentado en PENDIENTES.md del movil (secciones 0.1/0.2): guards binding==null completos en MisionesFragment, onNotificacionRecibida con esCritica, unirseAlGrupo arreglado, y auditoria de bugs-pendientes.md (4 de 6 ya resueltos por commits previos no marcados). Commits locales sin subir, pendiente autorizacion del usuario. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…lo + boton Cerrar Sesion inalcanzable en movil
- Views/Pomodoro/Index.cshtml: alCompletarTimer() podia abortar en
silencio a medio camino (fetch fallido, modal de Bootstrap que no se
muestra bien en movil, etc.) dejando tiempoRestante congelado en
negativo sin resetear el modo -> se mostraba "-1:-1" y seguia
bajando ("-1:-2"...) al reanudar, porque el intervalo volvia a
restar desde ahi. Se agrega guarda de reentrancia (evita doble
llamada desde el tick normal + la correccion de visibilitychange) y
un try/catch/finally que garantiza volver a un modo/tiempo valido
ante cualquier fallo inesperado. formatearTiempo() tambien clampa a
0 como ultima red de seguridad para nunca mostrar tiempo negativo.
- wwwroot/css/site.css: el fix anterior "RMOB-17: Sidebar overflow
fix" agregaba overflow-y:auto al sidebar pero sin max-height no
tenia nada contra qué activar el scroll (.ep-sidebar solo tenia
min-height:100vh, sin tope) -> en moviles con poca altura el
contenido (nav + tema + Cerrar Sesion) crecia mas alto que la
pantalla y el boton de Cerrar Sesion, al ser el ultimo elemento,
quedaba fuera del viewport e inalcanzable. Se agrega max-height:100vh
para que el overflow-y:auto ya existente funcione de verdad.
Verificado: dotnet build -c Release + dotnet test (420/420) en verde,
sintaxis JS del bloque de script validada con node --check.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…le en movil Reportado por el usuario con capturas de pantalla: temporizador Pomodoro web quedaba en tiempo negativo tras completar un ciclo, y el boton de Cerrar Sesion no era alcanzable en el sidebar en viewport movil (el fix anterior "RMOB-17" le faltaba max-height para que overflow-y:auto funcionara). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…zaciones Dos bugs relacionados, reportados por el usuario: 1. wwwroot/sw.js: las navegaciones de pagina completa (HTML) eran cache-first -> recargar la pagina no volvia a pedirle nada al servidor. Esto ocultaba tanto deploys nuevos (el <script> inline de Pomodoro, por ejemplo, es parte del HTML cacheado) como el estado real de la sesion (una pagina cacheada podia "verse" logueada aunque la sesion ya hubiera expirado en el servidor). Cambiado a network-first para navegaciones, con fallback a cache solo si no hay red (mantiene el soporte offline). 2. Middleware/ConfiguracionMiddleware.cs: la cookie jwt_token (Jwt:ExpiracionMinutos, 60 min por defecto) nunca se renovaba en el flujo web pese a que la cookie refresh_token (de vida mas larga) ya existia sin usarse -> pasados los 60 min, cualquier pagina que tocara el servidor de verdad redirigia a Login sin aviso. Se agrega un middleware antes de UseAuthentication que, si el jwt_token falta o esta por expirar y hay un refresh_token valido, llama al mismo RenovarToken que ya usa el refresh del movil, setea cookies nuevas, y redirige a la misma URL -- transparente para el usuario. Combinados explican el reporte del usuario: "Inicio" parecia normal tras cerrar y reabrir el navegador (servido de cache, sin tocar el servidor) pero "Ajustes" mandaba a Login (si tocaba el servidor con sesion ya expirada) -- y por que un fix recien desplegado no se via "por mas que recargara". Verificado: dotnet build -c Release + dotnet test (420/420) en verde. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Verificacion end-to-end contra produccion del middleware de renovacion silenciosa: login -> peticion con solo refresh_token -> redirige a la misma pagina (no a Login) con cookies nuevas -> 200 final siguiendo el redirect. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… recargar establecerModo() pisaba tiempoRestante/tiempoTotal con la duracion completa justo despues de calcularlos a partir de localStorage.finEn, y estaCorriendo nunca se reasignaba -> tras una recarga (el SO descarga la pestana en 2do plano en movil) el timer siempre "reaparecia" a duracion completa en vez de continuar, y si el ciclo ya habia terminado en background nunca se llamaba a alCompletarTimer(): el ciclo se perdia sin registrar contra el backend. Confirmado en produccion: las 4 sesiones de Pomodoro de hoy quedaron con CiclosCompletados=0 y sin ninguna llamada a /ciclo-completado en los logs. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…oble-tap, modal en fullscreen Auditoria completa del modulo Pomodoro (web, Android, backend, BD) a raiz del reporte del usuario probando el Pomodoro en vivo. Hallazgos y fixes de mayor confianza (detalle completo en Pomodoro.md): - "Resumen de hoy"/racha usaban DateTime.UtcNow.Date (medianoche del SERVIDOR) en vez de la zona horaria del usuario, a diferencia del grafico semanal que ya lo hacia bien -> para cualquier usuario al oeste de UTC (practicamente todos), sesiones de tarde/noche podian contarse en el dia equivocado o romper la racha. ObtenerSesionesHoyAsync y ObtenerRachaActualAsync ahora usan la zona horaria del usuario. - "Minutos enfocados" sumaba la duracion de CUALQUIER sesion con FechaFin, sin importar si completo algun ciclo -> una sesion que quedo abierta horas y se cancelo sin avanzar (bug de restauracion de timer ya arreglado, doble pestana, cancelacion manual) inflaba "minutos" mientras "ciclos completados"/"XP" quedaban en 0 en el mismo resumen -> exactamente el sintoma reportado. Corregido en los 4 sitios que calculan minutos (controller + 3 metodos de estadisticas del servicio): solo cuentan sesiones con >=1 ciclo completado. - Web: doble-tap en Iniciar podia arrancar dos setInterval en paralelo (iniciarTimer es async y no marcaba estaCorriendo hasta despues de un await) -> guarda de reentrancia agregada. - Web: modales que pueden aparecer a mitad de sesion (descanso largo sugerido, meta cumplida) quedaban invisibles/inalcanzables si el usuario tenia el reloj en pantalla completa (los modales de Bootstrap se montan fuera del elemento fullscreen) -> se sale de pantalla completa antes de mostrarlos. - Web: "Meta diaria" tenia dos controles de UI desconectados (el ajuste rapido +/- junto al reloj nunca se reflejaba en la tarjeta de progreso ni se persistia) -> unificados a una sola fuente de verdad durante la sesion de navegador. - Android: fallo al arrancar sesion en el backend (POST /iniciar) era 100% silencioso -> toda la sesion completaba ciclos localmente (sonido, vibracion, notificaciones) sin registrar nada en el servidor. Se agrego aviso visible al usuario. - Android: guarda contra division por cero en ciclosAntesPausaLarga (defensivo). 6 tests nuevos (426/426 en verde). Documentados ademas 6 problemas NO corregidos en esta sesion (condicion de carrera de sesiones duplicadas, sync entre pestanas, falta de indice compuesto en BD, etc.) con el porque y la recomendacion para cada uno - ver Pomodoro.md. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…meta diaria, multi-pestana) Sesion de seguimiento de la auditoria de Pomodoro.md: el usuario pidio resolver los puntos que habian quedado documentados sin corregir. - Migracion de BD: columna calculada SesionAbiertaMarcador + indice unico -> la BD ahora rechaza a nivel de esquema una segunda sesion abierta para el mismo usuario, cerrando la condicion de carrera de IniciarSesionSiNoActiva de raiz. Confirmado con datos reales antes de migrar: dos usuarios en produccion tenian 16 y 6 sesiones abiertas simultaneas. La migracion limpia esos duplicados (conserva la mas reciente, cancela el resto) antes de crear el indice, mismo patron que AgregarIndiceUnicoEstadoAnimo. Tambien agrega el indice compuesto (UsuarioId, FechaInicio) para las consultas de hoy/historial/estadisticas. IniciarSesionSiNoActiva ahora captura la violacion del indice unico y la traduce al mismo mensaje amigable de conflicto en vez de dejar pasar un 500. - ObtenerHistorialAsync ya no incluye sesiones todavia en curso (FechaFin null) - para eso existe /sesion-activa. 9 tests actualizados + 1 nuevo. - Web: "Meta diaria" del control rapido (+/- junto al reloj) ahora persiste de verdad al servidor (GET config completa + PUT con solo metaDiariaCiclos cambiado, para no arriesgar pisar otros ajustes con valores obsoletos del DOM), con debounce. - Web: pestanas secundarias con BroadcastChannel ahora entran en "modo espejo" -reloj propio sincronizado por timestamp absoluto, boton deshabilitado- en vez de quedar con el boton en "Pausar" y el reloj congelado. Se auto-recupera a los 3s si la pestana duena se cierra sin avisar. - Android: agregado campo + indicador de progreso para "Meta diaria" (antes no tenia ninguna UI para esto pese a que el backend ya lo soportaba). 427/427 tests backend en verde. Detalle completo de cada fix en Pomodoro.md seccion 7. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…os reales
Bug reportado en vivo por el usuario probando la sesion de seguimiento: cambiar la
configuracion a mitad de una sesion de Pomodoro hacia que "Historial de hoy" pasara de
mostrar minutos reales a "0 min".
Causa real: una sesion sigue sin FechaFin mientras esta en curso (el usuario no le dio
Finalizar ni llego a su meta diaria) - el caso NORMAL en una sesion de varios ciclos
seguidos, no una excepcion. El fix de la sesion anterior (Minutos solo cuenta sesiones con
FechaFin) hacia que esas sesiones en curso mostraran 0 minutos pese a tener ciclos reales
completados. Lo que el usuario habia visto antes ("7 min") nunca vino del servidor - era una
entrada optimista que agregarHistorial() (JS) inserta en el DOM usando la duracion
configurada EN ESE MOMENTO, sin reconciliarse nunca con la realidad hasta el proximo reload
completo (que fue justo cuando el usuario guardo la configuracion).
Fix: cuando una sesion de Enfoque sigue abierta pero ya completo >=1 ciclo real, se estima
ciclos x duracion de ciclo configurada en vez de 0 (mismo patron que ya usaba el codigo para
sub-tareas). Aplicado en los 4 sitios que calculan minutos. La fila del Historial ahora dice
"En curso" en vez de "Completado" para esas sesiones, honesto sobre que no ha terminado.
8 tests nuevos/actualizados (430/430 en verde). Confirmado en vivo contra el servidor local:
Historial paso de "0 min" a "Enfoque 25 min - En curso" tras completar un ciclo sin cerrar
la sesion. Detalle completo en Pomodoro.md seccion 8.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
… en vivo Pomodoro.md tenia varios puntos marcados "no probado visualmente" que si se confirmaron durante la sesion de pruebas en el navegador (zona horaria/minutos via los numeros de Resumen+Historial, persistencia de Meta diaria via reload real, mecanica del modo espejo via invocacion directa). Actualizada la seccion 6 (prioridades) con lo que realmente falta: Android en dispositivo real, dos pestanas de navegador genuinas para el modo espejo, fullscreen+modal, y un usuario con zona horaria no-UTC. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…racion DELETE /api/v1/perfil/cuenta verifica contrasena (si la cuenta la tiene), invalida el JWT actual y borra al usuario en cascada. Cerraba el unico bloqueador de codigo real para publicar en Uptodown/Aptoide (auditoria.md del repo movil). 4 tests nuevos confirman el borrado en cascada, rechazo de contrasena incorrecta, cuentas Google-only sin contrasena, y usuario inexistente. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…cha daba 500 - El listado de misiones serializaba DateOnly.MinValue como "0001-01-01" cuando la mision se creo sin fecha limite (el movil lo mostraba tal cual en la tarjeta). Ahora devuelve cadena vacia. - Editar una mision sin fecha lanzaba FormatException (500): DateTime.Parse sobre cadena vacia, sin la guarda que Crear si tenia. Ahora usa la misma. Encontrado probando en vivo en el emulador Android (crear mision "Sin fecha"). dotnet build Release + 434/434 tests en verde. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…o y personaje equivocado
Encontrado probando en vivo en el emulador Android (Inicio decia "Nivel 0",
Perfil "Nivel 1", el XP de completar un habito nunca se acumulaba, e Inicio
seguia mostrando el personaje anterior tras cambiarlo):
- CalculadorXP asumia niveles 1-based, pero SemillaNiveles arranca en 0
("Novato") con umbrales 100/250/450/700... Ahora la formula reproduce
exactamente el XpRequerido sembrado (25n^2+75n). Antes un usuario nuevo
"subia" a nivel 1 con cualquier XP < 150. Usuarios existentes pueden ver
su numero de nivel reajustarse (normalmente igual o +1) en su proxima
ganancia de XP.
- ServicioGamificacion.SumarXP descartaba el XP en silencio si el usuario
no tenia fila en ProgresosUsuario (caso de cuentas sembradas como admin).
Ahora crea la fila con el nivel inicial.
- ServicioProgreso.ObtenerImagenPersonaje tomaba el primer PersonajeUsuario
del usuario ignorando EstaSeleccionado — por eso Inicio/gamificacion
mostraban el personaje viejo tras cambiarlo (Perfil si lo resolvia bien).
- ServicioPerfil: fallback de nivel `?? 1` corregido a `?? 0` (coherente
con el nivel inicial real).
Tests actualizados para reflejar la semilla real (nivel 0 base) + 2 nuevos.
dotnet build Release + 442/442 tests en verde.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ersaciones tipados - MaxMensajesPorDia: 50 -> 5, a pedido del usuario. El conteo ahora excluye las respuestas de Edy (Rol=="model"): antes ObtenerMensajesHoyAsync sumaba ambos roles, asi que "50" en la practica eran ~25 turnos reales; ahora "5" son 5 preguntas reales del usuario, ni una mas. - El limite ya vivia contra ProgresosUsuario/MensajesIA por UsuarioId+fecha en BD (no en sesion/cookie), asi que cerrar sesion y volver a entrar no lo resetea - eso ya era el comportamiento correcto, solo bajo el numero. - GET /api/v1/ia/historial y /conversaciones devolvian "object" sin tipar (pendiente documentado en REVISION_APIS_Y_MOVIL.md). Tipados a List<MensajeIaDto>/List<ConversacionResumen> - de paso Historial ya no serializa la entidad EF MensajeIA completa (incluia la propiedad de navegacion Usuario). - POST /api/v1/ia/chat no manejaba el limite diario ni conversaciones ajenas (a diferencia del controller MVC web, que si los captura) - un usuario que alcanzara el limite recibia un 500 generico en vez de un error claro. Ahora replica el mismo patron: 429 con el mensaje real del limite, 403 si la conversacion no es suya. Tests: 4 nuevos (limite sin contar respuestas de Edy, 429, 403, DTO tipado sin exponer la entidad). dotnet build Release + dotnet test 446/446 verde. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…hora del historial en UTC crudo Reportado por el usuario en vivo: envio un mensaje, la web mostro "No pude conectarme. Verifica tu conexion e intenta de nuevo.", pero al recargar la pagina la respuesta real de Edy SI estaba ahi, completa y coherente -- solo que con una hora distinta (21:04 al escribir vs 02:04 al recargar). Dos bugs reales, ambos en Views/Ia/Index.cshtml: 1. **Causa raiz real del "No pude conectarme" (afecta TODO mensaje, no solo timeouts):** el JS de enviarMensaje() leia `data.respuesta`/`data.error`/ `data.mensajeId` en el nivel raiz de la respuesta del fetch, pero /api/v1/ia/chat (el endpoint que realmente llama, compartido con el movil desde f7b1122) devuelve RespuestaApi<T> -- la respuesta real vive en `data.datos.respuesta`. Con `data.respuesta` como `undefined`, formatearTexto(undefined) lanzaba una excepcion DENTRO del try, que caia en el mismo catch que maneja errores de red real -- de ahi que un mensaje que el servidor proceso y guardo perfectamente bien se mostrara como si hubiera fallado. Corregido a leer `data.datos.*`/`data.mensaje`. De paso se agrego reconciliacion: si el fetch falla de verdad (catch), antes de mostrar el error se reconsulta el historial real por si el servidor sí completo la operacion mientras la conexion se cortaba. 2. **Bug de zona horaria (mismo patron que Pomodoro.md 1.2, ahora en el chat):** el historial recargado usaba `msg.FechaHora.ToLocalTime()` en el .cshtml, que convierte de UTC a la zona horaria del SERVIDOR (no la del usuario) -- el VPS corre en UTC, asi que no habia conversion real y se mostraba la hora UTC cruda. El mensaje "optimista" que agrega el JS al escribir SI usa `new Date()` (hora real del navegador), de ahi el salto de 21:04 a 02:04 (~5h, coincide con UTC-5) al recargar. Corregido pasando la fecha UTC cruda como data-attribute y formateandola en el cliente con la misma logica que el mensaje optimista, en vez de fiarse de la zona horaria del servidor. Ademas: ChatAsync ahora devuelve tambien el Id del mensaje de Edy guardado (antes el controller MVC lo hardcodeaba a 0), asi que el boton de feedback (👍/👎) funciona en mensajes recien enviados, no solo en el historial recargado. Tests: 3 nuevos (camino feliz completo de ChatAsync con transaccion real — requirio ConfigureWarnings en DbContextFactory para el proveedor InMemory, que no soporta transacciones; propagacion de MensajeId al DTO; 429 y 403 ya cubiertos). dotnet build Release + dotnet test 448/448 en verde. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…uario tiene AdminController usaba [Authorize(Roles = "Administrador")] pero el unico rol de administrador que existe realmente (creado por SemillaAdmin y usado por ApiAdminController) se llama "Admin". Como resultado el panel web nunca fue accesible para ninguna cuenta. Se unifica AdminController para exigir "Admin". Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
--- updated-dependencies: - dependency-name: Sentry.AspNetCore dependency-version: 6.7.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com>
Author
LabelsThe following labels could not be found: Please fix the above issues or remove invalid values from |
Author
|
OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting If you change your mind, just re-open this PR and I'll resolve any conflicts on it. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Updated Sentry.AspNetCore from 5.3.0 to 6.7.0.
Release notes
Sourced from Sentry.AspNetCore's releases.
6.7.0
Features ✨
IgnoreTransactionsoption to filter out transactions by name, matching substrings or regular expressions against the transaction name (#5377) by @Adham-Kiwan in #5377SentryEventExtensions.IsFromUnhandledException) and terminal exceptions (SentryEventExtensions.IsFromTerminalException) by @jamescrosswell in #5177Fixes 🐛
Dependencies ⬆️
Deps
Other
Sentry.Extensions.LoggingFilters by @Flash0ver in #52976.6.0
Features ✨
sentry-androidandsentry-cocoaby @bitsandfoxes in #5244Fixes 🐛
Dependencies ⬆️
Deps
Other
6.5.0
Features ✨
Fixes 🐛
SentryEventto haveIsCapturedto allow dropping screenshots of filtered events by @JoshuaMoelans in #5162PruneFilteredSpansruns by @jamescrosswell in #5186Dependencies ⬆️
Deps
Other
6.4.1
Fixes 🐛
Dependencies ⬆️
Deps
6.4.0
Features ✨
Fixes 🐛
options.Native.ExperimentalOptions.SignalHandlerStrategytoSentry.Android.SignalHandlerStrategy.ChainAtStartDependencies ⬆️
Deps
6.3.2
Dependencies ⬆️
6.3.1
Fixes 🐛
CaptureFeedbacknow supports multiple attachments correctly by @bitsandfoxes in #5077Dependencies ⬆️
Deps
Other
6.3.0
Features
ExperimentalfromSentrySdk,SentryOptionsandIHub(#5023)SENTRY1001) when a Metrics-API is invoked with an unsupported numeric type (#4840)Fixes
EnvironmentandReleaseand custom event processors are all now correctly applied to CaptureFeedback events (#4942)Dataset viaITransactionTracerinSentryTransaction(#4148)Dependencies
6.2.0
Features
Fixes
Warninginstead of anErrorwhen being ratelimited (#4927)libmonosgenandlibxamarinframes no longer show as in-app (#4960)Dependencies
SentryApiKey, you need to generate an Auth Token and useSentryAuthToken, instead.6.2.0-alpha.0
Features
Dependencies
6.1.0
Features
SentryThreadbyMainto allow indication whether the thread is considered the current main thread (#4807)Fixes
EnvironmentandRelease(#4883)Dependencies
6.1.0-alpha.2
BREAKING CHANGES
AddCountertoEmitCounterRecordDistributiontoEmitDistributionRecordGaugetoEmitGaugeFeatures
Fixes
SetBeforeSendLogcallback (#4834)decimal) for Trace-connected Metrics (#4834)6.1.0-alpha.1
Features
SentryThreadbyMainto allow indication whether the thread is considered the current main thread (#4807)Dependencies
6.0.0
BREAKING CHANGES
SentryLoggingOptions.ExperimentalLogging.MinimumLogLevel. Structured Logs can now be configured via the"Sentry"logging provider (e.g. inappsettings.jsonandappsettings.{HostEnvironment}.json) (#4700)SentryLog.ParentSpanIdtoSentryLog.SpanIdreflecting the protocol change (#4778)IDisposableso that they can be used withusingstatements/declarations that will automatically finish the span with a status of OK when it passes out of scope, if it has not already been finished, to be consistent withActivityclasses when using OpenTelemetry (#4627)sealed(see also #4627)ExperimentalfromSentryOptions(#4699)SentryIdand aCaptureFeedbackResultout parameter that indicate whether feedback was captured successfully and what the reason for failure was otherwise (#4613)Sentry.Azure.Functions.Workeras very few people were using it and the functionality can easily be replaced with OpenTelemetry. We've replaced our integration with a sample showing how to do this using our OpenTelemetry package instead. (#4693)BreadcrumbLevel.Criticalhas been renamed toBreadcrumbLevel.Fatalfor consistency with the other Sentry SDKs (#4605)Sentry.Maui.BreadcrumbEventthat had been marked as obsolete. That constructor expected aIEnumerable<(string Key, string Value)>[]argument (i.e. an array of IEnumerable of tuples). If you were using this constructor, you should instead use the alternate constructor that expects just an IEnumerable of tuples:IEnumerable<(string Key, string Value)>.SentrySdk.CaptureUserFeedbackand all associated members. Use the newerSentrySdk.CaptureFeedbackinstead.Features
Sentry.Extensions.AIwhich allows LLM usage instrumentation viaMicrosoft.Extensions.AI(#4657)Sentry.Google.Cloud.Functions(#4700)IsSessionActiveto allow checking the session state (#4662)Unhandledwhen capturing an unhandled but non-terminal exception, i.e. through the UnobservedTaskExceptionIntegration (#4633, #4653)app_memorythat can hold the amount of memory used by the application in bytes. (#4707)PropagateTraceparent = truewhen initializing the SDK if to include the W3C traceparent header on outgoing requests.Fixes
Serilogintegration captures Structured Logs (when enabled) independently of captured Events and added Breadcrumbs (#4691)Sentry.Extensions.Logging,Sentry.AspNetCore,Sentry.MauiandSentry.Google.Cloud.Functionsappsettings.json)SentryLoggingOptions.MinimumBreadcrumbLevel,SentryLoggingOptions.MinimumEventLevel, or add filter functions viaSentryLoggingOptionsExtensions.AddLogEntryFilterappsettings.json)SentryOptions.EnableLogs/NODEFAULTLIB:MSVCRTto NativeAOT linker arguments on Windows when targetting non-Windows platforms (Android, Browser) (#4760)... (truncated)
6.0.0-rc.2
Fixes
Dependencies
6.0.0-rc.1
BREAKING CHANGES
This release adds support for .NET 10 and drops support for net8.0-android, net8.0-ios, net8.0-maccatalyst and net8.0-windows10.0.19041.0 (#4461)
Backpressure handling is now enabled by default, meaning that the SDK will monitor system health and reduce the sampling rate of events and transactions when the system is under load. When the system is determined to be healthy again, the sampling rates are returned to their original levels. (#4615)
QOL improvement: Spans and Transactions now implement
IDisposableso that they can be used withusingstatements/declarations that will automatically finish the span with a status of OK when it passes out of scope, if it has not already been finished, to be consistent withActivityclasses when using OpenTelemetry (#4627)Add support for W3C traceparent header for outgoing requests (#4661)
This feature is disabled by default. Set
PropagateTraceparent = truewhen initializing the SDK if to include the W3C traceparent header on outgoing requests.The Structured Logs APIs are now stable: removed
ExperimentalfromSentryOptions(#4699)Added support for v3 of the Android AssemblyStore format that is used in .NET 10 and dropped support for v1 that was used in .NET 8 (#4583)
CaptureFeedback now returns a
SentryIdand aCaptureFeedbackResultout parameter that indicate whether feedback was captured successfully and what the reason for failure was otherwise (#4613)Deprecated
Sentry.Azure.Functions.Workeras very few people were using it and the functionality can easily be replaced with OpenTelemetry. We've replaced our integration with a sample showing how to do this using our OpenTelemetry package instead. (#4693)UWP support has been dropped. Future efforts will likely focus on WinUI 3, in line with Microsoft's recommendations for building Windows UI apps. (#4686)
BreadcrumbLevel.Criticalhas been renamed toBreadcrumbLevel.Fatalfor consistency with the other Sentry SDKs (#4605)SentryOptions.IsEnvironmentUser now defaults to false on MAUI. The means the User.Name will no longer be set, by default, to the name of the device (#4606)
Remove unnecessary files from SentryCocoaFramework before packing (#4602)
Removed obsolete APIs (#4619)
Sentry.Maui.BreadcrumbEventthat had been marked as obsolete. That constructor expected aIEnumerable<(string Key, string Value)>[]argument (i.e. an array of IEnumerable of tuples). If you were using this constructor, you should instead use the alternate constructor that expects just an IEnumerable of tuples:IEnumerable<(string Key, string Value)>.SentrySdk.CaptureUserFeedbackand all associated members. Use the newerSentrySdk.CaptureFeedbackinstead.SpanTracer and TransactionTracer are still public but these are now
sealed(see also #4627)ScopeExtensions.Populate is now internal (#4611)
See https://develop.sentry.dev/sdk/telemetry/traces/distributed-tracing/#w3c-trace-context-header for more details.
Features
IsSessionActiveto allow checking the session state (#4662)Unhandledwhen capturing an unhandled but non-terminal exception, i.e. through the UnobservedTaskExceptionIntegration (#4633, #4653)app_memorythat can hold the amount of memory used by the application in bytes. (#4707)Fixes
Serilogintegration captures Structured Logs (when enabled) independently of captured Events and added Breadcrumbs (#4691)Dependencies
... (truncated)
6.0.0-preview.2
BREAKING CHANGES
BreadcrumbLevel.Criticalhas been renamed toBreadcrumbLevel.Fatalfor consistency with the other Sentry SDKs (#4605)SentryOptions.IsEnvironmentUser now defaults to false on MAUI. The means the User.Name will no longer be set, by default, to the name of the device (#4606)
Remove unnecessary files from SentryCocoaFramework before packing (#4602)
Removed obsolete APIs (#4619)
Sentry.Maui.BreadcrumbEventthat had been marked as obsolete. That constructor expected aIEnumerable<(string Key, string Value)>[]argument (i.e. an array of IEnumerable of tuples). If you were using this constructor, you should instead use the alternate constructor that expects just an IEnumerable of tuples:IEnumerable<(string Key, string Value)>.SentrySdk.CaptureUserFeedbackand all associated members. Use the newerSentrySdk.CaptureFeedbackinstead.Backpressure handling is now enabled by default, meaning that the SDK will monitor system health and reduce the sampling rate of events and transactions when the system is under load. When the system is determined to be healthy again, the sampling rates are returned to their original levels. (#4615)
ScopeExtensions.Populate is now internal (#4611)
Add support for W3C traceparent header for outgoing requests (#4661)
This feature is disabled by default. When enabled, outgoing requests will include the W3C traceparent header.
See https://develop.sentry.dev/sdk/telemetry/traces/distributed-tracing/#w3c-trace-context-header for more details.
Fixes
6.0.0-preview.1
BREAKING CHANGES
5.16.3
Fixes
Dependencies
5.16.2
Fixes
sentry.proguard-uuidmetadata to be set in Android manifest (#4647)Dependencies
5.16.1
Fixes
sentry.originattribute to so it's clearer where these come from (#4566)Dependencies
5.16.0
Features
EnableBackpressureHandlingoption for Automatic backpressure handling. When enabled this automatically reduces the sample rate when the SDK detects events being dropped. (#4452)Serilog(#4462)Fixes
API Changes
ExperimentalAttributefrom all Structured Logs APIs, and removeExperimentalproperty fromSentrySdk, but keepExperimentalproperty onSentryOptions(#4567)Dependencies
5.15.1
Fixes
SentryOptions.Native.SuppressSignalAbortsandSuppressExcBadAccesson iOS (#4521)Dependencies
5.15.1-maxpath.1
Fixes
SentryOptions.Native.SuppressSignalAbortsandSuppressExcBadAccesson iOS (#4521)Dependencies
5.15.0
Features
params(#4451)keynames ofMicrosoft.Extensions.Loggingattributes (#4450)Fixes
IDisposablefromSentryStructuredLogger. Disposal is intended through the owningIHubinstance (#4424)InvalidOperationExceptionpotentially thrown during a race condition, especially in concurrent high-volume logging scenarios (#4428)Dependencies
5.14.1
Fixes
Dependencies
5.14.0
Features
Sentry.Extensions.Logging,Sentry.AspNetCoreandSentry.Maui(#4193)Fixes
sample_rateof Dynamic Sampling Context (DSC) when making sampling decisions (#4374)5.14.0-alpha.1
Dependencies
5.14.0-alpha.0
Fixes
sample_rateof Dynamic Sampling Context (DSC) when making sampling decisions (#4374)5.13.0
Features
SentryStackTraceFactory. However, it may provide better results if you are compiling your application AOT and not getting useful stack traces from the full stack trace factory. (#4362)Fixes
linux-musl-arm64(#4365)Dependencies
5.12.0
API changes
Features
Fixes
lzmaon Linux/MUSL (#4326)Dependencies
5.12.0-alpha.0
Features
SentrySdk.Experimental.Logger(#4158)Sentry.AspNetCore, enabled viaSentryAspNetCoreOptions.Experimental.EnableLogsSentry.Extensions.Logging, enabled viaSentryLoggingOptions.Experimental.EnableLogsSentry.Maui, enabled viaSentryMauiOptions.Experimental.EnableLogsAPI changes
Features
SentrySdk.Experimental.Logger(#4158)Fixes
lzmaon Linux/MUSL (#4326)Dependencies
5.11.2
Fixes
5.11.1
Fixes
5.11.0
Features
ConfigureScopeandConfigureScopeAsyncoverloads (#4244)AutomationIdelement information to breadcrumbs (#4248)Fixes
Sentry.Maui.BreadcrumbEvent, while keeping an Obsolete constructor for backward compatibility.Dependencies
5.11.0-alpha.3
Features
ConfigureScopeandConfigureScopeAsyncoverloads (#4244)AutomationIdelement information to breadcrumbs (#4248)Fixes
Dependencies
5.11.0-alpha.1
Fixes
Dependencies
5.10.0
Features
Fixes
5.9.0
Features
Fixes
Dependencies
5.8.2-beta.1
Fixes
Dependencies
5.8.1
Fixes
SentryNative=falseat runtime (#4220)5.8.0
Features
Fixes
Dependencies
5.8.0-alpha.0
Features
SentrySdk.Logger(#4158)Sentry.AspNetCore, enabled viaSentryAspNetCoreOptions.EnableLogsSentry.Extensions.Logging, enabled viaSentryLoggingOptions.EnableLogsSentry.Maui, enabled viaSentryMauiOptions.EnableLogs5.7.0
Features
_...
Description has been truncated