Skip to content

feat(cert): cerrar el determinismo del acta (D3 invariante IA + D4 reproducibilidad)#62

Merged
gonzaloMorenoc merged 1 commit into
mainfrom
feat/mnemo-cert-determinismo
Jul 2, 2026
Merged

feat(cert): cerrar el determinismo del acta (D3 invariante IA + D4 reproducibilidad)#62
gonzaloMorenoc merged 1 commit into
mainfrom
feat/mnemo-cert-determinismo

Conversation

@gonzaloMorenoc

Copy link
Copy Markdown
Owner

Contexto

Sprint 2 (parte 2) de docs/auditoria/2026-07-02-siguiente-nivel/. Hace la tesis del certificado literal y a prueba de escépticos. Basado en main (con Sprint 1+2 ya mergeados).

Cambios

D3 — El invariante "la IA nunca favorece un apto" ahora es ESTRUCTURAL

Antes, lo único que impedía que un desempate LLM (categoría "flaky"/"infra") contara hacia apto era requires_approval=True hardcodeado en resolve_tiebreaks; compute_verdict no miraba llm_assisted. El día que se añadiera "aprobar un tiebreak humano" (requires_approval=False), un veredicto elegido por la IA podía fluir a apto.

  • compute_verdict: cualquier verdict llm_assisted degrada a apto-con-reservas con independencia de requires_approval. La IA no puede producir un apto rotundo — por diseño, no por un booleano.

D4 — Reproducibilidad del acta

  • Orden total de la evidencia: get_triage_for_run ordenaba por created_at, que empata en el insert transaccional → orden físico arbitrario → el array evidence podía reordenarse entre regeneraciones. Ahora ORDER BY created_at, failure_id (único) → byte-reproducible.
  • key_id + algorithm en identity: un verificador tercero sabe qué algoritmo y qué clave usar; habilita rotación (certificados viejos siguen verificando con su clave). key_id = SHA-256 truncado de la clave pública, determinista. Aditivo (schema sigue mnemo.cert.v2).

Test plan

  • test_verdict_llm_assisted_never_yields_clean_apto: llm_assisted + requires_approval=False → apto-con-reservas; equivalente determinista → apto.
  • test_key_id_is_deterministic_and_scoped + el acta incluye algorithm/key_id.
  • 63 tests de certify en verde; colección backend limpia.

Pendiente (lo más profundo de D4, su propio PR)

  • Canonicalización cross-language (JCS/RFC 8785) en vez del json.dumps de Python.
  • Incluir evidence_bundle (las señales) en la evidencia firmada → un tercero puede re-derivar la categoría, no solo re-verificar la agregación.
  • Envelope tipo DSSE: firmar el predicado determinista y dejar ai_eval como anotación no firmada.
  • Página pública de verificación en el frontend.

https://claude.ai/code/session_01X1fZebDm9ABFwLU2v3mq46

…otal + key_id (D3/D4)

D3 — La invariante "la IA nunca produce un veredicto favorable" colgaba de un solo
booleano (requires_approval=True en resolve_tiebreaks); compute_verdict no miraba
llm_assisted. Ahora es ESTRUCTURAL: cualquier categoría asistida por IA degrada a
"apto-con-reservas" con independencia de requires_approval → nunca un "apto" rotundo.

D4 — Reproducibilidad del acta:
- Orden TOTAL de la evidencia: get_triage_for_run ordenaba por created_at (empata
  en el insert transaccional → orden físico arbitrario); ahora (created_at, failure_id)
  → el array evidence es byte-reproducible.
- key_id + algorithm en identity: el verificador sabe qué clave/algoritmo usar
  (habilita rotación; certificados viejos siguen verificando con su clave). key_id =
  SHA-256 truncado de la clave pública, determinista.

Claude-Session: https://claude.ai/code/session_01X1fZebDm9ABFwLU2v3mq46
@vercel

vercel Bot commented Jul 2, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
mnemo Ready Ready Preview, Comment Jul 2, 2026 4:23pm

@gonzaloMorenoc gonzaloMorenoc merged commit ba089b1 into main Jul 2, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant