feat(F-155): completed feature
This commit is contained in:
65
work/artifacts/F-155/implementer.md
Normal file
65
work/artifacts/F-155/implementer.md
Normal file
@@ -0,0 +1,65 @@
|
||||
# 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.
|
||||
21
work/artifacts/F-155/leader-close.json
Normal file
21
work/artifacts/F-155/leader-close.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"feature_id": "F-155",
|
||||
"agent": "leader",
|
||||
"verdict": "APPROVED",
|
||||
"summary": "F-155 cerrado: PostgreSQL y Redis usan volúmenes Docker explícitos existentes, Redis tiene AOF/RDB, monolith reconcilia infra con Compose y existe un check reproducible de persistencia.",
|
||||
"checks": [
|
||||
"reviewer.json APPROVED",
|
||||
"security.json APPROVED",
|
||||
"qa.json APPROVED",
|
||||
"npm run infra:persistence-check -- --recreate OK",
|
||||
"npm run infra:persistence-check OK",
|
||||
"docker compose config OK",
|
||||
"monolith prod status OK",
|
||||
"npm run build OK",
|
||||
"npm test OK",
|
||||
"verify.sh OK"
|
||||
],
|
||||
"commit_message": "fix(F-155): persist PostgreSQL and Redis volumes",
|
||||
"next_step": "Continue with F-152 email notifications",
|
||||
"closed_at": "2026-08-21T20:37:10Z"
|
||||
}
|
||||
16
work/artifacts/F-155/qa.json
Normal file
16
work/artifacts/F-155/qa.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"feature_id": "F-155",
|
||||
"agent": "qa",
|
||||
"stage": "qa_gate",
|
||||
"verdict": "APPROVED",
|
||||
"summary": "Persistencia probada con restart y con recreación de contenedores. Los datos de PostgreSQL y Redis sobreviven, y la aplicación sigue sirviendo tras la operación.",
|
||||
"acceptance_traceability": [
|
||||
{"criterion":"PostgreSQL persiste tras recrear contenedor","ok":true,"evidence":"app_meta infra.persistence_check conserva token tras docker compose rm/up"},
|
||||
{"criterion":"Redis persiste tras recrear contenedor","ok":true,"evidence":"redis GET infra:persistence_check conserva token tras rm/up; appendonly=yes"},
|
||||
{"criterion":"Volúmenes correctos","ok":true,"evidence":"PostgreSQL mount project_mdv_pg_data; Redis mount project_mdv_redis_data"},
|
||||
{"criterion":"Servicios siguen arriba","ok":true,"evidence":"monolith prod status: backend/admin/frontend/storefront HTTP 200"},
|
||||
{"criterion":"Datos existentes siguen disponibles","ok":true,"evidence":"DB products=12, backoffice_users=1; admin proxy login y catalog products OK"},
|
||||
{"criterion":"Regression checks","ok":true,"evidence":"docker compose config, npm run build, npm test, eslint/prettier touched files, verify.sh, git diff --check"}
|
||||
],
|
||||
"issues": []
|
||||
}
|
||||
16
work/artifacts/F-155/reviewer.json
Normal file
16
work/artifacts/F-155/reviewer.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"feature_id": "F-155",
|
||||
"agent": "reviewer",
|
||||
"stage": "review_gate",
|
||||
"verdict": "APPROVED",
|
||||
"summary": "La persistencia de PostgreSQL y Redis queda endurecida sin apartar los volúmenes existentes. El check operacional prueba reinicio y recreación de contenedores conservando datos.",
|
||||
"checks": [
|
||||
{"item":"No se cambia a un volumen vacío","ok":true,"evidence":"docker-compose fija project_mdv_pg_data y project_mdv_redis_data, que son los mounts actuales"},
|
||||
{"item":"Redis persistente","ok":true,"evidence":"Redis arranca con appendonly=yes y RDB save 60 1"},
|
||||
{"item":"Compose reconcilia configuración","ok":true,"evidence":"monolith.sh usa docker compose up -d postgres redis en vez de docker start directo"},
|
||||
{"item":"Recreación verificada","ok":true,"evidence":"npm run infra:persistence-check -- --recreate mantiene marcadores PG/Redis"},
|
||||
{"item":"Servicios regresión","ok":true,"evidence":"backend/admin/frontend/storefront 200 tras recrear infra"},
|
||||
{"item":"Build/test","ok":true,"evidence":"npm run build OK; npm test 191 passed/56 skipped"}
|
||||
],
|
||||
"issues": []
|
||||
}
|
||||
16
work/artifacts/F-155/security.json
Normal file
16
work/artifacts/F-155/security.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"feature_id": "F-155",
|
||||
"agent": "security",
|
||||
"stage": "security_gate",
|
||||
"verdict": "APPROVED",
|
||||
"summary": "El cambio no introduce credenciales nuevas ni exposición externa adicional. Redis y PostgreSQL siguen limitados a la configuración dev existente; la persistencia se limita a volúmenes locales nombrados.",
|
||||
"checks": [
|
||||
{"item":"No nuevas credenciales","ok":true,"evidence":"docker-compose mantiene las credenciales dev ya existentes"},
|
||||
{"item":"Persistencia local controlada","ok":true,"evidence":"volúmenes Docker nombrados, sin bind mounts a rutas sensibles"},
|
||||
{"item":"Redis AOF sin secretos nuevos","ok":true,"evidence":"solo activa durabilidad appendonly; no cambia auth/red"},
|
||||
{"item":"Script de check seguro","ok":true,"evidence":"usa app_meta y una clave Redis técnica; no imprime secretos"},
|
||||
{"item":"No borra volúmenes","ok":true,"evidence":"check --recreate elimina contenedores, no volúmenes"}
|
||||
],
|
||||
"issues": [],
|
||||
"notes": "Los puertos 5432/6379 siguen publicados como antes para dev local. Endurecimiento de red/auth de Redis queda fuera de este fix si se requiere producción real."
|
||||
}
|
||||
Reference in New Issue
Block a user