# F-155 — Implementer evidence

## Cambios

### `project/docker-compose.yml`

- PostgreSQL y Redis ahora tienen `restart: unless-stopped`.
- Los volúmenes quedan con nombre explícito para no depender del nombre de proyecto de Docker Compose:
  - PostgreSQL: `project_mdv_pg_data`
  - Redis: `project_mdv_redis_data`
- Se conservaron los nombres existentes para no apartar/perder la DB activa.
- Redis ahora arranca con persistencia AOF:
  - `--appendonly yes`
  - `--appendfsync everysec`
  - `--save 60 1`
- Redis tiene healthcheck `redis-cli ping`.

### `project/scripts/monolith.sh`

- `start_infrastructure()` ya no hace `docker start` directo de contenedores existentes.
- Ahora siempre usa `docker compose up -d postgres redis`, lo que permite reconciliar cambios de configuración sin perder volúmenes nombrados.
- Espera readiness de PostgreSQL y Redis.

### `project/scripts/check-persistence.mjs`

Nuevo check operacional:

- levanta infraestructura con Compose;
- escribe marcador en `app_meta` de PostgreSQL;
- escribe marcador en Redis;
- reinicia o recrea contenedores manteniendo volúmenes;
- comprueba que ambos marcadores siguen;
- muestra mounts reales y `appendonly` de Redis.

### `project/package.json`

Nuevo script:

```bash
npm run infra:persistence-check
npm run infra:persistence-check -- --recreate
```

## Verificación

```text
npm run infra:persistence-check -- --recreate  ✅
npm run infra:persistence-check               ✅
docker compose config                         ✅
monolith prod status                          ✅ backend/admin/frontend/storefront 200
DB products después de recrear contenedores   ✅ 12
DB backoffice users después de recrear         ✅ 1
Redis appendonly                              ✅ yes
npm run build                                 ✅
npm test                                      ✅ 191 passed / 56 skipped
eslint check-persistence.mjs                  ✅
prettier docker-compose/package/check script  ✅
verify.sh                                     ✅
git diff --check                              ✅
```

## Notas

- No se han cambiado los datos actuales: al usar los nombres existentes `project_mdv_pg_data` y `project_mdv_redis_data`, la DB actual sigue montada.
- Hay imágenes `uploads` untracked preexistentes en frontend/storefront; no pertenecen a F-155 y no se incluyen.
