Files
fn_registry/dev/issues/0055-docker-tui-registry-first-refactor.md
T
egutierrez f2381b7b2b 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

4.2 KiB

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.