From 486422efbf689b7b30e254e8c117be049b970f68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Villase=C3=B1or=20Montfort?= <195970+montfort@users.noreply.github.com> Date: Mon, 13 Jul 2026 23:21:13 -0600 Subject: [PATCH 1/2] =?UTF-8?q?chore(charter):=20cerrar=20CHARTER-07=20+?= =?UTF-8?q?=20telemetr=C3=ADa=20(release-ready,=20dry-run=20verde)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dry-run de release.yml VERDE en main (run 29307786498): native ×4 RIDs, pack, pack-smoke ×4 (incl. linux-arm64 vía QEMU), determinism-yjs en success; publish SKIPPED (gate dry_run=true confirmado — nada publicado). Weft queda release-ready probado en los 4 RIDs. Flip status → closed, telemetría validada (schema v0, effort L ~1.0x). NO cierra M3: falta el publish real del operador (dry_run=false + API key + repo público) + CHARTER-08 (Polish). AILOG-2026-07-13-003 (medium) espera firma del operador. Nuevos follow-ups: FU-012 (paridad determinism-yjs, gated en client-ids) + FU-013 (bump GH Actions fuera de Node 20, detectado por el dry-run). Co-Authored-By: Claude Opus 4.8 (1M context) --- ...-003-charter-07-release-ready-multi-rid.md | 3 + ...eady-multiplataforma-nuget-nativo-multi.md | 12 ++- .straymark/charters/CHARTER-07.telemetry.yaml | 91 +++++++++++++++++++ .straymark/follow-ups-backlog.md | 10 +- 4 files changed, 110 insertions(+), 6 deletions(-) create mode 100644 .straymark/charters/CHARTER-07.telemetry.yaml diff --git a/.straymark/07-ai-audit/agent-logs/AILOG-2026-07-13-003-charter-07-release-ready-multi-rid.md b/.straymark/07-ai-audit/agent-logs/AILOG-2026-07-13-003-charter-07-release-ready-multi-rid.md index e58c687..1c1d2db 100644 --- a/.straymark/07-ai-audit/agent-logs/AILOG-2026-07-13-003-charter-07-release-ready-multi-rid.md +++ b/.straymark/07-ai-audit/agent-logs/AILOG-2026-07-13-003-charter-07-release-ready-multi-rid.md @@ -90,6 +90,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 diff --git a/.straymark/charters/07-release-ready-multiplataforma-nuget-nativo-multi.md b/.straymark/charters/07-release-ready-multiplataforma-nuget-nativo-multi.md index 2f842fa..d3d6c1c 100644 --- a/.straymark/charters/07-release-ready-multiplataforma-nuget-nativo-multi.md +++ b/.straymark/charters/07-release-ready-multiplataforma-nuget-nativo-multi.md @@ -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 @@ -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**. @@ -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): diff --git a/.straymark/charters/CHARTER-07.telemetry.yaml b/.straymark/charters/CHARTER-07.telemetry.yaml new file mode 100644 index 0000000..d7ceb06 --- /dev/null +++ b/.straymark/charters/CHARTER-07.telemetry.yaml @@ -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//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)." diff --git a/.straymark/follow-ups-backlog.md b/.straymark/follow-ups-backlog.md index 537bc24..d20b1a0 100644 --- a/.straymark/follow-ups-backlog.md +++ b/.straymark/follow-ups-backlog.md @@ -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 @@ -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 From da4e33c82debcdfaee0d9a43a6471d0a9e390a8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jose=20Villase=C3=B1or=20Montfort?= <195970+montfort@users.noreply.github.com> Date: Mon, 13 Jul 2026 23:52:24 -0600 Subject: [PATCH 2/2] docs(ailog): firmar AILOG-2026-07-13-003 (aprobado por el operador) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit review_outcome: approved, reviewed_by Jose Villaseñor Montfort (straymark approve). Sección Approval consolidada con el resumen de la verificación AILOG↔realidad (archivos, 124 tests, strip sizes, packaging, pack-smoke, determinism-yjs, publish gateado, API intacta, dry-run run 29307786498 verde). Elimina el placeholder "Pendiente" que quedaba contradictorio tras la firma. Co-Authored-By: Claude Opus 4.8 (1M context) --- ...-2026-07-13-003-charter-07-release-ready-multi-rid.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.straymark/07-ai-audit/agent-logs/AILOG-2026-07-13-003-charter-07-release-ready-multi-rid.md b/.straymark/07-ai-audit/agent-logs/AILOG-2026-07-13-003-charter-07-release-ready-multi-rid.md index 1c1d2db..736c03f 100644 --- a/.straymark/07-ai-audit/agent-logs/AILOG-2026-07-13-003-charter-07-release-ready-multi-rid.md +++ b/.straymark/07-ai-audit/agent-logs/AILOG-2026-07-13-003-charter-07-release-ready-multi-rid.md @@ -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: [] @@ -127,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.