v0.6.7
[0.6.7] - 2026-08-23
Fixed
-
OpenFold3: a YAML
msa:pointing at your own alignment file crashed the fold with
IndexError: list index out of range. The vendored parser keeps only files whose stem is
one of its known MSA sources and dropped everything else, so there was nothing left to
index. Your file is now exposed to the parser under the canonical name, bytes untouched.
Present in every release that shipped the OpenFold3msa:key, 0.6.6 included; the
committedexamples/prot_custom_msa.yamlwas one of the inputs that crashed. -
OpenFold3:
cyclic: trueon a chain now raises instead of folding it as a linear chain and
reporting success. The vendored tree carries neitherChain.cyclicnor thecyclic_mask
feature it derives, so the flag reached nothing. Use--model rf3orboltz2for cyclic
chains. -
OpenFold3: a CCD ligand's reference conformer was built without stereochemistry, so the
generator picked a handedness per centre at random and that arbitrary choice became a model
input. Chiral centres are now assigned from the CCD entry first, so the conformer keeps the
handedness the code names.--model openfold3is polymer-only today and refuses ligand
chains, so no fold in this release reached it; the other models build their ligands on their
own paths and were never affected. -
OpenFold3: an MSA deeper than its per-source cap is now truncated, the way the reference
truncates it. The vendored parser dropped the truncated copy and returned the full
alignment, so a deep alignment reached the featurizer whole and the model saw a different
set of rows than the reference did. Nothing changes below the caps: all seven OpenFold3
parity legs sit under them and reproduce their committed numbers. -
Protenix-v2 and OpenDDE fold more accurately. Two bugs in the pair trunk both models share
are fixed: the mask marking which residue pairs are real reached only one of the two triangle
multiplications, andOuterProductMeanadded its output bias without the scale the reference
applies. Every Protenix-v2 and OpenDDE structure leg in the accuracy gate now lands inside the
reference's own seed-to-seed spread; some fell outside it before. The other models on that
trunk reproduce their published numbers unchanged. Seedocs/implementation-parity.md. -
RF3 folds are back to full speed. 0.6.6 turned on the accurate softmax for Protenix-v2 and
OpenDDE, and it reached two extra sites inside RF3's pairformer that were never meant to get
it: 512 aa went from 82.5 s to 111.8 s. The setting is scoped now and the structure is
bit-identical to what 0.6.5 produced. -
RoseTTAFold3 folds crashed on a clean
pip install.biotitewas declared without an upper
bound, so a fresh install resolved 1.7.1, which removed two internals the vendored AtomWorks
featurizer uses; every--model rf3fold died at import before reaching a card. The
requirement is nowbiotite<1.7. If you already have biotite 1.7 in an environment,pip install -U tt-biowill downgrade it. Affects every release that shipped RoseTTAFold3. -
full_parity_gate.py --workersno longer ssh-es a host to itself. The fleet short names
qb1andqb2are recognised as their own boxes, and any host that is genuinely remote is
probed once before the first fold: reachable, not this same machine, and the card node
present. A bad worker name fails preflight in seconds instead of turning every device leg
into an instant error. -
The release gates refuse to run on a Python environment that does not satisfy tt-bio's own
declared dependencies, naming what is missing or out of bounds. Before, a gate host missing
one package reported the model that needed it as a failure instead.
Performance
- OpenFold3 folds 704 aa 1.34x faster (43.193 -> 32.230 s) and RoseTTAFold3 1.14x
(45.332 -> 39.808 s). Both are bit-exact, so no prediction moves. The gain is at the sizes
where the accurate softmax used to give up on splitting its work and run one unblocked pass;
512, 576, 640, 768, 896 and 1024 aa already split and are unchanged. See
docs/openfold3-port.md.