feat(F-006): users profile, addresses and RBAC
- users module: profile + address CRUD behind use cases (users_profiles, users_addresses) - roles customer/admin on identity_users; role resolved from DB per request - shared auth contract (Authenticate, requireRole, requireOwnerOrAdmin) injected from composition root; users never imports identity - authorization runs before existence checks; address SQL scoped by user_id - @fastify/cookie registered once at app root (cross-module) - migrations 003_identity_roles + 004_users (reversible) - no new npm dependencies; tests: unit 52, integration 22 Gates: reviewer/security/qa APPROVED; verify.sh green
This commit is contained in:
@@ -1,139 +1,13 @@
|
||||
{
|
||||
"feature_id": "F-005",
|
||||
"feature_id": "F-006",
|
||||
"stage": "close",
|
||||
"agent": "leader",
|
||||
"action": "F-005 cerrada con gates aprobados",
|
||||
"action": "Cierre F-006",
|
||||
"state": "done",
|
||||
"next_agent": "leader",
|
||||
"waiting_for": "Seleccionar una feature pending y actualizar este estado",
|
||||
"updated_at": "2026-08-14T20:58:24Z",
|
||||
"updated_at": "2026-08-15T07:27:44Z",
|
||||
"timeline": [
|
||||
{
|
||||
"ts": "2026-08-14T20:39:25Z",
|
||||
"agent": "leader",
|
||||
"stage": "intake",
|
||||
"state": "done",
|
||||
"message": "Intake F-005 OK"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-14T20:39:25Z",
|
||||
"agent": "architect",
|
||||
"stage": "design",
|
||||
"state": "running",
|
||||
"message": "Diseño módulo identity (hexagonal)"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-14T20:41:17Z",
|
||||
"agent": "architect",
|
||||
"stage": "design",
|
||||
"state": "done",
|
||||
"message": "Diseño F-005 aprobado"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-14T20:41:17Z",
|
||||
"agent": "implementer",
|
||||
"stage": "build",
|
||||
"state": "running",
|
||||
"message": "Implementando módulo identity"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-14T20:51:41Z",
|
||||
"agent": "implementer",
|
||||
"stage": "build",
|
||||
"state": "done",
|
||||
"message": "Build F-005 completo con evidencia"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-14T20:53:01Z",
|
||||
"agent": "implementer",
|
||||
"stage": "build",
|
||||
"state": "running",
|
||||
"message": "Fix de review: cobertura COOKIE_SECURE"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-14T20:54:22Z",
|
||||
"agent": "implementer",
|
||||
"stage": "build",
|
||||
"state": "done",
|
||||
"message": "Fix de review aplicado y verificado"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-14T20:54:22Z",
|
||||
"agent": "reviewer",
|
||||
"stage": "review_gate",
|
||||
"state": "running",
|
||||
"message": "Review gate F-005"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-14T20:54:44Z",
|
||||
"agent": "reviewer",
|
||||
"stage": "review_gate",
|
||||
"state": "done",
|
||||
"message": "Review gate APPROVED"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-14T20:55:17Z",
|
||||
"agent": "security",
|
||||
"stage": "security_gate",
|
||||
"state": "running",
|
||||
"message": "Security gate F-005"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-14T20:55:17Z",
|
||||
"agent": "security",
|
||||
"stage": "security_gate",
|
||||
"state": "done",
|
||||
"message": "Security gate APPROVED"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-14T20:55:17Z",
|
||||
"agent": "qa",
|
||||
"stage": "qa_gate",
|
||||
"state": "running",
|
||||
"message": "QA gate F-005"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-14T20:55:36Z",
|
||||
"agent": "qa",
|
||||
"stage": "qa_gate",
|
||||
"state": "done",
|
||||
"message": "QA gate APPROVED"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-14T20:55:36Z",
|
||||
"agent": "documenter",
|
||||
"stage": "document",
|
||||
"state": "running",
|
||||
"message": "Documentación F-005"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-14T20:55:42Z",
|
||||
"agent": "implementer",
|
||||
"stage": "build",
|
||||
"state": "running",
|
||||
"message": "Docs README: auth contract"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-14T20:57:22Z",
|
||||
"agent": "implementer",
|
||||
"stage": "build",
|
||||
"state": "done",
|
||||
"message": "README auth contract documentado"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-14T20:57:22Z",
|
||||
"agent": "documenter",
|
||||
"stage": "document",
|
||||
"state": "running",
|
||||
"message": "Documentación F-005"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-14T20:58:18Z",
|
||||
"agent": "documenter",
|
||||
"stage": "document",
|
||||
"state": "done",
|
||||
"message": "Docs F-005 completas"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-14T20:58:24Z",
|
||||
"agent": "leader",
|
||||
@@ -147,6 +21,132 @@
|
||||
"stage": "close",
|
||||
"state": "done",
|
||||
"message": "F-005 cerrada con gates aprobados"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-15T07:04:47Z",
|
||||
"agent": "leader",
|
||||
"stage": "intake",
|
||||
"state": "running",
|
||||
"message": "Intake F-006"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-15T07:04:48Z",
|
||||
"agent": "leader",
|
||||
"stage": "intake",
|
||||
"state": "done",
|
||||
"message": "Intake F-006 OK"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-15T07:04:48Z",
|
||||
"agent": "architect",
|
||||
"stage": "design",
|
||||
"state": "running",
|
||||
"message": "Diseño users + RBAC"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-15T07:07:20Z",
|
||||
"agent": "architect",
|
||||
"stage": "design",
|
||||
"state": "done",
|
||||
"message": "Diseño F-006 aprobado"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-15T07:07:20Z",
|
||||
"agent": "implementer",
|
||||
"stage": "build",
|
||||
"state": "running",
|
||||
"message": "Implementando users + RBAC"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-15T07:22:07Z",
|
||||
"agent": "implementer",
|
||||
"stage": "build",
|
||||
"state": "done",
|
||||
"message": "Build F-006 completo: users + RBAC, tests y verify verdes"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-15T07:22:07Z",
|
||||
"agent": "reviewer",
|
||||
"stage": "review_gate",
|
||||
"state": "running",
|
||||
"message": "Revisando users + RBAC"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-15T07:23:01Z",
|
||||
"agent": "reviewer",
|
||||
"stage": "review_gate",
|
||||
"state": "done",
|
||||
"message": "Review gate F-006 APPROVED"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-15T07:23:01Z",
|
||||
"agent": "security",
|
||||
"stage": "security_gate",
|
||||
"state": "running",
|
||||
"message": "Audit users + RBAC"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-15T07:23:41Z",
|
||||
"agent": "security",
|
||||
"stage": "security_gate",
|
||||
"state": "done",
|
||||
"message": "Security gate F-006 APPROVED"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-15T07:23:41Z",
|
||||
"agent": "qa",
|
||||
"stage": "qa_gate",
|
||||
"state": "running",
|
||||
"message": "Validación users + RBAC"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-15T07:24:24Z",
|
||||
"agent": "qa",
|
||||
"stage": "qa_gate",
|
||||
"state": "done",
|
||||
"message": "QA gate F-006 APPROVED"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-15T07:24:24Z",
|
||||
"agent": "implementer",
|
||||
"stage": "build",
|
||||
"state": "running",
|
||||
"message": "Actualización README requerida por document"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-15T07:25:35Z",
|
||||
"agent": "implementer",
|
||||
"stage": "build",
|
||||
"state": "done",
|
||||
"message": "README users + RBAC documentado"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-15T07:25:35Z",
|
||||
"agent": "documenter",
|
||||
"stage": "document",
|
||||
"state": "running",
|
||||
"message": "Cerrando documentación"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-15T07:25:55Z",
|
||||
"agent": "documenter",
|
||||
"stage": "document",
|
||||
"state": "done",
|
||||
"message": "Docs F-006 completas"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-15T07:25:56Z",
|
||||
"agent": "leader",
|
||||
"stage": "close",
|
||||
"state": "running",
|
||||
"message": "Verificación final antes de cerrar"
|
||||
},
|
||||
{
|
||||
"ts": "2026-08-15T07:27:44Z",
|
||||
"agent": "leader",
|
||||
"stage": "close",
|
||||
"state": "done",
|
||||
"message": "F-006 cerrada con gates aprobados"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user