5.5 KiB
Plan: formato 3 en la referencia Go (spec v0.10, entrega 1)
30 de septiembre de 2026. Implementa en datekeys-go, rama v0.10, el texto que el autor aprobó ese día: la entrega 1 del formato 3, con Unicode 18.0.0 y la regla de invisibles. Fuentes: el spec v0.10 de esa rama y spec_v0.10/formato3_diseno.md. Después, datekeys-ts seguirá con su propio plan.
Reglas de trabajo
- Cada paso va en su commit, o en varios, sobre la rama
v0.10, y dejago test ./...en verde. Los pasos 6 y 8 pasan ademásscripts/check.sh. - Nada se sube hasta el paso 8, con la autorización del autor, como en la v0.9.
- Sin dependencias nuevas: las tablas Unicode son código generado, y el generador solo usa la biblioteca estándar.
- Los textos de error siguen el estilo de los actuales, porque
datekeys-tslos copiará byte a byte.
Pasos
| Paso | Contenido | Resultado |
|---|---|---|
| 0 | Datos: los 4 ficheros de Unicode 18.0.0 y los 15 de WindowsBestFit, en .cache/, fuera de git |
Hecho el 30-09: 8,25 MB, con sus SHA-256 |
| 1 | internal/pathrule: generador de tablas y reglas de rutas y de texto |
R2 a R7, R4b, R9, R10 y §29.6, con sus pruebas |
| 2 | capsule: formato 3 en el códec |
Format3, control de versión 3, trama de BODY, security, head, ErrHeadInvalid |
| 3 | Lector: paso 17 del formato 3 y el sumidero | Subpasos 17.1 a 17.8, su precedencia y la lectura hasta EOF |
| 4 | Escritor del formato 3 | EncryptFiles, con dos pasadas; Encrypt queda para los generadores de pruebas |
| 5 | CLI | encrypt -in con carpetas, -comment, -author, -no-mtime; decrypt -out DIR; presentación de §29.7 |
| 6 | Datos de prueba | Fixtures format3_*, vectores de rutas, del head y de security, mutaciones y diferencial |
| 7 | Documentación y versión | README, CHANGELOG, docs/traceability.md, testdata/README.md, SpecVersion |
| 8 | Verificación y cierre | check.sh con fuzzing nuevo, SHA-256 del spec y tag spec-v0.10 con la autorización del autor |
Paso 1. Tablas y reglas
-
Generador (
internal/pathrule/gen): lee.cache/, comprueba el SHA-256 de cada fichero y escribetables.go:- los puntos asignados, para Cn;
Default_Ignorable_Code_Point;- la descomposición canónica completa y la clase de combinación, para NFD;
- el pliegue C y F;
- los caracteres que admiten VS15 y VS16;
- para cada tabla best-fit, sus puntos no ASCII que van a un byte ASCII.
Con una bandera escribirá también el módulo TypeScript.
-
Reglas: una función por regla, con el nombre de la regla en el error, para que Go y TypeScript den el mismo texto. La clave de R7, el árbol de R7 y R9, y las reglas de texto del comentario y del autor.
-
Pruebas: casos del spec y del diseño; NFD contra
golang.org/x/textsolo en las pruebas, que ya es dependencia indirecta, para los puntos que existen en su versión de Unicode.
Paso 2. Códec
Format3;PreludeaceptaVERSION3; el control de versión 3.- La trama de
BODY(§29.2) y sus límites. security(§29.3): el mapa exterior y la evaluación de sus veredictos (§29.7), sin códigos de error.- El head (§29.4): capas 2 a 4, R1 y R8 en la capa 3, y
ErrHeadInvaliden la 4; el objetoHeadenextension.
Paso 3. Lector
- Un sumidero con
Begin(head),Create(i),CommityAbort.Opencon solo unio.Writerfalla tras el paso 2 ante el formato 3, con un error del llamador sin código. - El paso 17 en subpasos, con su precedencia: un fallo de
ageprevalece; si no, el primer subpaso; los códigos distintos deErrIntegritysolo tras leer hasta EOF. Openedgana el head, los ficheros y los veredictos.Inspectacepta el formato 3.
Paso 4. Escritor
EncryptFiles(dst, files, opts): rutas y textos validados, la mtime con su regla, el head con los hashes a cero para medir L, la primera pasada de SHA-256, el sellado, y la segunda pasada, que aborta si un fichero cambió.- Autodecodificación de los tres CBOR (MUST).
Encrypt, de un solo flujo, pasa a escribir el formato 2 solo tras una opción para los generadores de vectores (§62.1 regla 1).
Paso 5. CLI
encrypt -inrepetible, con ficheros y carpetas recorridas conLstat, solo ficheros regulares, y el nombre de cada carpeta como primer segmento;-comment,-authory-no-mtime.decrypt -out DIR:os.Mkdir, el árbol enDIR/.datekeys-*conos.OpenRoot,Root.Renametras el paso 18 yRemoveAllante un fallo. Los formatos 1 y 2 siguen escribiendo un fichero.- La presentación de §29.7: los veredictos, el autor y el comentario con el prefijo y el ancho de la regla, y los veredictos repetidos.
Paso 6. Datos de prueba
- Fixtures:
format3_single,_tree,_comment_only,_bloque256,_time_and_key_portable,_area_1024,_security_v2,_signature_unsupportedy_seal_unsupported. - Vectores:
paths.json,path_fold.json,head_schema.json,security.json;cbor.jsoncon el control de versión 3. - Mutaciones: las 33 de las dos primeras listas de §64 sobre el formato 3, la lista del formato 3 y los cambios de
VERSION; el diferencial gana los bloques del formato 3.
Paso 7. Documentación
README y README.es, CHANGELOG, docs/traceability.md y testdata/README.md. SpecVersion pasa a 0.10 cuando el spec se cierre.
Paso 8. Cierre
scripts/check.sh 60s con los objetivos de fuzzing nuevos (el head, security y las rutas), govulncheck, el SHA-256 del spec en spec/README.md, y el tag spec-v0.10 con la autorización del autor.