# Nota para el autor: el paquete de la revisión externa *6 de octubre de 2026, corregida ese día con una revisión del paquete y con tus decisiones. Puesta al día el 7 de octubre de 2026, primero para la v0.15 y por la noche para la v0.16: el paquete congela ahora la especificación v0.16.* ## Qué congela El paquete congelaba la v0.14, y el 7-10 por la mañana la v0.15. Desde el 7-10 por la noche congela: - **Especificación v0.16**, aprobada el 7-10: tag `spec-v0.16`, commit `b6ff17a` de `datekeys-go` (también la cabeza de la rama `v0.16` y de `main`). SHA-256 del texto `807d4fe8…45e1`, y del CDDL, que solo cambia su comentario de cabecera, `ba3ceb24…c3a3`. La documentación de Go está a la v0.16 en el mismo commit: un solo commit congelado para Go. - **TypeScript 0.5.0**: tag `v0.5.0`, commit `2c305cf`, con `testdata` en `b6ff17a`. Es la versión que publicaste el 7-10 para esto: la v0.16 y las palabras al azar. - **Dart**: rama `v0.16`, commit `b53afdc`, sin tag, con `testdata` en `b6ff17a`. La v0.15 es la recuperación a largo plazo, y el paquete la cuenta: el objeto release (§47.1), el release en la mano y el paso 9.c (§49, §63), los archivos y servicios de caché de todas las rondas (§50), las reglas 26 y 27 de §62.1 y el anexo de recuperación sin software de DateKeys (§79). Q12 pregunta por ese diseño, y de K3 queda solo lo que la v0.15 no cierra: no hay ningún archivo ni servicio alojado. La v0.16 es la respuesta a la revisión de Astra de la v0.15, y el paquete la cuenta también: el sello sin `accuracy` (§29.7, §29.11), el JSON de drand estricto (§47.1), la llave de palabras y el último bloque completo en el anexo (§79.5, §79.7) y las evidencias de la firma con certificados (§29.10, reglas 21 y 22). Hay una pregunta nueva, Q13, en el nivel 1; la carta dice que la revisión de Astra también es de IA; y K17, las erratas, queda cerrado. ## Qué contiene En inglés, porque el revisor puede no leer español: | Fichero | Para qué | |---|---| | `README.md` | La carta: qué es DateKeys, qué se pide, qué se entrega, qué queda congelado y que todas las revisiones hasta hoy son de IA | | `design_overview.md` | El diseño criptográfico, autocontenido y con sus §, para leer en una hora; la sección 8 es el objeto release y la recuperación, y la v0.16 se cuenta en 4.6, 4.7, 5, 8.1, 8.4 y 10 | | `threat_model.md` | Objetivos, no objetivos y modelo de amenazas (§4, §5, §7, §36.1, §55), con lo nuevo de la v0.14, de la v0.15 (la recuperación tras la fecha, §7.6, §50, y el reloj local, 4.11) y de la v0.16 (el sello sin `accuracy` y las evidencias que caben) | | `scope_and_questions.md` | Alcance, 13 preguntas ordenadas y 17 problemas ya conocidos (K1 a K17, el último cerrado en la v0.16), para que no se redescubran | | `artifacts.md` | Repos, commits, cómo pasar los gates, los vectores uno a uno, los 27 objetivos de fuzzing, las dependencias con versión y la trazabilidad | | `precedence_and_language.md` | **Propuesta**: español normativo, precedencia texto > CDDL > testdata > implementación, y los cambios de texto para la próxima versión | ## Tus decisiones (6-10) 1. **Idioma y precedencia: aprobada la propuesta**, con dos cambios: un párrafo al final de §1, no un §0, para no descolocar la numeración; y la regla 4 sin «vectores disputados». Una discrepancia es un defecto, decide el texto, se anota en el HANDOFF y se corrige en la versión siguiente con su caso en §76; hasta entonces los vectores no se tocan, porque los gates no lo permiten. Entre implementaciones, la de referencia primero, como dicen §16 y §67. Si el inglés pasa a normativo se decide en la v1.0. 2. **Las etiquetas del §76 no abren versión.** La carta ya declara que todas las revisiones anteriores son de IA. El texto corregido, con la precedencia y el registro de la revisión externa (§75, punto 10), va en la versión que se abra con los hallazgos del revisor. La v0.15 se abrió después para la recuperación a largo plazo, y la v0.16 para la revisión de Astra, y ninguna los lleva: irán en la versión que siga al informe. La v0.16 ya arregló uno de los cambios de texto propuestos, la cabecera «prevista». 3. **TypeScript: una versión cerrada con el `testdata` congelado.** El 6-10 fue la `0.3.0` (`3abd7bf`); el 7-10, la `0.4.0` (`7650418`), de la 0.15, y por la noche la `0.5.0`, en `2c305cf`, con el tag `v0.5.0`, que implementa la 0.16. El motivo sigue: el revisor tiene que poder pasar el TypeScript contra los mismos vectores que la referencia. Renombrar la carpeta `App` no hace falta: el revisor ve el nombre del bundle. 4. **Traducción: primero, buscar un revisor que lea español.** Elimina la decisión y el trabajo de contrastar cada hallazgo con el texto normativo. Si no lo hay, traducir solo el núcleo normativo, con un borrador de IA y tu revisión: §4 a §7, §10 a §13, §26 a §44.1, §51 a §57, §62.1, §63 y §69 a §72. En la v0.16 son unas 31 800 palabras de las 61 000 del texto (en la v0.15, 31 300 de 58 300; en la v0.14, 30 600 de 52 600). El resto lo cubre `design_overview.md`, y §76 se resume en una página. La carta dice que toda traducción es informativa y que tú contrastas cada hallazgo con el texto español: ese trabajo es tuyo. - Para decidir: esa lista no incluye §47.1, §49 y §50, el objeto release, las fuentes y los archivos, unas 1 700 palabras más, sobre los que preguntan Q12 y Q13. Hoy los cubre la sección 8 de `design_overview.md`. El anexo §79 (unas 2 300, con la llave de palabras de la v0.16) es informativo. 5. **Revisor y alcance: dos niveles, con presupuesto cerrado por nivel.** - Nivel 1, obligatorio: el protocolo y el Go de referencia como evidencia, con Q1 a Q4, Q6 a Q8 y Q10 a Q13. - Nivel 2, aparte u opcional: Q5 y Q9, el lector CMS/X.509/RFC 3161 y las reglas del localizador, que son revisión de parsers y piden otro perfil. - TypeScript y Dart, fuera del alcance pagado, disponibles si el revisor quiere mirarlos. El paquete sirve tal cual como pliego para pedir precio. Una opción gratuita antes de pagar: enseñar Q1 y Q10 al equipo de drand, que son preguntas sobre su propio IBE. Es decisión tuya, porque supone enseñar el proyecto fuera. 6. **Qué se comparte y cómo.** - `git bundle` de los tres repos con todo el historial y los tags, porque §76 cita commits; y un `.tar` de cada árbol en el commit congelado, con su SHA-256, para quien no quiera bundles. Dart no tiene tag: el bundle lleva la rama `v0.16`, y el `.tar` se hace en `b53afdc`. - El código entero: sin él no puede decir dónde discrepa la implementación ni pasar los gates. - El repo `docs`, no. Si el revisor lee español, los siete ficheros que cita `artifacts.md` §6, en una carpeta aparte; si no, se quitan esas referencias. `spec_v0.15/decisiones.md` y `diseno_recuperacion.md` describen el fichero `.dkr` que quitaste antes de aprobar, con una nota al principio que lo dice; el spec lo da por descartado (§76, v0.15, cambio 4). `spec_v0.16/decisiones.md` cuenta las ocho decisiones de la v0.16 y cómo se aprobaron. - Un NDA mutuo simple hasta la publicación, y en el encargo, el consentimiento para nombrarle en §76. - La entrega, cifrada con `age` a la clave pública del revisor, con el SHA-256 del archivo por otro canal. El contacto de la revisión es tu dirección directa; `info@` queda como contacto de seguridad del repo. ### Documentación de Go La documentación atrasada de la v0.14 (la trazabilidad, los README, la cabecera del CDDL y `SECURITY.md`) se arregló el 6-10 en `22f184c`; `fe50885` la puso en la v0.15, y `b6ff17a`, el commit del tag, en la v0.16, con las filas nuevas de la trazabilidad. Queda `docs/README.md`, que llama `datekeys-ts/` a la carpeta que en esta máquina es `App`: se arregla al renombrarla. ### Lo que no he podido comprobar - Que el H3 del texto coincide con `h3` de kyber: lo dice el spec y lo comprueban los vectores (`tlock_steps.json`, generado contra kyber), pero quien escribió el paquete no leyó kyber. Está como pregunta Q10. - Los gates sí se pasaron en los commits congelados de la v0.16, en la misma sesión que puso el paquete al día (ver «Orden», punto 2). ## Orden 1. Cerrar la versión de TypeScript: hecho, la `0.5.0` en `2c305cf`. 2. **Pasar los gates en los commits congelados.** Hecho el 7-10 por la noche: Go, `scripts/check.sh` entero en `b6ff17a`, con la comprobación del anexo sobre cuatro fixtures, y `FUZZ_PARALLEL=4 scripts/fuzz.sh 20s` con sus 27 objetivos, sin fallos; TypeScript, `npm run verify` en `2c305cf`, con 8 273 pruebas y 1 omitida; Dart, `tool/check.sh` en `b53afdc`, con 2 286 pruebas en la VM y 720 en Node. 3. Corregir la nota y el paquete: hecho el 6-10 para la v0.14, y el 7-10 para la v0.15 y para la v0.16 (esta puesta al día). 4. Elegir revisor y nivel de alcance, y pedir presupuesto. 5. Traducir el núcleo, solo si el revisor no lee español. 6. NDA, bundles y envío. 7. Tras el informe: la versión siguiente, con la precedencia, las etiquetas del §76 y el registro de la revisión (§75, punto 10). La medida del área de 32 KiB con firmas reales (§74, §75, punto 13) sigue abierta. No bloquea la revisión, pero el revisor la verá como K2; si se hace antes, el perfil CMS que revisa sería el definitivo.