feat(m3): endurecer decoder de yrs contra amplificación R6 (CHARTER-08) - #24
Merged
Conversation
…ación R6) El job fuzz (informativo) destapó la amplificación de memoria del decoder de yrs (R6) en la ruta CRUDA del FFI (weft_doc_load/apply_update), NO capeada por FU-002 (que mitigó R6 solo en la capa de relay). Un consumidor que ingiera bytes CRDT no confiables directamente a la API podría dispararla. Dos partes: (a) nota de seguridad en GOVERNANCE/README, (b) evaluar bump de yrs con validación de longitud o guard de tamaño a nivel FFI. Mini-charter, no urge (no se publica ya). Registro hand-add + recount (§13). Backlog: 4 open / 14 total. A abordar con FU-006/FU-010/FU-012 (mini-charters). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
FU-014 como charter propio. Endurece la ruta directa del FFI ante la amplificación de memoria del decoder de yrs (R6), no capeada por FU-002 (relay). Basado en la investigación upstream 2026-07-14: Update::decode ya usa try_reserve, pero id_set.rs:91 (delete sets) y state_vector.rs:120 (state vectors) siguen con with_capacity sin acotar (en 0.27.2 y 0.27.3). Plan 4 partes: (a) PR upstream de try_reserve a y-crdt (fork StrangeDaysTech/y-crdt), (b) doc del caveat de ingesta directa, (c) fuzz de regresión export_since, (d) adopción vía bump R16 → diferida a FU-015. Cierre INDEPENDIENTE del merge upstream (cierra con nuestros entregables + PR enviado). Effort M. Branch apila chore/fu-014-register (piggyback). Validado (20 docs). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Endurece la ruta directa del FFI ante la amplificación de memoria del decoder de yrs (R6, allocation-bomb), no capeada por FU-002 (relay). La corrección canónica vive upstream; este repo aporta la prueba de regresión y la documentación del caveat. - (a) PR upstream y-crdt/y-crdt#639: extiende el patrón try_reserve de yrs a la clase completa (5 sitios, ampliado de 2 por revisión de completitud: state_vector, any Map/Array, awareness → try_reserve; id_set SmallVec → grow-on-push). Externo al repo; link en telemetría. - (b) Nota de seguridad del caveat de ingesta directa no confiable en GOVERNANCE.md §Seguridad + pointer en README.md (ship-now). - (c) Fuzz target de regresión export_since (ruta residual state_vector::decode) + [[bin]] + step informativo en ci.yml. Validado: seed [255,255,255,122] → RSS ~553 MB, error limpio (exit 0, sin abort). - (d) FU-015 registrado (adopción vía bump R16); FU-014 cerrado. CHARTER-08 status → in-progress; scope reconciliado 2→5 sitios. AILOG-2026-07-14-002 + AIDEC-2026-07-14-001 (risk medium, revisados). Verificación: dotnet test Weft.sln -c Release (124/124, 0 fallos); fuzz build export_since verde; suite del fork y-crdt verde (377+34). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Telemetría de cierre + status → closed. Los 4 entregables confirmados: (a) PR upstream y-crdt/y-crdt#639 enviado (5 sitios), (b) doc del caveat, (c) fuzz de regresión export_since verde en CI, (d) FU-015 registrado. No cierra hito (sin auditoría externa). CI del PR #24 verde. La adopción vía bump (FU-015) dispara al mergear+publicar upstream. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
CHARTER-08 — Endurecer el decoder de yrs contra amplificación de memoria (R6)
Endurece la ruta directa del FFI ante la amplificación de memoria del decoder de yrs (R6, allocation-bomb), que FU-002 (cerrado) mitigó solo en la capa de relay. La corrección canónica vive upstream; este repo aporta la prueba de regresión y la documentación del caveat. Cierra FU-014.
Entregables
StrangeDaysTech/y-crdt). Extiende el patróntry_reserveque yrs ya estableció enUpdate::decodea la clase completa de allocation-bomb por prefijo de longitud. Una revisión de completitud durante la implementación amplió el alcance de los 2 sitios del Charter a los 5 reales:state_vector.rs,any.rs(Map + Array),sync/awareness.rs→try_reserve(len)?(varianteError::NotEnoughMemoryexistente).id_set.rs(SmallVec) → grow-on-push (sutry_reserveda otro tipo de error → evita ampliar el enum público).GOVERNANCE.md §Seguridad+ pointer enREADME.md— ingesta directa de bytes CRDT no confiables fuera del relay → cap de tamaño + límite de memoria del proceso.export_since(ruta residualstate_vector::decode) +[[bin]]+ step informativo enci.yml. Validado: seed[255,255,255,122]→ RSS ~553 MB, error limpio (exit 0, sin abort) en glibc.Verificación
dotnet test Weft.sln -c Release→ 124/124, 0 fallos (8 Redis omitidos sin servidor local).cargo +nightly fuzz build export_sinceverde; el seed alcanza el residual.y-crdtverde con el fix + 5 tests (377 + 34).straymark charter drift CHARTER-08 --range origin/main..HEAD→ limpio.Gobernanza
AILOG-2026-07-14-002 + AIDEC-2026-07-14-001 (
risk_level: medium, revisados). CHARTER-08 scope reconciliado 2→5 sitios (§Context/§Scope). El cierre del Charter depende solo de nuestros entregables (fuzz + doc + PR enviado); la adopción es FU-015.🤖 Generated with Claude Code