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
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ created: 2026-07-13
agent: claude-opus-4-8
confidence: high
review_required: true
reviewed_by: Jose Villaseñor Montfort
reviewed_at: 2026-07-13
review_outcome: approved
risk_level: medium
eu_ai_act_risk: not_applicable
nist_genai_risks: []
Expand Down Expand Up @@ -90,6 +93,9 @@ Weft.PackSmoke.csproj,nuget.config}`, `tests/determinism-yjs/{apply.mjs,corpus.j
validados** — su gate es **un `workflow_dispatch` dry-run de `release.yml`**, que es un gasto deliberado de
CI (matriz win 2×/mac 10× + QEMU) y queda **pendiente de la decisión del operador** (presupuesto de minutos).
Hasta ese dry-run verde, "release-ready" está probado solo en Linux. Documentado, no oculto.
**RESUELTO (2026-07-14)**: dry-run de `release.yml` VERDE post-merge de #21 (run 29307786498) — native ×4,
pack, pack-smoke ×4 (incl. linux-arm64 vía QEMU) en `success`; `publish` `skipped` (gate `dry_run` confirmado).
Release-ready probado en los 4 RIDs.

## Impact

Expand Down Expand Up @@ -124,5 +130,7 @@ win-x64/osx-arm64/linux-arm64(QEMU) + pack-smoke matrix. Sin él, la matriz no-L

## Approval

Pendiente de confirmación del operador (`risk_level: medium`, `review_required: true`). Verificación local
completa citada; el dry-run de la matriz multi-RID es el gasto de CI que el operador decide.
**Approved**: 2026-07-13 by `Jose Villaseñor Montfort`. Concordancia AILOG↔realidad verificada punto por punto
(archivos existen, build 0 warnings + 124 tests, strip yrs 936K/loro 3.8M + 12 exports, 6 `.nupkg`/`.snupkg`,
pack-smoke y determinism-yjs verdes, `release.yml` con publish gateado tras `dry_run`, API pública intacta, y el
dry-run multi-RID run 29307786498 en `success` con `publish` skipped). Sin afirmaciones falsas.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
charter_id: CHARTER-07-release-ready-multiplataforma-nuget-nativo-multi
status: in-progress
status: closed
closed_at: 2026-07-13
effort_estimate: L
trigger: "US3 100% completa (CHARTER-06 en main, d494105): los 6 paquetes (.NET) y 2 shims (Rust) están construidos y verdes; el gate dual-engine (T034) y todos los gates de M0/M1/M2 activos. tasks.md fija US4 (T055–T060) como el empaquetado NuGet nativo multi-RID + release OSS. Este Charter deja el release **listo para disparar** (packaging + cross-compile + pack-smoke + docs + release.yml en dry-run) SIN ejecutar el paso irreversible (publish a NuGet.org / repo público), que queda operador-gated."
originating_spec: specs/001-weft-crdt-versioning/spec.md
Expand All @@ -10,7 +11,7 @@ design_provenance: new

# Charter: Release-ready multiplataforma — NuGet nativo multi-RID + gates (publish gated)

> **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:** Derivado de `specs/001-weft-crdt-versioning/spec.md` (US4, hito M3; research R11/R12/R13/R16).
> Deja Weft **release-ready**: entrega T055–T059 y **autora** T060 (pipeline de release) en modo **dry-run**.
Expand Down Expand Up @@ -214,9 +215,10 @@ irreversible. Al cerrar:

Ejecución (T055–T059 + T060 dry-run) documentada en `AILOG-2026-07-13-003`. **Verificación local verde** (build
0 warnings, 124 tests, pack local 6 `.nupkg` con los 2 RIDs de Linux, pack-smoke linux-x64, harness
determinism-yjs, YAML válido). **Pendiente para cierre**: **1 dry-run de `release.yml`** que valide win-x64/
osx-arm64/linux-arm64 (gasto de CI, decisión del operador — ver AILOG §Risk R2/R4). El charter permanece
`in-progress` hasta ese dry-run.
determinism-yjs, YAML válido). **Dry-run de `release.yml` VERDE** (run 29307786498, post-merge de #21 en main,
2026-07-14): native ×4 (los 4 RIDs), pack, pack-smoke ×4 (incl. linux-arm64 vía QEMU) y determinism-yjs en
`success`; **`publish` `skipped`** (gate `dry_run=true` confirmado — nada publicado). Release-ready probado en
los 4 RIDs → cierre. **M3 sigue abierto**: falta el publish real del operador + CHARTER-08 (Polish).

Expansiones de scope respecto a §Files (documentadas, intencionales):

Expand Down
91 changes: 91 additions & 0 deletions .straymark/charters/CHARTER-07.telemetry.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# StrayMark Charter telemetry — fill at Charter close.
#
# Schema: .straymark/schemas/charter-telemetry.schema.v0.json
# Conceptual: Propuesta/straymark-charter-telemetry.md (in the upstream repo)
# Storage path: .straymark/charters/CHARTER-07.telemetry.yaml
#
# Fill time target: 5-10 minutes per Charter. The point is signal, not exhaustiveness —
# leave a field blank or omit it if you don't have honest data for it. Honest gaps
# are more useful than invented numbers.

charter_telemetry:
# ---------- Identification ----------
charter_id: "CHARTER-07"
charter_title: "Release-ready multiplataforma — NuGet nativo multi-RID + gates (publish gated)"
closed_at: "2026-07-13"

# ---------- Origin & activation ----------
originating_ailogs:
- ailog_id: "AILOG-2026-07-13-003"
still_relevant_at_execution: true
relevance_notes: "AILOG de ejecución del Charter (US4/M3, originado del spec 001)."

trigger:
declared_kind: "infrastructure_milestone"
declared_description: "US3 100% completa (CHARTER-06 en main, d494105); 6 paquetes .NET + 2 shims Rust construidos y verdes; gate dual-engine (T034) y gates M0/M1/M2 activos. tasks.md fija US4 (T055–T060) como el empaquetado NuGet nativo multi-RID + release OSS."
fired_at: "2026-07-13"
fire_clarity: "clear"
fire_clarity_notes: "Última story de la spec; alcance acotado por 2 decisiones del operador (release-ready publish-gated + Polish aparte)."

# ---------- Pre-work ----------
pre_work:
items_declared: 0
items_completed_before_planning: 0
items_skipped: 0
items_discovered_during_planning: 0
pre_work_quality: "high"
pre_work_notes: "Reconnaissance #210 confirmó que NativeLibraryResolver ya lee runtimes/<rid>/native/ (T055 solo alimenta el layout), los csproj sin packaging, la ausencia de release.yml y de CONTRIBUTING/GOVERNANCE. Sesión previa instaló zig+cargo-zigbuild local."

# ---------- Planning session (if any) ----------
planning_session:
occurred: false
duration_minutes: 0
participants: 0
decisions_made: 0
decisions_deferred: 0
notes: ""

# ---------- Effort ----------
effort:
started_at: "2026-07-13"
finished_at: "2026-07-13"
estimated_effort: "L (~4h)"
actual_effort: "L (~4h)"
estimation_drift_factor: 1.0
estimation_drift_reason: "Sin sorpresas de alcance. Los ajustes (strip vía --config para no inflar el .nupkg, comentario XML con -- ilegal, IsPackable de tests/samples) fueron menores y resueltos en línea. La instalación de zig (tarball vía mirror hexops tras el throttle de ziglang.org) fue en sesión previa."

# ---------- Agent quality during execution ----------
agent_quality:
sessions_count: 1
hallucinations_caught: 0
hallucination_categories: []
decisions_contradicting_prior_adrs: 0
contradiction_notes: ""
context_loaded_was_sufficient: true
additional_context_loaded_manually: 0
r_n_plus_one_emergent_count: 1
skill_prompts_used: ["straymark-charter-new"]

# ---------- External audit ----------
# No aplica: Charter que no cierra hito → sin auditoría externa multi-modelo obligatoria.
# Recomendada antes del paso gated de publish (el binario empaquetado cruza P-I/P-II).
external_audit: []

# ---------- Outcome & follow-ups ----------
outcome:
completed_as_planned: true
scope_changes: "menor"
scope_change_notes: "Expansiones intencionales documentadas en §Closing notes: F1 build/Weft.Native.targets (extraído para no duplicar entre Core/Loro), F2 Directory.Build.props (IsPackable de tests/samples), F3 registro FU-012 (paridad determinism-yjs). T060 entregado en dry-run (publish operador-gated, no ejecutado). Dry-run de release.yml VERDE en los 4 RIDs (run 29307786498); publish skipped (gate dry_run confirmado)."
new_followups_generated: 2
new_charters_created: 0
charters_invalidated: 0
associated_stage_id: "M3"

# ---------- Qualitative (where insight usually lives) ----------
qualitative:
format_iteration: "v4"
friction_points: ["ziglang.org throttlea las descargas (~60 KB/s); resuelto con mirror de comunidad hexops + verificación SHA-256.", "workflow_dispatch solo es disparable si el workflow está en la rama por defecto → el dry-run de release.yml no corre desde la branch; hubo que mergear #21 primero y disparar en main.", "El parser de charter drift no reconoce .csproj/.sln/.yml ni dirs declarados (issue #354) → 14 FP de scope expansion, triaje manual al cierre.", "GH Actions annota deprecación de Node 20 (checkout/setup-node/upload-artifact/setup-zig) → FU-013."]
wins: ["Packaging con strip vía --config (sin tocar el perfil release compartido con sanitizers): yrs 936K, loro 3.8M vs 41M, 12 exports C-ABI intactos.", "Publish gateado tras inputs.dry_run (default true) + environment: release → el dry-run validó los 4 RIDs y saltó el publish, cero riesgo de publicación accidental (R1).", "Validación local de 2/4 RIDs con zig instalado antes del dry-run → el único dry-run de CI pasó al primer intento (win/mac/arm), sin iterar la matriz cara.", "pack-smoke real: consumidor que referencia Weft como PAQUETES ejercita el layout runtimes/ de punta a punta (nativo resuelto en cada RID, incl. linux-arm64 vía QEMU)."]
overall_satisfaction: 5
would_repeat_format: true
proposed_format_changes: "El parser de drift debería reconocer .csproj/.sln/.yml y expandir directorios declarados a sus archivos (issue #354, comentado con la 4ª+5ª ocurrencia)."
10 changes: 9 additions & 1 deletion .straymark/follow-ups-backlog.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
last_scan: 2026-07-10
schema_version: v1
total_open: 4
total_open: 5
total_promoted: 0
total_closed_in_session: 8
total_phase_blocked: 0
Expand Down Expand Up @@ -135,6 +135,14 @@ fully_extracted_ailogs:
- **Cost**: M
- **Notes**: El harness `tests/determinism-yjs/` (T058) aplica el corpus compartido con Yjs y emite el SHA-256 del export, pero la paridad byte-idéntica con yrs está **gated en client-ids deterministas**: `ICrdtEngine.CreateDoc()` no toma parámetro y el shim FFI (`weft-yrs-ffi`) no expone fijar `client_id`, así que yrs asigna uno no controlable y su export no es reproducible cross-impl. Promover: (1) añadir `weft_doc_new_with_client_id` al FFI + `CreateDoc(ulong clientId)` al binding (aísla el bump, P-IV); (2) emitir el hash golden de yrs para el corpus; (3) pasar `WEFT_GOLDEN_HASH` al job y promoverlo a comparación con aserción; (4) añadir la variante unicode del corpus (índices UTF-16, R6). Hoy no-bloqueante; ningún gate depende.

### FU-013 — bump de GitHub Actions fuera de Node 20 (deprecado)
- **Origin**: CHARTER-07 (dry-run release.yml run 29307786498, annotations) · AILOG-2026-07-13-003 (registro hand-add + recount, §13)
- **Status**: open
- **Trigger**: when Node 20 se retire de los runners de GH (o al tocar los workflows por otra razón)
- **Destination**: chore
- **Cost**: XS
- **Notes**: El dry-run anotó "Node.js 20 is deprecated" para `actions/checkout@v4`, `actions/setup-node@v4`, `actions/upload-artifact@v4`, `mlugg/setup-zig@v2` (forzados a Node 24). Bump a `@v5`/equivalentes en `.github/workflows/{ci.yml,release.yml,docs-validation.yml}` cuando toque. También aviso informativo: `macos-latest` migra a macOS 26 el 2026-06-15 (revisar el runner de `native (osx-arm64)` / pack-smoke). Cosmético hoy; ningún gate depende.

## Bucket: phase-blocked

## Bucket: operational
Loading