From dfb7d1ea4d0e2444ede5da75f0d3d323474f1790 Mon Sep 17 00:00:00 2001 From: dev Date: Wed, 30 Sep 2026 18:38:37 +0200 Subject: [PATCH] Format 3 design: the invisible-character rule the author approved R4b and the text rule keep invisible sequences out of paths, comments and the declared author, after the warning of Unicode 18.0.0. Co-Authored-By: Claude Opus 5.5 --- spec_v0.10/formato3_diseno.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/spec_v0.10/formato3_diseno.md b/spec_v0.10/formato3_diseno.md index 46e174e..dd5c60a 100644 --- a/spec_v0.10/formato3_diseno.md +++ b/spec_v0.10/formato3_diseno.md @@ -249,6 +249,7 @@ Las claves 2 y 3 de `security` son cadenas de bytes con su propio CBOR dentro: e - **Comentario:** prohibidos U+0000–0008, U+000B–001F (el escritor convierte CR LF y CR en LF), U+007F–009F, U+202A–202E, U+2066–2069, U+2028, U+2029, U+FEFF y los no-caracteres. - **Autor:** lo mismo, más TAB, LF, U+061C, U+200E y U+200F, sin U+0020 en los extremos. +- **Invisibles:** ni el comentario ni el autor llevan puntos `Default_Ignorable_Code_Point` salvo la lista blanca de R4, y esa solo donde R4b la admite. Quedan fuera las etiquetas y los selectores de variante sueltos, con los que se esconde texto que un modelo de IA sí lee. Ningún texto ni ruta puede llevar ESC o C1 a un terminal. @@ -281,6 +282,7 @@ R1 y R8 son capa 3 sobre todo el array; las demás, capa 4. Así, [«b/..», «a - todo punto con la propiedad `Default_Ignorable_Code_Point` de Unicode 18.0.0, salvo la lista blanca: ZWNJ, ZWJ, VS15 y VS16, que hacen falta en emoji y en varias escrituras. La propiedad cubre los controles bidi (U+061C, U+200E, U+200F, U+202A–202E, U+2066–2069), U+00AD, U+034F, U+200B, U+2060–206F, U+3164, U+FEFF, los demás selectores de variante y las etiquetas U+E0000–E007F, que permiten nombres visualmente idénticos; - los no-caracteres y todo Cn (sin asignar) de Unicode 18.0.0, que una versión futura podría plegar o volver ignorable; - U+F000–U+F0FF, del área de uso privado: Cygwin, WSL y el SMB de macOS representan con ellos los caracteres prohibidos en Windows, así que «informe», U+F03A y «anexo» se verían allí como «informe:anexo». +- **R4b.** Los puntos de la lista blanca solo van donde su uso es conforme: VS15 y VS16 justo detrás de un carácter para el que `emoji-variation-sequences.txt` define esa secuencia, y ZWJ y ZWNJ nunca al principio ni al final del segmento, ni dos seguidos. Así ningún nombre lleva secuencias invisibles, que según Unicode 18 sirven para esconder datos y atacar aplicaciones de IA. - **R5.** Ningún segmento empieza por U+0020 ni termina en U+0020 o '.'. - **R6.** El segmento hasta el primer '.', sin U+0020 finales y sin distinguir mayúsculas ASCII, no puede ser CON, PRN, AUX, NUL, CONIN$, CONOUT$, COM0–9, LPT0–9, COM¹²³ ni LPT¹²³. - **R6b.** Alias 8.3 (hallazgo 9). Se rechaza un segmento que, contando puntos de código, cumple las tres condiciones: @@ -298,7 +300,7 @@ R1 y R8 son capa 3 sobre todo el array; las demás, capa 4. Así, [«b/..», «a - **R9.** Como mucho 65535 carpetas implícitas. - **R10.** Ningún primer segmento cuya clave de R7 empiece por «.datekeys-». La CLI escribe el árbol en `DIR/.datekeys-*` antes de moverlo, y una entrada con ese nombre chocaría con él (hallazgo 10). -**Tablas.** Un generador en `datekeys-go` las produce desde UCD 18.0.0 (UnicodeData, DerivedCoreProperties, CaseFolding y las descomposiciones) y desde WindowsBestFit, y emite código para los dos repos; sus suites comprueban el digest. MUST NOT usarse `normalize`, `toLowerCase`, las clases `\p{…}` de las expresiones regulares, el paquete `unicode` ni x/text: dependen de la versión de Unicode de cada motor. +**Tablas.** Un generador en `datekeys-go` las produce desde UCD 18.0.0 (UnicodeData, DerivedCoreProperties, CaseFolding, emoji-variation-sequences y las descomposiciones) y desde WindowsBestFit, y emite código para los dos repos; sus suites comprueban el digest. MUST NOT usarse `normalize`, `toLowerCase`, las clases `\p{…}` de las expresiones regulares, el paquete `unicode` ni x/text: dependen de la versión de Unicode de cada motor. **Escritor.** @@ -537,6 +539,7 @@ El autor cerró el 30-09 las diez preguntas abiertas, todas con la recomendació 8. Un único fichero dentro de una carpeta se descarga directamente, con su nombre, y el ZIP con la carpeta es una opción (apartado 5). No cambia el formato. 9. El lector acepta una cápsula sin ficheros (C = 0); el escritor exige un fichero o un comentario. 10. Un '-' inicial en una ruta solo da un aviso. +11. Todo el texto del creador, sean rutas, comentario o autor, sigue la regla de invisibles: R4b del apartado 3 y la regla del texto del apartado 2. El autor la aprobó el 30-09 por la noche, a raíz del aviso de Unicode 18 sobre los selectores de variante. ---