Files

17 lines
693 B
JSON

{
"feature_id": "CLUB-004",
"agent": "security",
"stage": "security_gate",
"verdict": "APPROVED",
"security_check": "security",
"summary": "Códigos hasheados con SHA-256, plaintext nunca persiste en DB. Race condition mitigada con FOR UPDATE.",
"checks": {
"storage": "OK: code_hash = SHA-256(plaintext), code_fingerprint = truncated hash",
"race_condition": "OK: consumeRecoveryCode usa FOR UPDATE + COMMIT en la misma transacción",
"expiry": "OK: códigos caducan a los 30 días",
"single_use": "OK: used_at se marca tras consumo exitoso",
"token_storage": "OK: device token hasheado igual que en DEVICE flow"
},
"timestamp": "2026-08-26T20:48:10Z"
}