fad4006f60
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
104 lines
4.4 KiB
Markdown
104 lines
4.4 KiB
Markdown
---
|
|
id: "0055"
|
|
title: "docker_tui: refactor para usar funciones docker_* del registry"
|
|
status: pendiente
|
|
type: refactor
|
|
domain:
|
|
- registry-quality
|
|
scope: multi-app
|
|
priority: alta
|
|
depends: []
|
|
blocks: []
|
|
related: []
|
|
created: 2026-05-17
|
|
updated: 2026-05-17
|
|
tags: []
|
|
---
|
|
# 0055 — docker_tui: refactor para usar funciones docker_* del registry
|
|
|
|
## APP Metadata
|
|
|
|
| Campo | Valor |
|
|
|-------|-------|
|
|
| **ID** | 0055 |
|
|
| **Estado** | pendiente |
|
|
| **Prioridad** | alta |
|
|
| **Tipo** | refactor — `apps/docker_tui/` |
|
|
|
|
## Dependencias
|
|
|
|
- 12 funciones del registry ya existentes:
|
|
- `docker_pull_image_go_infra`, `docker_list_containers_go_infra`, `docker_remove_container_go_infra`
|
|
- `docker_remove_image_go_infra`, `docker_remove_network_go_infra`, `docker_create_network_go_infra`
|
|
- `docker_stop_container_go_infra`, `docker_start_container_go_infra`, `docker_list_images_go_infra`
|
|
- `docker_inspect_container_go_infra`, `docker_run_container_go_infra`, `docker_container_logs_go_infra`
|
|
- Tipos relacionados en `functions/infra/` (Container, Image, Network).
|
|
|
|
## Contexto
|
|
|
|
`fn doctor uses-functions` (2026-05-07) detecto que `apps/docker_tui/` ejecuta el CLI `docker` directamente via `shell.RunWithTimeout` en `views/docker.go` (`ListContainers`, `StartContainer`, `StopContainer`...). Cero consumo del registry.
|
|
|
|
Como en `0054`, la TUI fue construida antes de que existieran las funciones equivalentes en `functions/infra/`. Las 12 docker_* del registry parsean output JSON de docker CLI y devuelven tipos Go — exactamente lo que la TUI necesita.
|
|
|
|
Tras sincronizar `app.md` (2026-05-07) las 12 funciones se quitaron — ahora refleja la realidad, pero la deuda registry-first persiste.
|
|
|
|
## Objetivo
|
|
|
|
Reemplazar `views/docker.go` (y similares) por llamadas a `functions/infra/docker_*.go`. Resultado:
|
|
|
|
1. `apps/docker_tui/views/docker.go` importa `fn-registry/functions/infra`.
|
|
2. `app.md` declara las 12 docker_* funciones en `uses_functions`.
|
|
3. TUI sigue funcionando identica (acciones lentas se mantienen lentas, no es regresion).
|
|
4. `fn doctor uses-functions` reporta docker_tui limpio.
|
|
|
|
## Arquitectura
|
|
|
|
### Archivos afectados
|
|
|
|
- `apps/docker_tui/views/docker.go` — sustituir todas las llamadas inline a docker CLI por funciones del registry.
|
|
- `apps/docker_tui/app.md` — anadir 12 deps en `uses_functions`.
|
|
- Probable: `apps/docker_tui/handlers/` o similar segun estructura.
|
|
|
|
## Tareas
|
|
|
|
### Fase 1 — preparacion
|
|
1.1 Listar callsites a docker CLI: `grep -rn 'shell\.Run.*docker\|exec\.Command.*"docker"' apps/docker_tui/`.
|
|
1.2 Mapear cada accion TUI (start, stop, list, logs, inspect, ...) a la funcion del registry equivalente.
|
|
1.3 Anadir `replace fn-registry => ../..` en `go.mod` si falta.
|
|
|
|
### Fase 2 — migracion list/inspect (read-only primero)
|
|
2.1 `ListContainers` → `infra.DockerListContainers`.
|
|
2.2 `ListImages` → `infra.DockerListImages`.
|
|
2.3 `InspectContainer` → `infra.DockerInspectContainer`.
|
|
2.4 Validar que tipos retornados encajan con lo que la UI espera (`Container`, `Image`).
|
|
|
|
### Fase 3 — migracion lifecycle (write)
|
|
3.1 `StartContainer` → `infra.DockerStartContainer`.
|
|
3.2 `StopContainer` → `infra.DockerStopContainer`.
|
|
3.3 `RemoveContainer` → `infra.DockerRemoveContainer`.
|
|
3.4 `PullImage` → `infra.DockerPullImage`.
|
|
3.5 `RemoveImage` → `infra.DockerRemoveImage`.
|
|
|
|
### Fase 4 — migracion network/run/logs
|
|
4.1 `CreateNetwork` → `infra.DockerCreateNetwork`.
|
|
4.2 `RemoveNetwork` → `infra.DockerRemoveNetwork`.
|
|
4.3 `RunContainer` → `infra.DockerRunContainer`.
|
|
4.4 `ContainerLogs` → `infra.DockerContainerLogs`.
|
|
|
|
### Fase 5 — tests + docs
|
|
5.1 Lanzar TUI manualmente, verificar todas las acciones funcionan (smoke test).
|
|
5.2 Actualizar `app.md` `uses_functions`.
|
|
5.3 `fn index` + `fn doctor uses-functions` limpio.
|
|
5.4 Update CHANGELOG.md.
|
|
|
|
## Riesgos
|
|
|
|
- Las funciones del registry parsean output JSON; si el TUI dependia de output text-mode, las firmas cambian. Mitigacion: las funciones del registry ya exponen tipos Go estructurados, mejor ergonomia.
|
|
- Acciones largas (PullImage, RunContainer con stream): verificar que las funciones del registry soportan streaming o callback. Si no, abrir proposal para extender.
|
|
- Tests existentes con mocks de docker CLI rompen. Mitigacion: usar un docker daemon real para integration tests.
|
|
|
|
## Decisiones de diseno
|
|
|
|
- Como en `0054`, NO crear adapter layer. Llamadas directas.
|
|
- Si una accion del TUI necesita algo que el registry no expone (ej. flags raros), abrir proposal `extend_existing_function` antes de duplicar.
|