v0.6.5
[0.6.5] - 2026-08-20
Fixed
-
Predictions no longer depend on a target's position in a multi-target job. Two
byte-identical inputs folded by one worker returned different affinity values
(0.648724 / 0.722511 / 0.687149 for three copies of one CDK2 + ligand YAML); they now
return the same value, bit-identical to folding either one on its own. Two causes.
Ligand conformer generation left ETKDG's seed unset, so RDKit drew from a stream that
advances on every embedding and the same SMILES got a different reference conformer
each time it was parsed — that moved the structure prediction too, not just the
affinity scalar, and it applies to BoltzGen as well. And the affinity checkpoint loads
lazily inside the first affinity target of a run, which advanced the RNG the diffusion
samples from, so target 1 sampled differently from every target after it.
Ligand numbers move once with this fix: a pinned conformer is not the one the old
stream happened to hand the first target, and the spread across conformers of one
ligand is about 0.074 log10(IC50). SetTT_BIO_ETKDG_SEEDto draw a different
conformer.scripts/boltz2_affinity_batch_position_repro.pyfolds N targets in one
process and fails if identical ones disagree, andtt-biogates it as
scripts/release_gate.py --model batch-position. CCD-bound ligands are unaffected.
If you ran a multi-target SMILES-ligand job on 0.6.4 or earlier, re-run it: every
target after the first one in that job got the wrong number. -
An affinity run's
results.jsonreported only the structure leg's time, so the
number was short by however long the affinity trunk ran. It now reports both.
Changed
- RFD3 designs in 91.4 s on a p150a, down from 105.1 s, which is 3.33x an H200's
27.5 s and inside the 4x bar the performance page holds every model to. The row is
no longer hidden there. (dff668d9)
Known issues
- Boltz-2 affinity on the trypsin parity leg differs about 2% from the CPU reference
(2.552 against 2.606 log10(IC50)); the predicted pose is unaffected. The reference
bound tightened this release because the conformer-seeding fix above removed noise
that had been inflating it, so this is a pre-existing gap now visible, not a new one.
Seedocs/implementation-parity.md.