Tailscale Serve publishes ComfyUI on 8188 with no liveness signal behind it #896
Labels
No labels
burndown-2026-06
burndown-2026-08
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/advocate
role/director
role/exec
role/frontend
role/gamedev
role/human
role/platform
role/qa
role/science
role/sysadmin
state
ambient
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/infrastructure#896
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What is wrong
Tailscale Serve publishes raw TCP 8188 to the tailnet unconditionally. The mapping is static converger-managed config with no relationship to whether ComfyUI is behind it.
Measured on kai-tower-3026:
tailscale serve statusrenders exactly this whether the loopback listener exists or not. #883 records it rendering identically at 21:56 on 2026-08-19 while the runtime was down and a caller gotUnable to connect to the remote server.So the tailnet endpoint carries no liveness signal. A caller cannot distinguish these three states without attempting a real request and interpreting a transport error:
Those want different responses. The first is wait or route elsewhere. The second is recoverable on the tower. The third is a real fault in the request.
What is not established
The #883 body asserts the endpoint "still accepts at the TCP layer and then fails", and calls that the worst shape for a caller. I could not verify the accept-then-fail shape, because doing so means taking the live runtime down. The recorded symptom is a connect-level failure, which is consistent with either a refusal or an accept-then-close. Whoever picks up this issue should measure it rather than inherit the claim.
The verifiable part is narrower and enough on its own: the mapping is unconditional, so nothing upstream of a request tells a caller which of the three states it is in.
Correction to a related assumption in #883
The #883 body says
coilyco-bridge/agentic-os-xxxpoints itsComfyUIBackendat the tailnet endpoint. On disk it does not.aosx/config.pyandconfig.tomlboth carryendpoint = "http://127.0.0.1:8188", so on-tower AOSX talks to loopback and never crosses Serve. The tailnet endpoint serves remote callers, the ser8 gateway among them. That changes who is actually affected here and is worth confirming before anyone designs around the original framing.Options
/system_statsis the natural probe behind it. Costs another thing to run and supervise.Why now
#894 and #895 close the supervision gap, so the runtime should stop dying unattended. This is the remaining item from #883: what the tailnet edge should say when it does.
Related: #883 (the outage this came from), #888 (the S4U placement that made the supervision gap visible).