diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 2c049c9..3205f36 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -16,12 +16,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
with:
fetch-depth: 0 # MinVer (versionado de GeoVial.Sync) necesita el historial y los tags
- name: Setup .NET
- uses: actions/setup-dotnet@v4
+ uses: actions/setup-dotnet@v5
with:
dotnet-version: '10.0.x'
@@ -36,7 +36,7 @@ jobs:
- name: Publicar resultados de cobertura
if: always()
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v7
with:
name: cobertura
path: '**/TestResults/**/coverage.cobertura.xml'
diff --git a/.github/workflows/publish-images.yml b/.github/workflows/publish-images.yml
index e6f628d..b8865d8 100644
--- a/.github/workflows/publish-images.yml
+++ b/.github/workflows/publish-images.yml
@@ -33,7 +33,7 @@ jobs:
dockerfile: infra/db/Dockerfile
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
with:
fetch-depth: 0 # historial completo para el SHA y la version
@@ -60,18 +60,18 @@ jobs:
} >> "$GITHUB_OUTPUT"
- name: Log in a GHCR
- uses: docker/login-action@v3
+ uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Buildx
- uses: docker/setup-buildx-action@v3
+ uses: docker/setup-buildx-action@v4
- name: Build y push de la imagen (STAGE-12 + STAGE-14)
id: build
- uses: docker/build-push-action@v6
+ uses: docker/build-push-action@v7
with:
context: .
file: ${{ matrix.dockerfile }}
@@ -89,7 +89,7 @@ jobs:
uses: sigstore/cosign-installer@v3
- name: Publicar el SBOM como artefacto del release (antes de firmar, para preservarlo)
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v7
with:
name: geovial-${{ matrix.name }}-sbom
path: ./geovial-${{ matrix.name }}.cdx.json
diff --git a/.github/workflows/publish-sync.yml b/.github/workflows/publish-sync.yml
index 3bb9f81..0716a29 100644
--- a/.github/workflows/publish-sync.yml
+++ b/.github/workflows/publish-sync.yml
@@ -19,12 +19,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
with:
fetch-depth: 0 # MinVer necesita el historial completo y los tags
- name: Setup .NET
- uses: actions/setup-dotnet@v4
+ uses: actions/setup-dotnet@v5
with:
dotnet-version: '10.0.x'
@@ -99,7 +99,7 @@ jobs:
- name: Publicar artefactos del paquete (nupkg + SBOM + firmas)
if: always()
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v7
with:
name: geovial-sync-nupkg
path: |
diff --git a/infra/db/Dockerfile b/infra/db/Dockerfile
index 9ae7ffd..5cfc6dc 100644
--- a/infra/db/Dockerfile
+++ b/infra/db/Dockerfile
@@ -4,5 +4,5 @@
# se aplican por migracion EF Core al arrancar el backend (scripts/db-create), no se hornean datos en
# la imagen (minimizacion de datos personales, ADR-14). La SA password y ACCEPT_EULA se inyectan por
# variables de entorno en el deploy, desde secretos (entornos-deploy §4); nunca en la imagen.
-FROM mcr.microsoft.com/mssql/server:2022-latest
+FROM mcr.microsoft.com/mssql/server:2025-latest
EXPOSE 1433
diff --git a/sdd2.0/docs/07_plan-sprint/README.md b/sdd2.0/docs/07_plan-sprint/README.md
index a7dd02a..c5804af 100644
--- a/sdd2.0/docs/07_plan-sprint/README.md
+++ b/sdd2.0/docs/07_plan-sprint/README.md
@@ -12,7 +12,7 @@
| Sprint | Estado | Fechas | Plan |
| --- | --- | --- | --- |
-| Sprint 35 | Por planificar (offline de teselas en el móvil; bundle de Leaflet en el móvil; o automatizar la regla `-rc` como check de CI) | — | — |
+| Sprint 36 | Por planificar (migración a AWSSDK.S3 v4 con prueba contra S3; offline de teselas en el móvil; o auto-merge de Dependabot para minor/patch) | — | — |
## Histórico de sprints cerrados
@@ -53,6 +53,7 @@
| Sprint 32 (mapa OSM en el móvil) | Cerrado (Cumplido; velocity 8) | [plan-iteracion-sprint-32_v1.0.md](plan-iteracion-sprint-32_v1.0.md) | [sprint-review-sprint-32_v1.0.md](sprint-review-sprint-32_v1.0.md) | [sprint-retrospectiva-sprint-32_v1.0.md](sprint-retrospectiva-sprint-32_v1.0.md) |
| Sprint 33 (mantenimiento supply-chain) | Cerrado (Cumplido; velocity 8) | [plan-iteracion-sprint-33_v1.0.md](plan-iteracion-sprint-33_v1.0.md) | [sprint-review-sprint-33_v1.0.md](sprint-review-sprint-33_v1.0.md) | [sprint-retrospectiva-sprint-33_v1.0.md](sprint-retrospectiva-sprint-33_v1.0.md) |
| Sprint 34 (caché de teselas offline web) | Cerrado (Cumplido; velocity 8) | [plan-iteracion-sprint-34_v1.0.md](plan-iteracion-sprint-34_v1.0.md) | [sprint-review-sprint-34_v1.0.md](sprint-review-sprint-34_v1.0.md) | [sprint-retrospectiva-sprint-34_v1.0.md](sprint-retrospectiva-sprint-34_v1.0.md) |
+| Sprint 35 (triage de Dependabot) | Cerrado (Cumplido; velocity 8) | [plan-iteracion-sprint-35_v1.0.md](plan-iteracion-sprint-35_v1.0.md) | [sprint-review-sprint-35_v1.0.md](sprint-review-sprint-35_v1.0.md) | [sprint-retrospectiva-sprint-35_v1.0.md](sprint-retrospectiva-sprint-35_v1.0.md) |
## Plantillas reusables
diff --git a/sdd2.0/docs/07_plan-sprint/plan-iteracion-sprint-35_v1.0.md b/sdd2.0/docs/07_plan-sprint/plan-iteracion-sprint-35_v1.0.md
new file mode 100644
index 0000000..d553fdc
--- /dev/null
+++ b/sdd2.0/docs/07_plan-sprint/plan-iteracion-sprint-35_v1.0.md
@@ -0,0 +1,87 @@
+# Plan de Iteración — Sprint 35
+
+**Proyecto:** GeoVial
+**Documento:** plan-iteracion-sprint-35_v1.0.md
+**Versión:** 1.0
+**Estado:** Cerrado
+**Fecha inicio:** 2027-10-05
+**Fecha fin:** 2027-10-16
+**Autor:** Scrum Master (AG-07), Equipo SDD 2.0
+
+## 1. Información general
+
+- Duración: 2 semanas (10 días hábiles).
+- Equipo: 4 integrantes (1 dev backend, 1 dev móvil, 1 dev fullstack, 1 QA part-time), `equipo_n: 4`.
+- Unidad de estimación: story points (Fibonacci).
+- Capacidad: promedio móvil de 3 sprints 8,0 SP (S32–S34); capacidad sugerida estricta 9 SP. Se compromete el **triage de los PRs de Dependabot** (8 SP): integrar las actualizaciones seguras y decidir sobre las mayores con criterio. Mantenimiento; sin lógica de dominio nueva.
+
+| Rol | Integrantes | Horas disponibles | Factor de focus | Capacidad efectiva |
+| --- | --- | --- | --- | --- |
+| Dev backend | 1 | 60 | 0,72 | 43 h |
+| Dev móvil | 1 | 60 | 0,70 | 42 h |
+| Dev fullstack | 1 | 60 | 0,70 | 42 h |
+| QA | 1 (part-time) | 30 | 0,65 | 19,5 h |
+
+## 2. Objetivo del sprint
+
+Consumir el primer lote de Dependabot (validó la configuración del Sprint 33: abrió 7 PRs, #37–#43): integrar las actualizaciones de bajo riesgo verificándolas con el gate, y **decidir con criterio** las mayores —no auto-mergear breaking changes—. En particular, se detecta que **FluentAssertions 8 cambió a licencia comercial**; se declina y se queda en la última 7.x libre.
+
+## 3. Historias y tareas comprometidas
+
+| ID | Tipo | Descripción | Prioridad | Estimación | Asignado | Estado |
+| --- | --- | --- | --- | --- | --- | --- |
+| BT-DEPS-TRIAGE | Tarea | Triage del primer lote de Dependabot: integrar lo seguro, diferir/declinar las mayores con justificación | Media | 8 | DevOps (AG-09) | Pendiente |
+
+Total de puntos comprometidos: 8 SP. Mantenimiento de dependencias; sin cambios de dominio. Verificable por el gate (build + 332 pruebas + cobertura).
+
+## 4. Alcance técnico
+
+**Integrar (seguro):**
+
+1. **#39 grupo minor/patch** (NuGet): AWSSDK.S3 3.7.405.4→3.7.511.8 (sigue en v3), SkiaSharp 2.88.8→2.88.9 (×2), Microsoft.IdentityModel.JsonWebTokens 8.18.0→8.19.1, Microsoft.Data.Sqlite 10.0.0→10.0.8, FluentAssertions 7.2.0→7.2.2 (última 7.x libre), xunit.runner.visualstudio 3.1.4→3.1.5.
+2. **#41 coverlet.collector** 6.0.4→10.0.1 y **#43 Microsoft.NET.Test.Sdk** 17.14.1→18.6.0 (tooling de tests; verificado por el gate).
+3. **#38 grupo de Actions**: checkout v4→v6, setup-dotnet v4→v5, upload-artifact v4→v7, docker/login-action v3→v4, docker/setup-buildx-action v3→v4, docker/build-push-action v6→v7. Los bumps de `ci.yml` los valida el propio PR (corre en `pull_request`); los de los workflows de publicación se validan en el próximo release con un tag `-rc` (checklist de release).
+4. **#37 Docker**: imagen de la db `mssql/server` 2022-latest→2025-latest (imagen de deploy; bajo riesgo).
+
+**Diferir:**
+
+5. **#40 AWSSDK.S3 4.0.24** (mayor): salto de major del SDK de AWS (el backend de fotos S3 lo usa). Requiere migración y prueba real contra S3; se queda en v3 (último patch de #39) y se difiere a un sprint dedicado.
+
+**Declinar:**
+
+6. **#42 FluentAssertions 8.10.0** (mayor): la v8 pasó a **licencia comercial** (de pago para uso comercial) y trae cambios de API. Se declina; se queda en la última 7.x libre (7.2.2). Se cierra el PR con la justificación.
+
+## 5. Definition of Done aplicada
+
+Se aplica la Definition of Done canónica. Criterios específicos:
+
+- Las actualizaciones seguras quedan integradas y la suite (332) + cobertura del gate siguen verdes.
+- Las mayores diferidas/declinadas quedan documentadas con su justificación; los PRs de Dependabot consumidos se cierran.
+- Build Release sin warnings tratados como error (las nuevas versiones no introducen warnings que rompan el gate).
+
+## 6. Riesgos del sprint y mitigaciones
+
+| Riesgo | Probabilidad | Impacto | Mitigación |
+| --- | --- | --- | --- |
+| Un bump menor introduce un warning bajo `TreatWarningsAsErrors` | Media | Bajo | Se compila y testea localmente antes de integrar; se revierte el bump problemático |
+| Los bumps de Actions de los workflows de publicación sólo se validan en tag | Media | Bajo | El checklist de release exige un `-rc` antes del stable; los de `ci.yml` los valida este PR |
+| FluentAssertions 8 (licencia) entra por descuido | Baja | Medio | Se declina explícitamente y se queda en 7.2.2; se documenta |
+
+## 7. Criterios de hecho del sprint
+
+El Sprint 35 se considera completo cuando las actualizaciones seguras están integradas con el gate verde (332 pruebas + cobertura), las mayores diferidas/declinadas están documentadas con su justificación (FluentAssertions por licencia, AWSSDK.S3 por migración), los PRs de Dependabot consumidos están cerrados, y se facilitan el sprint review y la retrospectiva.
+
+## 8. Trazabilidad
+
+| Dimensión | Referencia |
+| --- | --- |
+| Política | supply-chain-seguridad §4 (Dependabot), §6 (CVE) |
+| Origen | PRs de Dependabot #37–#43 (primer lote tras la config de S33) |
+| Calidad | definition-of-done §1; retro S33/S34 (atender PRs de Dependabot) |
+| Tests previstos | sin pruebas nuevas; verificación = gate verde con las versiones actualizadas |
+
+## 9. Control de cambios
+
+| Versión | Fecha | Descripción |
+| --- | --- | --- |
+| 1.0 | 2026-06-03 | Plan inicial del Sprint 35 (triage del primer lote de Dependabot): integrar minor/patch + Actions + Docker + tooling de tests; diferir AWSSDK.S3 v4; declinar FluentAssertions v8 (licencia comercial). Compromete 8 SP; sin lógica de dominio nueva. Generado por AG-07 |
diff --git a/sdd2.0/docs/07_plan-sprint/sprint-retrospectiva-sprint-35_v1.0.md b/sdd2.0/docs/07_plan-sprint/sprint-retrospectiva-sprint-35_v1.0.md
new file mode 100644
index 0000000..46de825
--- /dev/null
+++ b/sdd2.0/docs/07_plan-sprint/sprint-retrospectiva-sprint-35_v1.0.md
@@ -0,0 +1,49 @@
+# Sprint Retrospectiva — Sprint 35
+
+**Proyecto:** GeoVial
+**Documento:** sprint-retrospectiva-sprint-35_v1.0.md
+**Versión:** 1.0
+**Estado:** Cerrado
+**Fecha:** 2026-06-03
+**Autor:** Scrum Master (AG-07), Equipo SDD 2.0
+
+## 1. Qué salió bien
+
+- Dependabot demostró su valor de inmediato: 7 PRs reales (patch/seguridad/tooling) integrados en un sprint, con la config de S33 validada en vivo (NuGet agrupado, Actions, Docker).
+- El gate hizo su trabajo: integrar los bumps y correr 332 pruebas + cobertura dio confianza para mergear sin sorpresas.
+- La revisión de las mayores evitó un problema real: FluentAssertions 8 trae **licencia comercial**; auto-mergearlo habría metido una dependencia de pago sin que nadie lo decidiera.
+- Diferir AWSSDK.S3 v4 (en lugar de forzarlo) mantuvo el sistema estable y dejó la migración como trabajo consciente.
+
+## 2. Qué no salió bien
+
+- Los bumps de Actions de los workflows de publicación no se validan en este PR (sólo en tag); su verdad se sabrá en el próximo release `-rc`. Aceptable, pero es deuda de validación diferida.
+- El triage fue manual (leer cada PR, decidir, aplicar en una rama consolidada); con lotes más grandes esto escala mal sin reglas de auto-merge.
+- AWSSDK.S3 v4 quedó pendiente; mientras tanto, Dependabot seguirá reabriendo su PR hasta que se haga la migración.
+
+## 3. Qué probar
+
+- Configurar auto-merge de Dependabot para minor/patch que pasen el gate de CI, dejando sólo las mayores para revisión manual (reduce el trabajo de triage de los próximos lotes).
+- Agendar un sprint de migración a AWSSDK.S3 v4 con prueba real contra S3 (o el backend de fotos configurado).
+- Confirmar en el próximo release `-rc` que los bumps de Actions de los workflows de publicación siguen verdes.
+
+## 4. Acciones concretas
+
+| Acción | Responsable | Fecha compromiso | Estado |
+| --- | --- | --- | --- |
+| Evaluar auto-merge de Dependabot para minor/patch que pasen CI | AG-09 (DevOps) | 2027-10-30 | Pendiente |
+| Sprint de migración a AWSSDK.S3 v4 (con prueba contra S3) | AG-04 (backend) | 2027-10-30 | Pendiente |
+| Indicar a Dependabot que ignore el major de FluentAssertions (licencia) | AG-09 (DevOps) | 2027-10-30 | En curso |
+
+## 5. Seguimiento de acciones del sprint anterior
+
+| Acción del Sprint 34 | Estado actual |
+| --- | --- |
+| Unificar la URL/atribución de teselas también en `mapaRevision.js` (web) | Pendiente (se reitera) |
+| Evaluar offline de teselas en el móvil | Pendiente (se reitera) |
+| Mantenimiento continuo: atender PRs/alertas de Dependabot por SLA | Completada para el primer lote (este sprint); continúa con los próximos |
+
+## Control de cambios
+
+| Versión | Fecha | Descripción |
+| --- | --- | --- |
+| 1.0 | 2026-06-03 | Retrospectiva del Sprint 35 (triage de Dependabot): lote seguro integrado, FluentAssertions 8 declinado por licencia, AWSSDK.S3 v4 diferido; 3 acciones nuevas. Generada por AG-07 a partir de `template-sprint-retrospectiva_v1.0.md` |
diff --git a/sdd2.0/docs/07_plan-sprint/sprint-review-sprint-35_v1.0.md b/sdd2.0/docs/07_plan-sprint/sprint-review-sprint-35_v1.0.md
new file mode 100644
index 0000000..19cf067
--- /dev/null
+++ b/sdd2.0/docs/07_plan-sprint/sprint-review-sprint-35_v1.0.md
@@ -0,0 +1,70 @@
+# Sprint Review — Sprint 35
+
+**Proyecto:** GeoVial
+**Documento:** sprint-review-sprint-35_v1.0.md
+**Versión:** 1.0
+**Estado:** Cerrado
+**Fecha:** 2026-06-03
+**Autor:** Scrum Master (AG-07), Equipo SDD 2.0
+
+## 1. Objetivo del sprint y resultado
+
+Cita literal del sprint goal de `plan-iteracion-sprint-35_v1.0.md`:
+
+> Consumir el primer lote de Dependabot: integrar las actualizaciones de bajo riesgo verificándolas con el gate, y **decidir con criterio** las mayores —no auto-mergear breaking changes—.
+
+Veredicto: Cumplido.
+
+Explicación corta: Dependabot (configurado en S33) abrió 7 PRs (#37–#43) —lo que de paso **confirmó en vivo** que la configuración funciona (NuGet con agrupación, Actions y Docker)—. Se integraron los de bajo riesgo verificándolos con el gate (332 pruebas + cobertura verdes): el grupo minor/patch (#39), `coverlet.collector` 6→10 (#41) y `Microsoft.NET.Test.Sdk` 17→18 (#43), el grupo de Actions (#38) y la imagen de la db `mssql/server` 2022→2025 (#37). Se **difirió** `AWSSDK.S3` v4 (#40) por ser un salto de major del SDK que necesita migración y prueba real contra S3 (se queda en el último patch de v3 que trae #39). Y se **declinó** `FluentAssertions` v8 (#42) porque la v8 pasó a **licencia comercial**; se queda en la última 7.x libre (7.2.2). Los bumps de `ci.yml` los valida el propio PR (corre en `pull_request`); los de los workflows de publicación se validarán en el próximo release con un tag `-rc` (checklist de release de S33).
+
+## 2. Demos realizadas
+
+| ID | Tipo | Descripción de la demo | Feedback del Product Owner |
+| --- | --- | --- | --- |
+| EP-09 | Supply-chain | Dependabot abrió 7 PRs (NuGet agrupado, Actions, Docker): la config de S33 funciona | Vigilancia de dependencias confirmada |
+| EP-09 | Mantenimiento | Lote seguro integrado con el gate verde (332 pruebas + cobertura) | Dependencias al día sin romper |
+| EP-09 | Criterio | FluentAssertions 8 declinado por licencia comercial; AWSSDK.S3 v4 diferido | Decisiones de major con fundamento |
+
+## 3. Feedback recibido
+
+- El valor de Dependabot quedó claro: 7 actualizaciones reales esperando, varias de seguridad/patch, integradas en un solo sprint.
+- La decisión sobre las mayores fue el punto clave: auto-mergear FluentAssertions 8 habría metido una dependencia de **licencia de pago**; revisarlo lo evitó.
+- Diferir AWSSDK.S3 v4 (en vez de forzarlo) es lo correcto: un salto de major de un SDK con backend real merece su propio sprint y prueba contra S3.
+
+## 4. Métricas del sprint
+
+| Métrica | Valor |
+| --- | --- |
+| Puntos comprometidos | 8 |
+| Puntos completados | 8 |
+| Velocity efectiva | 8 |
+| Ratio de completitud | 100 % |
+| Defectos detectados durante el sprint | 0 |
+
+Pruebas: 332 verdes (295 unitarias + 37 de integración), sin cambio de conteo: es mantenimiento de dependencias sin lógica nueva. Cobertura del gate (run unitario): Domain líneas 89,7 % / branches 79,8 %; Application 90,0 % / 82,0 % —se mantiene con `coverlet` 10 y `Test.Sdk` 18—. Build Release sin warnings tratados como error con las nuevas versiones.
+
+## 5. Items completados vs comprometidos
+
+| ID | Tipo | Estado final |
+| --- | --- | --- |
+| BT-DEPS-TRIAGE | Tarea | Aceptada (lote seguro integrado y verificado; AWSSDK.S3 v4 diferido, FluentAssertions v8 declinado por licencia) |
+
+## 6. Carry-over al siguiente sprint
+
+| ID | Tipo | Puntos | Motivo del traslado |
+| --- | --- | --- | --- |
+| — | — | 0 | Ningún ítem comprometido en el Sprint 35 se traslada. |
+
+Backlog: migración a AWSSDK.S3 v4 (sprint dedicado con prueba contra S3); mejoras opcionales del mapa (offline de teselas en el móvil); y el mantenimiento continuo de los próximos lotes de Dependabot.
+
+## 7. Decisiones tomadas durante el review
+
+- Integrar el grupo minor/patch y el tooling de tests verificándolos con el gate; tomar los bumps de Actions y de la imagen db.
+- **Declinar** FluentAssertions 8 (licencia comercial) y fijar en 7.2.2; **diferir** AWSSDK.S3 v4 a un sprint de migración.
+- Cerrar los PRs de Dependabot consumidos (auto-cerrados al integrar las mismas versiones) e indicar a Dependabot que ignore el major de FluentAssertions.
+
+## Control de cambios
+
+| Versión | Fecha | Descripción |
+| --- | --- | --- |
+| 1.0 | 2026-06-03 | Sprint review del Sprint 35 (triage del primer lote de Dependabot). Veredicto Cumplido, velocity 8, 0 carry-over, 332 pruebas verdes. FluentAssertions 8 declinado (licencia), AWSSDK.S3 v4 diferido. Generado por AG-07 a partir de `template-sprint-review_v1.0.md` |
diff --git a/sdd2.0/docs/07_plan-sprint/velocidad-equipo_v1.0.md b/sdd2.0/docs/07_plan-sprint/velocidad-equipo_v1.0.md
index 0351d8c..080ae75 100644
--- a/sdd2.0/docs/07_plan-sprint/velocidad-equipo_v1.0.md
+++ b/sdd2.0/docs/07_plan-sprint/velocidad-equipo_v1.0.md
@@ -2,12 +2,12 @@
**Proyecto:** GeoVial
**Documento:** velocidad-equipo_v1.0.md
-**Versión:** 3.14
+**Versión:** 3.15
**Estado:** En curso
**Fecha:** 2026-06-03
**Autor:** Scrum Master (AG-07), Equipo SDD 2.0
-> Tracking actualizado al cierre del Sprint 34. La tabla §1 registra la velocity efectiva de los Sprint 00 a 34 ya ejecutados. El promedio móvil de 3 sprints se puebla desde S02 (con S00, S01, S02).
+> Tracking actualizado al cierre del Sprint 35. La tabla §1 registra la velocity efectiva de los Sprint 00 a 35 ya ejecutados. El promedio móvil de 3 sprints se puebla desde S02 (con S00, S01, S02).
## 1. Por sprint
@@ -48,16 +48,17 @@
| S32 | 8 | 8 | 8 | 8,0 | Mapa interactivo de la revisión sobre OSM en el **móvil** (US-21): núcleo `MapaRevisionHtml` (arma el HTML Leaflet+OSM+pines) en el gate + pantalla MAUI `MapaRevisionPage` (WebView) fuera de CI, sin clave ni dependencia NuGet nueva. Unifica la visualización geográfica web+móvil. 0 carry-over; 325 pruebas verdes (+5 unitarias) |
| S33 | 8 | 8 | 8 | 8,0 | Mantenimiento supply-chain: `.github/dependabot.yml` (NuGet/Actions/Docker×3, semanal, agrupado) + checklist de release que institucionaliza la validación con tag preview `-rc` antes del stable (lección S29); supply-chain §4 a v1.4. 0 carry-over; 325 pruebas verdes (DevOps, sin lógica nueva) |
| S34 | 8 | 8 | 8 | 8,0 | Caché de teselas (offline parcial web, US-21): Service Worker `sw-teselas.js` (cache-first, FIFO 500) que cachea las teselas OSM visitadas + núcleo `MapaTeselas` (config + `EsUrlDeTesela`) en el gate, reusado por `MapaRevisionHtml`. 0 carry-over; 332 pruebas verdes (+7 unitarias) |
+| S35 | 8 | 8 | 8 | 8,0 | Triage del primer lote de Dependabot (config de S33, 7 PRs): integrado el lote seguro (grupo minor/patch, coverlet 10, Test.Sdk 18, grupo Actions, imagen db 2025) con el gate verde; AWSSDK.S3 v4 diferido (migración) y FluentAssertions 8 declinado (licencia comercial → se queda en 7.2.2). 0 carry-over; 332 pruebas verdes (mantenimiento, sin lógica nueva) |
El promedio móvil de 3 sprints queda disponible en S02 (29,3 SP, sobre S00/S01/S02).
## 2. Tendencia
-Treinta y cinco sprints registrados (S00: 21, S01: 40, S02: 27, S03: 28, S04: 24, S05: 13, S06: 13, S07: 16, S08: 11, S09: 13, S10: 13, S11: 13, S12: 13, S13: 8, S14: 8, S15: 11, S16: 8, S17: 10, S18: 8, S19: 8, S20: 8, S21: 8, S22: 8, S23: 8, S24: 8, S25: 8, S26: 8, S27: 8, S28: 8, S29: 8, S30: 8, S31: 8, S32: 8, S33: 8, S34: 8). El promedio móvil de 3 sprints se mantuvo en 8,0 SP (ventana S32–S34): diecisiete sprints consecutivos de 8 SP (S18–S34), una cadencia muy estable de alcance acotado (E2E, supply-chain, pulido de producto, consolidación de pruebas, release, mapa web+móvil, mantenimiento y offline). La desviación de S34 respecto de su ventana previa es 0 %. Descontados los efectos de planificación, los sprints de módulo completo del arranque (S02: 27, S03: 28, S04: 24) siguen marcando el techo de 24–28 SP. Con el release stable v1.0.0 publicado, el mapa interactivo en web y móvil (con offline parcial de teselas en la web) y el mantenimiento de supply-chain configurado, el MVP de producto queda completo; lo restante son mejoras opcionales (offline de teselas en el móvil, bundle de Leaflet en el móvil) y el mantenimiento continuo que abra Dependabot.
+Treinta y seis sprints registrados (S00: 21, S01: 40, S02: 27, S03: 28, S04: 24, S05: 13, S06: 13, S07: 16, S08: 11, S09: 13, S10: 13, S11: 13, S12: 13, S13: 8, S14: 8, S15: 11, S16: 8, S17: 10, S18: 8, S19: 8, S20: 8, S21: 8, S22: 8, S23: 8, S24: 8, S25: 8, S26: 8, S27: 8, S28: 8, S29: 8, S30: 8, S31: 8, S32: 8, S33: 8, S34: 8, S35: 8). El promedio móvil de 3 sprints se mantuvo en 8,0 SP (ventana S33–S35): dieciocho sprints consecutivos de 8 SP (S18–S35), una cadencia muy estable de alcance acotado (E2E, supply-chain, pulido de producto, consolidación de pruebas, release, mapa web+móvil, mantenimiento, offline y triage de dependencias). La desviación de S35 respecto de su ventana previa es 0 %. Descontados los efectos de planificación, los sprints de módulo completo del arranque (S02: 27, S03: 28, S04: 24) siguen marcando el techo de 24–28 SP. Con el release stable v1.0.0 publicado, el mapa interactivo en web y móvil (con offline parcial de teselas en la web) y el mantenimiento de supply-chain en marcha (Dependabot vigente, primer lote consumido), el MVP de producto queda completo; lo restante son mejoras opcionales (offline de teselas en el móvil) y el mantenimiento continuo (próximos lotes de Dependabot, migración a AWSSDK.S3 v4).
## 3. Capacidad ajustada
-Con el promedio móvil de 3 sprints en 8,0 SP (S34), la capacidad sugerida estricta para S35 sería de hasta 9 SP (110 % del promedio móvil). Con el MVP de producto completo, el mapa con offline parcial de teselas en la web y el mantenimiento de supply-chain configurado, el trabajo restante son mejoras opcionales (offline de teselas en el móvil, bundle de Leaflet en la app móvil, unificar la URL de teselas también en el JS de la web) y el mantenimiento continuo (atender los PRs/alertas de Dependabot por SLA de CVE; evaluar automatizar la regla `-rc` como check de CI). La velocity se sigue comparando sobre el equipo con frente backend + móvil; el promedio móvil de 8,0 SP refleja la cadencia de alcance acotado (una historia por sprint), no un límite real de capacidad: los módulos completos del arranque marcaron 24–28 SP.
+Con el promedio móvil de 3 sprints en 8,0 SP (S35), la capacidad sugerida estricta para S36 sería de hasta 9 SP (110 % del promedio móvil). Con el MVP de producto completo y el mantenimiento de dependencias en marcha (primer lote de Dependabot consumido), el trabajo restante son mejoras opcionales (offline de teselas en el móvil, unificar la URL de teselas en el JS web) y el mantenimiento continuo (próximos lotes de Dependabot —evaluar auto-merge de minor/patch que pasen CI—, y la migración a AWSSDK.S3 v4 con prueba real contra S3). La velocity se sigue comparando sobre el equipo con frente backend + móvil; el promedio móvil de 8,0 SP refleja la cadencia de alcance acotado (una historia por sprint), no un límite real de capacidad: los módulos completos del arranque marcaron 24–28 SP.
## 4. Outliers explicados
@@ -109,3 +110,4 @@ A medida que se registren velocities, todo sprint cuyo valor se desvíe más del
| 3.12 | 2026-06-03 | Registro de la velocity efectiva del Sprint 32: S32=8 (0 carry-over). Promedio móvil de 3 sprints (S30–S32) = 8,0; capacidad sugerida estricta para S33 = 9 SP. Mapa interactivo de la revisión sobre OSM en el móvil (WebView+Leaflet, sin clave); desviación 0 %. Por AG-07 |
| 3.13 | 2026-06-03 | Registro de la velocity efectiva del Sprint 33: S33=8 (0 carry-over). Promedio móvil de 3 sprints (S31–S33) = 8,0; capacidad sugerida estricta para S34 = 9 SP. Mantenimiento supply-chain (Dependabot + checklist de release con `-rc`); desviación 0 %. Por AG-07 |
| 3.14 | 2026-06-03 | Registro de la velocity efectiva del Sprint 34: S34=8 (0 carry-over). Promedio móvil de 3 sprints (S32–S34) = 8,0; capacidad sugerida estricta para S35 = 9 SP. Caché de teselas por Service Worker (offline parcial del mapa web); desviación 0 %. Por AG-07 |
+| 3.15 | 2026-06-03 | Registro de la velocity efectiva del Sprint 35: S35=8 (0 carry-over). Promedio móvil de 3 sprints (S33–S35) = 8,0; capacidad sugerida estricta para S36 = 9 SP. Triage del primer lote de Dependabot (integrado lo seguro; AWSSDK.S3 v4 diferido, FluentAssertions 8 declinado por licencia); desviación 0 %. Por AG-07 |
diff --git a/src/GeoVial.Infrastructure/GeoVial.Infrastructure.csproj b/src/GeoVial.Infrastructure/GeoVial.Infrastructure.csproj
index 18bccae..d021ad1 100644
--- a/src/GeoVial.Infrastructure/GeoVial.Infrastructure.csproj
+++ b/src/GeoVial.Infrastructure/GeoVial.Infrastructure.csproj
@@ -8,9 +8,9 @@
-
-
-
+
+
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
@@ -21,7 +21,7 @@
-
+
diff --git a/src/GeoVial.Sync/GeoVial.Sync.csproj b/src/GeoVial.Sync/GeoVial.Sync.csproj
index df0fd6b..d3767e7 100644
--- a/src/GeoVial.Sync/GeoVial.Sync.csproj
+++ b/src/GeoVial.Sync/GeoVial.Sync.csproj
@@ -28,7 +28,7 @@
-
+
diff --git a/tests/GeoVial.IntegrationTests/GeoVial.IntegrationTests.csproj b/tests/GeoVial.IntegrationTests/GeoVial.IntegrationTests.csproj
index d121181..3871775 100644
--- a/tests/GeoVial.IntegrationTests/GeoVial.IntegrationTests.csproj
+++ b/tests/GeoVial.IntegrationTests/GeoVial.IntegrationTests.csproj
@@ -8,12 +8,12 @@
-
-
+
+
-
+
-
+
diff --git a/tests/GeoVial.UnitTests/GeoVial.UnitTests.csproj b/tests/GeoVial.UnitTests/GeoVial.UnitTests.csproj
index 2577f94..a4e1c61 100644
--- a/tests/GeoVial.UnitTests/GeoVial.UnitTests.csproj
+++ b/tests/GeoVial.UnitTests/GeoVial.UnitTests.csproj
@@ -8,13 +8,13 @@
-
-
+
+
-
+
-
+