Skip to content

v0.6.7

Choose a tag to compare

@github-actions github-actions released this 23 Aug 16:13
· 813 commits to main since this release
eda7c4d

[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 OpenFold3 msa: key, 0.6.6 included; the
    committed examples/prot_custom_msa.yaml was one of the inputs that crashed.

  • OpenFold3: cyclic: true on a chain now raises instead of folding it as a linear chain and
    reporting success. The vendored tree carries neither Chain.cyclic nor the cyclic_mask
    feature it derives, so the flag reached nothing. Use --model rf3 or boltz2 for 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 openfold3 is 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, and OuterProductMean added 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. See docs/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. biotite was declared without an upper
    bound, so a fresh install resolved 1.7.1, which removed two internals the vendored AtomWorks
    featurizer uses; every --model rf3 fold died at import before reaching a card. The
    requirement is now biotite<1.7. If you already have biotite 1.7 in an environment, pip install -U tt-bio will downgrade it. Affects every release that shipped RoseTTAFold3.

  • full_parity_gate.py --workers no longer ssh-es a host to itself. The fleet short names
    qb1 and qb2 are 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.