JarvisOS HomeLab status
No signal

Availability classification

20 entities · policy adopted

Availability classes, SLOs, redundancy and health checks for every declared entity. Classes are promises; src/slo.js refuses to let a promise contradict the dependency graph it stands on. Nothing here changes runtime behaviour — it is the policy the console measures against.

Tier-0 services 11 loss stops the estate
Open gaps 3 policy not met, not accepted
Accepted risks 6 signed, with a review date
Single-node 12/20 3 independent compute domains

Open gaps

Declared policy the estate does not currently meet

tier-0 Fleet-fatal

RTO ≤ 30m · RPO ≤ 15m · 99.5%

Loss stops the estate serving, or risks losing data that cannot be reconstructed. Everything else waits while this is being fixed.

ServiceNowStateRedundancyFailover RTOAchievableRPOHealth checkDomain
Caddy (reverse proxy) No signal rebuildable single node risk accepted none 10m 15m independent fd-vps
Google OAuth No signal none vendor HA vendor independent fd-identity
Home1 No signal rebuildable active / passive manual → vin 30m 30m independent fd-home-rack
ISP Uplink No signal none single node risk accepted none independent fd-home-rack
JarvisOS Auth (SSO) No signal rebuildable single node risk accepted none 15m 30m self-reported fd-vps
JarvisOS Control Plane No signal rebuildable active / passive manual → vin 20m 30m 1h self-reported fd-home-rack
Postgres (primary) No signal durable active / passive manual → postgres-replica 25m 25m 15m independent fd-home-rack
Public DNS No signal none vendor HA vendor independent fd-edge-dns
Redis (cache / queue) No signal rebuildable single node risk accepted none 15m 30m independent fd-home-rack
VIN / VPS No signal rebuildable single node risk accepted none 15m 15m self-reported fd-vps
WireGuard (Home1 <-> VIN) No signal none single node risk accepted none 15m 15m independent fd-mesh

tier-1 Estate-critical

RTO ≤ 4h · RPO ≤ 1d · 99%

The estate keeps serving without it, but a major capability or the ability to recover is gone. A tier-1 outage that lasts is how a tier-0 outage becomes unrecoverable.

ServiceNowStateRedundancyFailover RTOAchievableRPOHealth checkDomain
GWSCLI / S3 No signal none vendor HA vendor 4h 4h self-reported fd-offsite
Internal DNS No signal rebuildable active / passive automatic → vin 20m 20m independent fd-home-rack
NAS No signal rebuildable single node none 2h 2h independent fd-home-rack
NAS backup dataset No signal durable single node none → gwscli-s3-offsite 1h 2h 1h self-reported fd-home-rack
Offsite backup replica No signal durable vendor HA none 4h 4h 1d self-reported fd-offsite
Postgres (replica) No signal durable single node none 45m 45m continuous independent fd-vps

tier-2 Degraded-tolerable

RTO ≤ 8h · RPO ≤ 7d · 95%

Loss is visible and annoying; nothing else is at risk. Fix it in hours, during waking ones.

ServiceNowStateRedundancyFailover RTOAchievableRPOHealth checkDomain
JarvisOS Worker (VIN) No signal ephemeral single node none 30m 30m self-reported fd-vps
VPS1 / de-james-vps1 No signal none single node none 1h 1h independent fd-vps-nbg

tier-3 Best-effort

RTO ≤ n/a · RPO ≤ n/a · no target

Loss is accepted by policy. No objective, no page, no incident priority above P4.

ServiceNowStateRedundancyFailover RTOAchievableRPOHealth checkDomain
NAS media dataset No signal durable single node none 2h self-reported fd-home-rack

Single-node register

What may stay on one host, and on whose signature

Everything else is clustered or active/passive. A service appears here only if someone accepted the exposure in writing, with a date to look at it again.

ServiceClassRedundancy requiredAccepted byReviewReason
Caddy (reverse proxy) tier-0 yes homelab-operator 2027-02-15 Inherited from VIN being the only public-ingress node. A second proxy would need a second public node and DNS failover. The Caddyfile is managed configuration restored from the crown-jewels tier in minutes.
ISP Uplink tier-0 yes homelab-operator 2027-02-15 One circuit, no second uplink. A backup uplink is recurring cost against a zero-new-spend policy, and the estate is designed so that the edge node keeps serving during a home outage.
JarvisOS Auth (SSO) tier-0 yes homelab-operator 2027-02-15 Inherited from VIN being the only public-ingress node; a standby would have nowhere independent to run. Restored in minutes from configuration, and the recovery console is deliberately reachable without it.
Redis (cache / queue) tier-0 yes homelab-operator 2026-11-15 Contents are rebuildable and a restart is seconds. A Sentinel cluster needs a third voting domain this estate does not have, and would introduce split-brain risk to buy availability for data we are willing to lose. The exposure is the auth coupling below, not the data.
VIN / VPS tier-0 yes homelab-operator 2027-02-15 VIN is the only public-ingress node in the estate. A second edge means a second VPS bill and DNS-level failover; the fleet's cost policy is zero new recurring spend. A 15 minute rebuild from the crown-jewels backup is the accepted answer.
WireGuard (Home1 <-> VIN) tier-0 yes homelab-operator 2027-02-15 One WAN path per side. A second path means a second circuit or an LTE failover device — recurring cost against a fleet policy of none. Mitigation is detection, not redundancy: the handshake probe exists so a partition is not misdiagnosed as a dead node.
NAS tier-1 no not required tier-1 does not require redundancy; state is rebuildable.
NAS backup dataset tier-1 no not required tier-1 does not require redundancy; state is durable with a 1h RPO.
Postgres (replica) tier-1 no not required tier-1 does not require redundancy; state is durable with a continuous RPO.
JarvisOS Worker (VIN) tier-2 no not required tier-2 does not require redundancy; state is ephemeral.
VPS1 / de-james-vps1 tier-2 no not required tier-2 does not require redundancy; state is none.
NAS media dataset tier-3 no not required tier-3 does not require redundancy; state is durable.

Failure domains

3 of them can run compute

A failover target only counts if it is in another domain. These are the boundaries every redundancy claim on this page is measured against.

Home rack

site · runs compute
  • Mains power loss takes both hosts at once
  • ISP uplink loss removes the whole domain from the network
  • Fire, flood or theft — the only risk the offsite copy exists for
  • Single-operator administrative error across both hosts

Two hosts, one room, one circuit. Treat home1 and nas as one domain for every failover decision: a standby on nas does not survive what kills home1.

VPS provider

site · runs compute
  • Provider or region outage
  • Account suspension or billing failure — an administrative fault with the blast radius of a hardware one
  • Monthly egress allowance exhaustion

The only domain this estate publishes from, and — until 2026-08-17 — the only compute domain believed independent of the home rack. fd-vps-nbg is now a second one, measured rather than assumed. That makes this domain slightly less load-bearing and not one bit less of a single point for public ingress, because nothing published has been moved.

VPS provider · nbg1

site · runs compute
  • Provider or region (nbg1) outage
  • Account suspension or billing failure — shared with fd-vps, since both nodes sit behind one vendor account
  • A co-tenant's root-level automation, which JarvisOS neither owns nor may stop
  • Memory exhaustion caused by workloads this estate does not own

A second compute domain, in a second region, running its own complete deployment control plane. It carries no estate service, so nothing in this classification depends on it — which is exactly why its loss is a tier-2 event and its existence is still the most valuable thing in this file.

Offsite object storage

site · no compute
  • Vendor outage or account action
  • Credential loss
  • Loss of the encryption passphrase, which makes the copy unreadable — indistinguishable from not having it

Storage only. It cannot host a standby, so it can never be the third domain a quorum would need.

Private link plane

vendor-plane · no compute
  • A dynamic home-side IP change breaks the peer endpoint
  • Loss of the link makes a healthy home rack indistinguishable from a dead one, seen from VIN
  • Coordination-plane or relay dependence adds latency, not an outage

Public DNS plane

vendor-plane · no compute
  • DNS outage makes every published route unresolvable regardless of node health
  • Certificate renewal depends on it — failures surface as TLS errors a day or two later

Identity plane

vendor-plane · no compute
  • New logins fail while existing sessions survive
  • Every published route is forward-authed, so an identity outage reads as a total outage

Accepted risks

Decisions on record, each with a review date

Structural notes

How to read these numbers

Source: config/service-classes.json · machine-readable at /api/v1/availability · narrative in docs/HA-CLASSIFICATION.md.