Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

[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)

Abierto
#88 5 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
52/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
shell
Área
cli

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

area:watchtower bug severity:medium status:released triaged
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:

  1. The start-up health check probes localhost only (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 writes watchtower.port / watchtower.url is never reached. The identity check _watchtower_port_holder_is_ours also probes http://localhost:<port> only (lib/watchtower.sh:83).
  2. The resolver _watchtower_url probes localhost, then the first address of hostname -I (lib/watchtower.sh:160). On a host with several interfaces that is not necessarily the address Watchtower listens on.
  3. Even when written, the url file holds http://<detect_lan_ip>:<port>, the first global IPv4 address of the host, not FW_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
  1. On a host with at least two non-loopback IPv4 addresses, pick one that is not first in hostname -I.
  2. FW_HOST=<that address> fw watchtower restart --port 3010
  3. ls .context/working/watchtower.*
  4. fw task review T-XXX on 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:

  1. 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.
  2. When the resolver fails, print no link rather than http://localhost:3000, or at least use the configured port.
  3. Pass the URL to the processes Watchtower itself starts (the decide chain).
  4. Document FW_HOST next to FW_PORT; fw watchtower help lists FW_PORT only.
Lenguaje dominante
Shell
Estrellas
16
Forks
6
Merge medio
6 h 24 min
PR fusionados (30 d)
5

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de DimitriGeelen/agentic-engineering-framework

Todos los issues de DimitriGeelen/agentic-engineering-framework

Issues similares

Más issues de Shell/Bash

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.