ui: split /hosts/{id} into host page + /runs/{runID} run page
CI / Lint + build + test (push) Successful in 1m35s
Release / release (push) Successful in 23m47s

Host page owns host metadata, full runs table with per-row stage strip,
in-flight banner, and empty-state CTA. Run page owns pipeline, active
step, logs, sub-steps, spec diffs, and hold banner with a breadcrumb
back to the host. Dashboard tile reverts to host-only.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-04-18 20:37:57 -04:00
parent 5c6bfa5ffa
commit 19608bef1b
23 changed files with 3173 additions and 2827 deletions
+1 -5
View File
@@ -17,14 +17,10 @@ import (
// TileData pairs a host with its latest run and the derived fields the
// tile needs to render: spec-diff count (server-side diff result) and
// the on-disk path to the hold-key artifact when the run is holding.
// LastSeenAt is the host-mode agent's most recent heartbeat. Stages is
// the list of canonical-order stage rows for Latest, used by HostTile
// to render the mini run-view; nil/empty for never-run hosts (a ghost
// dot strip is rendered from DefaultStageOrder).
// LastSeenAt is the host-mode agent's most recent heartbeat.
type TileData struct {
Host model.Host
Latest *model.Run
Stages []model.Stage
SpecDiffCritical int
HoldKeyPath string
LastSeenAt *time.Time