diff --git a/HANDOFF.md b/HANDOFF.md index be52651..0565cd6 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -1,4 +1,4 @@ -# 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. @@ -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) -**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:** - `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. - **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. +**`App` (`datekeys-ts`), rama `v0.10`, subida (`fc5fb24..289fe71`):** +- `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** -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. -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. -3. **Dart:** la etapa 0 del plan. +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: + - **«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. + - **`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:** - 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. -- 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). **Para trabajar:** lo del apartado del 2-10, y además: diff --git a/PLAN_dart.md b/PLAN_dart.md index bcdaf1d..0dde415 100644 --- a/PLAN_dart.md +++ b/PLAN_dart.md @@ -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`. - 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. ## Decidido (2 de octubre) diff --git a/README.md b/README.md index eae8b51..c277efa 100644 --- a/README.md +++ b/README.md @@ -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-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 | | `docs/` | Este repositorio | ninguno | | `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 | - 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 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. - **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 `. -- **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. - **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. - **Subagentes** de Claude con `model: "opus"`.