v0.16 approved and tagged: the handoff, the decisions and the README

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
main
dev 5 hours ago
parent f2be6f086b
commit b1254921e3

@ -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.

@ -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: <br>la [llave de palabras](spec_v0.11/llave_palabras.md); <br>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); <br>la [revisión del borrador](spec_v0.11/revision_borrador.md); <br>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 |

@ -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.

Loading…
Cancel
Save

Powered by TurnKey Linux.