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);