diff --git a/.straymark/architecture/model.yml b/.straymark/architecture/model.yml new file mode 100644 index 0000000..153c571 --- /dev/null +++ b/.straymark/architecture/model.yml @@ -0,0 +1,77 @@ +# StrayMark architecture model (Loom Spec 002) — EXPERIMENTAL. +# Refined from `straymark architecture generate`: real layers (dependencies point toward the core, +# mirroring docs/architecture.md), every component assigned, links inferred from the dependency graph. +version: 0 +layers: + - { id: "native-ffi", label: "Native FFI (Rust shims)", order: 0 } + - { id: "core", label: "Core", order: 1 } + - { id: "domain", label: "Versioning (Domain)", order: 2 } + - { id: "engine-adapters", label: "Engine Adapters", order: 3 } + - { id: "server", label: "Server (Relay)", order: 4 } + - { id: "persistence", label: "Persistence Adapters", order: 5 } + - { id: "consumers", label: "Samples", order: 6 } + - { id: "verification", label: "Tests", order: 7 } +components: + - id: "native" + label: "Native FFI (weft-yrs-ffi / weft-loro-ffi)" + layer: "native-ffi" + globs: ["native/**"] + links: [] + docs: [] + external: false + - id: "src-weft-core" + label: "Weft.Core" + layer: "core" + globs: ["src/Weft.Core/**"] + links: ["native"] + docs: [] + external: false + - id: "src-weft-versioning" + label: "Weft.Versioning" + layer: "domain" + globs: ["src/Weft.Versioning/**"] + links: ["src-weft-core"] + docs: [] + external: false + - id: "src-weft-loro" + label: "Weft.Loro" + layer: "engine-adapters" + globs: ["src/Weft.Loro/**"] + links: ["src-weft-core", "native"] + docs: [] + external: false + - id: "src-weft-server" + label: "Weft.Server" + layer: "server" + globs: ["src/Weft.Server/**"] + links: ["src-weft-core", "src-weft-versioning"] + docs: [] + external: false + - id: "src-weft-server-persistence-efcore" + label: "Weft.Server.Persistence.EFCore" + layer: "persistence" + globs: ["src/Weft.Server.Persistence.EFCore/**"] + links: ["src-weft-server"] + docs: [] + external: false + - id: "src-weft-server-persistence-redis" + label: "Weft.Server.Persistence.Redis" + layer: "persistence" + globs: ["src/Weft.Server.Persistence.Redis/**"] + links: ["src-weft-server"] + docs: [] + external: false + - id: "samples" + label: "Samples" + layer: "consumers" + globs: ["samples/**"] + links: ["src-weft-versioning", "src-weft-server"] + docs: [] + external: false + - id: "tests" + label: "Tests" + layer: "verification" + globs: ["tests/**"] + links: ["src-weft-core", "src-weft-versioning", "src-weft-server", "src-weft-loro"] + docs: [] + external: false diff --git a/.straymark/architecture/plan.drawio b/.straymark/architecture/plan.drawio new file mode 100644 index 0000000..7ce65d7 --- /dev/null +++ b/.straymark/architecture/plan.drawio @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.straymark/charters/12-cerrar-declaracion-sin-cableado.md b/.straymark/charters/12-cerrar-declaracion-sin-cableado.md index 99d47a3..e09a200 100644 --- a/.straymark/charters/12-cerrar-declaracion-sin-cableado.md +++ b/.straymark/charters/12-cerrar-declaracion-sin-cableado.md @@ -1,6 +1,7 @@ --- charter_id: CHARTER-12-cerrar-declaracion-sin-cableado -status: in-progress +status: closed +closed_at: 2026-07-19 effort_estimate: L trigger: "El operador decide vaciar el backlog de follow-ups ANTES del publish real (T060). El publish es irreversible: lo que quede mal documentado o sin cablear se congela en un paquete público. Los 4 follow-ups accionables (FU-017/018/019/020) resultaron ser la misma clase — el anti-patrón que CHARTER-11 destapó — y la investigación previa encontró que el repo afirma que existen verificaciones que NO existen." originating_spec: specs/001-weft-crdt-versioning/spec.md @@ -10,7 +11,7 @@ design_provenance: new # Charter: Cerrar la clase «declaración de superficie sin cableado» -> **Status (mirrored from frontmatter — source of truth is above):** in-progress. Effort: L. +> **Status (mirrored from frontmatter — source of truth is above):** closed. Effort: L. > > **Origin:** Despacho del backlog de follow-ups antes de T060. Cierra FU-017, FU-018, FU-019 y FU-020, > más los hallazgos adyacentes que la investigación destapó y que ningún follow-up cubría. diff --git a/.straymark/charters/13-siembra-cross-engine.md b/.straymark/charters/13-siembra-cross-engine.md index 035f4c9..97f975c 100644 --- a/.straymark/charters/13-siembra-cross-engine.md +++ b/.straymark/charters/13-siembra-cross-engine.md @@ -1,6 +1,7 @@ --- charter_id: CHARTER-13-siembra-cross-engine -status: in-progress +status: closed +closed_at: 2026-07-19 effort_estimate: S trigger: "El operador decide implementar FU-016 (diferido en CHARTER-09) como parte del vaciado del backlog antes del publish (T060). Segundo de tres Charters de ese vaciado, tras CHARTER-12. La investigación previa resolvió las dos incógnitas que hacían de FU-016 un coste M: la API real de set_peer_id de loro 1.13.6 y el default de record_timestamp — ambas verificadas en las fuentes pinneadas, lo que baja el coste a S." originating_spec: specs/001-weft-crdt-versioning/spec.md @@ -10,7 +11,7 @@ design_provenance: new # Charter: Siembra de réplica cross-engine — IDeterministicSeeding + peer_id de Loro -> **Status (mirrored from frontmatter — source of truth is above):** in-progress. Effort: S. +> **Status (mirrored from frontmatter — source of truth is above):** closed. Effort: S. > > **Origin:** FU-016. CHARTER-09 expuso la siembra de client-id como capacidad **concreta de > `YrsEngine`** (`CreateDoc(ulong)`), no en `ICrdtEngine`, porque el gate `determinism-yjs` es diff --git a/.straymark/charters/14-durabilidad-relay.md b/.straymark/charters/14-durabilidad-relay.md index 8152a3b..7dfd2c8 100644 --- a/.straymark/charters/14-durabilidad-relay.md +++ b/.straymark/charters/14-durabilidad-relay.md @@ -1,6 +1,7 @@ --- charter_id: CHARTER-14-durabilidad-relay -status: in-progress +status: closed +closed_at: 2026-07-19 effort_estimate: L trigger: "El operador decide implementar FU-010 como último Charter del vaciado del backlog antes del publish (T060), con tres decisiones tomadas: fsync EN scope, default PersistThenBroadcast, y cobertura de carga del relay (hoy inexistente). Al cerrar, el backlog queda en 1 open (FU-015, bloqueado upstream)." originating_spec: specs/001-weft-crdt-versioning/spec.md @@ -10,7 +11,7 @@ design_provenance: new # Charter: Durabilidad del relay — persist-before-broadcast + fsync -> **Status (mirrored from frontmatter — source of truth is above):** in-progress. Effort: L. +> **Status (mirrored from frontmatter — source of truth is above):** closed. Effort: L. > > **Origin:** FU-010 (AIDEC-2026-07-13-001 §5, auditoría de CHARTER-05 F3). El relay hace hoy > **broadcast-then-persist**; este Charter lo invierte, endurece la durabilidad del store con fsync, y diff --git a/.straymark/charters/CHARTER-12.telemetry.yaml b/.straymark/charters/CHARTER-12.telemetry.yaml new file mode 100644 index 0000000..afa956f --- /dev/null +++ b/.straymark/charters/CHARTER-12.telemetry.yaml @@ -0,0 +1,20 @@ +# StrayMark Charter telemetry — CHARTER-12. +# Retroactive minimal close (2026-07-19): the work was implemented and merged (PR #28) but the formal +# `charter close` was not run at the time. Filled with the facts on record; subjective or unmeasured +# fields (satisfaction, effort drift, external audit, trigger clarity) are omitted as honest gaps +# rather than invented — the schema accepts their absence. +charter_telemetry: + charter_id: "CHARTER-12" + charter_title: "Cerrar la clase «declaración de superficie sin cableado»" + closed_at: "2026-07-19" + originating_ailogs: + - ailog_id: "AILOG-2026-07-16-001-charter-12-cerrar-declaracion-sin-cableado" + still_relevant_at_execution: true + planning_session: + occurred: false + effort: + estimated_effort: "L" # bucket declared in the Charter + actual_effort: "L" + outcome: + completed_as_planned: true + scope_changes: "ninguno" diff --git a/.straymark/charters/CHARTER-13.telemetry.yaml b/.straymark/charters/CHARTER-13.telemetry.yaml new file mode 100644 index 0000000..72c1629 --- /dev/null +++ b/.straymark/charters/CHARTER-13.telemetry.yaml @@ -0,0 +1,20 @@ +# StrayMark Charter telemetry — CHARTER-13. +# Retroactive minimal close (2026-07-19): the work was implemented and merged (PR #29) but the formal +# `charter close` was not run at the time. Filled with the facts on record; subjective or unmeasured +# fields (satisfaction, effort drift, external audit, trigger clarity) are omitted as honest gaps +# rather than invented — the schema accepts their absence. +charter_telemetry: + charter_id: "CHARTER-13" + charter_title: "Siembra de réplica cross-engine — IDeterministicSeeding + peer_id de Loro" + closed_at: "2026-07-19" + originating_ailogs: + - ailog_id: "AILOG-2026-07-16-002-charter-13-siembra-cross-engine" + still_relevant_at_execution: true + planning_session: + occurred: false + effort: + estimated_effort: "S" # bucket declared in the Charter + actual_effort: "S" + outcome: + completed_as_planned: true + scope_changes: "ninguno" diff --git a/.straymark/charters/CHARTER-14.telemetry.yaml b/.straymark/charters/CHARTER-14.telemetry.yaml new file mode 100644 index 0000000..2e4136b --- /dev/null +++ b/.straymark/charters/CHARTER-14.telemetry.yaml @@ -0,0 +1,20 @@ +# StrayMark Charter telemetry — CHARTER-14. +# Retroactive minimal close (2026-07-19): the work was implemented and merged (PR #30) but the formal +# `charter close` was not run at the time. Filled with the facts on record; subjective or unmeasured +# fields (satisfaction, effort drift, external audit, trigger clarity) are omitted as honest gaps +# rather than invented — the schema accepts their absence. +charter_telemetry: + charter_id: "CHARTER-14" + charter_title: "Durabilidad del relay — persist-before-broadcast + fsync" + closed_at: "2026-07-19" + originating_ailogs: + - ailog_id: "AILOG-2026-07-16-003-charter-14-durabilidad-relay" + still_relevant_at_execution: true + planning_session: + occurred: false + effort: + estimated_effort: "L" # bucket declared in the Charter + actual_effort: "L" + outcome: + completed_as_planned: true + scope_changes: "ninguno"