Skip to content

feat(m3): client-id determinista en el FFI de yrs + gate de paridad cross-impl (CHARTER-09) - #25

Merged
montfort merged 2 commits into
mainfrom
charter/09-determinism-client-id
Jul 15, 2026
Merged

feat(m3): client-id determinista en el FFI de yrs + gate de paridad cross-impl (CHARTER-09)#25
montfort merged 2 commits into
mainfrom
charter/09-determinism-client-id

Conversation

@montfort

Copy link
Copy Markdown
Contributor

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_id determinista en el FFI de yrs y promueve el gate determinism-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

  • FFI (ABI v1→v2): weft_doc_new_with_client_id(u64, out) con guard client_id < 2⁵³ (encoding de 53 bits de yrs 0.26+) → WEFT_ERR_OUT_OF_BOUNDS. Header + weft_abi_version bump.
  • Binding: YrsEngine.CreateDoc(ulong) concreto (no en ICrdtEngine — alcance yrs-only, P-IV; ver AIDEC) + ExpectedAbiVersion 1→2.
  • Gate per-PR: Yrs_export_matches_yjs_golden (Theory ascii+unicode) en Weft.Determinism.Tests asierta sha256(export yrs) == golden Yjs (golden.json). Corre en el job test existente (bloqueante de facto, costo ~0).
  • Job Node informativo (release.yml): emite ambos hashes + self-check contra el golden (caza drift de Yjs); apply.mjs parametrizado; corpus unicode nuevo.
  • Backlog: FU-012 → closed; FU-016 registrado (promoción cross-engine Loro vía set_peer_id).

Verificación

  • dotnet test Weft.sln -c Release126/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 de apply.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

montfort and others added 2 commits July 15, 2026 02:36
…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>
@montfort
montfort merged commit ffb7e78 into main Jul 15, 2026
15 checks passed
@github-actions github-actions Bot locked and limited conversation to collaborators Jul 15, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant