Saltar a contenido

ADR-004 — Acta reproducible con snapshot completo

  • Status: accepted (D4 del BRIEF; invariante en CONSTITUTION)
  • Context: El sorteo debe ser auditable ante clientes y organismos: cualquier reclamo debe poder reproducir el resultado exacto.
  • Alternatives: loguear solo ganadores (no reproducible); snapshot completo (elegida).
  • Decision: Cada ejecución persiste: lista ordenada de chance_id elegibles + hash de la lista + seed + algo@version + filtros aplicados + prelación de premios + ganadores y suplentes en orden. El acta ejecutada es inmutable.
  • Consequences: lista + seed + algo@version → mismo resultado, siempre. Cambiar el algoritmo exige nueva algo@version (las actas viejas se reproducen con la suya).

Implementation Plan

  • Motor de sorteo determinista: PRNG sembrado (seed) + shuffle/selección documentada, versionada como algo@version (ej. fisher-yates-sha256@1).
  • Snapshot serializado en acta antes de publicar resultados; hash de la lista para detectar cualquier alteración.
  • Golden test de reproducibilidad (obligatorio, CONSTITUTION).

Verification

  • [ ] Golden: acta conocida (lista + seed + version) reproduce ganadores y suplentes exactos.
  • [ ] Test: re-ejecutar el motor sobre el snapshot del acta da idéntico resultado.
  • [ ] No existe endpoint ni operación que modifique un acta ejecutada.