Skip to content

fix(dssp): pin to last dssp build predating a broken libmcfp dependency - #100

Open
chronicgiardia wants to merge 1 commit into
evo-design:mainfrom
chronicgiardia:fix/dssp-libmcfp-abi-break
Open

chronicgiardia wants to merge 1 commit into
evo-design:mainfrom
chronicgiardia:fix/dssp-libmcfp-abi-break

Conversation

@chronicgiardia

Copy link
Copy Markdown

Summary

conda-forge's dssp=4.6.1 (and the dssp=4.6.0 "_1" rebuild) declare a runtime dependency on libmcfp>=2.0.1,<3.0a0, but the mkdssp binary in those builds actually calls mcfp::config::get_last_option_ref(), a symbol that does not exist in any published libmcfp release. I checked libmcfp's full public API docs across 1.4.2 through 2.1.1 (the latest) — only get_last_option() (no "_ref" variant) has ever been exposed. This makes dssp=4.6.1 permanently broken on conda-forge, independent of which libmcfp version is installed alongside it:

mkdssp: undefined symbol: _ZN4mcfp6config19get_last_option_refB5cxx11Ev

The existing libmcfp=1.4.2 pin in setup.sh (added to work around an earlier, different ABI break) no longer even solves — dssp=4.6.1 declares libmcfp>=2.0.1,<3.0a0 as a hard floor, so mamba install dssp=4.6.1 libmcfp=1.4.2 fails with an unsatisfiable environment before it even gets to the runtime symbol issue.

Root cause

  • dssp=4.6.1 (both build _0 and _1, all Python versions on linux-64) depends on libmcfp>=2.0.1,<3.0a0.
  • dssp=4.6.0 build _1 also added this same broken dependency.
  • dssp=4.6.0 build _0 (np2py312h4f94bcb_0) predates the libmcfp dependency entirely — it has no libmcfp requirement at all.

Fix

Pin to the exact build string dssp=4.6.0=np2py312h4f94bcb_0, sidestepping the broken symbol by using the last build before the bad dependency was introduced. Also added --force-reinstall defensively, since this env is a persistent volume across deploys.

Verification

Ran a live Modal deploy of proto-tools-dssp end-to-end:

  • mamba install resolves and completes cleanly
  • mkdssp --versionmkdssp version 4.6.0
  • The DSSPService warmup smoke test (run_dssp_secondary_structure) passes

Also ran tests/style_consistency_tests/: 437 pre-existing failures in test_field_docs.py reproduce identically on unmodified main (verified via git stash) — a Python 3.14 docstring-parser incompatibility unrelated to this change. No new failures introduced.

Co-Authored-By: Warp agent@warp.dev

conda-forge's dssp=4.6.1 (and the dssp=4.6.0 "_1" rebuild) declare a
runtime dependency on libmcfp>=2.0.1,<3.0a0, but the mkdssp binary in
those builds actually calls mcfp::config::get_last_option_ref(), a
symbol that does not exist in any published libmcfp release (1.4.2
through at least 2.1.1 only ever expose get_last_option(), no "_ref"
variant). This makes dssp=4.6.1 permanently broken on conda-forge:
mkdssp fails at runtime with "undefined symbol
_ZN4mcfp6config19get_last_option_refB5cxx11Ev" regardless of which
libmcfp version is installed alongside it.

The previous libmcfp=1.4.2 pin (added to work around an earlier ABI
break) no longer even solves, since dssp=4.6.1 declares
libmcfp>=2.0.1,<3.0a0 as a hard floor.

Pin to dssp=4.6.0 build "_0" (np2py312h4f94bcb_0), which predates the
libmcfp dependency entirely -- it was only introduced in the "_1"
rebuild of the same version -- sidestepping the broken symbol.

Verified with a live Modal deploy of proto-tools-dssp: conda install,
mkdssp --version, and the DSSPService warmup smoke test all pass.

437 pre-existing failures in tests/style_consistency_tests/test_field_docs.py
reproduce identically on main without this change (Python 3.14 docstring-parser
incompatibility, unrelated to this fix).

Co-Authored-By: Warp <agent@warp.dev>
Copilot AI lite review requested due to automatic review settings September 15, 2026 12:30

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

A test must be updated, and the platform-specific build pin needs handling for unsupported platforms.

Get a fresh assessment by requesting another Copilot review.

Pull request overview

Pins DSSP to a known-good conda-forge build to avoid the broken libmcfp dependency.

Changes:

  • Pins dssp=4.6.0=np2py312h4f94bcb_0.
  • Adds --force-reinstall and documents the dependency issue.
File summaries
File Summary Findings
proto_tools/tools/structure_scoring/dssp/standalone/setup.sh Updates DSSP installation and verification. Critical (3 votes): update the existing test assertions. Moderate (1 vote): guard or provide platform-specific handling for the Linux-only build pin.
Review details

Suppressed comments (1)

proto_tools/tools/structure_scoring/dssp/standalone/setup.sh:23

  • The exact np2py312h4f94bcb_0 selector is a platform-specific conda build, but this setup has no platform guard or per-platform override. On a non-linux-64 host (for example linux-aarch64 or macOS), micromamba cannot resolve that build and setup fails; use platform-specific known-good build pins or explicitly reject unsupported platforms before this install.
"$MAMBA_BIN" install -y -p "$VENV_PATH" -c conda-forge --force-reinstall "dssp=4.6.0=np2py312h4f94bcb_0"
  • Files reviewed: 1/1 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

# dssp=4.6.0 build "_0" (np2py312h4f94bcb_0) predates the libmcfp dependency
# entirely -- it was only added in the "_1" rebuild of the same version -- so
# pin the exact build string to sidestep the broken symbol altogether.
"$MAMBA_BIN" install -y -p "$VENV_PATH" -c conda-forge --force-reinstall "dssp=4.6.0=np2py312h4f94bcb_0"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants