open_cases_test.dart compares the opening of each fixture with each of its
credentials with the record of the fixture itself, not only with what Go
wrote: the content of formats 1 and 2 is its .plaintext, whose SHA-256 the
record gives, and in format 3 each file is the range of BODY that the
record names, with its comment, its declared author and the size of its
area. The changelog counts 1320 tests on the VM.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ -19,7 +19,7 @@ Cambios notables de la librería Dart. El proyecto usa versionado semántico; mi
- **Vectores de Go:**
- `tool/mutation_go_texts.go`, port de `scripts/mutation-go-texts.go` de `datekeys-ts` sobre el `testdata/` de este repositorio, escribe `mutation_texts.json`: el texto de `capsule.Open` y sus comprobaciones, con su detalle, en los 210 casos del corpus. Go en `c531e93` y el corpus de `spec-v0.11` coinciden en el código y el paso de todos, y Go en el tag `spec-v0.11` da el mismo fichero, byte a byte;
- `tool/open_go_vectors.go`, en una exportación de `datekeys-go` porque usa `internal/testkit`, escribe `open_cases.json` (cada fixture con cada credencial, y 117 aperturas de fixtures editados o con otras opciones, en cada paso que el corpus no alcanza, con los sinks y la salida que fallan y el rechazo de `Accept`), `open_heads.json`, `open_notes.json`, `open_inspect.json` (el texto de `capsule.Inspect` en las 5110 mutaciones de `inspect_differential.json`, donde Go en `c531e93` y el fichero también coinciden, y la salida de la CLI con notas públicas) y `open_vectors.g.dart`, con siete fixtures pequeños y una parte de cada fichero para Node.js. Los casos editados se sellan otra vez con las claves y los nonces de los fixtures, así que la salida es la misma en cada ejecución.
- **Pruebas.** Los 24 fixtures se abren con cada credencial que documentan, y sus 24 `.inspect.json` salen byte a byte; los 210 casos del corpus dan el código, el paso, el texto y cada comprobación de Go; los 169 casos de `open_cases.json`, también el estado del sink, el contenido o los ficheros y las extensiones inutilizables; todo, en memoria y desde una fuente que se lee a trozos, con el mismo resultado. Cápsulas de varios MiB, hechas desde los fixtures, prueban el streaming: la salida recibe cada chunk al autenticarse, y un chunk posterior que falla la aborta sin cerrarla. Una cápsula con un stanza para una llave de palabras se abre con ella. 517 pruebas nuevas en la VM y 83 en Node.js: 1319 y 291 en total.
- **Pruebas.** Los 24 fixtures se abren con cada credencial que documentan, y sus 24 `.inspect.json` salen byte a byte; los 210 casos del corpus dan el código, el paso, el texto y cada comprobación de Go; los 169 casos de `open_cases.json`, también el estado del sink, el contenido o los ficheros y las extensiones inutilizables; todo, en memoria y desde una fuente que se lee a trozos, con el mismo resultado. Cápsulas de varios MiB, hechas desde los fixtures, prueban el streaming: la salida recibe cada chunk al autenticarse, y un chunk posterior que falla la aborta sin cerrarla. Una cápsula con un stanza para una llave de palabras se abre con ella. 518 pruebas nuevas en la VM y 83 en Node.js: 1320 y 291 en total.
- **Fallos inyectados**, uno a uno y revertidos: 15. Las pruebas los detectan todos en la VM: un paso fuera de orden, el `capsule_digest` sin comprobar, la salida publicada antes del final del paso 17, el SHA-256 de un fichero sin comparar, el relleno sin comprobar en los formatos 2 y 3, R8 sobre unidades UTF-16, una nota de 1025 bytes aceptada, un fallo de `age` clasificado en la otra fase, el error de una fuente con su propio código en el paso 9, una identity que abre dos stanzas aceptada, un head inválido informado sin leer hasta el final, el autor comprobado antes que el comentario, el sink sin abortar y el prefijo de la inspección un byte corto. En Node.js, 13: el orden del comentario y del autor y el prefijo solo los ven las pruebas de la VM.
- **`tool/open_bench.dart`** mide la apertura: en la VM, una cápsula pequeña tarda unos 50 ms y 64 MiB en streaming, 1,5 s en el formato 1 y 2,6 s en un fichero del formato 3. Las cifras, en el README.
- **Un fallo de dart2js** de Dart 3.13, ajeno a la librería: un objeto que llega al campo de otro a través de `c ? null : objeto` puede perder las escrituras que reciba allí. El README lo explica.