feat(m3): client-id determinista en el FFI de yrs + gate de paridad cross-impl (CHARTER-09) - #25
Merged
Merged
Conversation
…ross-impl (CHARTER-09) Cierra FU-012: expone la siembra de client_id determinista en el FFI de yrs y promueve el gate determinism-yjs de informativo a aserción per-PR bloqueante. R1 se cumple: yrs produce exports BYTE-IDÉNTICOS a Yjs (ASCII y unicode) → determinismo por formato (P-III), no por versión de yrs. - FFI: weft_doc_new_with_client_id (guard client_id < 2^53 por el encoding de 53 bits de yrs 0.26+) + ABI bump v1→v2 + header. Binding: YrsEngine.CreateDoc( ulong) concreto (no en ICrdtEngine; alcance yrs-only) + ExpectedAbiVersion 2. - Gate: aserción de paridad per-PR en Weft.Determinism.Tests (yrs SHA-256 == golden de Yjs comprometido, ASCII + unicode). Job Node en release.yml emite ambos + self-checkea el golden (caza drift de Yjs). - Corpus unicode (índices UTF-16, R6 — confirma paridad de surrogate pairs). - FU-012 closed; FU-016 registrado (promoción cross-engine Loro vía set_peer_id). AILOG-2026-07-15-001 + AIDEC-2026-07-15-001 (risk medium, revisados). Verificación: dotnet 126/126, cargo 7/7, npm self-check golden verde. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…paridad (FU-012) Telemetría de cierre validada + status → closed. Los 7 entregables confirmados; R1 (paridad byte-idéntica yrs↔Yjs) SE CUMPLE (ASCII + unicode) → gate bloqueante per-PR. FU-012 closed, FU-016 registrado (Loro cross-engine). No cierra hito. CI del PR #25 verde. Verificación: dotnet 126/126, cargo 7/7. 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-09 — Client-id determinista en el FFI de yrs + gate de paridad cross-impl (FU-012)
Cierra FU-012: expone la siembra de
client_iddeterminista en el FFI de yrs y promueve el gatedeterminism-yjs(T058) de informativo a aserción per-PR bloqueante.Resultado central (riesgo R1): la paridad SE CUMPLE ✅
yrs produce exports byte-idénticos a Yjs sobre el corpus compartido — ASCII y unicode. El determinismo de Weft es por formato (encoding v1 de Yjs/yrs), no un accidente de esta versión de yrs (constitución P-III). La variante unicode (con surrogate pairs astrales) confirma además la paridad de índices UTF-16 (R6/R5).
Entregables
weft_doc_new_with_client_id(u64, out)con guardclient_id < 2⁵³(encoding de 53 bits de yrs 0.26+) →WEFT_ERR_OUT_OF_BOUNDS. Header +weft_abi_versionbump.YrsEngine.CreateDoc(ulong)concreto (no enICrdtEngine— alcance yrs-only, P-IV; ver AIDEC) +ExpectedAbiVersion1→2.Yrs_export_matches_yjs_golden(Theory ascii+unicode) enWeft.Determinism.Testsasiertasha256(export yrs) == golden Yjs(golden.json). Corre en el jobtestexistente (bloqueante de facto, costo ~0).release.yml): emite ambos hashes + self-check contra el golden (caza drift de Yjs);apply.mjsparametrizado; corpus unicode nuevo.set_peer_id).Verificación
dotnet test Weft.sln -c Release→ 126/126, 0 fallos (incl. la aserción de paridad).cargo test(shim) → 7/7 (incl. round-trip de siembra + borde del guard 2⁵³ + ABI v2).npm test(harness) → self-check del golden verde (ascii + unicode).straymark charter drift CHARTER-09 --range origin/main..HEAD→ reconciliado atómicamente (§Closing notes: +mem_asan.rs, +package.json; FP #354 deapply.mjs).Gobernanza
AILOG-2026-07-15-001 + AIDEC-2026-07-15-001 (
risk_level: medium, revisados). No cierra hito (promoción de gate; sin auditoría externa).🤖 Generated with Claude Code