Commit History

  1. Docking: flatten multi-chain obabel receptor output to a single model

    033c1d2
  2. Fix docking on Windows: resolve obabel from venv, use Windows Vina binary⁠

    0c3a0da
  3. Fix pipeline MSA/AI stall, add SwissADME-parity ADMET panel, PubChem search, docking ligand data⁠

    5bb077e

  1. feat(docking): Vina full-detail — parse 1.2.7 log (RMSD l.b./u.b., version, seed), RMSD table + run-config UI (3e)

    4320faf

  1. Major docking rewrite: match frontend contract (pdb_id+smiles input, nested poses/interactions output, PDB fetch from RCSB, auto grid center)

    8f9cafc
  2. Fix docking: add pdb_to_pdbqt_receptor() for protein PDBQT conversion

    9125057
  3. Use Dockerfile-installed Vina first, fall back to download

    dade2b6
  4. fix: Linux Vina binary, Open Babel PDBQT, pipeline_worker utcnow⁠

    fe05da9

  1. test: reduce vina timeout to 10s for faster diagnostic

    4d3a2e8
  2. fix: indentation error at line 610

    b100aa9
  3. fix: revert to async subprocess (no thread pool to avoid import hang), keep --cpu 1

    2a4a790
  4. fix: use ThreadPoolExecutor with subprocess.Popen (no asyncio subprocess), add --cpu 1 and stdin=/dev/null

    d242989
  5. fix: use asyncio.create_subprocess_exec with file handles + asyncio.wait_for (no threads, no pipes)

    48bf0d7
  6. fix: use poll() polling loop instead of proc.wait(timeout=N) to avoid Python 3.14 pidfd-wait hang

    4a1b691
  7. fix: use Popen + wait(timeout=N) + killpg layered kill approach

    f381b03
  8. fix: use /usr/bin/timeout OS-level command instead of Python subprocess timeout

    8329f93
  9. fix: use subprocess.DEVNULL for Vina output — eliminates ALL I/O blocking

    3aeb8d2
  10. fix: use dedicated ThreadPoolExecutor(max_workers=1) + subprocess.run(file handles, timeout=N)

    1242de8
  11. fix: use asyncio.create_subprocess_exec with file descriptors + wait_for — no threads, no pipe buffer deadlock

    6c14e2d
  12. fix: use file handles instead of PIPE to avoid Vina pipe-buffer deadlock on Render

    88df0f4
  13. fix: use process group kill (killpg) for reliable Vina timeout

    32957ff
  14. debug: set Vina timeout to 60s for testing timeout mechanism

    01cccda
  15. fix: use subprocess.run(timeout=...) instead of asyncio subprocess for reliable Vina timeout

    ab38821
  16. fix: reliable Vina timeout via asyncio subprocess + cleanup vimontest

    ab9ad46
  17. fix: parse CACTUS API PDB-like ATOM records instead of V2000 SDF

    80b49f1
  18. fix: use Linux timeout command instead of subprocess timeout to reliably kill Vina

    083cf21
  19. fix: add subprocess timeout=600, reduce exhaustiveness to 2, modes to 3

    76cecfd
  20. fix: reorder _download_vina before module-level vina resolution

    8c7f69a
  21. fix: detect missing Vina binary at module level and download fallback; fail early if binary not found

    058552e
  22. fix: use asyncio.to_thread + file-based subprocess for Vina; add vina binary debug test

    d214a0c
  23. fix: use asyncio.create_subprocess_exec for Vina to prevent pipe deadlock; fix isoformat for PostgREST

    b1d8ad7

  1. feat: add progress callbacks to DockingTool.run() for real-time status tracking⁠

    8d44857
  2. fix: add TORSDOF 0 after ENDROOT (rigid ligand)

    396bcf1
  3. fix: right-justify charge to col 76 with {charge:>8.3f}, ad_type:>2 at 78-79

    38de281
  4. fix: pad PDBQT to 80 cols so charge field is parseable at positions 66 or 69

    f66e99a

  1. fix: correct PDBQT column alignment (atom name, coord pos, charge field)

    cdaf04c
  2. fix: correct PDBQT column positions for atom serial number

    d29844d
  3. fix: generate PDBQT directly from SDF (Vina binary rejects PDB/SDF input)

    3a5f903
  4. fix: convert SDF to PDB in Python (avoids Vina SDF parser issues)

    640d93b
  5. fix: use NCI CACTUS /mol format instead of /sdf (Vina parses MOL better)

    c11931d
  6. fix: strip SDF data sections (Vina parser rejects >header lines)

    ecab431
  7. fix: replace obabel CLI with NCI CACTUS API for SMILES→3D (eliminates all subprocess crashes)

    b3124a2
  8. fix: use asyncio.to_thread(subprocess.run) instead of asyncio.create_subprocess_exec (Python 3.14 compat)

    05c77a7
  9. fix: use obabel CLI subprocess for SMILES→3D (lightweight, no OOM) + Vina reads PDB receptor natively (no obabel PDBQT prep)

    64e0551
  10. fix: use PDB instead of SDF for ligand (Vina SDF parser rejects RDKit tag)

    36897bb
  11. fix: eliminate obabel entirely — use RDKit for SMILES→3D + Vina PDB/SDF input (avoids OOM from obabel C++ subprocess)

    618a4e0
  12. fix: add import subprocess and use subprocess.PIPE instead of asyncio.subprocess.PIPE (Python 3.14 compat)

    6d68d15
  13. fix: revert to BackgroundTasks + async DockingTool.run (no threads, no pybel); pre-download vina in build.sh

    538a17a
  14. fix: fully sync _worker_sync — replaces asyncio.run with subprocess.run + httpx.Client to avoid Python 3.14 thread crash

    890c537
  15. fix: remove pybel bindings (causes segfault on Render), use obabel CLI subprocess only

    0ed4824