diff --git a/dev/issues/0121-e2e-checks-coverage-masa.md b/dev/issues/0121-e2e-checks-coverage-masa.md index c26b24e7..6434aa46 100644 --- a/dev/issues/0121-e2e-checks-coverage-masa.md +++ b/dev/issues/0121-e2e-checks-coverage-masa.md @@ -1,8 +1,8 @@ --- id: "0121" -title: "Cobertura e2e_checks: design-e2e batch sobre apps sin contrato" -status: pendiente -type: chore +title: "EPIC: Cobertura e2e_checks masiva (design + doctor + apply)" +status: in-progress +type: epic domain: - registry-quality - meta @@ -15,10 +15,19 @@ blocks: related: - "0068" created: 2026-05-18 -updated: 2026-05-18 -tags: [e2e_checks, recopilador, batch, coverage] +updated: 2026-05-19 +tags: [e2e_checks, recopilador, batch, coverage, epic] --- +# Sub-issues + +- `0121a` — design-e2e batch (yo orquesto N fn-recopilador paralelos, propuestas en `dev/proposals_e2e_checks_0121/`) +- `0121b` — `audit_e2e_coverage_go_infra` + `fn doctor e2e-coverage` (via /autonomous-task, tipo feature_app_simple) +- `0121c` — aplicar propuestas: N `/autonomous-task add_e2e_check` (1 por app) en paralelo + +Cierra el epic cuando los 3 hijos cierren + coverage >=80%. + + # 0121 — Cobertura e2e_checks masiva via fn-recopilador batch ## Problema diff --git a/dev/issues/0121a-design-e2e-batch.md b/dev/issues/0121a-design-e2e-batch.md new file mode 100644 index 00000000..bfa8b70e --- /dev/null +++ b/dev/issues/0121a-design-e2e-batch.md @@ -0,0 +1,53 @@ +--- +id: "0121a" +title: "design-e2e batch: fn-recopilador paralelo sobre apps sin contrato" +status: pendiente +type: chore +domain: + - registry-quality +scope: registry +priority: alta +depends: + - "0120" +blocks: + - "0121c" +related: + - "0121" + - "0068" +created: 2026-05-19 +updated: 2026-05-19 +tags: [e2e_checks, recopilador, batch, design] +--- + +# 0121a — Design-e2e batch + +## Problema + +>20 apps sin bloque `e2e_checks` en `app.md`. Sin contrato, `fn-analizador` no puede validar y el bucle reactivo opera amputado. + +## Decision + +Lanzar `fn-recopilador` en modo `design-e2e ` en paralelo sobre TODAS las apps sin contrato. NO via `/autonomous-task` (no encaja en tipos soportados) — orquestacion manual desde Claude (1 mensaje, N tool_use blocks). + +Cada output = propuesta de bloque YAML guardada en `dev/proposals_e2e_checks_0121/.yaml`. Humano (o 0121c) aplica via PR. + +## Tareas + +1. Listar apps sin `e2e_checks:` con grep -L. +2. Spawn `fn-recopilador design-e2e ` paralelo (1 Agent call con N tool_use blocks). +3. Crear carpeta `dev/proposals_e2e_checks_0121/` y volcar 1 yaml por app. +4. Commit la carpeta a master. Push. + +## Acceptance + +- [ ] `dev/proposals_e2e_checks_0121/` existe con >=1 yaml por app sin contrato detectada. +- [ ] Cada yaml es directamente pegable al `e2e_checks:` del `app.md` correspondiente. +- [ ] Index file `dev/proposals_e2e_checks_0121/README.md` lista las apps + path al yaml. +- [ ] Commit + push a master del registry. + +## DoD + +- **Donde**: carpeta `dev/proposals_e2e_checks_0121/` visible en repo. +- **Latencia**: batch completo <10 min. +- **Como vuelve**: `ls dev/proposals_e2e_checks_0121/` o `cat README.md`. +- **Onboarding**: "Para aplicar las propuestas a una app concreta, copia el yaml al `app.md` o lanza /autonomous-task 0121c-." diff --git a/dev/issues/0121b-fn-doctor-e2e-coverage.md b/dev/issues/0121b-fn-doctor-e2e-coverage.md new file mode 100644 index 00000000..efa5e95f --- /dev/null +++ b/dev/issues/0121b-fn-doctor-e2e-coverage.md @@ -0,0 +1,54 @@ +--- +id: "0121b" +title: "audit_e2e_coverage_go_infra + fn doctor e2e-coverage subcmd" +status: pendiente +type: feature +domain: + - registry-quality +scope: registry +priority: alta +depends: + - "0120" +blocks: [] +related: + - "0121" +created: 2026-05-19 +updated: 2026-05-19 +tags: [doctor, coverage, e2e_checks, fn-constructor] +--- + +# 0121b — fn doctor e2e-coverage + +## Problema + +No hay forma de medir cuantas apps tienen `e2e_checks` declarado. Sin metrica, no se puede gatear coverage ni reportar progreso de 0121. + +## Decision + +1. Crear funcion del registry `audit_e2e_coverage_go_infra` que escanea `apps/`, `cpp/apps/`, `projects/*/apps/`, parsea frontmatter `app.md`, devuelve `{total, with_checks, missing[], coverage_pct}`. +2. Anadir subcomando `fn doctor e2e-coverage` en `cmd/fn/doctor.go` que invoca la funcion + formatea output (text + `--json`). + +## Tareas + +1. Crear funcion via `fn-constructor` (Go, domain `infra`). +2. Editar `cmd/fn/doctor.go` para anadir subcmd `e2e-coverage`. +3. Tests unitarios de la funcion. +4. `./fn doctor e2e-coverage` muestra reporte. + +## Acceptance + +- [ ] `audit_e2e_coverage_go_infra` indexada en registry.db con `signature`, `params_schema`, tests >=1. +- [ ] `fn doctor e2e-coverage --json` devuelve JSON con campos `{total, with_checks, missing, coverage_pct}`. +- [ ] `fn doctor e2e-coverage` (text) muestra tabla legible. +- [ ] Sin warnings en `fn doctor` global. + +## DoD + +- **Donde**: terminal (`fn doctor e2e-coverage`). +- **Latencia**: <2s. +- **Como vuelve**: `fn doctor` rutinario tras editar `app.md`. +- **Onboarding**: "Antes de cerrar issue que toca app, ejecuta `fn doctor e2e-coverage` para no bajar coverage." + +## Tipo orquestador + +`feature_app_simple` (1 funcion + 1 subcmd, scope acotado, criterios verificables). Apto para `/autonomous-task 0121b`. diff --git a/dev/issues/0121c-apply-e2e-proposals.md b/dev/issues/0121c-apply-e2e-proposals.md new file mode 100644 index 00000000..696eac88 --- /dev/null +++ b/dev/issues/0121c-apply-e2e-proposals.md @@ -0,0 +1,57 @@ +--- +id: "0121c" +title: "Aplicar propuestas e2e_checks: N /autonomous-task add_e2e_check paralelos" +status: pendiente +type: chore +domain: + - registry-quality +scope: registry +priority: media +depends: + - "0121a" + - "0121b" +blocks: + - "0122" +related: + - "0121" +created: 2026-05-19 +updated: 2026-05-19 +tags: [e2e_checks, autonomous, batch, apply] +--- + +# 0121c — Aplicar propuestas e2e + +## Problema + +0121a deja propuestas en `dev/proposals_e2e_checks_0121/.yaml`. Aplicarlas 1 a 1 a mano es trabajo de N PRs idempotentes — perfecto para `/autonomous-task add_e2e_check` en paralelo. + +## Decision + +Por cada `.yaml`: +1. Si la app cumple coverage objetivo y la propuesta no tiene riesgos altos → `/autonomous-task 0121c-` con spec que apunta al yaml. +2. Cada autonomous-task abre PR en el sub-repo `dataforge/` con el bloque pegado. +3. Humano (o futuro `fn-revisor` de 0122) mergea. + +## Tareas + +1. Listar propuestas pendientes en `dev/proposals_e2e_checks_0121/`. +2. Para cada app: spawn `/autonomous-task` con task_spec inline (path al yaml + target app.md). +3. Coleccionar PR URLs en `dev/proposals_e2e_checks_0121/PRS.md`. +4. Cuando `fn doctor e2e-coverage >=80%`, cerrar issue. + +## Acceptance + +- [ ] PR creado por cada propuesta no rechazada. +- [ ] `fn doctor e2e-coverage --json` reporta `coverage_pct >= 80`. +- [ ] `dev/proposals_e2e_checks_0121/PRS.md` lista cada PR URL + estado (open/merged/closed). + +## DoD + +- **Donde**: PRs en sub-repos Gitea + reporte coverage. +- **Latencia**: 1 autonomous-task = <5 min por app. Paralelo razonable: 5 simultaneos. +- **Como vuelve**: `cat dev/proposals_e2e_checks_0121/PRS.md` para ver estado. +- **Onboarding**: "Si un PR queda open, revisa manual o re-lanza `/autonomous-task 0121c-` para reanudar (idempotente por regla 6 orquestador)." + +## Tipo orquestador + +`add_e2e_check` (1 PR por app, scope minimal). Multiples ejecuciones independientes — paraleliza sin colision (sub-repos distintos).