fix(fleet): derive contour status from registered nodes and remove obsolete tabs

This commit is contained in:
DCCONSTRUCTIONS
2026-09-25 22:28:42 +03:00
parent aecae4a986
commit bd5873ef34
7 changed files with 227 additions and 397 deletions
@@ -39,6 +39,26 @@ Offline Core reads only its cached fleet inventory, never queries the absent
hardware or shows an endless discovery spinner. Cached devices stay visible;
their current connection is unconfirmed, and mutations stay disabled.
Apparatus metadata is an exception to the hardware mutation gate: the name is
editable in Apparatus settings while the board is offline. PATCH /fleet/{id}
accepts only name and expected_revision through the local-operator boundary.
The transaction preserves apparatus/node identity, binding, platform, device
assignments and history. It checks revisions to prevent a stale editor from
overwriting another change, emits the existing fleet snapshot event, and
returns public metadata. Repeating the already-saved name is idempotent.
The list, panel name/type title, monitor and observation center use this same
registry name. No board request or OS configuration is involved.
The Park navigation now contains only Contour status and Vehicles. Sensor and
composition catalog placeholders are removed. Contour status reads local Core
health, the configured compute-contour catalog and its telemetry, plus the
fleet registry. Simulation gateway fallback identifiers are not inventory.
Node counts are derived from these registries; unavailable/invalid checks are
explicitly unknown, not empty or online. Worker availability requires both
reachability and identity match, with backend telemetry freshness checks;
board status uses the authenticated fleet heartbeat expiry. Polling is bounded,
sequential and stopped when the workspace unmounts.
## Computer replacement boundary
POST /fleet/{vehicle}/computer consumes a verified Node invitation and an
@@ -73,3 +93,13 @@ folding persistence across navigation and a full page reload. The existing
LaunchAgent restarted the sole Core process; exact health recovered.
The real board is powered off: new pairing/replacement and live device operation
require subsequent hardware acceptance; no such action is performed here.
Later name/status acceptance on the same date: 44 focused identity, pairing
and replacement tests passed, as did all 982 Control Station unit tests,
TypeScript and the production build. Final presentation refinements passed
the architecture/status checks again (8 tests), typecheck and build. Browser
QA covered normal/expanded views, empty-name rejection, cancellation, a
temporary rename visible in the list/header/observation center, persistence
after reload and restoration of the original name. The live status view
showed Core reachable, a configured worker without fresh telemetry and the
powered-off board without a link. No actuator or device commands were sent.