Files
fusion/packages/dashboard/app/components/MigrationInProgressBanner.css
gsxdsm 0b6c4cd4ca feat(dashboard,desktop): show live database-migration progress during boot
The one-time SQLite→PostgreSQL migration runs inside createTaskStoreForBackend
before any HTTP server listens, so browsers saw "connection refused" and open
tabs failed silently for minutes. Now:

- CLI: a temporary holding server binds the dashboard port for the boot window,
  serving an auto-reloading "Database migration in progress" page and an
  /api/health payload with status "migrating" + structured progress; the port
  is handed off (awaited) to the real app.listen().
- Dashboard SPA: already-open tabs render the new MigrationInProgressBanner
  from the 15s health poll when status is "migrating".
- Desktop: LocalRuntimeManager publishes migration progress on
  DesktopRuntimeStatus via the new core onMigrationProgress option;
  DesktopLaunchGate shows the live label and extends its 30s startup timeout
  while progress advances (2min stall cap), in both boot and first-run flows.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 20:09:56 -07:00

33 lines
991 B
CSS

/*
FNXC:MigrationHoldingPage 2026-07-17-12:40:
Mirrors the TestModeBanner shape (left accent bar + tinted background) but uses
the info color: a running migration is an informational transient state, not a
warning. The monospace progress line carries the migrator's structured label.
*/
.migration-in-progress-banner {
display: flex;
align-items: center;
gap: var(--space-sm);
margin-bottom: var(--space-md);
padding: var(--space-sm) var(--space-md);
border-radius: var(--radius-md);
border-inline-start: var(--space-xs) solid var(--color-info);
background: color-mix(in srgb, var(--color-info) 18%, transparent);
color: var(--text);
}
.migration-in-progress-banner-progress {
display: block;
font-family: var(--font-mono);
font-size: var(--font-size-sm);
color: var(--text-secondary);
overflow-wrap: anywhere;
}
@media (max-width: 768px), (max-height: 480px) {
.migration-in-progress-banner {
padding: var(--space-sm);
align-items: flex-start;
}
}