Effort: extensive
Compose esm, alphafold-structure, and the new docking workflow
into a sequence-to-druggability pipeline that takes a UniProt
accession (or raw FASTA), runs ESM C embeddings to predict functional
sites, fetches or computes the AlphaFold structure, scores druggability
of detected pockets, and emits a structured "drug-target dossier"
artifact summarizing the protein's chances. Hands the top pocket off
to the docking workflow if druggability score crosses threshold.
Druggability assessment is a multi-step reasoning chain — sequence
features alone are weak, structure alone misses functional context,
and pocket detection without ligandability scoring is just geometry.
SciDEX has the components but no composer. A debate over "is <gene>
worth pursuing therapeutically?" today gets a vague answer; this
pipeline produces a numerical dossier (folded-confidence, n_pockets,
pocket_volume, druggability_z, solvent-exposed surface, predicted
allostery sites) that a Domain Expert can argue from concrete data.
scidex/forge/structural_biology.py (≤1000 LoC):sequence_features(uniprot_or_fasta) — uses esm ESM Cfetch_or_predict_structure(uniprot) — pulls AlphaFold modelscore_druggability(pdb_path) — runs fpocket for pocketvol0.045 + hydroph0.07 - polar*0.05), ranks pockets.dossier(uniprot) — composes; emits JSON dossier with thehandoff_to_docking(dossier) — if top_pocket_druggability >
0.7, calls docking_workflow.pipeline(gene) and links thetarget_dossier(dossier_id PRIMARY KEY, uniprot,tools.py registers target_dossier_pipeline(uniprot) with@log_tool_call.
/api/target-dossier/<uniprot> returns the dossier JSON./artifacts/<id> renders the dossier with a 3D pocket-dossier_block summarizingpython -m scidex.forge.structural_biologyinvestigate); if--auto-handoff set, kicks off a docking run.
tests/test_target_dossier.py — mock AlphaFold + fpocketdata/esm/<uniprot>.npy.
alphafold-structurecolabfold CLI on GPU.
scidex/forge/structural_biology.py.
artifact_kind='target_dossier' — registerq-devx-artifact-kind-scaffolder.esm, alphafold-structure skills.q-tool-drug-docking-workflow — handoff target.q-devx-artifact-kind-scaffolder (wave-3) — registers new kind.sequence_features, fetch_or_predict_structure, score_druggability, dossier, handoff_to_docking, get_recent_dossier. ESM-2 attention-based binding site detection with heuristic fallback. fpocket + Schmidtke sigmoid formula 1/(1+exp(-raw/30+1.5)) where raw = vol0.045 + hydroph0.07 - polar*0.05. Recommendation tiers: >0.7=high_priority, 0.4-0.7=investigate, 0.2-0.4=low_priority, <0.2=undruggable.recommendation CHECK IN (...) and 4 indexes.target_dossier_pipeline(uniprot) registered with @require_preregistration @log_tool_call.POST /api/target-dossier/{uniprot} (run + optional auto_handoff), GET /api/target-dossier/{uniprot} (fetch latest), GET /api/target-dossier (list with recommendation filter)._dossier_block injected into domain expert prompt alongside DepMap block — mirrors GTEx-injection pattern, builds from get_recent_dossier().Evidence: Verified at HEAD 1b010908b (origin/main):
scidex/forge/structural_biology.py exists (900 lines) with all 5 required functions: sequence_features, fetch_or_predict_structure, score_druggability, dossier, handoff_to_docking.tests/test_target_dossier.py exists (280 lines).api.py contains POST /api/target-dossier/{uniprot} and GET /api/target-dossier/{uniprot} routes (lines 9634+).scidex/forge/tools.py, agent.py, and migration were also committed.Summary: All acceptance criteria met. Prior merge was blocked by rate_limit_retries_exhausted:glm (a runner availability issue, not a code defect). Work is complete on main.