init: converge /init/observers on the server freshness classifier
/init/observers now returns {thresholds, observers} with per-observer
state/group/label/elapsed_ms/clock_skew — identical shape to
/app/observer/api/list. init.html consumes server state, drops the
120000 client-side freshness literal, and picks a section-4 heading
from the observed state mix (all-connected / all-stale /
all-disconnected / mixed). Adds a shared _serialize_observer helper
in apps/observer/routes.py so both endpoints emit the same per-record
shape.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>