Spaces:
Running
Running
|
Download FEATURE_VERIFICATION_CHECKLIST.md from Samad14/bio-nexus-api: direct link, hf CLI and curl.
- Browser
- Download file 13.9 kB
-
https://huggingface.co/spaces/Samad14/bio-nexus-api/resolve/main/FEATURE_VERIFICATION_CHECKLIST.md
- Command line
-
hf download hf://spaces/Samad14/bio-nexus-api/FEATURE_VERIFICATION_CHECKLIST.md
-
curl -L -o FEATURE_VERIFICATION_CHECKLIST.md https://huggingface.co/spaces/Samad14/bio-nexus-api/resolve/main/FEATURE_VERIFICATION_CHECKLIST.md
13.9 kB
| # Bio Nexus β Feature Verification Checklist | |
| **How to use this file:** for each tool, click through the live app and tick every row. A row you can't tick is a missing feature you just found *before* a user did. Update "Last verified" when you finish a tool. Any tool not re-verified in 90 days is stale β see `DEFINITION_OF_DONE.md` Β§5. | |
| **Audit priority** below is based on how detailed each tool's spec was in `MASTER_PLAN.md`/`IMPLEMENTATION_LOG.md`. A vague spec is a strong predictor of an incomplete build β those are marked π΄ and should be audited first. | |
| --- | |
| ## π΄ Protein Interactions β AUDIT FIRST (spec: "interaction lookup module") | |
| *Last verified: 2026-08-06* | |
| - [x] Interaction partners list renders with source database attribution (header + JSON export both state STRING-DB) | |
| - [x] Confidence/evidence score shown per interaction (and explained via LearnPopover) | |
| - [x] Network graph visualization (or explicit decision that this tool is text/table-only, documented here) β **Decision:** network is rendered as the STRING-DB network *image* (with graceful fallback link if the image fails); full interactive graph is out of scope for now | |
| - [x] Filter by evidence type (experimental / database / text-mining / co-expression) β client-side filter over the four STRING score channels, threshold 0.3 | |
| - [x] Export (JSON/CSV/image) works β PNG (network image), TSV (score table), JSON (raw payload) via `fix(interactions)` `d2ea003` | |
| - [x] Loading / error / empty states present | |
| - [x] Chains from a BLAST/UniProt result (cross-tool entry point) β chains exist from UniProt page, Domains page, and job detail page via `sessionStorage["interaction_gene"]` | |
| - [x] Appears in pipeline wizard step list, or documented as intentionally excluded β **Documented exclusion:** not in the 5-step wizard chain (BLAST/UniProt β MSA β Phylo β Domains β AI Interpretation); interactions takes a single gene name, not a sequence, and is reachable as a standalone analyze tool + cross-tool chain | |
| - [x] `/learn` entry exists for interaction confidence scoring β `learn/interactions` (STRING, score channels, network topology) wired to LearnPopover in the score table headers | |
| ## π΄ Function Prediction β AUDIT FIRST (spec: "sequence β function inference endpoint + job status") | |
| *Last verified: never* | |
| - [ ] GO term output (molecular function / biological process / cellular component) β or documented as excluded | |
| - [ ] EC number prediction for enzymes β or documented as excluded | |
| - [ ] Confidence score per predicted function, using the same hedged-language rule as AI interpretation (`RULES.md` Β§6) | |
| - [ ] Distinguished visually/in copy from UniProt's existing function field, so the two don't read as duplicates | |
| - [ ] Loading / error / empty states present | |
| - [ ] Export works | |
| - [ ] `/learn` entry exists | |
| ## π΄ Pathway Enrichment β AUDIT FIRST (spec: exists only as a pipeline step, no standalone feature list) | |
| *Last verified: never* | |
| - [ ] Standalone pathway search (not just as a pipeline wizard step) works | |
| - [ ] Enrichment statistics shown (p-value, FDR, gene ratio) with LearnPopover | |
| - [ ] Pathway diagram viewer renders and is interactive | |
| - [ ] Reactome β WikiPathways fallback actually triggers and is visible to the user (per `RULES.md` Β§4 fallback transparency rule) | |
| - [ ] Export works | |
| - [ ] `/learn` entry exists | |
| ## π΄ Sequencing Annotation β AUDIT FIRST (spec: "variant calling β annotation", no detail on annotation source) | |
| *Last verified: never* | |
| - [ ] Variant table shows position, consequence, and reference/alt allele clearly | |
| - [ ] Annotation source is stated in the UI (what database/reference are variants being checked against) | |
| - [ ] Consensus sequence download works | |
| - [ ] QC report (pre/post trimming) renders, not just a pass/fail flag | |
| - [ ] Job correctly appears on dashboard and is shareable | |
| - [ ] Export works | |
| - [ ] `/learn` entry exists for variant-calling terms (VCF fields, consequence types) | |
| --- | |
| ## π‘ Docking β spec has good detail, verify export/edge depth | |
| *Last verified: ___* | |
| - [ ] Full Vina log viewer, no truncation (per your earlier requirement β confirm it shipped as scrollable panel, not truncated text) | |
| - [ ] RMSD table (l.b./u.b.) renders correctly | |
| - [ ] Run-config UI exposes exhaustiveness, num_modes, grid center/size | |
| - [ ] Binding pocket / blind docking option, or documented as fixed-pocket only | |
| - [ ] 3D viewer shows docked pose overlaid on receptor | |
| - [ ] Export (PDBQT/SDF/log) works | |
| - [ ] Job shows in `MAX_CONCURRENT["docking"]` correctly under concurrent load (cap = 2) | |
| ## π‘ MD Simulation β spec has good detail, verify output depth | |
| *Last verified: ___* | |
| - [ ] Trajectory or endpoint structure downloadable | |
| - [ ] Energy/RMSD-over-time plot, or documented as endpoint-only (no trajectory analysis) | |
| - [ ] Force field / solvent selector matches the verified matrix in the spec (ff14SB/ff15ipq/ff19SB/amberfb15/CHARMM36 Γ OBC1/OBC2/GBN2) | |
| - [ ] 25-min run budget enforced with clear user-facing timeout messaging, not a silent failure | |
| - [ ] Job respects `MAX_CONCURRENT["md"] = 1` | |
| ## π‘ ADMET β spec has good detail, verify all properties surfaced | |
| *Last verified: ___* | |
| - [ ] All RDKit descriptors listed in the original spec are actually rendered (not just a subset) | |
| - [ ] Lipinski rule-of-5 pass/fail shown with reasoning, not just a badge | |
| - [ ] Traffic-light coloring matches a documented threshold table (link from LearnPopover) | |
| - [ ] Export works | |
| ## π’ BLAST β spec detailed, spot-check only | |
| *Last verified: ___* | |
| - [ ] Global/local mode toggle works | |
| - [ ] DNA query support works alongside protein | |
| - [ ] program/db/max_hits params all actually reach the EBI request | |
| - [ ] "Align pair" from any hit works | |
| - [ ] 65-min poll cap surfaces a clear timeout message, not a stuck spinner | |
| ## π’ UniProt / AlphaFold / Structure Suite β spec detailed, spot-check only | |
| *Last verified: ___* | |
| - [ ] UniProt: function, disease associations, active sites, organism all present | |
| - [ ] AlphaFold: pLDDT coloring in 3Dmol.js viewer, confidence legend visible | |
| - [ ] Ramachandran plot renders and is readable | |
| - [ ] Secondary structure assignment shown | |
| - [ ] Foldseek comparison returns results and handles no-hit case | |
| ## π’ MSA / Phylogenetics β spec detailed, spot-check only | |
| *Last verified: ___* | |
| - [ ] All 5 MSA methods (ClustalOmega/MUSCLE/Kalign/MAFFT/T-Coffee) actually produce different, correct output | |
| - [ ] All 3 tree methods (NJ/UPGMA/ML) work | |
| - [ ] Bootstrap replicates shown as a color scale, correctly | |
| - [ ] SVG/PNG/Newick export all work (not just one of the three) | |
| ## π’ Domains β spec detailed, spot-check only | |
| *Last verified: ___* | |
| - [ ] Pfam/InterPro fetch works | |
| - [ ] PROSITE raw-sequence scan works independently of InterPro | |
| - [ ] Reviewed/organism UniProt filters actually filter | |
| ## π΄ Structure Prep β AUDIT FIRST (spec: techspec.md pre-work A1βA7) | |
| *Last verified: 2026-08-23 (backend shipped + unit-tested; live/Docker verification pending)* | |
| - [ ] Chain health report renders: missing residues (REMARK 465 count + ranges) AND CAβCA chain breaks (chain/resnum/distance) | |
| - [ ] Repair outcome explicitly stated per run: `intact` / `repaired` / `broken_unrepaired` β a broken structure is never presented as equivalent to a clean one (A3) *(backend `chain_integrity` tagging shipped in structure_prep.py router; UI display of the field pending)* | |
| - [x] Cleaned PDB produced (waters/heteroatoms removed) via pymol2 wheel; Biopython fallback logs a visible warning instead of failing silently (A1) *(code shipped; live PyMOL run pending β Docker daemon down, venv lacks pymol wheel)* | |
| - [ ] fpocket pockets table renders (id/volume/area/score/druggability/residue count); fpocket binary actually present in API images (A1) *(both Dockerfiles build fpocket from source v4.0.0; image build unverified β daemon down)* | |
| - [x] CASTp result carries explicit `castp_status` (`complete`/`timed_out`/`error`/`skipped`) β timeout is never indistinguishable from "no pockets" (A7) *(shipped; symmetric `fpocket_status` added)* | |
| - [ ] Jobs persisted to Supabase (`structure_prep_jobs`), not in-memory; survives restart (A2) *(router persists via Supabase + migration `008_structure_prep_jobs.sql` written β migration must be applied in Supabase SQL Editor)* | |
| - [x] Status endpoint scoped to owning user (404 for other users' job IDs) (A6) *(require_user_id + user_id filter on GET/POST)* | |
| - [x] Invalid pdb_id / uniprot_accession / template rejected with 400 before any network call (A4) *(25 unit tests pass)* | |
| - [x] All outbound calls route through `ssrf.validate_url()` even for hardcoded hosts (A5) *(unit-tested)* | |
| - [ ] Loading / error / empty states present | |
| - [ ] Export works (feeds Β§2 structure-export endpoints once shipped) | |
| - **Deferred:** ESMFold window-splice gap repair (geometry risk β tag-and-proceed chosen per spec decision 2026-08-23); durable-worker execution for structure-prep jobs (stays in-process `asyncio.create_task`; if moved to worker, Dockerfile.worker needs fpocket+pymol2 parity) | |
| ## π΄ De Novo Pipeline Branch (tier 6) β spec: techspec.md Β§1 | |
| *Last verified: 2026-08-23 (backend + frontend shipped; mocked integration tests pass, live E2E against ESMFold/InterProScan pending)* | |
| - [x] Synthetic/random sequence that fails tiers 1β5 completes the pipeline without error state (acceptance criterion Β§1.4) *(test_de_novo_branch.py::test_zero_hit_protein_run_completes_denovo β mocked; run status `complete`, not error)* | |
| - [x] Confidence badge on every downstream card, three states: identified / homolog / de_novo β homolog visually distinguished from tier-1 (Β§1.3) *(ConfidenceBadge.tsx: cyan/amber/dashed-purple; rendered on results page; browser visual check pending)* | |
| - [x] De novo cards get distinct visual treatment (dashed border, "predicted, no database match") (Β§1.3) *(DeNovoPanel dashed purple card; AlphaFoldViewer titled "Predicted structure (ESMFold)")* | |
| - [x] InterPro sequence-search mode used for de novo domain calls, not accession lookup (Β§1.2) *(de_novo.interpro_sequence_search β iprscan5 REST; normalized to domain shape; unit-tested)* | |
| - [x] Structure card sourced from ESMFold HF API for de novo runs, labeled as predicted (decision 2026-08-23) *(esmfold_structure() with mean pLDDT from B-factors; inline pdb_text renders via new AlphaFoldViewer `pdbData` prop)* | |
| - [x] Function hints composition-level only, clearly unscored/heuristic (decision 2026-08-23) *(function_hints() wraps _predict_from_sequence with "Heuristic" note; embedding scoring deferred below)* | |
| - [x] Pathway/interaction cards show "unavailable β no identified homolog", not empty tables (Β§1.2) *(pathway unavailable notice on job page; msa/phylo/pathway steps marked failed with explicit message; interactions section auto-hides β no gene name exists)* | |
| - **Deferred:** embedding-similarity function scoring (needs embedding infra β out of scope per spec Β§5); ESMFold window-splice for >768-residue de novo queries (API limit returns explicit failure today) | |
| ## π΄ Structure Export β spec: techspec.md Β§2 | |
| *Last verified: 2026-08-23 (shipped + unit-tested; live PyMOL/docking E2E pending)* | |
| - [x] Completed AlphaFold/structure job downloads `.pdb`, `.cif`, `.pse` *(structure_export router; accessionβAF-DB, PDB-IDβRCSB)* | |
| - [x] `.pse` opens in PyMOL with cartoon + pLDDT spectrum pre-applied, no manual coloring (acceptance Β§2.5) *(server-side pymol2 build: cartoon + `spectrum b` + transparent bg; stub-output guard tested. Live open-in-PyMOL check pending β venv lacks wheel, daemon down)* | |
| - [x] Docking job exports receptor+ligand merged `.pdb` and ligand-only `.sdf` *(worker persists `receptor_pdb`+`result_sdf`; legacy rows get actionable re-run message)* | |
| - [x] Download menu on AlphaFoldViewer + DockingViewer with separate format items (Β§2.4) *(StructureExportMenu: viewer toolbar + docking results page)* | |
| - [x] ChimeraX/VMD ship as preferred-format file + command script (.cif+cmd hints / .pdb+.tcl), NOT fake session files (Β§2.3b honest-scoping rule) *(client-generated .cxc/.tcl alongside the coordinate download)* | |
| - **Deferred:** ChimeraX `.cxs` and VMD state files (not freely scriptable headless β documented exclusion per Β§2.3b) | |
| ## π΄ Page Capture + Final Synthesis β spec: techspec.md Β§3 | |
| *Last verified: 2026-08-23 (shipped + unit-tested; live Supabase migration + real-run capture E2E pending)* | |
| - [x] `page_captures` row exists for every external source actually queried during a run (acceptance Β§3.4) *(wired in `_finalize_context`: NCBI top hit, UniProt, RCSB, InterPro, AlphaFold DB, Reactome; de novo runs record none β correctly)* | |
| - [x] Human-facing page URLs captured (not just API endpoints), text sections + figure image URLs stored *(stdlib HTML extractor: title + heading sections + og:image/figure srcs; `fetch_status` honest on failure)* | |
| - [x] Single "Final Report" panel rendered above per-tool breakdown, referencing confidence tier per finding (Β§3.3) *(FinalReport.tsx above AIInterpretation; findings carry ConfidenceBadge tier + source-page links; LLM polish optional, deterministic fallback never invents content)* | |
| - [x] Capture respects ssrf.py allowlist + rate limits; no new SSRF surface (Β§3.2) *(all fetches via validate_url + per-host 1.5s throttle; unit-tested)* | |
| - **Deferred:** none yet *(migration 009 must be applied in Supabase SQL Editor before captures persist)* | |
| --- | |
| ## Cross-cutting checks (apply to every tool above) | |
| - [ ] Tool's job type has a `MAX_CONCURRENT` entry if long-running (`durable-worker-design.md` Β§4.3) | |
| - [ ] Tool's output is included in PDF/JSON export (`/api/export/job/{id}`) | |
| - [ ] Tool's job type is included in share-link support | |
| - [ ] Tool appears (or is deliberately excluded, and that's documented) in the pipeline wizard's 8-step chain | |
| - [ ] Tool has a Sentry-visible failure path, not a silent catch | |