[Bug]: With FW_HOST set to one interface, Watchtower runs but the framework cannot find it (health check, resolver and url file ignore FW_HOST)
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 52/100
Línea de trabajo
Start by reading the health check in bin/watchtower.sh:373 and the resolver and identity check in lib/watchtower.sh:83,160; then trace the listed fallback callers in agents/context/check-tier0.sh, lib/verify-acs.sh, and lib/arc.sh. Check how FW_HOST, FW_PORT, and the URL are passed to Watchtower-started processes. Done means the configured host and port are used consistently, and no misleading link is printed when resolution fails; test with a non-loopback address and multiple interfaces.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Bug Description
FW_HOST is read by the web application only (web/config.py:79, default 0.0.0.0). The shell side never reads it. When the operator binds Watchtower to a single non-loopback address, which is the safe setting on a host with several interfaces, three places assume the loopback interface or guess an address:
- The start-up health check probes
localhostonly (bin/watchtower.sh:373,curl -sf "http://localhost:${port}/"). It can never answer, so the check gives up after five seconds and the block that writeswatchtower.port/watchtower.urlis never reached. The identity check_watchtower_port_holder_is_oursalso probeshttp://localhost:<port>only (lib/watchtower.sh:83). - The resolver
_watchtower_urlprobeslocalhost, then the first address ofhostname -I(lib/watchtower.sh:160). On a host with several interfaces that is not necessarily the address Watchtower listens on. - Even when written, the url file holds
http://<detect_lan_ip>:<port>, the first global IPv4 address of the host, notFW_HOST.
On top of that, several callers fall back to a hard-coded http://localhost:3000 when the resolver fails (agents/context/check-tier0.sh:825, lib/verify-acs.sh:74, lib/arc.sh:859, :1008, :1395). That address ignores the configured port and can belong to an unrelated service; on this host it does.
Steps to Reproduce
- On a host with at least two non-loopback IPv4 addresses, pick one that is not first in
hostname -I. FW_HOST=<that address> fw watchtower restart --port 3010ls .context/working/watchtower.*fw task review T-XXXon any task with a Human AC.
Steps 2 and 3 were run on 1.8.6. Step 4 was observed on 1.8.3; the code involved is byte-identical in 1.8.6.
Expected Behavior
The health check passes, watchtower.url holds http://<FW_HOST>:<port>, and every link the framework prints points at the running Watchtower. When no Watchtower can be found, no link to another port is printed.
Actual Behavior
[watchtower] Starting Watchtower on port 3010 (project: )...
[watchtower] Watchtower started (PID NNNN) but health check failed after 5s.
[watchtower] It may still be initializing. Check: curl http://localhost:3010/
Watchtower is up: it listens on the FW_HOST address only and answers 200 there; curl http://localhost:3010/ cannot connect. .context/working/ holds watchtower.pid but neither watchtower.url nor watchtower.port. fw task review then prints "No Watchtower reachable for project" and a http://localhost:3000/... link, which on this host opens an unrelated service.
A second effect of the same cause, observed on 1.8.3 and not retried on 1.8.6: recording an inception decision from the Watchtower page saves the decision, then the decide chain it launches stops with "No Watchtower reachable for project". A process started by Watchtower cannot find Watchtower.
fw doctor output
AI Agent
Claude Code
Operating System
Linux
Additional Context
Version: 1.8.6 (1ea10441f), vendored consumer. First seen on 1.8.3; bin/watchtower.sh and lib/watchtower.sh are byte-identical between the two.
Workaround: export WATCHTOWER_URL in the session launcher. All links are right afterwards.
Suggestions:
- Make the shell side read
FW_HOST: when it is set to a specific address, use it for the health check, the identity check, the resolver probe and the url file. - When the resolver fails, print no link rather than
http://localhost:3000, or at least use the configured port. - Pass the URL to the processes Watchtower itself starts (the decide chain).
- Document
FW_HOSTnext toFW_PORT;fw watchtowerhelp listsFW_PORTonly.
- Lenguaje dominante
- Shell
- Estrellas
- 16
- Forks
- 6
- Merge medio
- 6 h 24 min
- PR fusionados (30 d)
- 5
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de DimitriGeelen/agentic-engineering-framework
-
area:doctor bug severity:low status:accepted triaged
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
DimitriGeelen/agentic-engineering-framework#100 · 3 comentarios ·
-
area:doctor bug severity:medium status:accepted triaged
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
DimitriGeelen/agentic-engineering-framework#97 · 3 comentarios ·
-
area:context bug severity:low status:accepted triaged
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
DimitriGeelen/agentic-engineering-framework#96 · 3 comentarios ·
-
area:cli bug severity:medium status:accepted triaged
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
DimitriGeelen/agentic-engineering-framework#95 · 3 comentarios ·
-
area:watchtower bug severity:low status:released triaged
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
DimitriGeelen/agentic-engineering-framework#94 · 4 comentarios ·
Todos los issues de DimitriGeelen/agentic-engineering-framework
Issues similares
-
uno-testing: the step-by-step procedure serializes tool use (1.7 vs 2.3 tools/call)Posiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
unoplatform/studio#200 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
phusion/passenger-docker#480 ·
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
quickemu-project/quickemu#1963 ·
-
`repository` input doesn't workAbiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
source:reader type:enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
stephrobert/blog-roadmap#95 ·