Skip to content

chore: version 2.1.1 - #1146

Merged
edkerk merged 12 commits into
mainfrom
release/2.1.1
Oct 7, 2026
Merged

edkerk merged 12 commits into
mainfrom
release/2.1.1

Conversation

@github-actions

@github-actions github-actions Bot commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

No structural model content changes in this release.

edkerk and others added 10 commits October 5, 2026 16:05
* ci: report the full MEMOTE run in its /run memote comment

/run memote now edits its own comment, like /run gene-essentiality, with a link to
the workflow in the Actions tab. The run replaces that notice with a link to
itself when it starts, and with a short result when it finishes: whether it
finished, the full-suite score and its change against the base branch, a link to
the full report, the per-test scores in a collapsed table, and a note that the
Model QC comment was updated too (code/test/memoteComment.py).

* ci: report the MEMOTE run's own result and scored model version

- The MEMOTE step records how it ended (finished, timeout, failed) and the model
  version it scored, before the branch is reset to its remote tip. The comment
  uses these, so a timed-out run is not reported with an earlier score for the
  same model, and a push during the run does not turn a finished run into
  "did not finish" (it is noted instead). A skipped step reads "did not start".
- /run memote edits its comment before dispatching, so it cannot overwrite the
  run's own link, and falls back to dispatching without the comment input on a
  branch whose memote-full.yml does not have it.
- The whole command comment is kept (up to a marker), without carriage returns.

* chore: update model QC results [skip ci]

* chore: full MEMOTE result [skip ci]

* chore: update model QC results [skip ci]

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* fix: add the missing empty fields to the FDX1 row in genes.tsv

The ENSG00000137714 row had 7 of the 10 columns; geneAliases,
compartments and compDataSource are now empty, as for the other
recently added genes.

Closes #1136

* chore: update model QC results [skip ci]

* chore: update model QC results [skip ci]
…med gene identifiers in the QC (#1139)

* fix: remove Ensembl version suffixes from transcript and protein ids

125 geneENSTID/geneENSPID values of 16 genes carried a version suffix
(e.g. ENST00000375991.9); they are now unversioned, as for all other genes.

Closes #1138

* chore: update model QC results [skip ci]

* feat: report malformed gene identifiers and rows with the wrong number of fields

annotationTest.py now also checks genes.tsv: Ensembl transcript and protein
ids must be unversioned, and UniProt and NCBI Gene ids must match their
formats. In all three annotation tables, a row with a different number of
fields than the header is reported. Both count under 'Malformed
cross-references' in the model QC report.

Refs #1138, #1136

* chore: update model QC results [skip ci]

* Document qc_split_compartments.csv in the test results README

* chore: update model QC results [skip ci]
* feat: generate the animal GEMs from Human-GEM in Python (#421)

generateAnimalGEM.py replaces the five masterScript<Species>GEM.m scripts. The species is an
argument and everything species-specific is read from the Animal-GEM repository, so a
developer and a CI job run the same command. It rewrites the GPRs through the Alliance
orthologs, adds the species-specific network, gap-fills the essential tasks, stamps the
version and date into the model metadata, and writes the model and annotation files.

For Human-GEM 2.0.0-2.1.0 the cofactor pool of MAR00021 is switched from lipoyl-lysine to
lipoic acid in memory, because MAR00021 cannot carry flux otherwise (#1140).

* chore: update model QC results [skip ci]

* feat: build the animal GEM drafts with raven-toolbox's homology functions

get_model_from_homology (keep_gene_free, preserve_notes) and set_model_metadata replace the
local GPR rewriting and metadata code. Gene symbols that a GPR cannot hold, such as
E(spl)m3-HLH, dib[m] or the Drosophila gene "or", get a valid gene id and keep the symbol as
the gene name; the species-specific metabolites that Human-GEM no longer knows by name are
reported together. The lipoyl-lysine fix also applies to the unversioned develop model.

* feat: build the animal GEMs on a stable Human-GEM release

The template, orthology, annotation tables and task list now come from a Human-GEM checkout
(--human-repo, normally a release tag). A model without a version (develop) is refused unless
--allow-unreleased is given.

* fix: drop bookkeeping notes, record the MAR00022 swap in the model, warn on unbalanced species reactions

The raven homology call left homology_source on every reaction and kept rxnFrom/metFrom, which
the previous scripts removed. The lipoic acid swap in MAR00022 is now noted on the reaction, a
template without a model id (older releases) no longer fails, and species-specific reactions
that are not balanced against the template are reported.

* fix: leave sinks and demands out of the unbalanced-reaction warning

* feat: animal GEM versions follow Human-GEM's major.minor

Without --version an animal GEM keeps its version when its major.minor matches the Human-GEM
release it is built on, and becomes <major>.<minor>.0 of that release otherwise. A requested
version with another major.minor is refused.

* feat: MATLAB generateAnimalGEM, the same pipeline as the Python generator

generateAnimalGEM.m replaces the previous MATLAB animal GEM functions (updateAnimalGEM,
getModelFromOrthology, addMetabolicNetwork, gapfill4EssentialTasks, updateAnimalAnnotations,
extractAllianceGenomeOrthologs, countFrequency). It uses RAVEN 3's getModelFromHomology with
complexPolicy, keepGeneFree and preserveNotes, and gives the same model and annotation tables
as generateAnimalGEM.py for all five species. cleanGrRules, replaceGrRules and
translateGrRules, which other code uses, move to code/GPRs.

Both generators resolve gap-filling ties, so the gap-filled set does not depend on the solver,
and keep the Human-GEM notes of gap-filled reactions.
…tated model (#1145)

* Use minimal quoting in genes.tsv

genes.tsv enclosed every field in double quotes, while reactions.tsv,
metabolites.tsv and both deprecated identifier lists carry none. No field
in any of them contains a tab, a double quote or a newline, so none of
them needs quoting.

The parsed content is unchanged: all 2870 rows, all 588 empty cells and
the all-digit geneEntrezID column read back exactly as before.

* Read every TSV column as text and stop quoting on export

importTsvFile took its column types from the quotes on the file's second
line: a quoted field became char, an unquoted one became double, and a
file with no quotes at all fell back to char throughout. Fully quoted and
fully unquoted tables therefore both worked, but a table quoted only
where necessary would have had its unquoted columns read as numbers, and
one gene alias containing a quote would have been enough to cause it.
Column types no longer depend on quoting; numeric_cols names the columns
that are numbers, and no caller passes it.

exportTsvFile quoted every string entry by default, which returned the
quotes to any table written from MATLAB.

The comments in prepHumanModelForftINIT and estimateEssentialGenes gave
the absence of quotes as the reason the spontaneous column arrives as
text, which is no longer what decides it.

* chore: update model QC results [skip ci]

* fix: export the .mat from the annotated model

The .mat was written from the plain model, so it carried none of the TSV
annotation -- and each metabolite's InChI lives in metabolites.tsv
(metInChI), not in the YAML. Human-GEM 2.0.0 shipped 1063 InChIs in its
.mat; 2.0.1 and 2.1.0 ship none, along with no cross-references.

Only the YAML has a reason to stay annotation-light: it is the file git
tracks, and a diff of it should show curation rather than merged
annotation. A .mat is a binary artefact that nobody diffs, so there is
nothing to gain by keeping it lean and a model to lose by it.

Against the 2.1.0 model the regenerated .mat now has 36 fields to 2.0.0's
33, with nothing missing: 6350 InChIs (2.0.0 had 1063, the tsv having
grown since), and rxnMiriams, metMiriams and geneMiriams that no release
has carried before.
#1145 exported the .mat from the annotated model to pick up each
metabolite's InChI, which lives in metabolites.tsv rather than the yml.
That also pulled in the whole annotation set, so the .mat gained
rxnMiriams, metMiriams and geneMiriams -- fields no release has carried,
and more than was wanted.

An InChI is a structure rather than a cross-reference, so add_inchis
merges that one column and nothing else, and the .mat goes back to being
exported from the plain model. Its field set now matches 2.0.0's exactly:
33 fields, none missing and none added, with 6350 InChIs.

The xml, xlsx and txt exports are unchanged and still carry the full
annotation.
@edkerk

edkerk commented Oct 7, 2026

Copy link
Copy Markdown
Member

/run memote

@edkerk

edkerk commented Oct 7, 2026 •

Copy link
Copy Markdown
Member

Gene essentiality was run on this pull request via GH Actions.

Gene essentiality: effect of this change

Checked 0 gene(s) directly affected plus 0 more that share a metabolite with one of them.

A gene counts as changed below only if the flip agrees in direction across at least 3 of the 5 cell-line models; fewer than that is grouped as likely noise from ftINIT's run-to-run variability instead.

Category Status
Growth effect changed (vs Hart 2015) ✅ 0
Other role changed (not Hart-comparable) ✅ 0
Likely noise (<3/5 lines) ✅ 0
No change ✅ 0

Full detail: gene-essential_summary.md.

✅ unchanged · ✨ correct vs Hart 2015 · ❌ wrong vs Hart 2015 · ℹ️ not comparable to Hart 2015

The unscoped, every-gene matrix behind the table above is committed to gene-essential.csv.

Note: each run posts its results in place of its own start notice; earlier results link here.

@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor Author

🔬 Started the full MEMOTE suite on release/2.1.1 (this takes hours). The score will update the Model QC comment when it finishes.

@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor Author

Model quality report

⚠️ 6 pre-existing finding(s), no regressions vs main. Non-blocking. Gates: duplicate keys 0 ✅, growth 1.9 ✅.

Section Status
Model & network checks (20) ⚠️ 6 pre-existing
Model file & metabolic tasks (6) ✅ all pass
MEMOTE ✅ 64.9% (full suite)
Full report model_qc_summary.md

Pre-existing:

  • Reactions split across compartments: 26
  • Reactions flagged by MACAW dead-end test: 1111
  • Reactions flagged as MACAW duplicates: 340
  • Mass-imbalanced reactions: 69
  • Charge-imbalanced reactions: 172
  • Structure vs formula/charge inconsistencies: 57

✅ unchanged · ✨ improved vs main · ⚠️ pre-existing, non-blocking · ❌ regression

Full workflow run · this comment is edited as results come in

@edkerk edkerk left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

No structural model changes.

@edkerk
edkerk merged commit 6812be2 into main Oct 7, 2026
@edkerk
edkerk deleted the release/2.1.1 branch October 7, 2026 21:59
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.

1 participant