BLAST Pre-flight Readiness Checks¶
Date: 2026-05-11
Motivation¶
BLAST job submission could fail deep into the orchestration (step 5 of 8) when preconditions weren't met: ACR images not built, BLAST database not downloaded, AKS cluster stopped, Terminal VM not running, storage containers missing, or invalid FASTA. Users had no way to know what was wrong before clicking Submit.
User-facing Change¶
- New "Check Readiness" button in the BLAST Submit page footer (appears when basic form requirements are met)
- Runs 6 server-side checks and displays a checklist card with pass/fail/warn status:
- ACR images built — lists missing images with "Build from Dashboard" action
- BLAST database exists — if missing, suggests
core_nt,16S_ribosomal_RNA,nt,nr,swissprotwith one-click selection - AKS cluster running — shows power state, links to Dashboard
- Terminal VM running — links to Terminal page for provisioning
- Storage containers — checks blast-db, queries, results exist
- FASTA format — validates
>header, counts sequences and residues
API Diff¶
New endpoint: POST /blast/pre-flight¶
Request body:
{
"subscription_id": "...",
"resource_group": "...",
"acr_resource_group": "...",
"acr_name": "...",
"storage_account": "...",
"aks_cluster_name": "...",
"terminal_resource_group": "...",
"terminal_vm_name": "...",
"db": "blast-db/core_nt/core_nt",
"query_data": ">seq1\nATGC..."
}
Response:
{
"ready": false,
"checks": [
{"id": "acr_images", "status": "fail", "title": "ACR images not built", "detail": "Missing: ncbi/elb:1.4.0", "action": "Build images from Dashboard", "severity": "critical"},
{"id": "blast_db", "status": "fail", "title": "Database 'core_nt' not found", "suggested_dbs": ["core_nt", "16S_ribosomal_RNA", "nt", "nr", "swissprot"], "action_type": "download_db"},
{"id": "aks_cluster", "status": "pass", "title": "AKS cluster 'elb-cluster-0509' running"},
{"id": "terminal_vm", "status": "pass", "title": "Terminal VM running"},
{"id": "storage_containers", "status": "pass", "title": "Storage containers ready"},
{"id": "fasta_format", "status": "pass", "title": "FASTA valid: 1 sequence(s), 32 residues"}
],
"critical_blockers": 2,
"summary": "2 critical issue(s) must be resolved before submitting"
}
Frontend¶
| File | Change |
|---|---|
web/src/api/endpoints.ts |
Added blastApi.preFlight() typed client |
web/src/pages/BlastSubmit.tsx |
Added preFlightMutation, "Check Readiness" button, checklist result card with suggested DB quick-select |
Validation¶
- TypeScript build: 0 errors
- Python syntax check: OK
- 13 unit tests pass