Files
fn_registry/dev/issues/0055-docker-tui-registry-first-refactor.md

4.4 KiB

id, title, status, type, domain, scope, priority, depends, blocks, related, created, updated, tags
id title status type domain scope priority depends blocks related created updated tags
0055 docker_tui: refactor para usar funciones docker_* del registry pendiente refactor
registry-quality
multi-app alta
2026-05-17 2026-05-17

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 ListContainersinfra.DockerListContainers. 2.2 ListImagesinfra.DockerListImages. 2.3 InspectContainerinfra.DockerInspectContainer. 2.4 Validar que tipos retornados encajan con lo que la UI espera (Container, Image).

Fase 3 — migracion lifecycle (write)

3.1 StartContainerinfra.DockerStartContainer. 3.2 StopContainerinfra.DockerStopContainer. 3.3 RemoveContainerinfra.DockerRemoveContainer. 3.4 PullImageinfra.DockerPullImage. 3.5 RemoveImageinfra.DockerRemoveImage.

Fase 4 — migracion network/run/logs

4.1 CreateNetworkinfra.DockerCreateNetwork. 4.2 RemoveNetworkinfra.DockerRemoveNetwork. 4.3 RunContainerinfra.DockerRunContainer. 4.4 ContainerLogsinfra.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.