From b1254921e38afea3f3681179e74450dba0bddcca Mon Sep 17 00:00:00 2001 From: dev Date: Wed, 7 Oct 2026 19:47:59 +0200 Subject: [PATCH] v0.16 approved and tagged: the handoff, the decisions and the README Co-Authored-By: Claude Opus 5.5 --- HANDOFF.md | 31 ++++++++++++++++--------------- README.md | 6 +++--- spec_v0.16/decisiones.md | 2 +- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/HANDOFF.md b/HANDOFF.md index 9adacc3..898df4c 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -15,18 +15,18 @@ Sirve para retomar sin contexto previo, sea una persona o una sesión de Claude. | Repo | Rama y commit | Tags | Qué es | |---|---|---|---| -| `datekeys-go` | `v0.16` en `3fd0e93`, el borrador implementado; `v0.15` en `70d907b`; `main` en `fe50885` | `spec-v0.15` en `fe50885`, y los de las versiones anteriores | Spec v0.15 aprobada y borrador v0.16, implementación de referencia, `testdata` compartido. En `v0.15`, tras el tag: `c49c67c` las palabras al azar, `27a75ee` el alfabeto de cada lista y la fuerza de las palabras, `96d8992` arregla `TestGenerate`, `e671032` la lista inglesa de la EFF, `92e7154` los dados, `aefc8f6` lo que dice el SDK al sellar y `70d907b` la licencia CC BY-ND 4.0. En `v0.16`: el borrador (`a2b71c2`, `2c29625`) y su implementación (`7e3b810` a `3fd0e93`) | -| `App` (`datekeys-ts`) | `v0.10` en `59d7607`; `main` en `7650418` | `v0.4.0` en `7650418`, `v0.3.0`, `v0.2.0`, `v0.1.0` | Librería TypeScript `0.5.0-dev`, del borrador de la spec 0.16, y páginas `/inspect` y `/create`, con las palabras al azar; la última publicada es la 0.4.0, de la spec 0.15 | -| `datekeys-dart` | `v0.16` en `0609e9e`, el borrador; `v0.15` en `e2296b0` | ninguno | Librería Dart completa, del borrador de la spec 0.16, con las palabras al azar; las ramas `v0.11` a `v0.15` se quedan atrás | +| `datekeys-go` | `v0.16` y `main` en `b6ff17a`; `v0.15` en `70d907b` | `spec-v0.16` en `b6ff17a`, y los de las versiones anteriores | Spec v0.16 aprobada, implementación de referencia, `testdata` compartido. En `v0.15`, tras su tag: `c49c67c` las palabras al azar, `27a75ee` el alfabeto de cada lista y la fuerza de las palabras, `96d8992` arregla `TestGenerate`, `e671032` la lista inglesa de la EFF, `92e7154` los dados, `aefc8f6` lo que dice el SDK al sellar y `70d907b` la licencia CC BY-ND 4.0. En `v0.16`: el borrador (`a2b71c2`, `2c29625`), su implementación (`7e3b810` a `3fd0e93`) y el cierre (`b6ff17a`) | +| `App` (`datekeys-ts`) | `v0.10` en `c74a37e`; `main` en `7650418` | `v0.4.0` en `7650418`, `v0.3.0`, `v0.2.0`, `v0.1.0` | Librería TypeScript `0.5.0-dev`, de la spec 0.16, y páginas `/inspect` y `/create`, con las palabras al azar; la última publicada es la 0.4.0, de la spec 0.15 | +| `datekeys-dart` | `v0.16` en `b53afdc`; `v0.15` en `e2296b0` | ninguno | Librería Dart completa, de la spec 0.16, con las palabras al azar; las ramas `v0.11` a `v0.15` se quedan atrás | | `docs` | `main` | — | Este repo | | `web` | `main` en `f2b8a38` | — | Landing de datekeys.com, sin remoto | -- **Spec:** la v0.15 está aprobada desde el 7-10, con SHA-256 `45105e693be4187af4dd30f4d254402612587b6427c746f5d29f07a541c1e3f3`. Es la recuperación a largo plazo: el objeto release, los archivos y servicios de caché que guardan todas las rondas, el release en la mano en el paso 9.c (opción B: no se compara con el reloj) y el anexo de recuperación del §79. No cambia ningún formato de `.dkc` ni de `.dkk`. El borrador de la v0.16 está abierto e implementado en las tres librerías, sin aprobar todavía (ver «Protocolo», punto 0). Las versiones aprobadas y sus SHA-256 están en `datekeys-go/spec/README.md`. +- **Spec:** la v0.16 está aprobada desde el 7-10, con SHA-256 `807d4fe85ac09ad6f97abc75ab3e2156bb2f3fb0dc589777f4420627fad545e1` y el tag `spec-v0.16` (`b6ff17a`, también `main`). Recoge la revisión de Astra de la v0.15: un sello sin `accuracy` no acredita nada antes de la fecha (S5, con su motivo); el anexo de recuperación deriva una llave de palabras y admite un último bloque de `age` completo; la firma con certificados guarda las cadenas y las respuestas OCSP que caben y dice lo que deja fuera; y el JSON de drand se lee estricto. No cambia ningún formato. La v0.15, la recuperación a largo plazo, sigue en `spec-v0.15` (`fe50885`). No hay ningún borrador abierto. Las versiones aprobadas y sus SHA-256 están en `datekeys-go/spec/README.md`. - **El fichero `.dkr` se descartó** antes de aprobar (7-10). El autor no lo había aprobado conscientemente, y no tiene sentido: al crear la cápsula no hay release que guardar, y cuando llega la ronda la cápsula ya se abre. El objeto release no tiene extensión propia; sale de un archivo o de un servicio de caché. El §76 lo registra. -- **Las tres implementaciones** coinciden en todos los vectores compartidos de `datekeys-go/testdata` en `3fd0e93`, el borrador v0.16, 150 ficheros, de donde TypeScript y Dart copian hoy `testdata`, `wordlists` y `annex`. Gates el 7-10 por la noche: - - Go: `scripts/check.sh` entero en `4f78854` y otra vez en `3fd0e93`, con el anexo abriendo con palabras y con un último bloque completo; en la v0.15, `scripts/fuzz.sh 20s` en `fe50885` con sus 27 objetivos, sin fallos; - - TypeScript: `npm run verify` en `59d7607`, con 8 273 pruebas; - - Dart: `tool/check.sh` en `0609e9e`, con 2 286 pruebas en la VM y 720 en Node. +- **Las tres implementaciones** coinciden en todos los vectores compartidos de `datekeys-go/testdata` en `spec-v0.16` (`b6ff17a`), 150 ficheros, de donde TypeScript y Dart copian hoy `testdata`, `wordlists` y `annex`. Gates el 7-10 por la noche: + - Go: `scripts/check.sh` entero en `4f78854`, en `3fd0e93` y en `b6ff17a`, con el anexo abriendo con palabras y con un último bloque completo; en la v0.15, `scripts/fuzz.sh 20s` en `fe50885` con sus 27 objetivos, sin fallos; + - TypeScript: `npm run verify` en `c74a37e`, con 8 273 pruebas; + - Dart: `tool/check.sh` en `b53afdc`, con 2 286 pruebas en la VM y 720 en Node. - **Palabras al azar (7-10, después de cerrar la v0.15):** es el SHOULD de §38.1 de ofrecer palabras generadas; no cambia ningún formato ni la derivación. - Go: `c49c67c` añade `wordkey.Generate`, `List` y `CheckList`, y `datekeys encrypt -new-words FICHERO [-dic es] [-word-count 7]`. `27a75ee` hace que `CheckList(lang, words)` compruebe cada palabra contra el alfabeto de su idioma, que da el código y no la lista (para `es`, de la `a` a la `z`, `á`, `é`, `í`, `ó`, `ú`, `ü` y `ñ`, en minúscula y NFC): una letra cirílica que parece latina, una mayúscula, una cifra o el retorno de carro de un fichero CRLF dejarían la cápsula sin abrir. También añade `Bits`, la fuerza de lo sorteado, que `encrypt` muestra (90 bits para 7 de 7 776). `scripts/check.sh` pasa entero en los dos. - TypeScript (`0.5.0-dev`, de `012cd74` a `4057607`): `scripts/sync-testdata.mjs` copia del mismo commit de Go `wordkey/lists` en `wordlists/`, con su `SOURCE.json` (`testdata` y `wordlists` en `27a75ee`, cuyo `testdata` es el del tag). `wordlist.ts` hace lo de Go, con sus textos: `readWordList` solo acepta una lista con el SHA-256 fijado para su idioma, `checkWordList`, `generateWords` y `wordBits`. `/create` ofrece palabras al azar por defecto tras una casilla, con su fuerza y «Otras palabras», y deja escribir las propias con el aviso de que son más débiles; `licenses.txt` lleva la licencia de la lista. `npm run verify` pasa con 8 119 pruebas, y el flujo se comprobó en el navegador sobre el build de producción. @@ -51,16 +51,17 @@ Sirve para retomar sin contexto previo, sea una persona o una sesión de Claude. ## Qué queda -La recuperación a largo plazo quedó hecha con la v0.15, y las palabras al azar en las tres librerías y en `/create` (7-10). **Para empezar mañana**, lo que depende del autor en ellas: la revisión de la lista española por alguien que hable español, o rehacerla con el corpus de Leipzig cuando su web vuelva (el 7-10 por la tarde seguía caída). Sin eso, lo siguiente de «Librerías y clientes» es la página web cuando se publique (§59) o el localizador en las páginas. +La recuperación a largo plazo quedó hecha con la v0.15, las palabras al azar en las tres librerías y en `/create`, y la revisión de Astra con la v0.16 (7-10). **Para empezar mañana**, lo que depende del autor en ellas: la revisión de la lista española por alguien que hable español, o rehacerla con el corpus de Leipzig cuando su web vuelva (el 7-10 por la tarde seguía caída). Sin eso, lo siguiente de «Librerías y clientes» es la página web cuando se publique (§59) o el localizador en las páginas. ### Protocolo -0. **La v0.16, implementada y sin cerrar (7-10).** Es el borrador con la revisión de Astra de la v0.15; el autor pidió implementarla («ponte con la implementación de la 0.16»), y se tomó como aprobación de las ocho [decisiones](spec_v0.16/decisiones.md) con su recomendación. - - Go (`7e3b810` a `3fd0e93`, rama `v0.16`): el sello sin `accuracy` da S5 con su motivo (`capsule.SealReason`), y el escritor devuelve el veredicto del área que escribió (`Result.Security`, regla 19); el JSON de drand se lee estricto con un solo lector, también el de los relays; `scripts/recovery` abre con palabras (`-words`, y `-unicodedata` para otro texto que el de las listas), y sus dos normalizaciones dan las palabras de todos los casos de `wordkey.json`; dos fixtures nuevos, `format3_time_and_key_words` y `format3_full_chunk`; `security_cms.json` hecho de nuevo, 143 casos; `SpecVersion` 0.16. - - TypeScript (`f79d8e2`, `59d7607`) y Dart (`290d97e`, `0609e9e`), de dos agentes Opus revisados contra Go. TypeScript usa también el lector estricto para un release pegado en la página. Dart regeneró sus vectores propios desde un `git archive` de Go. +0. **La v0.16, cerrada (7-10).** Es la revisión de Astra de la v0.15, con las ocho [decisiones](spec_v0.16/decisiones.md) y su recomendación; el autor pidió implementarla («ponte con la implementación de la 0.16») y después cerrarla («sí, cierra la v0.16»). + - Go (`7e3b810` a `3fd0e93`, cierre en `b6ff17a`): el sello sin `accuracy` da S5 con su motivo (`capsule.SealReason`), y el escritor devuelve el veredicto del área que escribió (`Result.Security`, regla 19); el JSON de drand se lee estricto con un solo lector, también el de los relays; `scripts/recovery` abre con palabras (`-words`, y `-unicodedata` para otro texto que el de las listas), y sus dos normalizaciones dan las palabras de todos los casos de `wordkey.json`; dos fixtures nuevos, `format3_time_and_key_words` y `format3_full_chunk`; `security_cms.json` hecho de nuevo, 143 casos. + - TypeScript (`f79d8e2`, `59d7607`, `c74a37e`) y Dart (`290d97e`, `0609e9e`, `b53afdc`), de dos agentes Opus revisados contra Go. TypeScript usa también el lector estricto para un release pegado en la página. Dart regeneró sus vectores propios desde un `git archive` de Go. - Un tropiezo: las herramientas de edición convierten un escape `\u0072` en el carácter. Los casos «escaped as» de `release.json` llevaban un `round` llano en `b570338`; lo vio el agente de TypeScript y se arregló en `3fd0e93`. Ver la memoria. - - Pendiente del autor: cerrar la versión. Al cerrarla: la cabecera con «aprobado», el SHA-256 en `spec/README.md`, el anexo regenerado, el tag `spec-v0.16` y `main` en Go; TypeScript y Dart, sin cambios de código. El paquete de la revisión externa se pone al día. - No hay paquete de recuperación (decisión 5): el anexo nombra `UnicodeData.txt` por su SHA-256. + - **Lo siguiente:** poner al día el paquete de la revisión externa, que sigue en la v0.15 y congela TypeScript en la `0.4.0`. Para congelar la v0.16 hace falta una versión publicada de TypeScript, quizá la `0.5.0`, con las palabras al azar y la v0.16: es decisión del autor. + - Las reglas 21 y 22 de la v0.16 (guardar las cadenas y las respuestas OCSP, decir lo que queda fuera) no tienen código: ningún escritor de las librerías pide sellos ni firmas con certificado todavía. 1. **La revisión externa.** El paquete está listo; lo que falta es del autor. Al recibir el informe, se abre la versión siguiente con sus hallazgos, el párrafo de idioma y precedencia del final del §1, las etiquetas del §76 que hoy llaman independientes a revisiones de IA, y el registro de la revisión (§75, punto 10). Todo eso lo aprobó el autor el 6-10; ver [revision_externa/precedence_and_language.md](revision_externa/precedence_and_language.md). 2. **Un archivo o servicio de caché de releases** (§50). El protocolo ya lo admite y las librerías leen un archivo local, pero nadie aloja uno todavía. Es decisión del autor: dónde, quién lo mantiene y si DateKeys ofrece el suyo. 3. **Medir el área de 32 KiB y cerrar el perfil CMS** (§74; §75, punto 13), con firmas reales con certificado de varios países y sellos de autoridades reales. Necesita firmas del autor o permiso para pedir sellos a una autoridad pública. @@ -155,5 +156,5 @@ La recuperación a largo plazo quedó hecha con la v0.15, y las palabras al azar El [README](README.md#documentos) los lista. Para retomar, lo principal es: - [revision_externa/](revision_externa/NOTA_PARA_EL_AUTOR.md): el paquete y su nota; - [REVISION_completitud_v0.13.md](REVISION_completitud_v0.13.md): qué falta antes de la v1.0; -- [spec_v0.16/decisiones.md](spec_v0.16/decisiones.md): las decisiones del borrador abierto; -- [spec_v0.15/decisiones.md](spec_v0.15/decisiones.md): las de la última versión aprobada, y [diseno_recuperacion.md](diseno_recuperacion.md), su diseño. +- [spec_v0.16/decisiones.md](spec_v0.16/decisiones.md): las decisiones de la última versión; +- [spec_v0.15/decisiones.md](spec_v0.15/decisiones.md): las de la v0.15, y [diseno_recuperacion.md](diseno_recuperacion.md), su diseño. diff --git a/README.md b/README.md index 3f4567a..caa0fd2 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,8 @@ Para retomar el trabajo, lee [HANDOFF.md](HANDOFF.md): el estado de cada repo, l | Carpeta | Qué es | Remoto | |---|---|---| | `datekeys-go/` | Especificación del protocolo (`spec/`), CDDL, testdata compartido e implementación de referencia en Go: librería y CLI | `go/DateKeys` | -| `datekeys-ts/` | Implementación en TypeScript y páginas `/inspect` y `/create`; la carpeta sigue llamándose `App`. Versión `0.4.0` (tag `v0.4.0`), de la especificación 0.15; en desarrollo, la `0.5.0`, con las palabras al azar y el borrador v0.16 | `go/DateKeys-App` | -| `datekeys-dart/` | Librería Dart para la app Flutter, según [PLAN_dart.md](PLAN_dart.md). Rama `v0.16`, del borrador v0.16: todas las etapas hechas, de la 0 a la 7, las palabras al azar y los dados, con `testdata/`, `wordlists/` y `annex/` en `3fd0e93` de `datekeys-go`. La app Flutter está archivada desde el 6-10 | `go/dateKeys-dart`, desde el 6-10 | +| `datekeys-ts/` | Implementación en TypeScript y páginas `/inspect` y `/create`; la carpeta sigue llamándose `App`. Versión `0.4.0` (tag `v0.4.0`), de la especificación 0.15; en desarrollo, la `0.5.0`, con las palabras al azar y la especificación 0.16 | `go/DateKeys-App` | +| `datekeys-dart/` | Librería Dart para la app Flutter, según [PLAN_dart.md](PLAN_dart.md). Rama `v0.16`, de la especificación 0.16: todas las etapas hechas, de la 0 a la 7, las palabras al azar y los dados, con `testdata/`, `wordlists/` y `annex/` en `spec-v0.16` (`b6ff17a`) de `datekeys-go`. La app Flutter está archivada desde el 6-10 | `go/dateKeys-dart`, desde el 6-10 | | `web/` | Landing de datekeys.com, con `api/enquiry.php` | ninguno | | `docs/` | Este repositorio | `go/datekeys-doc`, desde el 6-10 | | `brand/` | Logos | no es un repo | @@ -51,7 +51,7 @@ Para retomar el trabajo, lee [HANDOFF.md](HANDOFF.md): el estado de cada repo, l | [revision_externa/](revision_externa/NOTA_PARA_EL_AUTOR.md) | El paquete para una revisión criptográfica externa, en inglés, con una [nota para el autor](revision_externa/NOTA_PARA_EL_AUTOR.md) | | [diseno_recuperacion.md](diseno_recuperacion.md) | Diseño de la recuperación a largo plazo: el objeto de release, el reloj del paso 9.c, el archivo de releases y el anexo de recuperación, con las decisiones para el autor. Su fichero `.dkr` se descartó al aprobar la v0.15 | | [spec_v0.15/](spec_v0.15/decisiones.md) | La v0.15, aprobada el 7-10, la recuperación a largo plazo: las [decisiones del autor](spec_v0.15/decisiones.md), sin el fichero `.dkr`, que se descartó | -| [spec_v0.16/](spec_v0.16/decisiones.md) | El borrador v0.16 (7-10), con la revisión de Astra de la v0.15, implementado en las tres librerías y sin cerrar: las [decisiones para el autor](spec_v0.16/decisiones.md), con su recomendación | +| [spec_v0.16/](spec_v0.16/decisiones.md) | La v0.16, aprobada el 7-10, con la revisión de Astra de la v0.15: las [decisiones del autor](spec_v0.16/decisiones.md), con su recomendación | | [spec_v0.9/](spec_v0.9/README.md) | Papeles de trabajo del borrador v0.9: diseño, revisiones y correcciones pendientes | | [spec_v0.10/](spec_v0.10/formato3_diseno.md) | Formato de cápsula 3 en diseño, en tres entregas: varios ficheros, firma de autor y sello de tiempo. El diseño, con sus revisiones incorporadas, la revisión de Fable y la revisión final del borrador del spec | | [spec_v0.11/](spec_v0.11/llave_palabras.md) | Papeles de trabajo de la v0.11, ya etiquetada. Contiene:
la [llave de palabras](spec_v0.11/llave_palabras.md);
la [consulta a Fable y Astra sobre el tamaño del área de firmas y sellos](spec_v0.11/area_firmas_para_revision.md) y [su propuesta](spec_v0.11/revision_fable_astra.md);
la [revisión del borrador](spec_v0.11/revision_borrador.md);
la [revisión de lo hecho en la sesión del 1 y 2 de octubre](spec_v0.11/revision_sesion_1_2_octubre.md), con los fallos pendientes de arreglar | diff --git a/spec_v0.16/decisiones.md b/spec_v0.16/decisiones.md index 42c5b03..6b73818 100644 --- a/spec_v0.16/decisiones.md +++ b/spec_v0.16/decisiones.md @@ -2,7 +2,7 @@ *7 de octubre de 2026. El borrador está en la rama `v0.16` de `datekeys-go` (`2c29625`), en `spec/DateKeys_Protocol_Specification_v0.16.md`. Recoge la revisión de Astra de la v0.15, con la dirección acordada tras su segunda y su tercera respuesta: cinco hallazgos, todos comprobados contra el texto y el código. Todavía no hay código: `SpecVersion` sigue en 0.15, y el anexo que escribe la CLI es el de la v0.15.* -> **Nota del 7-10 por la noche.** El autor pidió implementarla («ponte con la implementación de la 0.16»), y se tomó como aprobación de las ocho decisiones con su recomendación. Está implementada en Go (`7e3b810` a `3fd0e93`), TypeScript (`f79d8e2`, `59d7607`) y Dart (`290d97e`, `0609e9e`), con los tres gates en verde. Falta cerrarla con su tag. La licencia quedó decidida: CC BY-ND 4.0, también en la cabecera del anexo (`70d907b`). +> **Nota del 7-10 por la noche.** El autor pidió implementarla («ponte con la implementación de la 0.16»), y se tomó como aprobación de las ocho decisiones con su recomendación. Está implementada en Go (`7e3b810` a `3fd0e93`), TypeScript (`f79d8e2`, `59d7607`) y Dart (`290d97e`, `0609e9e`), con los tres gates en verde. El autor la cerró después («sí, cierra la v0.16»): tag `spec-v0.16` en `b6ff17a`, SHA-256 `807d4fe85ac09ad6f97abc75ab3e2156bb2f3fb0dc589777f4420627fad545e1`. La licencia quedó decidida: CC BY-ND 4.0, también en la cabecera del anexo (`70d907b`). Si apruebas lo que sigue tal como está, basta con decir «apruebo el borrador». Después se implementa en Go, con sus vectores, y se lleva a TypeScript y a Dart. La versión se cierra con su tag cuando las tres pasen.