Warmup Release Feedback¶
Motivation¶
Releasing a warm database cache could succeed in the backend while the UI looked inert. The row button only showed the in-flight spinner briefly and there was no durable success, partial-success, or error acknowledgement.
User-facing change¶
The DB Warmup panel now shows skeleton rows while database candidates load. Releasing a warm cache now produces an inline status notice plus a toast for success, partial completion, and failure, including deleted-resource and error counts where available.
The BLAST submit Execution Profile section also shows a structured skeleton while AKS clusters load instead of a single inert loading sentence.
API/IaC diff summary¶
web/src/components/WarmupSection.tsxadds release pending/success/partial/error state.- The release mutation now sets a visible pending notice before the API call, refreshes warmup/database queries after completion, and reports the result via toast + inline status.
- Loading candidates now render animated skeleton rows using the existing global skeleton CSS.
- Warmup orchestrator polling now only clears the locally remembered instance id on a confirmed 404, not transient network or server errors.
web/src/pages/blastSubmit/ComputeSection.tsxrenders a cluster-card skeleton during execution-profile loading.web/src/App.tsxadds a route-level skeleton for lazy pages and a terminal-specific unavailable fallback if the lazy terminal bundle fails to load.web/vite.config.tspre-bundles the xterm dependencies used by the terminal route, andweb/package.jsonremoves the unused legacyxtermv5 dependency.- Completed BLAST result transitions no longer look stuck when hits are unavailable or partial: the alignments API now marks
no_result_files/storage_unreachableas degraded, the Descriptions tab uses stable primitive query keys, explains unavailable result files with a retry action, and showsNo pagesinstead ofPage 0 / 0for empty result pages. - No API or IaC changes.
Validation evidence¶
cd web && npm run build→ passed.- Browser check on
http://127.0.0.1:8090/confirmed dashboard buttons and loading/empty-state affordances are visible; Recent searches recovered from loading to an empty-state action. - Browser check on
http://127.0.0.1:8090/terminalafter restarting the Vite dev server confirmed the page no longer falls through to the global ErrorBoundary; the terminal cockpit loads normally. - Browser check on completed job
142d4dd7-b1d9-452f-a849-51ee30601b1aconfirmedLoading BLAST hits...clears and the Descriptions tab rendersResults are partialwith parsed file counts (20 / 31 files) instead of a stuck loading panel. - Focused validation:
uv run ruff check api/routes/blast/results.py api/tests/test_blast_results_routes.py;PYTHONPATH=$PWD uv run pytest -q api/tests/test_blast_results_routes.py::test_alignments_empty_listing_returns_degraded_no_result_files api/tests/test_blast_results_routes.py::test_alignments_sort_and_page_hits;cd web && npm run test -- --run src/pages/blastResults/analytics/blastAnalyticsState.test.ts && npm run build→ passed.