Files
fn_registry/dev/issues/0054-deploy-server-registry-first-refactor.md
T
egutierrez c149ea161f docs(issues): 0054-0062 — deudas detectadas en sesion fn doctor
Nueve issues nuevos cubriendo deudas tecnicas descubiertas tras
ejecutar fn doctor por primera vez:

- 0054 deploy_server: reimplementa SSH/systemd/rsync inline en lugar
  de usar funciones del registry (alta).
- 0055 docker_tui: usa docker CLI directo via shell en lugar de
  docker_* del registry (alta).
- 0056 audit_uses_functions: heuristica Python no detecta
  `from pkg.subpkg import X` (media).
- 0057 audit_uses_functions: deteccion de simbolos Go con
  abreviaturas falla en algunos casos (baja).
- 0058 kanban uses_functions sync deferido por WIP en curso (baja).
- 0059 doble tracking de apps/*/app.md (fn_registry + sub-repo)
  inconsistencia (media).
- 0060 fn doctor secrets: subcomando para audit secrets en TODOS
  los repos (media).
- 0061 integrar notify_telegram en deploy_server + bucle reactivo
  (media, depende de 0054).
- 0062 politica de deprecacion para 704 funciones sin consumidores
  (baja, research).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 02:16:43 +02:00

88 lines
4.9 KiB
Markdown

# 0054 — deploy_server: refactor registry-first (SSH/systemd/rsync/health/docker-compose)
## APP Metadata
| Campo | Valor |
|-------|-------|
| **ID** | 0054 |
| **Estado** | pendiente |
| **Prioridad** | alta |
| **Tipo** | refactor — `apps/deploy_server/` |
## Dependencias
- 13 funciones del registry ya existentes y testeadas:
- `ssh_check_go_infra`, `ssh_exec_go_infra`, `ssh_upload_go_infra`, `ssh_config_read_go_infra`, `ssh_config_find_go_infra`
- `systemd_install_go_infra`, `systemd_restart_go_infra`, `systemd_status_go_infra`, `systemd_generate_unit_go_infra` (pure)
- `rsync_deploy_bash_infra`, `docker_compose_remote_deploy_bash_infra`
- `health_check_http_go_infra`
- `vps_setup_app_go_infra`
- Pipelines `deploy_app_remote_go_infra` y `setup_vps_app_go_infra` orquestan varias.
## Contexto
`fn doctor uses-functions` (2026-05-07) detecto que `apps/deploy_server/` no importa NADA del registry. Toda la logica SSH/systemd/rsync/health/docker-compose esta reimplementada inline en `deployer.go` (`d.sshCheck`, `d.sshExec`, `d.rsyncDeploy`, `d.healthCheck`, `d.generateUnit`, `d.installUnit`, `deployDockerCompose`).
Esta es la violacion mas grande de la regla `registry-first.md` actualmente activa. La app fue construida antes de que existieran las funciones del registry equivalentes; las funciones se crearon despues pero deploy_server quedo sin migrar.
Tras sincronizar `app.md` (2026-05-07) las 13 funciones se quitaron del frontmatter — ahora refleja la realidad pero la deuda real (registry-first compliance) sigue.
## Objetivo
Reemplazar implementaciones inline de `deployer.go` por llamadas a las funciones del registry. Resultado:
1. `apps/deploy_server/*.go` importa `fn-registry/functions/infra` y `fn-registry/functions/cybersecurity` segun corresponda.
2. `app.md` declara las 13 funciones en `uses_functions`.
3. Los tests existentes siguen pasando.
4. `fn doctor uses-functions` reporta `deploy_server_go_infra` sin drift.
## Arquitectura
### Archivos afectados
- `apps/deploy_server/deployer.go` — ELIMINAR metodos `sshCheck`, `sshExec`, `sshUpload`, `rsyncDeploy`, `healthCheck`, `generateUnit`, `installUnit` y reemplazar por llamadas a funciones del registry.
- `apps/deploy_server/docker_compose.go` — sustituir `deployDockerCompose` por `docker_compose_remote_deploy_bash_infra`.
- `apps/deploy_server/handlers.go` (probable) — actualizar callsites.
- `apps/deploy_server/app.md` — anadir las 13 deps en `uses_functions`.
- `apps/deploy_server/go.mod` — anadir `replace fn-registry => ../..` si no esta.
## Tareas
### Fase 1 — preparacion
1.1 Listar callsites actuales en deployer.go (`grep -n 'd\.\(sshCheck\|sshExec\|sshUpload\|rsyncDeploy\|healthCheck\|generateUnit\|installUnit\)\|deployDockerCompose'`).
1.2 Verificar firmas de las funciones del registry vs los metodos inline. Documentar diferencias (parametros distintos, error wrapping).
1.3 Anadir `replace` directive en `go.mod` si falta.
### Fase 2 — migracion SSH
2.1 Reemplazar `d.sshCheck` por `infra.SshCheck`.
2.2 Reemplazar `d.sshExec` por `infra.SshExec`.
2.3 Reemplazar `d.sshUpload` por `infra.SshUpload`.
2.4 Test build: `go build` en deploy_server.
### Fase 3 — migracion systemd
3.1 Reemplazar `d.generateUnit` por `infra.SystemdGenerateUnit`.
3.2 Reemplazar `d.installUnit` por `infra.SystemdInstall`.
3.3 Reemplazar restart/status por `infra.SystemdRestart`, `infra.SystemdStatus`.
### Fase 4 — migracion rsync + http + docker-compose
4.1 Reemplazar `d.rsyncDeploy` por shell-out a `bash/functions/infra/rsync_deploy.sh` (es bash, no Go).
4.2 Reemplazar `d.healthCheck` por `infra.HealthCheckHTTP`.
4.3 Reemplazar `deployDockerCompose` por shell-out a `bash/functions/infra/docker_compose_remote_deploy.sh`.
### Fase 5 — tests + docs
5.1 Correr tests existentes. Si hay mocks de los metodos privados, actualizar.
5.2 Actualizar `app.md` `uses_functions` con las 13 IDs (orden alfabetico).
5.3 `fn index` y `fn doctor uses-functions` debe reportar deploy_server limpio.
5.4 Update CHANGELOG.md con la migracion.
## Riesgos
- Las firmas inline pueden tener parametros adicionales que las del registry no exponen. Mitigacion: si la diferencia es real, abrir proposal para extender la funcion del registry, NO duplicar inline.
- Tests con mocks de metodos privados rompen. Mitigacion: convertir a integration tests contra docker container o servidor SSH local.
- Build cross-platform: si `infra` paquete tiene CGo y deploy_server cross-compila, validar build linux/windows.
## Decisiones de diseno
- **No crear adapter layer**. Llamada directa a las funciones del registry. Si la firma cambia entre version, se actualiza el callsite — el costo es bajo y mantiene la regla registry-first sin ceremonia.
- Las funciones bash (`rsync_deploy`, `docker_compose_remote_deploy`) se invocan via `os/exec` con `bash <script_path>`. NO portar a Go solo para "estar en el mismo lenguaje" — la version bash funciona y es la que el registry mantiene.