LiftOn v1.0.10 consolidates everything that accumulated behind the v1.0.10 tag: the originally staged v1.0.10 work, a batch of GitHub-issue fixes, a full-repository correctness audit, and a CDS-attribute parity fix. v1.0.9 is the baseline for every comparison below — the intermediate versions were never published.
pip install -U lifton
Highlights
- Whole genomes that used to abort now finish. On five of seventeen full RefSeq genomes v1.0.8 aborted mid-run; v1.0.10 completes all of them — Arabidopsis coding completeness 28.2% → 99.9% (+34,589 transcripts), rice 77.3% → 99.9% (+9,594). A single malformed locus can no longer take a 60,000-gene annotation with it: per-locus failures are published, reported as
partial_success, and recorded inrun_manifest.json. - Output validates clean. 0
gff3-validateerrors on 9 of the 17 whole genomes, and fewer errors than the DNA-only Liftoff on all 17. The residuals on plant genomes are reference-inherited organellar structures, not introduced by LiftOn. - Up to ~24× less peak memory than v1.0.8 on the controlled comparison, and GFF3 validation alone drops from 5.64 GB to 267 MB on a full mammalian lift (21×, 1.9× faster). Step 7 is ~21% faster on Drosophila at
-t 8, byte-identically. - Ten reported issues fixed — see below.
Changed: output-affecting defaults (results differ vs v1.0.9)
Each ships with an opt-out.
| Default | Opt-out |
|---|---|
| Third best-of-outcome merge candidate — miniprot's native CDS-only model, adopted only when strictly better, never for an antisense hit | --no-miniprot-candidate
|
| Divergence-adaptive miniprot-only rescue floor (0.50 → toward 0.30 as DNA-lift recall drops; inert on close pairs) | --no-adaptive-rescue-floor
|
| Every CDS carries the reference's descriptive attributes | LIFTON_NO_CDS_ATTR_CARRY=1
|
Every CDS carries a shared ID=cds-<transcript>
| LIFTON_NO_CONTAINMENT_NORMALIZE=1
|
Coding transcripts harmonized to mRNA
| LIFTON_NO_MRNA_HARMONIZE=1
|
Note for downstream consumers: output files are 12–43% larger than v1.0.9, because CDS rows now carry the descriptive attributes the reference had. Coordinates and the encoded protein are unchanged — verified with columns 1-8 byte-identical across all 1,815,199 rows of a dog→cat lift, with protein_identity unchanged on every one of its 66,276 transcripts.
Fixed: installation
pip install liftonfailed in any clean environment, on every prior release. LiftOn depended oncigar0.1.3 — unmaintained since 2015, sdist-only, whosesetup.pycallsez_setup.use_setuptools()to download a setuptools egg from a URL that no longer serves one. Any install without a cached wheel died withtarfile.ReadError: not a gzip file. LiftOn used exactly one call from it; that parsing now lives in-tree and the dependency is gone.
Fixed: reported issues
- #35 —
no such column: <id>from the DNA lift. Vendored Liftoff double-quoted itsid IN (...)values, which SQL reads as an identifier; modern SQLite rejects it while older builds silently accepted it, which is why the same input worked on one machine and failed on another. IDs are now bound as parameters. - #39 — one unresolvable alignment no longer kills an entire chromosome.
- #33 — an antisense miniprot hit can no longer be merged into a transcript on the opposite strand, which produced exon and CDS rows with conflicting strands.
- #46 — UTR indels are no longer reported as frameshifts; detection is scoped to the coding sub-alignment.
- #32, #8 — CDS rows carry an
ID(and the reference's descriptive attributes). - #28 — coding transcripts are typed consistently as
mRNA. - #43, #11 — minimap2 is preflight-checked at startup and documented as a requirement.
- #50 — the run summary is written to
stats/summary.txt, not only stderr. - #57 — invalid, stale, or Git-LFS-pointer minimap2 indexes are detected and rebuilt instead of yielding a header-only lift.
- #56 —
--streamno longer crashes on DuckDB 1.5.3/1.5.4 (both excluded).
Also in this release
Auditable run_manifest.json for every run, transactional output that publishes atomically only on success, always-on structural validation before publication, content-addressed annotation caches, and bounded per-stage scheduling (--step7-max-inflight and siblings).
Full details: CHANGELOG.md · documentation · technical report