Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,13 @@ 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.4] - 2026-10-18

### Fixed

- **En producción, las entregas de hoy salían vencidas por la noche.** La app decide qué día es hoy con la zona del proceso —el rojo de «vencida» en las tarjetas servidas, el contador del Hub, el día de la foto del burndown— y el servicio no fijaba ninguna, así que en la VM corría en UTC: desde las siete de la tarde en Bogotá ya creía que era mañana. El unit de systemd fija ahora `TZ=America/Bogota`, la misma zona con la que corren las pruebas e2e. Las fechas guardadas no cambian.
- Una instancia ya desplegada tiene que copiar el unit una vez, porque `deploy.sh` reinicia el servicio pero no lo reinstala. Los pasos están en `deploy/README.md`, en «La zona horaria».

## [1.28.2] - 2026-10-18

### Fixed
Expand Down
36 changes: 36 additions & 0 deletions deploy/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,39 @@ sudo systemctl enable --now forge-os
sudo systemctl status forge-os
```

### La zona horaria

El unit fija `TZ=America/Bogota`. No es un detalle de presentación: la app
decide **qué día es hoy** con la zona del proceso, y de eso dependen el rojo de
«vencida» en las tarjetas que pinta el servidor, el contador de vencidas del
Hub y el día con que se guarda la foto diaria del burndown. Una VM de GCP viene
en UTC, así que sin esta línea, desde las siete de la tarde en Bogotá el
servidor ya cree que es mañana y marca como vencida una entrega de hoy. El
navegador lo corrige al repintar, pero el HTML que llega primero está mal.

Las fechas guardadas **no cambian** con esto: las marcas de
`CURRENT_TIMESTAMP` siguen en UTC y las fechas de entrega son días del
calendario sin zona. Solo cambia qué día se toma como «hoy».

Si quien usa la instancia vive en otra zona, cambia esa línea del unit, no la
zona de la VM: así no se mueven los logs ni los temporizadores del sistema.

**Una instancia que ya estaba desplegada no lo recoge sola.** `deploy.sh`
reinicia el servicio pero no vuelve a copiar el unit, así que hay que hacerlo
una vez:

```sh
sudo cp /opt/forge-os/deploy/forge-os.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl restart forge-os
```

Y comprobar que el proceso la tiene:

```sh
sudo cat /proc/$(systemctl show -p MainPID --value forge-os)/environ | tr '\0' '\n' | grep '^TZ='
```

## 5. Caddy

**Antes de arrancarlo**, el registro A de `forge-os.online` (en Porkbun) debe
Expand Down Expand Up @@ -411,6 +444,9 @@ curl -sI https://forge-os.online/_astro/<algún-asset>.js | grep -iE 'cache-cont
# La API nunca se cachea en capas compartidas
curl -sI https://forge-os.online/api/storage/<archivo> | grep -i cache-control # private

# El proceso decide «hoy» en la zona de Bogotá, no en UTC
sudo cat /proc/$(systemctl show -p MainPID --value forge-os)/environ | tr '\0' '\n' | grep '^TZ='

# Sobrevive a un reinicio
sudo reboot && sleep 45 && curl -sI https://forge-os.online | head -1
```
8 changes: 8 additions & 0 deletions deploy/forge-os.service
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@ WorkingDirectory=/opt/forge-os
# root: el servicio lo lee al arrancar, el usuario forge no puede leerlo.
EnvironmentFile=/etc/forge-os.env

# La zona en la que la app decide qué día es hoy. `vencida()`, `hoyLocal()` y
# la foto diaria del burndown usan la del proceso, y una VM de GCP viene en
# UTC: sin esto, desde las siete de la tarde en Bogotá el servidor ya cree que
# es mañana y pinta como vencida una entrega de hoy. No es un secreto ni cambia
# entre máquinas, por eso va aquí y no en /etc/forge-os.env. Las pruebas e2e
# corren con la misma (`playwright.config.ts`).
Environment=TZ=America/Bogota

ExecStart=/usr/bin/node server.mjs

Restart=always
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "forge-js",
"type": "module",
"version": "1.28.2",
"version": "1.28.4",
"engines": {
"node": ">=22.12.0"
},
Expand Down
Loading