feat: consolidate database management work

Add catalog-owned logical relationships and runtime snapshots, extend the database-management UI and validation coverage, and document the updated operational workflow.

Keep active sensitive-generation status in a tooltip and indicator, and update the layout E2E to follow the history action in its new database-scoped location.
This commit is contained in:
Codex
2026-09-01 14:46:55 +02:00
parent f586152636
commit 076c9742c5
73 changed files with 6966 additions and 610 deletions
@@ -274,7 +274,7 @@
background: oklch(var(--card));
}
.thot-fleet-ledger__navigation > button:first-child {
.thot-fleet-back-action {
min-height: 2.25rem;
border: 1px solid oklch(var(--primary) / 0.28);
color: oklch(var(--primary));
@@ -283,7 +283,7 @@
font-weight: 700;
}
.thot-fleet-ledger__navigation > button:first-child:not(:disabled):hover {
.thot-fleet-back-action:not(:disabled):hover {
border-color: oklch(var(--primary) / 0.48);
color: oklch(var(--primary));
background: oklch(var(--primary) / 0.14);
@@ -410,7 +410,7 @@
border-radius: var(--radius);
color: oklch(var(--foreground));
background: oklch(var(--background));
font-size: 0.8125rem;
font-size: 0.9375rem;
outline: none;
}
@@ -431,24 +431,6 @@
line-height: 1.4;
}
.thot-fleet-metadata-model {
min-width: min(100%, 14rem);
flex: 0 1 16rem;
}
.thot-fleet-metadata-model > div {
min-width: 0;
gap: 0.25rem;
}
.thot-fleet-metadata-model label {
gap: 0.25rem;
}
.thot-fleet-metadata-model select {
height: 2rem;
}
.thot-fleet-ledger__selection-summary {
min-width: 0;
overflow: hidden;
@@ -582,6 +564,17 @@
box-shadow: inset 3px 0 0 oklch(var(--primary));
}
.thot-catalog-drawer__history button[data-status="completed"],
.thot-catalog-drawer__history button[data-status="succeeded"] {
background: oklch(var(--success) / 0.1);
}
.thot-catalog-drawer__history button[aria-current="true"][data-status="completed"],
.thot-catalog-drawer__history button[aria-current="true"][data-status="succeeded"] {
background: oklch(var(--success) / 0.1);
box-shadow: inset 0 0 0 1px oklch(var(--success) / 0.5);
}
.thot-fleet-grid-surface {
position: relative;
}
@@ -623,24 +616,29 @@
.thot-fleet-icon-action::after {
position: absolute;
z-index: 80;
inset-inline-end: calc(100% + 5px);
inset-block-start: 50%;
inset-inline-end: 0;
inset-block-start: calc(100% + 3px);
width: max-content;
max-width: 12rem;
padding: 0.3rem 0.45rem;
border: 1px solid oklch(var(--border));
border-radius: calc(var(--radius) - 0.125rem);
color: oklch(var(--popover-foreground));
background: oklch(var(--popover));
box-shadow: var(--shadow-sm);
padding: 5px 8px;
border: 1px solid oklch(42% 0.018 258);
border-radius: 6px;
color: oklch(96% 0.006 258);
background: oklch(24% 0.014 258);
box-shadow: 0 8px 20px -10px oklch(12% 0.02 258 / 0.72);
content: attr(data-tooltip);
font-size: 0.6875rem;
font-weight: 650;
line-height: 1.2;
font-weight: 600;
line-height: 1.25;
text-align: center;
white-space: normal;
opacity: 0;
pointer-events: none;
transform: translate(2px, -50%);
transition: opacity 60ms cubic-bezier(0.22, 1, 0.36, 1), transform 60ms cubic-bezier(0.22, 1, 0.36, 1);
transform: translateY(-2px);
transition:
opacity 90ms linear,
transform 120ms cubic-bezier(0.25, 1, 0.5, 1),
visibility 0ms linear 120ms;
visibility: hidden;
}
@@ -677,7 +675,8 @@
.thot-fleet-icon-action:focus-visible::after,
.thot-fleet-icon-action:focus-within::after {
opacity: 1;
transform: translate(0, -50%);
transform: translateY(0);
transition-delay: 60ms;
visibility: visible;
}