- datekeys-ts v0.10 at 289fe71, pushed: the rule of section 72, testdata
at 601e6d2, the reader of certificates and the texts of v0.12, with a
differential of 63,623 areas and no difference.
- datekeys-dart: the repository, stage 0 (5aa5eed) and stage 1 (da63bc3
to 10b0895), local; README and PLAN_dart.md say so, and that Flutter is
installed.
- Two decisions for the author: "with text" in section 29.7, and Node in
the gate of Dart.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Handoff DateKeys, 26 de septiembre de 2026 (actualizado al cerrar la sesión del 5 de octubre: lo que faltaba de Go para la v0.12 y las reglas de las direcciones del localizador)
# 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)
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.
@ -8,7 +8,7 @@ Sirve para retomar sin contexto previo, sea una persona o una sesión de Claude.
## Retomar aquí (al cerrar la sesión del 5 de octubre)
## Retomar aquí (al cerrar la sesión del 5 de octubre)
**Qué pasó.** Una sesión en Opus, abierta otra vez en `App`, hizo el punto 2 de la lista del 2-10, «Go, lo que falta», y el autor decidió una ampliación del borrador v0.12.
**Qué pasó.** Una sesión en Opus, abierta otra vez en `App`, hizo los puntos 2, 3 y 4 de la lista del 2-10: lo que faltaba de Go, la segunda parte del TypeScript y las etapas 0 y 1 de Dart. El autor decidió además una ampliación del borrador v0.12. El trabajo grande se repartió entre agentes Opus en worktrees y repos aparte, y cada resultado se revisó e integró en la sesión.
**`datekeys-go`, rama `v0.12`, subida:**
**`datekeys-go`, rama `v0.12`, subida:**
- `da9fd2c`: arreglo editorial del borrador. Faltaba una línea en blanco antes de cinco `---`, y dos párrafos, el final del §70 y el del §72, se veían como títulos. La v0.11 etiquetada tiene el mismo fallo y no se toca.
- `da9fd2c`: arreglo editorial del borrador. Faltaba una línea en blanco antes de cinco `---`, y dos párrafos, el final del §70 y el del §72, se veían como títulos. La v0.11 etiquetada tiene el mismo fallo y no se toca.
@ -29,15 +29,47 @@ Sirve para retomar sin contexto previo, sea una persona o una sesión de Claude.
`locator.json` pasa a 247 direcciones.
`locator.json` pasa a 247 direcciones.
- **Verificación:**`scripts/check.sh 60s` completo sobre `e22d358`, y sobre `601e6d2``check.sh` sin fuzzing y `fuzz.sh 60s`, los 25 objetivos: todo limpio. Cobertura de `capsule`, 92,2 %. govulncheck da los dos avisos de siempre, sin llamada alcanzable.
- **Verificación:**`scripts/check.sh 60s` completo sobre `e22d358`, y sobre `601e6d2``check.sh` sin fuzzing y `fuzz.sh 60s`, los 25 objetivos: todo limpio. Cobertura de `capsule`, 92,2 %. govulncheck da los dos avisos de siempre, sin llamada alcanzable.
- `997f331`: la regla de los codificadores del §72 (`checkWrite` en `extension.ts`, con `NOTE_ID` y `CAPSULE_ID`), que aplican el escritor de cápsulas y el de `.dkk` con los textos de Go; `checkNoteData` y `unusableNote`. Comprobado también contra el `testdata` de `spec-v0.11`.
- `95329ee`, el borrador v0.12, en un solo commit porque nada pasaba por separado:
- `testdata` en `601e6d2`; `SPEC_VERSION` sigue en 0.11;
- el lector de certificados campo a campo, los OID por bytes, los SET OF con repetidos y los casos límite: T2, T6, T7, T8 y lo de TypeScript de E7, E8 y E9;
- los textos de los veredictos de la v0.12: E2, E3 y E4;
- `security.json` y los 135 casos de `security_cms.json`, comparados campo a campo, con sus líneas;
- los textos de las 218 mutaciones y los vectores IBE de los fixtures nuevos;
- `note.json`, y la nota pública en `inspect`, que la lee bajo demanda.
El port del CMS lo hizo un agente: un diferencial suyo de 63 623 áreas no dio ninguna diferencia con Go, y el código anterior difería en 13 296 de 42 986.
- `289fe71`: README y CHANGELOG.
- **Verificación:**`npm run verify` (7 759 pruebas, cobertura y build con sus guardas) y `testdata:check` contra Go.
**`datekeys-dart`, rama `v0.11`, solo local (no tiene remoto):**
- `5aa5eed`, etapa 0:
- el paquete `datekeys`, Dart 3.13, sin publicar;
- `testdata` en `spec-v0.11`, 124 ficheros, con el mismo `SOURCE.json` que escribe el TypeScript;
- `tool/sync_testdata.dart`, pruebas de integridad y de versión, y `tool/check.sh` como gate;
- licencia Apache-2.0;
- dependencias: `crypto` en ejecución y `test` en desarrollo, aprobado por el autor el 5-10.
- `da63bc3` a `10b0895`, etapa 1, también de un agente:
- errores del §69;
- bytes: UTF-8 estricto propio, porque el `Utf8Decoder` de Dart quita un U+FEFF inicial; y el `%q` de Go con su tabla `IsPrint`;
- el códec CBOR de `codec.go`;
- el DER de la v0.12.
Los enteros son exactos en la VM y en la web: un `int` hasta 2^53 − 1 y un `BigInt` por encima. Hay 169 pruebas en la VM y 56 también en Node, y una comparación con Go de 263 611 casos no dio ninguna diferencia.
**Siguiente, en orden**
**Siguiente, en orden**
1. **El autor aprueba el borrador v0.12:** §76, cambios 1 a 9, con el 6 ampliado el 5-10. Sigue abierto si se mide antes el área de 32 KiB con firmas reales. Con la aprobación: el SHA-256 en `spec/README.md`, `SpecVersion` 0.12, el tag `spec-v0.12` y `main` avanzado sin fusión, siempre con permiso del autor.
1. **El autor aprueba el borrador v0.12:** §76, cambios 1 a 9, con el 6 ampliado el 5-10. Sigue abierto si se mide antes el área de 32 KiB con firmas reales. Con la aprobación: el SHA-256 en `spec/README.md`, `SpecVersion` 0.12, el tag `spec-v0.12` y `main` avanzado sin fusión, siempre con permiso del autor. Antes, dos decisiones suyas:
2. **TypeScript, segunda parte:** el punto 3 de la lista del 2-10, sin cambios. El `locator.json` nuevo llega con la sincronización; el TypeScript solo comprueba que nombra la spec, porque aún no tiene el localizador.
- **«Con texto» en el §29.7.** El texto pide `givenName` y `surname` «si tiene uno de cada», y el `organizationName` del emisor «si no tiene» `commonName`. Go exige además que tengan texto, y trata un `commonName` sin texto o repetido como si faltara; el TypeScript sigue a Go. Recomendado: escribirlo en el borrador.
3. **Dart:** la etapa 0 del plan.
- **`dart test -p node` en el gate de Dart.** Comprobaría en cada commit que los enteros son exactos en la web; añade unos 12 s, y Node, que ya hace falta para el TypeScript. Recomendado: sí.
2. **Dart, etapa 2:** las primitivas, según [PLAN_dart.md](PLAN_dart.md).
3. **TypeScript, sin urgencia:** el localizador, que aún no está portado; que la página muestre la nota pública, que ya lee `inspect`; y lo pendiente del §2.5.
**Observaciones del 5-10, sin decisión:**
**Observaciones del 5-10, sin decisión:**
- El error de una nota pública con un tabulador dice «in the declared author», porque la nota usa las reglas del autor declarado. Está en `note.json` y el TypeScript lo copia: cambiarlo exige tocar los dos lados.
- El error de una nota pública con un tabulador dice «in the declared author», porque la nota usa las reglas del autor declarado. Está en `note.json` y el TypeScript lo copia: cambiarlo exige tocar los dos lados.
- `testdata` no tiene vectores compartidos de la llave de palabras. El §64 de la v0.11 los pide, y solo están en las pruebas de Go (`wordkey.TestKeyVector`). TypeScript y Dart los van a necesitar.
- `testdata` no tiene vectores compartidos de la llave de palabras. El §64 de la v0.11 los pide, y solo están en las pruebas de Go (`wordkey.TestKeyVector`). TypeScript y Dart los van a necesitar.
- A G: le quedan 1,6 GB libres.
- A G: le quedan 1,5 GB libres.
- Flutter está instalado en `C:\dev\flutter`, y su Dart 3.13.0 es el `dart` del PATH.
- La carpeta sigue llamándose `App`, y `enquiry.php` sigue en la raíz (§0).
- La carpeta sigue llamándose `App`, y `enquiry.php` sigue en la raíz (§0).
**Para trabajar:** lo del apartado del 2-10, y además:
**Para trabajar:** lo del apartado del 2-10, y además:
@ -9,7 +9,9 @@ Un paquete Dart **puro**: sin Flutter y sin plataforma.
- Funciona en la VM de Dart, en Flutter (móvil y escritorio) y en la web si no usa `dart:io`.
- Funciona en la VM de Dart, en Flutter (móvil y escritorio) y en la web si no usa `dart:io`.
- Es la tercera implementación del spec. Como la de TypeScript, **no genera datos de prueba propios**: se contrasta con el `testdata/` de `datekeys-go`, sincronizado a un commit fijo.
- Es la tercera implementación del spec. Como la de TypeScript, **no genera datos de prueba propios**: se contrasta con el `testdata/` de `datekeys-go`, sincronizado a un commit fijo.
Estado de la máquina: está instalado el SDK de Dart 3.13. No hay Flutter, y la librería no lo necesita; la app sí.
Estado de la máquina: el 5-10, Flutter está instalado en `C:\dev\flutter`, y su Dart 3.13.0 es el `dart` del PATH. La librería no necesita Flutter; la app sí.
**Hecho:** la etapa 0 (`5aa5eed`) y la etapa 1 (`da63bc3` a `10b0895`), el 5-10, en la rama `v0.11` de `datekeys-dart`. El estado de cada etapa está en su README.
@ -12,7 +12,7 @@ Para retomar el trabajo, lee [HANDOFF.md](HANDOFF.md): el estado de cada repo, l
|---|---|---|
|---|---|---|
| `datekeys-go/` | Especificación del protocolo (`spec/`), CDDL, testdata compartido e implementación de referencia en Go: librería y CLI | `go/DateKeys` |
| `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ágina `/inspect` | `go/DateKeys-App` |
| `datekeys-ts/` | Implementación en TypeScript y página `/inspect` | `go/DateKeys-App` |
| `datekeys-dart/` | Librería Dart para la app Flutter. **Todavía no existe**: el plan está en [PLAN_dart.md](PLAN_dart.md) | ninguno |
| `datekeys-dart/` | Librería Dart para la app Flutter, según [PLAN_dart.md](PLAN_dart.md). Rama `v0.11`: etapas 0 y 1 hechas (el paquete, `testdata/` en `spec-v0.11`, errores, CBOR y DER) | ninguno |
| `web/` | Landing de datekeys.com, con `api/enquiry.php` | ninguno |
| `web/` | Landing de datekeys.com, con `api/enquiry.php` | ninguno |
| `docs/` | Este repositorio | ninguno |
| `docs/` | Este repositorio | ninguno |
| `brand/` | Logos | no es un repo |
| `brand/` | Logos | no es un repo |
@ -20,7 +20,7 @@ Para retomar el trabajo, lee [HANDOFF.md](HANDOFF.md): el estado de cada repo, l
| `archive/spec-drafts/` | Borradores v0.1 a v0.8.1 de la especificación, anteriores a su entrada en git | no es un repo |
| `archive/spec-drafts/` | Borradores v0.1 a v0.8.1 de la especificación, anteriores a su entrada en git | no es un repo |
- Los remotos están en el Gitea privado `g.activething.com`. Sus nombres no coinciden con los de las carpetas y no se cambian. El servidor no es del autor: no se propone ningún cambio en él.
- Los remotos están en el Gitea privado `g.activething.com`. Sus nombres no coinciden con los de las carpetas y no se cambian. El servidor no es del autor: no se propone ningún cambio en él.
- La integración continua es el gate local de cada repo: `scripts/check.sh` en `datekeys-go` y `npm run verify` en `datekeys-ts`.
- La integración continua es el gate local de cada repo: `scripts/check.sh` en `datekeys-go`, `npm run verify` en `datekeys-ts` y `tool/check.sh` en `datekeys-dart`.
- La especificación está en `datekeys-go` porque cada cambio normativo va en el mismo commit que su caso reproducible en Go y sus fixtures. Pasará a un repo propio al publicarla (traducción, revisión externa, espejo público).
- La especificación está en `datekeys-go` porque cada cambio normativo va en el mismo commit que su caso reproducible en Go y sus fixtures. Pasará a un repo propio al publicarla (traducción, revisión externa, espejo público).
- La aplicación de producto, cuando exista, tendrá su propia carpeta.
- La aplicación de producto, cuando exista, tendrá su propia carpeta.
@ -30,7 +30,7 @@ Para retomar el trabajo, lee [HANDOFF.md](HANDOFF.md): el estado de cada repo, l
- **Spec:** en español, estilo RFC 2119. Todo cambio normativo se registra en §76 con su caso reproducible, y se actualiza el SHA-256 de `spec/README.md`. Una versión cerrada con tag no cambia: el cambio siguiente abre una versión nueva.
- **Spec:** en español, estilo RFC 2119. Todo cambio normativo se registra en §76 con su caso reproducible, y se actualiza el SHA-256 de `spec/README.md`. Una versión cerrada con tag no cambia: el cambio siguiente abre una versión nueva.
- **Idioma:** la spec y los documentos de este repo, en español. Código, comentarios y mensajes de commit, en inglés.
- **Idioma:** la spec y los documentos de este repo, en español. Código, comentarios y mensajes de commit, en inglés.
- **Commits** con `Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>`.
- **Commits** con `Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>`.
- **Testdata:**`datekeys-ts/testdata` solo se actualiza desde `datekeys-go`, con `scripts/sync-testdata.mjs`, y en `datekeys-ts` nunca se generan fixtures. Una guarda falla si aparece un fichero de `testdata` que ningún test ejecuta.
- **Testdata:**`datekeys-ts/testdata` solo se actualiza desde `datekeys-go`, con `scripts/sync-testdata.mjs`, y `datekeys-dart/testdata` con `tool/sync_testdata.dart`. En ninguno de los dos se generan fixtures. En `datekeys-ts`, una guarda falla si aparece un fichero de `testdata` que ningún test ejecuta.
- **Textos de error:** si cambia un texto de error de Go en los pasos 1 a 8, el TypeScript lo sigue. Hoy coinciden byte a byte.
- **Textos de error:** si cambia un texto de error de Go en los pasos 1 a 8, el TypeScript lo sigue. Hoy coinciden byte a byte.
- **Precedencia de errores (§69.1):** trama; tipo y versión; perfil CBOR y CDDL; campos con código propio, en orden de clave. Entre objetos decide el orden de pasos de §63.
- **Precedencia de errores (§69.1):** trama; tipo y versión; perfil CBOR y CDDL; campos con código propio, en orden de clave. Entre objetos decide el orden de pasos de §63.