Repository navigation
fix: días de sprint, fotos del burndown y la fecha que se deshacía al abrir - #97
Merged
Merged
Conversation
… abrir El resumen del espacio contaba los días que le quedan al sprint restando horas a un `new Date(end_date)`, que para una fecha solo-día es la medianoche UTC: en Bogotá decía «termina hoy» desde las siete de la tarde del día anterior. Ahora cuenta días del calendario con `diasHasta()`. La foto diaria del burndown se guardaba con el día en UTC, así que por la tarde en Bogotá salía con la fecha de mañana. Ahora usa el día local del servidor, como `vencida()`. Y el modal cargaba el ticket dos veces al abrirse; si la segunda respuesta llegaba después de elegir la fecha, el campo volvía a la anterior. Era lo que hacía fallar de vez en cuando `fecha-y-cancelar.spec.ts`. Ahora el campo no se toca mientras se edita, como las horas estimadas. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
El #98 entró antes y se quedó con la 1.28.4. Este cambio pasa de la 1.28.3 de su PR a la 1.28.5, para que la versión suba en el orden en que entran los cambios. El CHANGELOG anota que la 1.28.3 no existió. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Qué estaba mal
Es el mismo fallo que en #96, en los sitios que quedaban sin revisar, y uno más que salió persiguiendo una prueba intermitente.
src/pages/w/[sys_tag]/index.astro). Los días que le quedan al sprint activo se calculaban conMath.ceil((new Date(end_date) - ahora) / 86400000). Con una fecha solo-día, eso es la medianoche UTC: en Bogotá decía «termina hoy» desde las 19:00 del día anterior, y en Tokio, el último día por la mañana, todavía decía «termina en 1 día».src/lib/sprintSnapshots.tsy el disparador diario desrc/lib/db.ts). El día se tomaba contoISOString().slice(0, 10), en UTC. Desde las 19:00 en Bogotá, la foto de hoy se guardaba como la de mañana, y la del día real se quedaba como estaba a las 18:59.IssueDetailsModal.astro). Al abrir un ticket,refreshTimeTrackingUI()corre dos veces: una directa y otra cuando terminan de cargar los registros de trabajo. Si la segunda respuesta llegaba después de elegir una fecha, el campo volvía a la vieja, aunque el PATCH ya hubiera guardado la nueva. Era la causa de quefecha-y-cancelar.spec.tsfallara de vez en cuando con la suite completa: en la instantánea del fallo el campo estaba enfocado y mostraba2026-09-09.Cambios
diasHasta(valor, ahora)(nueva, enlib/fechas): días del calendario hasta una fecha. Da 0 si es hoy, un número negativo si ya pasó ynullsi no se puede leer. Resta medianoches UTC de las dos fechas del calendario, así que no se equivoca en los días de 23 o 25 horas del cambio de hora. La usa el resumen del espacio.deSQLite()en vez denew Date().new Date()leía una fecha solo-día como UTC y una marca de SQLite como hora local.hoyLocal()ensprintSnapshots.ts, y el mismo cálculo en línea endb.ts.db.tsno importalib/fechasa propósito: lo carga Node sin compilar (tests/e2e/reset-db.ts), y unimport './fechas'sin extensión no resuelve, así que el servidor de pruebas no llegaba a arrancar. Está explicado en un comentario.Alcance real
POST /api/sprintssolo conname) y nada crea hitos: enforge.dblocal no hay ninguna fecha de sprint ni ningún hito. El punto 1 solo se veía en sprints con fechas puestas por la API o porscripts/seed.mjs. El seed guarda marcas ISO conZ, y ahí el fallo era solo de redondeo de horas.target_date) y de fin de sprint en el resumen ya pasaban porfecha(), así que quedaron arregladas en fix: las fechas de entrega salían un día antes al oeste de UTC #96.Pruebas
tests/fechas-sprint.test.ts:diasHasta()y el día de la foto, enAmerica/BogotayAsia/Tokyo, más un caso enEurope/Madridcon el cambio de hora del 25 de octubre. Con elsprintSnapshots.tsanterior, la prueba de la foto falla en Bogotá.fecha-y-cancelar.spec.ts › elegir la fecha justo al abrir el ticket no se deshace: deja pasar la primera carga del ticket y retiene la respuesta de la segunda hasta después del PATCH. Sin el arreglo falla siempre (Received: "2026-09-09"); con él, pasa.npx vitest run: 381/381.npx playwright test: 254/254 en dos corridas completas seguidas.Para revisar aparte: la zona del servidor en producción
vencida(),hoyLocal()y ahora las fotos usan la zona del proceso. Las pruebas e2e fijanTZ=America/Bogota, perodeploy/forge-os.serviceno fija ninguna, y una VM de GCP suele venir en UTC. Si el servidor de producción corre en UTC, el contador de vencidas del Hub y el color de vencida de las tarjetas servidas cambian de día a las 19:00 de Bogotá. El navegador lo corrige al repintar, pero el HTML servido no. No lo he tocado, porque es configuración de despliegue: bastaríaTZ=America/Bogotaen/etc/forge-os.env, oEnvironment=TZ=America/Bogotaen el unit.Versión 1.28.3.
🤖 Generated with Claude Code