From 8f8fc97dfa5a4479d2ab82542e9564f49f67bd99 Mon Sep 17 00:00:00 2001 From: JoseSerpaCode <124005402+JoseSerpaCode@users.noreply.github.com> Date: Sun, 18 Oct 2026 14:15:17 -0500 Subject: [PATCH] =?UTF-8?q?fix:=20las=20fechas=20de=20entrega=20sal=C3=ADa?= =?UTF-8?q?n=20un=20d=C3=ADa=20antes=20al=20oeste=20de=20UTC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `due_date` se guarda como '2026-09-09', un día del calendario sin zona, y `deSQLite()` le añadía la `Z` de las marcas de CURRENT_TIMESTAMP: pasaba a medianoche UTC, que en Bogotá es el día 8 por la tarde. La tarjeta y el modal enseñaban «Sep 8, 2026» para una entrega del 9. Ahora una fecha solo-día se lee como la medianoche local de ese día, y `diaDeCalendario()` la devuelve tal cual para el y para `vencida()`. Las marcas de tiempo siguen siendo UTC. El modal, además, recalculaba «vencida» a mano y daba por vencida una entrega de hoy desde las 00:00; ahora usa `vencida()` como la tarjeta. Pruebas unitarias en America/Bogota y Asia/Tokyo, y el e2e fija el día exacto, con servidor y navegador en Bogotá: en UTC, la zona de CI, el fallo no se veía. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 9 +++ package-lock.json | 4 +- package.json | 2 +- playwright.config.ts | 10 ++- src/components/jira/IssueDetailsModal.astro | 17 +++-- src/lib/fechas.ts | 46 +++++++++++- tests/e2e/fecha-y-cancelar.spec.ts | 18 +++++ tests/fechas-solo-dia.test.ts | 82 +++++++++++++++++++++ 8 files changed, 174 insertions(+), 14 deletions(-) create mode 100644 tests/fechas-solo-dia.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index d3fab28..74b0ac3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,15 @@ El formato está basado en [Keep a Changelog](https://keepachangelog.com/es-ES/1 > Las entradas entre la 0.6.0 y la 1.4.0 se reconstruyeron a posteriori a partir del historial de git, agrupadas por los saltos de versión que realmente ocurrieron en `package.json`. La 1.1.0 nunca existió: se pasó directamente de la 1.0.0 a la 1.2.0. +## [1.28.2] - 2026-10-18 + +### Fixed + +- **Las fechas de entrega salían un día antes al oeste de UTC.** Una entrega puesta para el 9 de septiembre se veía «8 sept 2026» en Colombia. `due_date` se guarda como `'2026-09-09'` —un día del calendario, sin hora ni zona— y `deSQLite()` le añadía la `Z` que sí necesitan las marcas de `CURRENT_TIMESTAMP`, así que pasaba a medianoche UTC, que en Bogotá son las siete de la tarde del día anterior. Ahora una fecha solo-día se lee como ese día en la zona de quien mira, tanto en la tarjeta que pinta el servidor como en el modal del navegador, y también en la lista de «Mis Tareas» y en cualquier otra fecha guardada solo con el día que pase por `fecha()`. Las marcas de tiempo siguen leyéndose en UTC. +- **Una entrega de hoy se ponía en rojo al tocar el ticket.** El modal recalculaba «vencida» con su propia comparación —medianoche del día de entrega contra la hora actual—, que la daba por vencida desde las 00:00 de ese mismo día, mientras la tarjeta servida decía que no. Ahora los dos usan `vencida()`. +- Al abrir un ticket, el campo de fecha del modal se rellena con el día guardado tal cual, en vez de pasarlo por `toISOString()`, que da el día en UTC. +- Las pruebas e2e corren el servidor y el navegador en `America/Bogota`. En UTC, que es la zona de CI, este fallo no se veía. + ## [1.28.0] - 2026-10-18 ### Changed diff --git a/package-lock.json b/package-lock.json index a6d7d73..cbcd6cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "forge-js", - "version": "1.28.0", + "version": "1.28.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "forge-js", - "version": "1.28.0", + "version": "1.28.2", "dependencies": { "@astrojs/check": "^0.9.10", "@astrojs/node": "^11.1.2", diff --git a/package.json b/package.json index abc7db7..49bda6d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "forge-js", "type": "module", - "version": "1.28.0", + "version": "1.28.2", "engines": { "node": ">=22.12.0" }, diff --git a/playwright.config.ts b/playwright.config.ts index fafe879..f415e55 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -84,9 +84,15 @@ export default defineConfig({ // }, ], - /* Run your local dev server before starting the tests */ + /* + * Run your local dev server before starting the tests. + * + * `TZ=America/Bogota` porque el servidor pinta las fechas en su zona, y en + * UTC —la de los runners de CI— una fecha de entrega que sale un día antes + * al oeste de Greenwich se ve bien. Es la zona de quien usa esto a diario. + */ webServer: { - command: 'NODE_ENV=test PORT=4322 npm run build && NODE_ENV=test PORT=4322 node server.mjs', + command: 'NODE_ENV=test PORT=4322 npm run build && TZ=America/Bogota NODE_ENV=test PORT=4322 node server.mjs', url: 'http://localhost:4322/login', // Use /login so it waits for the astro server to actually be ready to handle requests reuseExistingServer: false, timeout: 120 * 1000, diff --git a/src/components/jira/IssueDetailsModal.astro b/src/components/jira/IssueDetailsModal.astro index b5e18ce..bccaaf1 100644 --- a/src/components/jira/IssueDetailsModal.astro +++ b/src/components/jira/IssueDetailsModal.astro @@ -322,7 +322,7 @@ const t = useTranslations(lang);