diff --git a/HANDOFF.md b/HANDOFF.md index 55df4a7..be52651 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 2 de octubre: revisión y arreglos de la sesión hecha con Sonnet, borrador v0.12) +# 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) 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,7 +6,47 @@ Sirve para retomar sin contexto previo, sea una persona o una sesión de Claude. --- -## Retomar aquí (al cerrar la sesión del 2 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. + +**`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. +- `ea5c6eb`: `locator.json` con los casos del §64 de la v0.11 y la v0.12: + - 217 direcciones: la primera y la última de cada bloque IPv4, con sus vecinas públicas; los bloques IPv6; los nombres locales; los caracteres fuera de RFC 3986; los segmentos `..`; y los CID que no decodifican; + - `mixed`: un localizador con una dirección `http` y otra de NAT64, que se rechazan, y una tercera que se usa; + - `rest_cases`, `extension_cases`, con el localizador de otra ronda, y `plaintext_cases`, con el caso del cambio 7; + - las bases de relleno 3837, 4070, 4094 y 4095 y las del múltiplo siguiente: la spec pide ocho, y la lista del 2-10 daba seis. + + El generador pasa a `internal/testkit/genfixtures/locatorvectors.go` y comprueba cada caso contra Go. +- `e22d358`: `testdata/README.md` al día, y sin marcas *pending* en `docs/traceability.md` ni en el CHANGELOG. El README decía que el release de la ronda 1000 estaba en `quicknet_rounds.json`, y no estaba. +- `601e6d2`, con la **decisión del autor del 5-10** («sí, aplícalo así»): el §44.1 escribe lo que Go ya rechazaba y el texto no decía, y el cambio 6 del §76 y el §64 lo recogen: + - segmentos de 1 a 63 caracteres, sin guion en los extremos; + - el esquema en minúsculas, y `0x` y los nombres locales sin distinguir mayúsculas; + - IPv4 sin ceros a la izquierda y CID en su forma canónica; + - el puerto sin ceros a la izquierda: Go aceptaba `:0443` y `:00443`, y `checkPort` ahora los rechaza. + + `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. + +**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. + +**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. +- 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: +- Un worktree en el scratchpad permite trabajar mientras `check.sh` corre en la copia principal. +- Dos fuzzings a la vez no deben solaparse, porque comparten la caché de fuzzing de `GOCACHE`. + +--- + +## Estado al cerrar la sesión del 2 de octubre (histórico: lo actual está arriba) **Qué pasó.** La sesión que cerró la v0.11 (1-10, de 19:42 a 01:05) corrió con Sonnet 5.5. El 2-10 se revisó todo lo que hizo con seis revisores de Opus: [spec_v0.11/revision_sesion_1_2_octubre.md](spec_v0.11/revision_sesion_1_2_octubre.md). - **Resultado:** nada bloqueante. El núcleo criptográfico estaba bien.