Skip to content

feat(frontend): página pública de verificación de actas (/verify)#63

Merged
gonzaloMorenoc merged 1 commit into
mainfrom
feat/mnemo-verify-publico
Jul 2, 2026
Merged

feat(frontend): página pública de verificación de actas (/verify)#63
gonzaloMorenoc merged 1 commit into
mainfrom
feat/mnemo-verify-publico

Conversation

@gonzaloMorenoc

Copy link
Copy Markdown
Owner

Contexto

Hace tangible el diferenciador de Mnemo ("SLSA para QA"): convierte los endpoints públicos de verificación (que ya expone el backend en main, PR #61) en una página que un auditor/cliente/regulador puede usar sin cuenta en Mnemo.

Cambios

  • Página pública /verify (src/app/verify/page.tsx) — vive fuera de src/app/app/, así que NO pasa por el AuthGuard. El usuario pega el acta (JSON), pulsa "Verificar firma", y ve:
    • Firma válida (verde): el acta es auténtica y no ha sido alterada; muestra veredicto, riesgo, proyecto, commit, run y fecha de emisión (leídos de canonical_json.identity).
    • Firma NO válida (rojo): alterada, incompleta o firmada con otra clave.
    • La clave pública de firma (algoritmo + PEM) para verificar también offline.
  • Route handlers proxy públicos: certificates/verify (POST) y certificates/pubkey (GET) — el proxy solo reenvía Authorization si viene, así que funcionan sin sesión.
  • verifyCertificate / getCertificatePubkey en endpoints.ts (sin token) + tipos CertificateVerifyResponse, CertificatePubkey.
  • Acepta tanto el acta completa que devuelve Mnemo como un {canonical_json, signature} mínimo; parseo con mensajes de error humanos.

Test plan

  • certificate-verify.test.ts: verify/pubkey hacen la llamada correcta sin header Authorization.
  • route-parity.test.ts cubre la existencia de los dos route handlers nuevos.
  • 188 tests de frontend en verde; lint:ci limpio; tsc --noEmit EXIT=0.
  • next build: /verify prerenderiza como estática (○), los handlers como funciones (ƒ).

Siguiente

  • Enlazar /verify desde el acta descargada (PDF) y desde la home, y reposicionar el copy como "el estándar de acta firmada de QA".

https://claude.ai/code/session_01X1fZebDm9ABFwLU2v3mq46

Hace tangible el diferenciador: un auditor/cliente/regulador pega el acta firmada
y verifica la firma Ed25519 SIN cuenta en Mnemo. Usa los endpoints públicos que
ya expone el backend (POST /certificates/verify, GET /certificates/pubkey).

- Página pública /verify (fuera de /app → sin AuthGuard): pega el acta (JSON),
  muestra "firma válida/ no válida" + identidad del acta (veredicto, proyecto,
  run, commit, emisión) y la clave pública para verificar offline.
- Route handlers proxy (verify POST, pubkey GET) — reenvían sin Authorization.
- verifyCertificate/getCertificatePubkey en endpoints.ts (sin token) + tipos.
- Tests: los endpoints no envían Authorization; el test de paridad cubre las rutas.

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:33pm

@gonzaloMorenoc gonzaloMorenoc merged commit f798481 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