Skip to content

Admit patient CTA expression with source provenance and configurable MAGE exclusions - #585

Merged
iskandr merged 2 commits into
mainfrom
feature/584-expression-cta-vaccines
Oct 7, 2026
Merged

iskandr merged 2 commits into
mainfrom
feature/584-expression-cta-vaccines

Conversation

@iskandr

@iskandr iskandr commented Oct 6, 2026 •

Copy link
Copy Markdown
Contributor

Patient CTA design currently requires callers to assemble antigens themselves. This starts the expression-first workflow in #584 with an adapter that intersects declared patient gene/transcript expression with direct OncoRef CTA admission and returns auditable VaccineAntigen sources, without VCF/BAM.

The adapter uses Topiary's expression loader, retains original feature IDs and input SHA-256, and records missing values, non-CTA features, excluded targets, unresolved transcripts and held-out admission decisions. Gene measurements select the OncoRef canonical reference transcript without assigning abundance to that isoform; transcript measurements select only the measured isoform and reject version mismatches. Identical proteins remain separate source occurrences. Default target eligibility excludes MAGE* except MAGEA4; this never changes the full CTA negative-self-reference exclusions.

Policies, expression measurements, OncoRef reference resolutions, source sequences and decisions persist through allowlisted native JSON. Saved admission replay needs no upstream queries or expression file. Existing peptide and mRNA builders consume the admitted antigen in a synthetic integration smoke. Requires Topiary >=5.94.3, which fixes short expression tables at the shared loader. Bumps Vaxrank to 3.39.0; the OncoRef pin is unchanged.

Related: #584. This PR does not close the complete workflow issue.

Validation

  • ./lint.sh: passed.
  • Focused CTA suites: 64 passed, including empty, single-feature and multi-feature gene/transcript CSV and TSV inputs; no expected failures.
  • Existing peptide and mRNA builder integration passes using a synthetic predictor and a constant Topiary DSL score; no biological binding outcome is asserted.
  • Full ./test.sh: 2,213 passed, 349.23 seconds; no expected failures.
  • pip check: passed.
  • Real-reference smoke with synthetic expression: OncoRef 1.8.206 / GRCh38 Ensembl 93 admits PRAME (509-aa canonical protein) and round-trips the result. MAGEA4 remains an explicit unresolved-transcript decision because the selected older annotation lacks OncoRef's canonical transcript; no alternate isoform is guessed. This is a reference-resolution smoke, not a patient-data validation.

Remaining workflow in #584

Scientific semantics follow Salmon's transcript-abundance model (https://doi.org/10.1038/nmeth.4197) and Ensembl's representative-transcript definition (https://www.ensembl.org/info/genome/genebuild/canonical.html). The example expression threshold in the design document is a caller choice, not a universal cutoff.

Prerequisite: openvax/topiary#487 fixes openvax/topiary#486. The full prerequisite gate passed 5,469 tests with 20 optional skips. A separate high-depth RNA performance concern found during that gate is tracked at openvax/isovar#463. No read cap or Isovar workaround is part of this PR.

@iskandr iskandr changed the title Start expression-first CTA admission with provenance and target exclusions Admit patient CTA expression with source provenance and configurable MAGE exclusions Oct 7, 2026
@iskandr
iskandr marked this pull request as ready for review October 7, 2026 14:26
@iskandr
iskandr merged commit 67cda81 into main Oct 7, 2026
11 checks passed
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.

Expression loader misreads CSV tables with fewer than two data rows as TSV

1 participant