From 94ff71036a18f4c3514c858000655662f4bdf51b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Villase=C3=B1or=20Montfort?= <195970+montfort@users.noreply.github.com> Date: Sun, 19 Jul 2026 12:06:54 -0600 Subject: [PATCH] chore(straymark): architecture model + retroactive close of CHARTER-12/13/14 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two governance housekeeping items surfaced while mapping the architecture: - Architecture model (.straymark/architecture/): refined the `generate` seed into 8 real layers (Native FFI → Core → Versioning → Engine Adapters → Server → Persistence → Samples → Tests), reassigned all 9 components out of `unassigned`, and wired 14 dependency links matching docs/architecture.md. Both model.yml (3D links) and plan.drawio (2D edges) updated; `architecture validate` green. - Retroactive close of CHARTER-12/13/14: their code was merged (PRs #28/#29/#30) but `charter close` was never run, so `status --where` correctly flagged three phantom in-progress Charters. Closed all three with minimal, honest telemetry — facts on record only (declared effort, real AILOG ids, no scope change); subjective/unmeasured fields omitted as honest gaps. `status --where` now shows "no in-progress Charter". All 14 Charters are `closed`. Note: the architecture model is EXPERIMENTAL (Loom A1.x), not part of the supported Framework/CLI contract. Co-Authored-By: Claude Opus 4.8 (1M context) --- .straymark/architecture/model.yml | 77 +++++++++++++++ .straymark/architecture/plan.drawio | 97 +++++++++++++++++++ .../12-cerrar-declaracion-sin-cableado.md | 5 +- .../charters/13-siembra-cross-engine.md | 5 +- .straymark/charters/14-durabilidad-relay.md | 5 +- .straymark/charters/CHARTER-12.telemetry.yaml | 20 ++++ .straymark/charters/CHARTER-13.telemetry.yaml | 20 ++++ .straymark/charters/CHARTER-14.telemetry.yaml | 20 ++++ 8 files changed, 243 insertions(+), 6 deletions(-) create mode 100644 .straymark/architecture/model.yml create mode 100644 .straymark/architecture/plan.drawio create mode 100644 .straymark/charters/CHARTER-12.telemetry.yaml create mode 100644 .straymark/charters/CHARTER-13.telemetry.yaml create mode 100644 .straymark/charters/CHARTER-14.telemetry.yaml 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"