From 23837d8c217fc579efc20280ceb32a379d428f53 Mon Sep 17 00:00:00 2001 From: jvogan <6239693+jvogan@users.noreply.github.com> Date: Sun, 5 Jul 2026 12:34:42 -0700 Subject: [PATCH] Add OpenDDE tool card --- references/software-registry.yaml | 42 +++++ tools/README.md | 8 +- tools/cofold-scoring-stack.md | 34 +++- tools/opendde.md | 283 ++++++++++++++++++++++++++++++ 4 files changed, 363 insertions(+), 4 deletions(-) create mode 100644 tools/opendde.md diff --git a/references/software-registry.yaml b/references/software-registry.yaml index 75df7d6..73e6f6c 100644 --- a/references/software-registry.yaml +++ b/references/software-registry.yaml @@ -322,6 +322,48 @@ software: citation_notes: "Record repo commit, model weights, and inputs." status: planned notes: "Verify current repo/license before packaging." + opendde: + role: biomolecular_complex_prediction + image_family: ai-design + install_method: source_or_public_docker + upstream_repo: "https://github.com/aurekaresearch/OpenDDE" + upstream_commit_sha_observed_2026_07_05: "a72e9f655231660f8af0072dbdb8b2a54f3fbd3c" + docker_image: "aurekaresearch/opendde:v1" + docker_tag_digest_observed_2026_07_05: "sha256:a9404f76df1cd965a80447ee30c9c440af48b199581d9bd44ee157c18109a9d6" + upstream_model_repo: "https://huggingface.co/aurekaresearch/OpenDDE" + upstream_model_repo_commit_observed_2026_07_05: "eddd563ce96571f784012edd8f045181c8f8627d" + released_checkpoints: "opendde.pt, opendde_abag.pt" + checkpoint_sizes_observed_2026_07_05: "opendde.pt ~2.5GB; opendde_abag.pt ~2.5GB" + common_runtime_size_observed_2026_07_05: "~0.65GB before search databases" + license_class: open_source_apache_2_reported_by_repo + license_gate: verify_current_terms_and_weight_posture + runpod_fit: strong_after_no_search_canary + gpu_class: "RTX 4090/L40S for canaries; 4x GPU for Fold-CP distributed route" + smoke_command: "opendde doctor && opendde --help" + runtime_artifacts: "opendde_predictions/, opendde_manifest.json, summary_confidence.json, full_data.json when --need_atom_confidence true" + citation_notes: "Record repo commit, Docker digest or source install route, Hugging Face model commit, checkpoint hashes, input JSON, MSA/template posture, and confidence sidecars." + weights_cache_default: "$OPENDDE_ROOT_DIR/checkpoint" + weights_cache_env_var: "OPENDDE_ROOT_DIR" + weights_source: "Hugging Face aurekaresearch/OpenDDE; opendde.pt default, opendde_abag.pt selected with --load_checkpoint_path." + status: planned + notes: | + AlphaFold-3-style all-atom prediction/cofold lane for proteins, DNA, + RNA, ligands, ions, explicit covalent bonds, and antibody-antigen + canaries. Use as an orthogonal validator next to Boltz, Chai-1, + AF2-Multimer, and ESMFold2, not as a generator. + + Start with a no-search public protein canary: + --use_msa false --use_template false --use_rna_msa false. Promote to + MSA/template/RNA-MSA only after database, HMMER/Kalign, and public/private + sequence posture are declared. Do not send private sequences to the public + ColabFold-compatible MMseqs2 service. + + The reviewed source path loads PyTorch and pickle-based runtime artifacts, + including the model checkpoint and RDKit CCD cache. Execution-ready + provider packets must pin URL, remote ETag/Xet hash where available, local + SHA-256, and byte size before loading. For ipSAE-style rescoring, run with + --need_atom_confidence true and preserve the full_data JSON; summary-only + output is scalar confidence, not a complete interface sidecar bundle. alphafold3: role: biomolecular_prediction image_family: ai-design diff --git a/tools/README.md b/tools/README.md index e7fd9a6..f5de68c 100644 --- a/tools/README.md +++ b/tools/README.md @@ -46,6 +46,7 @@ The wider tool knowledge base lives in [`references/software-registry.yaml`](../ - [Cofold scoring stack](cofold-scoring-stack.md). Multi-validator slate plus ipSAE rescore. Reads from the individual cards below. - [Boltz](boltz.md). Open biomolecular cofold with confidence and full PAE outputs. - [Chai-1](chai.md). Open biomolecular cofold with MSA-driven prediction. +- [OpenDDE](opendde.md). Open all-atom biomolecular cofold/prediction lane with ABAG checkpoint and optional PAE/PDE sidecars. - [ESMFold2](esmfold2.md). Biohub structure prediction and foldability review lane, with Hugging Face weights as the first cloud canary route and Biohub API as optional/deferred. - [ESMFold2 binder control notes](esmfold2-binder-controls.md). Sequence, structure, interface, logit, and optimization controls for constraining ESMFold2/Biohub binder-design runs against a deposited target site. - [BioEmu](bioemu.md). Sequence-conditioned monomer ensemble sampling for flexibility-risk review. @@ -82,7 +83,7 @@ A short routing guide. Pick the designer arm by target and binder length, then a | A protein that changes shape on ligand binding (allostery, AND gate, biosensor) | [SwitchCraft](switchcraft.md) | [Cofold scoring stack](cofold-scoring-stack.md) for the orthogonal switch check | | Add a function or effector to a validated binder (fusion construct) | [DOMINO](domino.md) | [Cofold scoring stack](cofold-scoring-stack.md) to prove both modules fold | | Triage or mature antibody variant libraries (sequence-only) | [CoSiNE](cosine.md) | [Cofold scoring stack](cofold-scoring-stack.md) for an orthogonal structural check | -| Cofold one designed candidate against a target | [Boltz](boltz.md) or [Chai-1](chai.md) alone | [Cofold scoring stack](cofold-scoring-stack.md) for multi-validator gating | +| Cofold one designed candidate against a target | [Boltz](boltz.md), [Chai-1](chai.md), or [OpenDDE](opendde.md) alone | [Cofold scoring stack](cofold-scoring-stack.md) for multi-validator gating | | Check foldability or uncertainty for a public sequence/candidate | [ESMFold2](esmfold2.md) | [Cofold scoring stack](cofold-scoring-stack.md) when interface or binder claims are requested | | Check monomer conformational spread | [BioEmu](bioemu.md) | [MolViewSpec](molviewspec.md) for report scenes, [Cofold scoring stack](cofold-scoring-stack.md) when interface claims are requested | | Prioritize a large ligand library | [MolPAL](molpal.md) | Score provider lane, [PoseBusters](posebusters.md), screening consensus ranking | @@ -99,14 +100,15 @@ target prep -> designer (RFdiffusion3 | RFpeptides | HelixDiff | PepGLAD | EvoBind | Genie3) -> sequence design (ProteinMPNN or SolubleMPNN) -> foldability/uncertainty review (ESMFold2 where useful) - -> cofold slate (Boltz + Chai-1 + AF2-Multimer) + -> cofold slate (Boltz + Chai-1 + AF2-Multimer + optional OpenDDE) -> ipSAE rescore on PAE matrices -> consensus gate -> refinement -> rendered report ``` -The cofold scoring stack card explains how to compose Boltz, Chai-1, and AF2-Multimer into the validator slate. +The cofold scoring stack card explains how to compose Boltz, Chai-1, +AF2-Multimer, and optional OpenDDE into the validator slate. ## Important Context diff --git a/tools/cofold-scoring-stack.md b/tools/cofold-scoring-stack.md index cc85160..856c0ae 100644 --- a/tools/cofold-scoring-stack.md +++ b/tools/cofold-scoring-stack.md @@ -11,7 +11,7 @@ Public scaffold: yes. Runtime execution: review required for current package ter ## Hand A Mission To An Agent ```text -Use the BioSymphony Structure Factory skill with the Cofold Scoring Stack tool card. For target and candidate set , prepare a multi-validator cofold lane that runs Boltz, Chai-1, and AF2-Multimer in parallel, then rescores with ipSAE for a min-ipSAE consensus gate. Specify recycle and sample counts per validator and the closeout artifact list. +Use the BioSymphony Structure Factory skill with the Cofold Scoring Stack tool card. For target and candidate set , prepare a multi-validator cofold lane that runs Boltz, Chai-1, AF2-Multimer, and optional OpenDDE in parallel, then rescores with ipSAE for a min-ipSAE consensus gate. Specify recycle and sample counts per validator and the closeout artifact list. ``` ## Headline Finding (2026): Multi-Validator min-ipSAE Consensus @@ -26,6 +26,7 @@ This card is the meta-lane. Individual cofold validators have their own cards: - [Boltz](boltz.md) for fast cofold with full PAE output. - [Chai-1](chai.md) for MSA-driven cofold with parquet inputs. +- [OpenDDE](opendde.md) for all-atom biomolecular cofolds, ABAG canaries, and optional PAE/PDE sidecars. - AF2-Multimer (via LocalColabFold) as the long-established baseline validator. A common slate: @@ -33,6 +34,7 @@ A common slate: 1. **AF2-Multimer v3** via LocalColabFold (`alphafold2_multimer_v3` with `--templates` on for target classes with dense PDB coverage). 2. **Boltz-2** with optional template injection (`templates: [{cif:.cif, force:true}]` in YAML). 3. **Chai-1** with proper MSA + template (`use_esm_embeddings=False`, `msa_directory=`). +4. **OpenDDE** for selected canaries or ranked candidates, especially antibody-antigen complexes where the ABAG checkpoint is relevant. Each validator emits a PAE matrix → ipSAE post-hoc rescore. @@ -129,6 +131,27 @@ colabfold_batch \ 5-model mean+stddev is your free orthogonal confidence proxy. +### OpenDDE + +```bash +LAYERNORM_TYPE=torch opendde pred \ + -i inputs/design_001.opendde.json \ + -o opendde_out/design_001 \ + -n opendde_v1 \ + --use_msa false \ + --use_template false \ + --use_rna_msa false \ + --sample 3 \ + --step 200 \ + --cycle 10 \ + --need_atom_confidence true +``` + +Use `--load_checkpoint_path "$OPENDDE_ROOT_DIR/checkpoint/opendde_abag.pt"` for +the ABAG checkpoint. Preserve both summary confidence JSON and `full_data` JSON +when the output will feed an ipSAE-style or PAE/PDE sidecar gate. Summary-only +output is useful for triage but incomplete for interface-error rescoring. + ### ABCFold (one-call multi-validator) ```bash @@ -174,6 +197,9 @@ python /workspace/ipsae/ipsae.py \ | AF2M | `--num-recycle` | 3 | 3 | Bump to 5 for borderline calls | | AF2M | `--rank` | plddt | **`multimer`** | iPTM-weighted ranking | | AF2M | `--templates` | off | **on** when target has PDB coverage | Templates pin register where cofolders hallucinate | +| OpenDDE | `--need_atom_confidence` | false | **true** for ranked candidates | Saves PAE/PDE/contact sidecars. | +| OpenDDE | `--use_msa`, `--use_template`, `--use_rna_msa` | true/false by flag | **false for first canary** | Avoids public-service and large-database dependencies. | +| OpenDDE | `--load_checkpoint_path` | default `opendde.pt` | use `opendde_abag.pt` for ABAG canaries | Selects antibody-antigen checkpoint. | | ipSAE | `pae_cutoff` (Å) | 10 | 10 | Dunbrack default | | ipSAE | `dist_cutoff` (Å) | 5 | 5 | Dunbrack default | | ABCFold | `-abc` | — | **-abc** | Three cofolders, one call | @@ -193,6 +219,8 @@ python /workspace/ipsae/ipsae.py \ | Chai-1 | NPZ | `per_chain_pair_iptm[binder, target]` | interface iPTM (not global `iptm`) | | AF2M | `_summary_confidences.json` | `iptm`, `ranking_confidence`, `ptm` | top-rank model | | AF2M | `_scores_rank_.json` | `ptm`, `iptm`, `predicted_aligned_error` | per-model, for the 5-model spread | +| OpenDDE | `_summary_confidence_sample_.json` | `chain_pair_iptm`, `iptm`, `ptm`, `gpde`, `ranking_score` | scalar and chain-pair confidence diagnostics | +| OpenDDE | `_full_data_sample_.json` | `token_pair_pae`, `token_pair_pde`, `contact_probs` | sidecars for downstream interface-error scoring | | ipSAE | stdout / CSV | `ipSAE_d0chn`, `ipSAE_max`, mean interface PAE | post-hoc | ## Consensus Gate @@ -243,6 +271,9 @@ A candidate that passes the first row but fails site or state checks should clos - **Boltz `--num_workers > 1` crashes on shared community hosts** with a CUDA `_cuda_init` driver-too-old race even when single-worker mode works. Force `--num_workers 1`. - **LocalColabFold's pixi installer is the current supported install path** (2026-01 pivot); the older `install_colabbatch_linux.sh` still works on Ubuntu 22.04. - **AF2-Multimer fetches its own MSAs** (per-job, ColabFold MMseqs2). Even if you have cached a Boltz / Chai `.a3m`, AF2M does not reuse it — rate-limit risk reappears on >20 jobs. +- **OpenDDE package install currently needs source or Docker** as of the 2026-07-05 review; the advertised PyPI package route was not visible. Pin the source commit or Docker digest in provider packets. +- **OpenDDE summary-only output is not enough for ipSAE-style gates.** Use `--need_atom_confidence true` and preserve `full_data`, then budget for larger artifacts. +- **OpenDDE uses public MMseqs2 by default for protein MSA search.** Use precomputed A3M or a self-hosted `MMSEQS_SERVICE_HOST_URL` for private sequences or batch fanout. - **For peptide ligands with disordered or partly-cleaved N-termini** (common in GPCR-peptide complexes), expect interface ipSAE to be lower due to peptide flexibility. Not a bad model — a real biological feature. Calibrate the threshold against a known positive-control complex. ## Citations And References @@ -257,6 +288,7 @@ A candidate that passes the first row but fails site or state checks should clos - Overath / Rygaard binder-presence floor: bioRxiv 2025.08.14.670059v2 - DigBioLab reference pipeline (defines the consensus gate): https://github.com/DigBioLab/de_novo_binder_scoring - BindEnergyCraft / pTMEnergy (free upgrade on pAE logits): arXiv 2505.21241 +- OpenDDE: https://github.com/aurekaresearch/OpenDDE ## Currency Check (Run Before Reusing This Card) diff --git a/tools/opendde.md b/tools/opendde.md new file mode 100644 index 0000000..9bdd4f3 --- /dev/null +++ b/tools/opendde.md @@ -0,0 +1,283 @@ +# OpenDDE + +## Purpose + +Plan OpenDDE prediction and cofold lanes for biomolecular complexes. OpenDDE is +an AlphaFold-3-style, all-atom model that accepts proteins, DNA, RNA, ligands, +ions, modifications, and covalent-bond records. In Structure Factory it is best +used as an orthogonal cofold validator next to Boltz, Chai-1, AF2-Multimer, and +ESMFold2, not as a backbone or sequence generator. + +## Public-Safe Status + +Public scaffold: yes. Runtime use requires current source, Docker image, +checkpoint, common-runtime-file, and artifact-hash review before paid dispatch. + +Observed on 2026-07-05: + +- Repo: `aurekaresearch/OpenDDE`, commit `a72e9f655231660f8af0072dbdb8b2a54f3fbd3c`. +- Docker: `aurekaresearch/opendde:v1`, Linux/amd64, tag digest observed as + `sha256:a9404f76df1cd965a80447ee30c9c440af48b199581d9bd44ee157c18109a9d6`. +- Hugging Face model repo commit: `eddd563ce96571f784012edd8f045181c8f8627d`. +- PyPI package route was not available at review time; use source install or + the Docker image. + +## When To Use + +- Add an independent cofolder vote for public protein-protein or + antibody-antigen candidate triage. +- Run the ABAG checkpoint as a focused antibody-antigen canary. +- Predict mixed biomolecular inputs containing proteins, RNA, DNA, CCD ligands, + ligand files, SMILES, ions, modifications, or explicit covalent bonds. +- Exercise a four-GPU context-parallel path for larger complexes after a + single-GPU or small-input canary passes. + +## Hand A Mission To An Agent + +```text +Use the BioSymphony Structure Factory skill with the OpenDDE tool card. For +target and candidate set , prepare an OpenDDE cofold lane: +convert inputs to OpenDDE JSON, start with a no-search public canary, then run +predictions with --need_atom_confidence true for ranked candidates so PAE/PDE +sidecars are preserved. Declare checkpoint hashes, command ledger, output-count +checks, CIF outputs, confidence JSON, full_data JSON, and result boundary. +``` + +## Typical Inputs + +- OpenDDE JSON: top-level list of jobs. +- `proteinChain`, `dnaSequence`, `rnaSequence`, `ligand`, or `ion` entities. +- Optional `pairedMsaPath`, `unpairedMsaPath`, and `templatesPath`. +- Optional `covalent_bonds`. +- Runtime data under `$OPENDDE_ROOT_DIR`: `checkpoint/`, `common/`, and + `search_database/` when local template or RNA-MSA search is used. + +## Typical Outputs + +OpenDDE writes per-job and per-seed outputs under: + +```text +//seed_/predictions/ +``` + +Minimum outputs: + +- `_sample_.cif` +- `_summary_confidence_sample_.json` + +When `--need_atom_confidence true` is enabled: + +- `_full_data_sample_.json` + +The summary JSON includes values such as `plddt`, `gpde`, `ptm`, `iptm`, +`chain_pair_iptm`, clash flags, and `ranking_score`. The full-data JSON includes +larger token-pair sidecars such as PAE/PDE/contact values that are required for +ipSAE-style rescoring. + +## Repo And References + +- Repo: https://github.com/aurekaresearch/OpenDDE +- Project site: https://aurekaresearch.github.io/OpenDDE-Website +- Model/data files: https://huggingface.co/aurekaresearch/OpenDDE +- Docker image: `aurekaresearch/opendde:v1` +- License: Apache-2.0 in the reviewed repository. + +## Minimum-Viable Invocations + +### Source install + +The public package index did not expose an `opendde` distribution at review +time, so use a source checkout for non-Docker runs: + +```bash +git clone https://github.com/aurekaresearch/OpenDDE.git +cd OpenDDE + +uv venv --python 3.11 +source .venv/bin/activate + +# CPU/dev route. +uv pip install --torch-backend cpu -e '.[cpu]' + +# Linux/CUDA route. +uv pip install --torch-backend cu126 -e '.[gpu]' + +opendde doctor +``` + +### Runtime data + +For the smallest no-search canary: + +```bash +export OPENDDE_ROOT_DIR=/workspace/opendde_data + +bash scripts/download_opendde_data.sh \ + --root "$OPENDDE_ROOT_DIR" \ + --skip-search-database +``` + +This still downloads or verifies the model checkpoint plus common files. Record +URL, ETag/Xet hash where available, byte size, and local SHA-256 before loading. + +### Minimal no-search prediction + +```bash +LAYERNORM_TYPE=torch opendde pred \ + -i tiny.json \ + -o output/opendde \ + -n opendde_v1 \ + --use_msa false \ + --use_template false \ + --use_rna_msa false \ + --triatt_kernel torch \ + --trimul_kernel torch \ + --dtype fp32 \ + --sample 1 \ + --step 200 \ + --cycle 10 +``` + +### Sidecar-preserving ranking run + +```bash +opendde pred \ + -i candidates.json \ + -o output/opendde \ + -n opendde_v1 \ + --use_msa false \ + --use_template false \ + --use_rna_msa false \ + --sample 3 \ + --step 200 \ + --cycle 10 \ + --need_atom_confidence true +``` + +Use this mode for ranked candidates when Structure Factory needs PAE/PDE +sidecars. Do not enable it blindly for broad fanout without an artifact-size +budget. + +### ABAG checkpoint + +```bash +opendde pred \ + -i abag_complex.json \ + -o output/opendde_abag \ + -n opendde_v1 \ + --load_checkpoint_path "$OPENDDE_ROOT_DIR/checkpoint/opendde_abag.pt" \ + --need_atom_confidence true +``` + +### Docker GPU route + +```bash +docker run --rm --gpus all --shm-size=4g \ + -e OPENDDE_ROOT_DIR=/opendde_data \ + -v "$OPENDDE_ROOT_DIR":/opendde_data:ro \ + -v "$PWD":/workspace \ + -v "$PWD/output":/output \ + aurekaresearch/opendde:v1 \ + opendde pred \ + -i /workspace/tiny.json \ + -o /output/opendde \ + -n opendde_v1 \ + --use_msa false \ + --use_template false \ + --use_rna_msa false \ + --sample 1 \ + --step 200 \ + --cycle 10 +``` + +Pin the Docker digest in execution-ready provider manifests rather than relying +only on the mutable tag. + +### Four-GPU Fold-CP route + +```bash +CUDA_VISIBLE_DEVICES=0,1,2,3 torchrun --standalone --nproc_per_node 4 \ + -m runner.batch_inference pred \ + -i examples/protein_200.json \ + -o output/opendde_cp4 \ + -n opendde_v1 \ + --use_msa false \ + --use_template false \ + --use_rna_msa false \ + --sample 1 \ + --step 200 \ + --cycle 10 \ + --foldcp_mode distributed \ + --foldcp_size_dp 1 \ + --foldcp_size_cp 4 \ + --foldcp_metrics_jsonl output/opendde_cp4/foldcp_metrics.jsonl +``` + +## Key Knobs + +| Flag or file | Recommendation | Why | +| --- | --- | --- | +| `--sample` | 1 for canary, 3+ for ranking | Multiple diffusion samples stabilize ranking. | +| `--step` | 200 for final, consider smaller only after calibration | Public defaults use 200. | +| `--cycle` | 10 | Public default for `opendde_v1`. | +| `--use_msa` | false for first canary, true when paths are supplied or service posture is approved | Public MMseqs2 is not private-sequence safe. | +| `--use_template` | false for first canary | Template path needs HMMER, Kalign, database/cache posture. | +| `--use_rna_msa` | false unless RNA MSA is explicitly needed | RNA databases are large. | +| `--need_atom_confidence` | true for ranked candidates | Saves PAE/PDE/contact sidecars for downstream scoring. | +| `--load_checkpoint_path` | required for `opendde_abag.pt` | ABAG checkpoint is not the default. | +| `--triatt_kernel`, `--trimul_kernel` | `torch` for compatibility, `auto` for production GPU after smoke | Keeps first canaries simple and debuggable. | +| `LAYERNORM_TYPE` | `torch` for compatibility | Avoids optional CUDA/JIT LayerNorm during first route proof. | +| `MMSEQS_SERVICE_HOST_URL` | self-hosted endpoint for private/batch work | Public ColabFold MMseqs2 is rate-limited and public-service routed. | + +## Search And Prep Dependencies + +- Protein MSA: public ColabFold-compatible MMseqs2 service by default, or a + self-hosted `MMSEQS_SERVICE_HOST_URL`. +- Template search: `hmmbuild`, `hmmsearch`, and + `$OPENDDE_ROOT_DIR/search_database/pdb_seqres_2022_09_28.fasta`. +- Template inference: `kalign` and template mmCIF cache or remote PDBe fetch. +- RNA MSA: `nhmmer`, `hmmalign`, `hmmbuild`, Rfam, NT-RNA, and RNAcentral + databases. NT-RNA and RNAcentral are large enough to require explicit storage + and budget planning. + +## Gates + +- Use only public accessions or synthetic/test sequences in public examples. +- Before any paid run, record current repo commit, Docker digest or source + commit, checkpoint URL, remote ETag/Xet hash where available, local SHA-256, + and byte size. +- Fail closed on missing CIF, missing summary JSON, empty output directories, + or an `ERR/` directory containing per-job failures. +- Treat `summary_confidence`-only output as incomplete for ipSAE-style scoring. + Add `--need_atom_confidence true` when interface-error sidecars are required. +- Do not send private sequences to the public MMseqs2 service. Use precomputed + A3M files or a self-hosted service. +- The checkpoint and RDKit CCD cache are pickle/PyTorch-pickle loaded by the + reviewed code path. Do not run unpinned or unverified artifacts in a trusted + environment. + +## Suggested Structure Factory Stages + +1. `opendde_toolcheck`: source/Docker route, `opendde doctor`, no weight load. +2. `opendde_no_search_canary`: tiny public protein JSON with MSA/template/RNA + disabled. +3. `opendde_sidecar_probe`: same canary with `--need_atom_confidence true`; + verify PAE/PDE/contact sidecars are present and joinable to the CIF. +4. `opendde_abag_canary`: public antibody-antigen example with + `opendde_abag.pt`. +5. `opendde_slate_vote`: run OpenDDE as an additional validator in the cofold + scoring stack and aggregate `chain_pair_iptm`, `gpde`, clash flags, and + any derived ipSAE-like score. + +## Gotchas + +- The docs mention `uv pip install 'opendde[...]'`, but no PyPI distribution was + visible during the 2026-07-05 review. Prefer source install or Docker. +- Batch inference can log per-sample failures without making the CLI exit + nonzero. A Structure Factory wrapper must inspect output counts and `ERR/`. +- Job-level `modelSeeds` behavior should be checked for multi-job JSONs; prefer + explicit `--seeds` in controlled batch runs until this is fixed upstream. +- Full-data sidecars can be large because they include token-pair arrays. +- Search database downloads can dominate setup time and storage. Start with + no-search canaries and promote to `msa`, `mt`, or `prep` only after the input + class requires it.