Skip to content

feat: Tailcat peer card forward status + probe diagnostics - #6478

Merged
atomanticagent merged 3 commits into
mainfrom
feat/tailcat-peer-ui-diagnostics
Sep 7, 2026
Merged

feat: Tailcat peer card forward status + probe diagnostics#6478
atomanticagent merged 3 commits into
mainfrom
feat/tailcat-peer-ui-diagnostics

Conversation

@atomanticagent

Copy link
Copy Markdown
Collaborator

Summary

Operators could see a Tailcat Forwards row green running (127.0.0.1:15555 → :5555) while the matching federated peer card stayed offline with “Last seen: never” and consecutive probe failures — two surfaces disagreeing with no classified reason.

This makes the peer card the primary source of truth for linked Tailcat forwards, and surfaces structured probe diagnostics so bind fail / tunnel fail / PortOS health probe fail are distinguishable.

Fixes #6477

Changes

  • Peer card (transport === 'tailcat') embeds forward mapping, live/running/no-route/failed, tunnelError, Retry, and Forget via shared TailcatForwardStatus.
  • TailcatForwardsPanel demoted to orphans / pre-peer failures only (no peerId, or peer gone).
  • Health check control on the card forces POST /api/instances/peers/:id/probe and shows lastProbe (class, message, HTTP status, latency, timestamp) plus next-probe timing.
  • Server: lastProbe persisted on probe; classifier in server/lib/peerProbeDiagnostics.js for local_refused / tunnel_dial / probe_http (etc.); logs include [class]; GET /api/instances + probe + socket broadcast attach redacted tailcatForward.
  • Docs: docs/features/tailcat-peers.md.

No Tailscale daemon / serve-all / exit-node changes. Default mapping remains 15555→5555. Full tc… addresses stay redacted.

Test plan

  • cd server && npx vitest run lib/peerProbeDiagnostics.test.js services/tailcatPeer.test.js services/instances.test.js (203 passed)
  • cd client && npx vitest run src/components/instances/TailcatForwardsPanel.test.jsx src/pages/Instances.test.jsx (13 passed)
  • Manual: add a Tailcat peer; confirm forward status appears on the peer card and not duplicated in the orphan panel when linked
  • Manual: stop the forward / block the relay; confirm card shows no route / local_refused / tunnel_dial distinctly after Health check

Operators saw a green Tailcat Forwards "running" row while the matching
federated peer card stayed offline with opaque probe failures. Linked
forward status now lives on the peer card; the standalone panel keeps only
orphans. Probes persist a classified lastProbe (local refuse vs tunnel dial
vs health/details) for the UI and logs.

Fixes #6477
CI failed lib/index.test.js — every non-test server/lib source must be barrel-exported.
Barrel index test also requires every lib source to have a README row.
@atomanticagent
atomanticagent merged commit 9806d3d into main Sep 7, 2026
12 checks passed
@atomanticagent
atomanticagent deleted the feat/tailcat-peer-ui-diagnostics branch September 7, 2026 02:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Instances: embed Tailcat forward status + probe diagnostics on federated peer cards

1 participant