# Handoff DateKeys, 26 de septiembre de 2026 (actualizado al cerrar la sesión del 5 de octubre: Go y TypeScript al día con el borrador v0.12, y las etapas 0 y 1 de Dart)
# Handoff DateKeys, 26 de septiembre de 2026 (actualizado el 6 de octubre: las etapas 2 a 5 de Dart, hechas)
Sirve para retomar sin contexto previo, sea una persona o una sesión de Claude. Las secciones 0 a 4, al final, son el historial; el estado actual es este apartado.
Sirve para retomar sin contexto previo, sea una persona o una sesión de Claude. Las secciones 0 a 4, al final, son el historial; el estado actual es este apartado.
@ -6,35 +6,36 @@ Sirve para retomar sin contexto previo, sea una persona o una sesión de Claude.
---
---
## La segunda sesión del 5 de octubre: etapas 2 y 3 de Dart
## La segunda sesión del 5 de octubre: etapas 2 a 5 de Dart
Corrió en Opus 5.5. Se abrió en `App` y a los pocos minutos pasó a la raíz con la herramienta de carpetas de la app, sin cerrarse. Hizo los puntos 1 a 4 de la lista de abajo:
Corrió en Opus 5.5, del 5 al 6 de octubre. Se abrió en `App` y a los pocos minutos pasó a la raíz con la herramienta de carpetas de la app, sin cerrarse. Hizo los puntos 1 a 4 de la lista de abajo y, a petición del autor, las etapas 4 y 5 de Dart:
- **Repos:** comprobados; estaban como dice la lista.
- **Repos:** comprobados; estaban como dice la lista.
- **Dart, etapa 2:** hecha y revisada, commits `0c21f55` a `82fa714`.
- **Dart, etapas 2 y 3**, en paralelo: la 2 en `v0.11` y la 3 en un worktree, integrada encima.
- **Dart, etapa 3:** el autor pidió adelantarla, y se hizo en paralelo con la 2, en un worktree aparte. Está revisada e integrada encima de la 2, commits `cdd1c89` a `b81bdfa`. El worktree y su rama ya están borrados.
- **`datekeys-go`:** el generador de las tablas de Unicode escribe también una librería de Dart (`internal/pathrule/gen -dart`). Es `c531e93` en `v0.12`, subido con permiso del autor. La salida de TypeScript y `tables.go` no cambian.
- **Dart, etapa 4**, en tres partes: 4a, las rutas, los textos y la llave de palabras; 4b, los formatos; 4c, el head, la nota, la inspección y la apertura de los formatos 1 a 3.
- **Dart, etapa 5**, en tres partes:
- 5a, el lector CMS, ECDSA y RSA;
- 5b, `testdata` en la v0.12, los compromisos, `SECURITY_CBOR`, `alg` 1 y los veredictos;
- 5c, `alg` 2 y `seal_type` 2 en los veredictos.
Las revisiones de las dos etapas están en [PLAN_dart.md](PLAN_dart.md), al final; ninguna encontró fallos.
Cada parte la hizo un agente Opus, y la sesión la revisó contra Go, la integró y pasó el gate. Ninguna revisión encontró fallos. Las revisiones están en [PLAN_dart.md](PLAN_dart.md), al final.
**Estado al cerrar:**
**Estado al cerrar:**
- `datekeys-dart`: rama `v0.11` en `b81bdfa`, limpia, solo en local. El gate pasa, con 367 pruebas en la VM, más una aplazada, y 113 en Node.
- `datekeys-dart`: rama `v0.11` en `a14a3b8`, limpia, solo en local, sin remoto. El gate pasa con 1 572 pruebas en la VM y 332 en Node.
- `datekeys-go` y `App` no se tocaron.
- La librería Dart ya inspecciona y abre cápsulas de los formatos 1 a 3, también grandes y en streaming, con todas sus credenciales, y evalúa la firma y el sello como Go.
- `testdata` está en `c531e93`, el borrador v0.12 sin aprobar; `specVersion` sigue en 0.11.
- `datekeys-go`: `v0.12` en `c531e93`, subida. `App` no se tocó.
- G: tiene 26 GB libres desde el 5-10, porque el autor liberó unos 24 GB.
- G: tiene 26 GB libres desde el 5-10, porque el autor liberó unos 24 GB.
**Siguiente:**
**Siguiente:**
1. **Dart, etapa 5**, pedida por el autor el 5-10 («sigue con la etapa 5»). Está en marcha.
1. **Dart, etapa 6:** el escritor, con el formato 3, el área de 32 KiB, `time_only` y `time_and_key`, la llave de palabras y la nota pública. Antes conviene decidir cómo se cifra el stanza tlock sin que el tiempo de `BigInt` revele sigma y r (README de `datekeys-dart`).
2. **Dart, etapa 7:** el localizador y el sobre, y las claves de autor `dkauthor1…` con su fichero cifrado con scrypt.
La etapa 4 está completa: 4a, 4b y 4c hechas, revisadas e integradas en `v0.11`, hasta `8e0e993`. La salida `-dart` del generador de tablas está en `c531e93` de `datekeys-go`, subido.
3. Lo que sigue abierto de la lista de abajo:
La etapa 5 se reparte en 5a, 5b y 5c, descritas en [PLAN_dart.md](PLAN_dart.md), al final. La 5a y la 5b ya están hechas, revisadas e integradas en `v0.11`, hasta `6ba6893`. Con la 5b, `testdata` pasó a `c531e93`, el borrador v0.12. La 5c corre en la copia principal. Si la sesión se cierra a medias:
1. mira qué commits hay en `v0.11` después de `6ba6893`;
2. revísalos;
3. pasa el gate;
4. si quedó a medias, relanza la 5c con el esquema de [PLAN_dart.md](PLAN_dart.md).
2. Lo que sigue abierto de la lista de abajo:
- la aprobación del borrador v0.12 y la medida del área de 32 KiB, que el autor dejó para luego;
- la aprobación del borrador v0.12 y la medida del área de 32 KiB, que el autor dejó para luego;
- el TypeScript sin urgencia;
- el TypeScript sin urgencia;
- las observaciones sin decisión.
- las observaciones sin decisión.
3. Medir BLS12-381, PBKDF2 y scrypt en un móvil de gama media, cuando haya app.
4. **Medir en un móvil de gama media,** cuando haya app: BLS12-381, PBKDF2, scrypt y la apertura.
5. **Un posible fallo de dart2js en Dart 3.13,** que encontró el agente de la 4c: un objeto que llega al campo de otro a través de `c ? null : objeto` puede perder sus escrituras. Está documentado en el README de `datekeys-dart`. Reportarlo al equipo de Dart sería publicar fuera: solo con permiso del autor.
## Retomar aquí (al cerrar la sesión del 5 de octubre)
## Retomar aquí (al cerrar la sesión del 5 de octubre)
@ -217,6 +217,19 @@ La revisión de la sesión comparó con la librería criptográfica de Go:
El resto del lector lo cubren los vectores de Go.
El resto del lector lo cubren los vectores de Go.
Una observación sin decisión: según el agente, `cms.ParseCert` de Go no comprueba que el certificado sea DER y el de TypeScript sí. Puede ser otra diferencia de paridad entre los dos, si llega a darse dentro de una firma.
Según el agente, `cms.ParseCert` de Go no comprueba que el certificado sea DER, y el de TypeScript sí. La sesión lo comprobó: el `parse` de `internal/cms` pasa `der.Check` a toda la firma y a todo el token antes de leer sus certificados, así que la diferencia no se puede dar dentro de una cápsula.
**La 5c corre desde el 5-10** en la copia principal, sobre `6ba6893`: `securitycms.dart`, que pone `alg` 2 y `seal_type` 2 en los veredictos.
**La 5c, hecha y revisada el 5-10:** `6ad251b` a `a14a3b8`. Con ella la etapa 5 queda completa. El gate pasa con 1 572 pruebas en la VM y 332 en Node.
Qué hizo:
- **`securitycms.dart`:** `cmsReader`, el port de `evaluateCMS`, `signerLine` y `evaluateSeal` de `signature2.go`. Es el evaluador de CMS por defecto, así que abrir una cápsula evalúa su área de seguridad entera como Go.
- **Exportaciones:**`encodeSigners` y `maxSigners`.
Resultados:
- coinciden con Go los 135 casos de `security_cms.json`, los 24 de `security.json`, las 161 partes que dejó la 5b y 760 casos nuevos de Go;
- `format3_signed_cms` y `format3_sealed` abren con los veredictos de sus registros;
- las pruebas detectaron los 12 fallos inyectados, en la VM y en Node.
El encargo decía que la validez del certificado se comprueba en la hora de la ronda. Era un error del encargo: Go y el §29.10, paso 6, la comprueban en t, la hora del sello. El agente siguió a Go.
La revisión de la sesión comparó `securitycms.dart` con `signature2.go`: el orden de las comprobaciones, los resultados de cada firmante, F2, F5 y F6, S1 a S5, y la hora cero de Go como «sin hora de ronda». No encontró fallos.