RedlineKnowledge base

ADR-0005 · Failures are named by the network edge that broke

Status: Accepted, 2026-10-10.

Context

On the tailnet a reader can be off the network, GitLab can be down, or the reader can lack a session. A generic error leaves them unable to act.

Decision

The service answers 502 gitlab-unreachable when GitLab cannot be reached and reports GitLab reachability in /v1/health. The client classifies a failure as offline-network (the fetch rejected), offline-gitlab, unauthenticated or error, and every component shows the matching message while the build-time content stays. Error responses carry CORS headers for an allowed origin so the browser can read them.

Why

Each state tells the reader what they can do: join the tailnet, wait, or sign in. Without CORS on errors, every 502 looked like a network failure.

Consequences

The smoke script uses the same classification and exit codes per edge.

Evidence

6bd168e, f428e5c, 8cdd08a; test/reachability.test.js, test/e2e/reachability.spec.js.

Revisit when

A new edge appears (a proxy, a second backend), or readers need retry controls.

Git history

Loading the page's history…