Spaces:
Running
Running
File size: 13,907 Bytes
e7b7e72 b67e180 e7b7e72 4939f56 e7b7e72 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 | # 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
|