5.1 KiB
Borrador v0.15: decisiones para el autor
7 de octubre de 2026. El borrador está en la rama v0.15 de datekeys-go (b7402bd), en spec/DateKeys_Protocol_Specification_v0.15.md. Es la recuperación a largo plazo del diseño, con la opción A y las ocho recomendaciones que aprobaste el 6-10. Lo hizo un agente Opus; la sesión revisó el paso 9.c en el código. scripts/check.sh pasa entero, con un script nuevo que abre dos fixtures siguiendo solo el anexo.
Si apruebas lo que sigue tal como está, basta con decir «apruebo el borrador». Al aprobarlo se cierra como la v0.14 y se lleva a TypeScript, a Dart y al paquete de la revisión externa.
Lo que hace el borrador
-
El objeto de release y el fichero
.dkr(§20, §47, §47.1 nueva, CDDL). Es un CBOR de 111 bytes:{0: "datekeys-release", 1: 1, 2: chain_hash, 3: ronda, 4: firma}. No lleva firma propia ni la marca de «verificado»: se comprueba contra el perfil fijado. Los lectores siguen aceptando el JSON de drand como entrada, pero un escritor nunca lo guarda. -
La cadena en el paso 10 (§51, §63). Primero las capas del objeto, después
chain_hash(ERR_PROFILE_MISMATCH), la ronda y la firma. No hay códigos de error nuevos. -
El paso 9.c, opción B (§49, §63). El reloj local solo cuenta antes de pedir a la red. Un release que el lector ya tiene, pegado, de un fichero o de un archivo local, no se compara con el reloj, y el lector MAY avisar de que el reloj va atrasado.
-
La recuperación a largo plazo (§50, §53, §62.1 reglas 26 a 28):
- el
.dkrjunto al.dkces el camino principal, y también junto a una.dkkcon localizador; - el archivo de releases es un formato informativo, sin prometer dónde se aloja;
- el SDK SHOULD avisar al sellar, guardar el anexo y guardar el
.dkrpasada la fecha.
- el
-
La Release API (§45): su respuesta es el objeto de release; la forma HTTP es informativa.
-
El §74: salen los dos puntos de trabajo futuro que esto cubre, y entran la extensión
datekeys.releasede la.dkky un archivo publicado. -
El anexo de recuperación (§79 nueva, informativa, después del §78 para no renumerar el §77). Explica cómo abrir una cápsula
time_onlyy unatime_and_keysin el software de DateKeys:- los parámetros de Quicknet;
- la trama;
- la verificación del release;
- el stanza tlock;
- cómo abrir un fichero
agedesde su file key; - las capas X25519 con
age -d; - el contenido de cada formato.
scripts/recovery_check.shlo demuestra con código que no importa nada de DateKeys, ni tlock ni drand.
Lo que el agente decidió distinto del diseño, para que lo apruebes o no
-
Un límite de tamaño del objeto: de 1 a 1024 bytes, con
ERR_NON_CANONICAL_CBOR. Así el código de error no depende de cuánto lea un lector. La firma, de 1 a 96 bytes en el CDDL; otra longitud dentro de ese rango daERR_RELEASE_INVALID.- Recomendación: aprobar.
-
Un JSON de drand mal formado da
ERR_RELEASE_INVALIDen el paso 10. Solo es una entrada de quien llama y nunca se escribe.- Recomendación: aprobar.
-
Los fallos del archivo de releases dan
ERR_RELEASE_UNAVAILABLEen el paso 9. Una ronda que el archivo no tiene o no cubre, de otra cadena, o con otra longitud. Una ronda a ceros cuenta como ausente, no como firma que no verifica.- Recomendación: aprobar. El formato del archivo es informativo y no tiene códigos propios.
-
Lo que no hace la CLI de Go:
- la opción de pedir a la red antes de la fecha aunque el reloj diga que no ha llegado, que el spec deja como MAY;
- guardar el anexo junto a las cápsulas y avisar del release al sellar, que son SHOULD del SDK.
Lo demás sí:
decrypt -release FICHERO,decrypt -save-releasey la orden nuevadatekeys release, que pide, verifica y guarda el.dkr.- Recomendación: aprobar. Los SHOULD del SDK van con las recomendaciones de la v0.14 en los clientes, que siguen pendientes.
Lo que cambia en los vectores
-
vectors/release.json, nuevo: 36 objetos, 12 JSON de drand y 7 consultas a un archivo, cada uno con su resultado y el texto de Go. -
releases/, nuevo: los.dkrde las rondas 1000, 1001, 1004 y 2000, y un archivo de las rondas 1000 a 1004 con la 1002 y la 1003 a ceros. -
mutations.json:- cada caso dice ahora si su release está en la mano (
supplied) o viene de la red (network); - «la ronda aún no ha llegado» pasa a abrir con un release en la mano, por la opción B;
- hay cuatro casos nuevos: ese mismo caso desde la red, un release de otra ronda desde la red, y dos objetos de otra cadena.
Son 222 casos, 178 del §64. Ningún otro cambia de resultado.
- cada caso dice ahora si su release está en la mano (
Al aprobar
- Como la v0.14: la fecha de la cabecera,
SpecVersion0.15, el SHA-256, el tagspec-v0.15ymain. - TypeScript y Dart siguen el borrador: el objeto, la fuente en la mano, el paso 9.c, los vectores nuevos y el campo
sourcedel corpus. La guarda de TypeScript exige una prueba para cada fichero nuevo detestdata. - El paquete de la revisión externa se pone al día con los commits nuevos y con la recuperación ya resuelta.
- Sale una
0.4.0de TypeScript.