feat: active config snapshot, composite StatusDot with tooltip
Some checks failed
CI / cleanup-branch (push) Has been skipped
CI / build (push) Failing after 43s
CI / docker (push) Has been skipped
CI / deploy (push) Has been skipped
CI / deploy-feature (push) Has been skipped

Part 1 — Config snapshot:
- V8 migration adds resolved_config JSONB to deployments table
- DeploymentExecutor saves the full resolved config at deploy time
- Deployment record includes resolvedConfig for auditability

Part 2 — Composite health StatusDot:
- CatalogController computes composite health from deployment status +
  agent health (green only when RUNNING AND agent live)
- CatalogApp includes healthTooltip (e.g. "Deployment: RUNNING,
  Agents: live (1 connected)")
- StatusDot added to app detail header with deployment status Badge
- StatusDot added to deployment table rows
- Sidebar passes composite health + tooltip through to tree nodes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-04-09 08:00:54 +02:00
parent 7b822a787a
commit 2df5e0d7ba
10 changed files with 113 additions and 14 deletions

View File

@@ -1,4 +1,4 @@
import type { ReactNode } from 'react';
import { createElement, type ReactNode } from 'react';
import type { SidebarTreeNode } from '@cameleer/design-system';
/* ------------------------------------------------------------------ */
@@ -15,7 +15,8 @@ export interface SidebarRoute {
export interface SidebarApp {
id: string;
name: string;
health: 'live' | 'stale' | 'dead';
health: 'live' | 'stale' | 'dead' | 'running' | 'error';
healthTooltip?: string;
exchangeCount: number;
routes: SidebarRoute[];
}
@@ -70,7 +71,9 @@ export function buildAppTreeNodes(
return apps.map((app) => ({
id: app.id,
label: app.name,
icon: statusDot(app.health),
icon: app.healthTooltip
? createElement('span', { title: app.healthTooltip }, statusDot(app.health))
: statusDot(app.health),
badge: formatCount(app.exchangeCount),
path: `/exchanges/${app.id}`,
starrable: true,