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
6 changes: 3 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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'

Expand All @@ -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'
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/publish-images.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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 }}
Expand All @@ -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
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/publish-sync.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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'

Expand Down Expand Up @@ -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: |
Expand Down
2 changes: 1 addition & 1 deletion infra/db/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -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
3 changes: 2 additions & 1 deletion sdd2.0/docs/07_plan-sprint/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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

Expand Down
87 changes: 87 additions & 0 deletions sdd2.0/docs/07_plan-sprint/plan-iteracion-sprint-35_v1.0.md
Original file line number Diff line number Diff line change
@@ -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 |
49 changes: 49 additions & 0 deletions sdd2.0/docs/07_plan-sprint/sprint-retrospectiva-sprint-35_v1.0.md
Original file line number Diff line number Diff line change
@@ -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` |
70 changes: 70 additions & 0 deletions sdd2.0/docs/07_plan-sprint/sprint-review-sprint-35_v1.0.md
Original file line number Diff line number Diff line change
@@ -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` |
Loading