Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions .straymark/architecture/model.yml
Original file line number Diff line number Diff line change
@@ -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
97 changes: 97 additions & 0 deletions .straymark/architecture/plan.drawio
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
<mxfile host="straymark" type="device">
<diagram name="Architecture" id="straymark-architecture">
<mxGraphModel dx="1024" dy="768" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<object label="Native FFI (weft-yrs-ffi / weft-loro-ffi)" straymark_component_id="native" id="comp-native">
<mxCell style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="450" y="30" width="200" height="60" as="geometry" />
</mxCell>
</object>
<object label="Weft.Core" straymark_component_id="src-weft-core" id="comp-src-weft-core">
<mxCell style="rounded=0;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="450" y="130" width="200" height="60" as="geometry" />
</mxCell>
</object>
<object label="Weft.Versioning" straymark_component_id="src-weft-versioning" id="comp-src-weft-versioning">
<mxCell style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="450" y="230" width="200" height="60" as="geometry" />
</mxCell>
</object>
<object label="Weft.Loro" straymark_component_id="src-weft-loro" id="comp-src-weft-loro">
<mxCell style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="450" y="330" width="200" height="60" as="geometry" />
</mxCell>
</object>
<object label="Weft.Server" straymark_component_id="src-weft-server" id="comp-src-weft-server">
<mxCell style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="450" y="430" width="200" height="60" as="geometry" />
</mxCell>
</object>
<object label="Weft.Server.Persistence.EFCore" straymark_component_id="src-weft-server-persistence-efcore" id="comp-src-weft-server-persistence-efcore">
<mxCell style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="280" y="530" width="200" height="60" as="geometry" />
</mxCell>
</object>
<object label="Weft.Server.Persistence.Redis" straymark_component_id="src-weft-server-persistence-redis" id="comp-src-weft-server-persistence-redis">
<mxCell style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="620" y="530" width="200" height="60" as="geometry" />
</mxCell>
</object>
<object label="Samples" straymark_component_id="samples" id="comp-samples">
<mxCell style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="280" y="640" width="200" height="60" as="geometry" />
</mxCell>
</object>
<object label="Tests" straymark_component_id="tests" id="comp-tests">
<mxCell style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="620" y="740" width="200" height="60" as="geometry" />
</mxCell>
</object>
<mxCell id="edge-core-native" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=classic;" edge="1" parent="1" source="comp-src-weft-core" target="comp-native">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-versioning-core" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=classic;" edge="1" parent="1" source="comp-src-weft-versioning" target="comp-src-weft-core">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-loro-core" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=classic;" edge="1" parent="1" source="comp-src-weft-loro" target="comp-src-weft-core">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-loro-native" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=classic;dashed=1;" edge="1" parent="1" source="comp-src-weft-loro" target="comp-native">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-server-core" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=classic;" edge="1" parent="1" source="comp-src-weft-server" target="comp-src-weft-core">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-server-versioning" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=classic;" edge="1" parent="1" source="comp-src-weft-server" target="comp-src-weft-versioning">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-efcore-server" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=classic;" edge="1" parent="1" source="comp-src-weft-server-persistence-efcore" target="comp-src-weft-server">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-redis-server" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=classic;" edge="1" parent="1" source="comp-src-weft-server-persistence-redis" target="comp-src-weft-server">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-samples-versioning" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=classic;dashed=1;" edge="1" parent="1" source="comp-samples" target="comp-src-weft-versioning">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-samples-server" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=classic;dashed=1;" edge="1" parent="1" source="comp-samples" target="comp-src-weft-server">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-tests-core" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=classic;dashed=1;" edge="1" parent="1" source="comp-tests" target="comp-src-weft-core">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-tests-versioning" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=classic;dashed=1;" edge="1" parent="1" source="comp-tests" target="comp-src-weft-versioning">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-tests-server" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=classic;dashed=1;" edge="1" parent="1" source="comp-tests" target="comp-src-weft-server">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="edge-tests-loro" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=classic;dashed=1;" edge="1" parent="1" source="comp-tests" target="comp-src-weft-loro">
<mxGeometry relative="1" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
5 changes: 3 additions & 2 deletions .straymark/charters/12-cerrar-declaracion-sin-cableado.md
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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.
Expand Down
5 changes: 3 additions & 2 deletions .straymark/charters/13-siembra-cross-engine.md
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand Down
5 changes: 3 additions & 2 deletions .straymark/charters/14-durabilidad-relay.md
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand Down
20 changes: 20 additions & 0 deletions .straymark/charters/CHARTER-12.telemetry.yaml
Original file line number Diff line number Diff line change
@@ -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"
20 changes: 20 additions & 0 deletions .straymark/charters/CHARTER-13.telemetry.yaml
Original file line number Diff line number Diff line change
@@ -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"
20 changes: 20 additions & 0 deletions .straymark/charters/CHARTER-14.telemetry.yaml
Original file line number Diff line number Diff line change
@@ -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"
Loading