Skip to content

Release 2026.3.0 - #732

Open
bencap wants to merge 163 commits into
mainfrom
release-2026.3.0
Open

bencap wants to merge 163 commits into
mainfrom
release-2026.3.0

Conversation

@bencap

@bencap bencap commented Sep 30, 2026

Copy link
Copy Markdown
Collaborator

Features

Bug Fixes

Maintenance

bencap and others added 30 commits July 2, 2026 13:01
  Wire the UI up to the new GET /score-sets/{urn}/variants endpoint that
  serves one pre-chewed record per variant (selection key, score,
  consequence, annotation bridge ids, and parsed DNA/protein HGVS blocks).

  - add LeanVariant/HgvsField types mirrored from the OpenAPI schema
  - add getLeanScoreSetVariants and leanScoreSetVariantsUrl to the API
    client
  - fetch the lean view alongside the legacy CSV scoresData channel in
    ScoreSetView, exposing a typed leanVariantRecords handle so consumers
    can migrate off the CSV channel slice by slice
  - regenerate openapi.d.ts for the new path and schemas
…rm binaries

Add `os` (darwin, linux, win32) and `cpu` (x64, arm64) fields to package.json
so installs are validated against supported platforms, and regenerate the
lockfile to include the platform-specific optional binaries (e.g. the full set
of @esbuild/* targets). This lets the project be installed and built on macOS,
Linux, and Windows across x64 and arm64.
Also picks up minor transitive dependency bumps from the lockfile regeneration.
Query the AlphaFold prediction API with the UniProt ID directly instead of
first fetching the UniProt XML entry, parsing out AlphaFoldDB references, and
having the user select one. This removes the AlphaFold ID dropdown and its
supporting state.
- Drop fetchUniprotData, the alphaFoldData computed property, and the
  alphaFoldData/selectedAlphaFold watchers; the uniprotId watcher now renders
  the viewer directly.
- fetchAlphaFoldCifUrl and render key off uniprotId; the model is matched by
  entryId AF-<uniprotId>-F1 to disambiguate multi-entry responses (e.g. P42167).
- Remove now-unused jquery, FloatLabel, and Select imports and the
  uniprotData/selectedAlphaFold data fields.# Please enter the commit message for your changes. Lines starting
Migrate the heatmap, histogram, score-set view, visualizer, and variant
lookup off the legacy CSV-parsed `Variant` model onto the lean
`DisplayVariant`/`LeanVariant` API record. The score-set view now fetches
a single lean whole-set channel instead of the dual histogram-CSV + lean
channels, and variant identity keys move from `accession` to `variantUrn`
throughout.

- Rework use-variant-coordinates around `coordinateFor(variant, level,
  frame)` as the single source of truth for the (level × frame)
  coordinate grid; add `resolveLevel` and `isUnmapped`, and make the
  (mapped, dna) cell null for protein assays (mavedb-api#784)
- Handle unmapped variants: labels fall back to submitted HGVS rather
  than the URN, mapped/clinical mode is disabled and annotated when a set
  has no mapped data, and the search matches both frames
- Extract VEP consequence bucketing into lib/consequences.ts, replacing
  the parsed-HGVS effect classifiers (`variantIsMissense`, etc.) in
  lib/variants.ts; `isStartOrStopLoss` stays as the block-aware heatmap
  filter
- Extract shared d3 chart tooltip builders into lib/tooltips.ts and
  rebuild the heatmap/histogram tooltips on top of them
- Add `isNucleotideHgvs` to lib/mave-hgvs.ts and
  `inferReferenceSequenceFromBlocks` to lib/variants.ts
- Heatmap UX: deferred redraw with a loading indicator, a not-shown
  breakdown (no-coordinate vs complex), a note when the selection is off
  the chart, and viewport-aware hover-tooltip positioning
- Add tests for consequences, mave-hgvs, and use-variant-coordinates
Consume the reworked GET /variants/{urn} envelope: a self-contained
VariantDetailPanel (assay-level facts, primary classification, gnomAD/ClinVar,
supersession badge, link to the variant page) wired into ScoreSetView on the
?variant= selection, plus use-variant-lookup / VariantScreen / the legacy
measurement-URN redirect repointed off the deleted VariantEffectMeasurementWithScoreSet
onto the flat envelope fields (clingenAlleleId bridge, separately fetched score set).

Clinical controls: drop the hard-coded DEFAULT_CLINICAL_CONTROL_VERSION, accept a
nullable version end to end, and render human-readable ClinVar versions
(formatClinvarVersion) in the heatmap/histogram clinical mode. openapi.d.ts
regenerated for the new API shapes.
Match the API field rename: the detail panel reads the superseding *score set*'s URN
(supersession is score-set-versioned), not a variant URN, and the tooltip now reads
"Superseded by score set X". Update the generated VariantDetail type to match. The /alleles/*
schema regen in openapi.d.ts is deliberately left for the alleles-slice work.
The viewer assumed a single canonical AlphaFold model (AF-<id>-F1), which
does not exist for proteins over ~2700 aa, so those score sets rendered no
structure (and silently errored).
When no canonical AlphaFold model is available, fetch experimental (PDBe)
and template (SWISS-MODEL) structures from 3D-Beacons and let the user switch
between the covering segments via a dropdown. Normal-length proteins keep
loading their single AlphaFold model as before.
- Overlay heatmap scores on every structure: canonical-numbered models
  (AlphaFold, SWISS-MODEL) directly, and PDBe experimental structures via
  their SIFTS UniProt mapping (uniprot_accession selection). Always apply the
  selection with nonSelectedColor so molstar's per-chain default never shows.
- Default to the structure that best covers the scored residues, and re-pick
  when score data arrives after the structures load.
- Map clicked-residue events back to canonical UniProt positions (unp_seq_id)
  so clicking a residue selects and scrolls to the matching heatmap column on
  SIFTS-mapped structures.
- Contain the dropdown overlay's scroll (overscroll-behavior) so it no longer
  chains into the molstar viewer, and dispose the previous molstar plugin when
  switching structures.
- Offer only structures overlapping the assayed residues, and always show the
  segment selector for fragment structures (hidden only for a single
  full-length AlphaFold model).
…m-build-support

chore(build): declare multi-platform support and include cross-platfo…
…ram url helper

- Support an optional `limit` on getScoreSetScoresPreview and
  getScoreSetCountsPreview so the preview table fetches only the rows it
  renders instead of the full dataset; document that `drop_na_columns`
  is evaluated over the sampled rows
- Remove the now-unused histogramScoreSetVariantDataUrl helper and its
  scoreSetVariantDataParams/namespace constant
Pass the variant's URN as a query param on the ClinGen variant-details
link so the destination page can disambiguate which variant to show
when a single ClinGen allele maps to multiple variants.
- Show the score set URN under its title when showUrn is set, so
  correlated score sets with identical facts can be told apart
- Add an "Assay level" detail row driven by a new assayLevel prop,
  surfacing the score-set-wide protein/cdna/genomic measurement level
- Scope the 2-col top-border reset to the new assay-facts-grid--2col
  class so the 1-col layout keeps a divider between every stacked row
- Pass MAX_ROWS as a limit to the scores/counts preview requests
  instead of fetching the full dataset and slicing client-side
- Derive the "Showing X of Y" total from the score set's numVariants
  rather than the now-truncated fetched rows, since the fetch no
  longer returns the true total
proteinConsequenceBlock referenced variant.proteinLevelHgvs, a field
that no longer exists on DisplayVariant; fall back through
variant.mapped.protein (the mapped protein representation) before
the submitted protein HGVS, matching the documented fallback order.
- Replace MeasurementType (nucleotide/protein/associatedNucleotide)
  with a two-way LevelBucket (nucleotide/protein) derived from the
  mapping record's AssayLevel, since cdna and genomic share one
  visual bucket
- Add assayLevelBucket() to bucket a raw assay level, and
  dominantAssayLevel() to pick the most common non-null level across
  a score set's variants
- Add ASSAY_LEVEL_LABELS for the three per-level labels and
  RELATIONSHIP_LABELS for the RT direct/protein_consequence/
  nucleotide_encoding relationship display strings
- Add unit tests covering bucketing and dominant-level selection,
  including ties and all-null/undefined inputs
Add memoizeRead, a p-memoize/expiry-map wrapper that dedupes
concurrent calls to the same idempotent GET and caches the result
for a short TTL. Read data can be rewritten underneath us at any
time by the mapping/annotation worker, so the cache is tuned to
collapse page-load request bursts rather than to reuse results
long-term; a 30s default TTL bounds staleness while composables
still handle same-page reuse via their own reactive caches.
- Replace lookupVariantsByClingenId (POST clingen-allele-id-lookups)
  with getAlleleMeasurements (GET clingen-alleles/{id}/measurements),
  the new entrypoint for the ClinGen-allele-centric variant page;
  supports includeSuperseded, includeNucleotideSiblings, and asOf
- Wrap getAlleleByCaId, getScoreSet, getLeanScoreSetVariants, and
  getVariantDetail in memoizeRead so repeated reads for the same key
  dedupe and share a short-TTL cache instead of refetching
- Consolidate the duplicated getScoreSet into score-sets.ts and drop
  the copy from calibrations.ts
- Drop getHistogramVariantData now that its only caller is gone
Add a "Download PDB" button to ProteinStructureView that downloads the
PDB coordinate file for the currently displayed AlphaFold model. The PDB
URL (pdbUrl) is read from the same AlphaFold prediction metadata already
fetched to obtain the CIF URL loaded by the viewer.
Turn the structure viewer's download control into a SplitButton offering
both the PDB structure and a PyMOL coloring script (.pml). The generated
script reproduces the exact residue colors currently shown in the viewer
for the selected "Color by" mode: it defines each displayed color with
set_color and applies it to the matching residues via `color ..., resi`,
reusing the same (residue number, color) pairs the viewer feeds to
molstar so the coloring matches after loading the companion PDB.
Add a "ChimeraX coloring script (.cxc)" option to the structure viewer's
download menu. The generated command script reproduces the same per-residue
coloring as the PyMOL script, using `color /A:<ranges> #<hex> target acs`
per unique color plus a whole-chain base color; ChimeraX accepts hex colors
directly and writes residue lists as "5-8,12".

Extract the residue grouping and run-compression (groupResiduesByColor,
residueRuns) shared by the PyMOL and ChimeraX builders.
Add a "Mol* coloring script (.mvsj)" option to the structure viewer's
download menu. The generated MolViewSpec document reproduces the current
per-residue coloring for loading in the Mol* viewer (drag-and-drop, or the
?mvs-url= parameter). It fetches the AlphaFold structure by URL, so it is
self-contained (no companion file needed), and selects residues by author
numbering (auth_seq_id = UniProt position) to match MaveDB's numbering.
Add groupAlleles, which collapses a variant detail's allele sidecar
into rendered groups: each c<->g projection pair (linked by
projectionOf) folds into one entry with deduplicated annotations,
while the protein apex and projection-failed candidates stay as
one-member groups. Groups carry a measured/pageRoot/derivation
summary and sort measured-and-page-root entries first, then
bottom-up by level (genomic -> cdna -> protein), so the UI can
render one block per real allele instead of one per c/g/p record.

Add unit tests covering the nucleotide-assay and protein-assay
pairing shapes, divergent-annotation flagging, dangling projectionOf,
the measured-vs-null-relation distinction, and page-anchor CAID
exclusion from surfaced links.
Drop a leftover console.log(endpoint) call in useEntityCache's fetch
path.
- Replace the retired lookupVariantsByClingenId flow with
  getAlleleMeasurements, consuming the API's own direct-first order
  instead of re-deriving nucleotide/protein/associatedNucleotide
  buckets from a nested exactMatch/equivalentAa/equivalentNt shape
- Extract per-URN detail/score-set/scores caching into
  useMeasurementCache, and selection + its derived state (score,
  calibration resolution, clingen id) into useMeasurementSelection,
  so useVariantLookup becomes an orchestrating facade over both plus
  useClingenAllele
- Add includeSuperseded and asOf query axes; any change to anchor,
  superseded scope, or as_of bumps a query epoch, clears the caches,
  and refetches, so a slower stale response can't clobber a newer one
- Add a one-shot citation fallback: an initial `?variant=` deep link
  to a superseded measurement enables includeSuperseded once so it
  resolves, without fighting a later manual toggle-off
- Cap background prefetch of non-selected measurement details at 4
  concurrent requests via p-limit, so a large equivalence class
  doesn't fire a request storm on load
- Widen SequenceLevel from 'dna'|'protein' to 'cdna'|'genomic'|
  'protein', mirroring the backend's AnnotationLayer enum, and route
  the mapped frame through the new mapped.{cdna,genomic,protein}
  triple instead of the removed assayLevelHgvs/proteinLevelHgvs
  fields
- In the raw frame, cdna and genomic both alias hgvsNt since the
  submitted string is target-relative and the level split only
  exists post-mapping; sequenceTypeOptions collapses them into one
  "Nucleotide" option keyed by the variant's assayLevel
- Make getHgvsNt in the mapped frame prefer the coding (cdna)
  coordinate over genomic, falling back to genomic only when there
  is no coding projection, so it pairs naturally with the protein
  change in labels and tooltips
- Update tests for the three-level split, the raw-frame NT aliasing,
  the coding-preferred mapped fallback, and the existing protein-only
  no-fabricated-coding guarantee (#784)
Reverse translation expands a change into many redundant equivalence-
class representations (a protein consequence plus its sibling
nucleotide encodings). Add aggregateByStudy to collapse those back
into one entry per study — measurement count, assay level(s)
(protein/nucleotide/mixed), distinct functional classifications, and
functional score range — so search can surface per-study evidence
instead of a row per representation. Studies with more corroborating
measurements sort first, ties broken by title.

Add unit tests covering single- and multi-study collapsing, the
mixed-level flag with internal disagreement, and a null score range
when no measurement carries a score.
…ship

- Rename AlleleResult.variants from nucleotide/protein/
  associatedNucleotide to direct/proteinConsequence/nucleotideEncoding,
  mirroring the API's AlleleMeasurement.relationship, and switch its
  entries from VariantEffectMeasurementWithShortScoreSet to
  AlleleMeasurement
- Add mergeAlleleSpellings to fold one allele's transcript/genomic/MANE
  coordinates into another, deduplicating shared MANE entries, so a
  protein change's several registered transcript alleles collapse into
  one search result instead of several
- Drop the unused `m` regex flag from clinGenAlleleIdRegex/
  clinVarVariationIdRegex/rsIdRegex, switch `||` defaults to `??`, and
  replace a for-in loop with Object.entries in the MANE coordinate walk

Add unit tests for mergeAlleleSpellings covering coordinate folding,
MANE coordinate dedup, and fill-without-overwrite of genome-build HGVS.
bencap and others added 3 commits September 30, 2026 13:46
…ta-model

- score-sets.ts: the preview requests keep release's drop_unused_hgvs_columns
  'false' (#729); RT's new lean-view and score set fetchers are kept.
- VariantInfoSection.vue stays deleted. #722's calibration-control row moves
  onto the variant page's Functional evidence card, with
  selectedVariantControlStatus in use-variant-lookup.
- ScoreSetHistogram.vue: RT's version with #722's calibration-controls source
  re-applied, keyed on variantUrn.
- SearchVariantsScreen.vue keeps CALIBRATION_STATUS_LEGEND_HTML and drops the
  score-set list constants RT removed.
- calibrations.ts renames #722's FunctionalClassification alias to
  ScoreCalibrationFunctionalClassification, to avoid RT's string type.
- openapi.d.ts regenerated from the synced API branch.
Measurement relationship
- Badge is now Direct / Indirect; both related-variant relationships share
  Indirect. The detail is stated once, as the first element of the
  Functional evidence box: "This score was measured on a different variant
  which has the same protein change as yours: <HGVS>".
- Remove the relationship sentence under the carousel and the unlabeled
  confidence pill on Functional evidence.

Clinical & population ledger
- "Measured" is a page-wide fact (lookup.measuredDigests, from the loaded
  measurement envelopes), so the page variant reads "Your variant" +
  "Measured" instead of flipping to Convergent when another card is selected.
- The selected measurement's variant gets a solid "Selected measurement"
  badge and a sage border echoing the selected card. Resolved / Convergent /
  Candidate stay relative to the selection and only appear on variants
  without a measurement of their own.
- Extract titleMember into allele-grouping and reuse it for the notice.

Page controls
- Move "MaveDB as of" and the superseded toggle into a View options panel
  opened from the header (count badge when non-default, as-of shown in the
  subtitle); Key becomes a header button.

Wording
- One noun per referent (variant / score set), "protein change" instead of
  "protein consequence", "Functional impact" for the classification,
  "Molecular mechanism", sentence-case "Assay facts", and "Detects ...
  variants" labels matching the docs.
- Add Calibration and NMD Key-drawer entries, retitle the confidence
  section, and point the drawer's "more" link at the
  interpreting-annotated-variants doc.
- Update variant-page and assay-facts docs to match.
…n-for-allele-data-model

Rebuild variant detail, allele grouping, and clinical controls on the allele-centric API
@bencap bencap added this to the R2026.3 milestone Sep 30, 2026
@bencap bencap added the core: release A release PR label Sep 30, 2026
@bencap bencap self-assigned this Sep 30, 2026
@coveralls

coveralls commented Sep 30, 2026 •

Copy link
Copy Markdown

Coverage Status

coverage: 22.54% (+12.3%) from 10.274% — release-2026.3.0 into main

- Bump version from 2026.2.4.2 to 2026.3.0
- Update axios from ^1.18.1 to ^1.20.0
- Update dompurify from ^3.4.11 to ^3.4.16
- Update moment from ^2.29.4 to ^2.31.0
- Update uuid from ^9.0.1 to ^11.1.1
- Update @vitejs/plugin-basic-ssl from ^1.0.2 to ^2.3.0
- Update @vitest/coverage-v8 from 2.1.9 to ^4.1.11
- Update vite from ^5.4.21 to ^7.3.6
- Update vitest from ^2.1.9 to ^4.1.11
- Add overrides for rest-client-vue to use the latest uuid

refactor: remove unused css preprocessor options in vite.config.js

fix: disable coverage for all files in vitest.config.ts
… document Cat-VRS mappings

- gnomadVariantUrl reads the dataset from a release table and leaves it off for an unknown release
  instead of guessing gnomad_r4, matching the API's gnomad_variant_url.
- The data-standards page describes the categorical variant's mappings and the VA-Spec proposition
  subject.
- Examples use the 1.1 field names (focus, subject, object) and the ga4gh-gkm-term classification system.
- A note states which specification versions MaveDB emits and that minor releases can rename fields.
…AG AA contrast

- One .mave-card frame site-wide; the ornamental gradient bar is removed.
- One .mave-tag geometry for classification, evidence and status tags, with
  .mave-tag-primary and .mave-tag-ruo variants.
- Evidence ramp text colours, inactive and active tab text, the unspecified
  classification grey and the shared .mave-label now meet WCAG AA.
- .mave-flash replaces the Key drawer's own highlight animation.
…tead of prefixing titles

- Calibration tables, the histogram's calibration picker and the CSV column
  dialog show Primary and Research use only as tags beside the title.
- The CSV dialog reads the API's new researchUseOnly flag; the API no longer
  prefixes RUO labels.
- The Key defines both tags under Calibration.
…riant frame toggle

- New MvPanel card (title band, optional notice, body), shared with the
  variant page.
- The Submitted / Reference variants toggle links to its Key entry, and a
  per-score-set caveat replaces the always-on help bubble.
- The histogram reserves headroom for its legend, labels the unsplit series
  "All variants" and names the ClinVar release in its legend; the heatmap
  keys the wild-type cell.
- The variant detail panel uses the shared classification tag and names the
  calibration behind its call.
…able

Measurements
- Measurements are grouped by what they assayed relative to the page's
  variant, under a one-sentence header shared with the search results.
  Large groups preview their top rows behind "Show N more"; the selected
  measurement always stays visible.
- Each row shows the score set's citation and assay facts, its functional
  call and evidence code, and its score. A research-use-only call stands in
  when no clinical-grade one exists, tagged and with its evidence code.

Clinical and population table
- One page-wide table of every nucleotide change across the loaded
  measurements, so its rows don't change with the selection. Releases shared
  by every row are stated once in the column headers.
- MvGnomadCell replaces MvGnomadSummary.

Page
- MvPanel cards throughout; the indirect-measurement caveat is spelled out
  once, in the measurement panel's notice.
- The header shows the GRCh38 location only, and a protein (PA) page takes
  its name from the protein HGVS.
- Docs describe the grouped table and present Measured, Resolved, Convergent
  and Candidate as recorded relationships rather than per-row labels.
…ng its transcript alleles

One transcript's genomic spelling is a single encoding of the protein
change, not its location, so a merged result no longer borrows it.
…variant page

- Each result lists its measurements under the variant page's group headers,
  previewing the top-ranked rows with the rest linked on the variant page.
- Rows share the variant page's classification, evidence and RUO display.
- AlleleResult carries the API's ranked measurement list instead of
  pre-bucketed relationships.
…nd-color contrast

- Import Raleway 400/500/600/700 and 400 italic explicitly; the package index ships only 400, so every bold and italic was browser-synthesized.
- Enable lining figures on body text; Raleway's default old-style digits bob in scores, coordinates and HGVS.
- Sage text (about 2.4:1 on white) now uses sage-strong, or sage-dark for headings at 20px bold and up. Fills, borders and icons keep sage.
- Dark text on orange CTAs and the beta banner (white was about 2.1:1).
- Replace the non-existent text-dark class with text-text-dark on MaveMD search.
- Remove the duplicate --color-superseded definition; keep the amber in use and give the badge dot a matching amber.
- Swap Bootstrap greys in histogram and heatmap chrome for theme tokens.
- index.html: lang="en", apple-touch icon, drop the missing favicon.png link.
…, and explain blocked wizard steps

- Add useUnsavedChangesGuard: confirms before a route change, reload or Clear/Reset discards input in the experiment and score set creators and editors.
- The upload drop zone is a real button with a focus ring; it was a click-only div that keyboard users could not reach.
- An empty experiment picker links to creating an experiment instead of dead-ending first-time submitters.
- Next stays enabled and marks the step's empty required fields inline (missingRequiredFieldErrors), clearing each as it is filled.
…rch failures

- Debounced typing and filter changes replace the URL instead of pushing a history entry per keystroke.
- Only an explicit submit (Enter, the Search button, or arriving with ?search=) redirects variant identifiers to MaveMD; while typing, a "Look it up in MaveMD" link is offered instead.
- variantSearchRouteFor replaces routeToVariantSearchIfVariantIsSearchable as a pure route builder, now unit-tested.
- Failed searches show an error state with retry instead of stale or empty results; no-match searches offer "Clear search and filters".
- Sage text and the Search button label pick up the contrast fixes.
…endless variants spinner

- remote-data's loadData never committed loadingFailed, so a failed variants fetch spun forever; it now fails and the page offers a retry (reloadData).
- The item store records the HTTP status of a failed load; the score set page shows "not found" only for a 404 and an error with retry otherwise.
- The not-found page offers sign-in to signed-out viewers, since private records 404 by design.
- /collections is a router redirect to the dashboard's collections tab; the interstitial page is removed.
- Histogram x-axis tick count scales with width so labels no longer collide on phones.
- Orange CTA on the not-found page picks up the dark-text contrast fix.
…ecked

- The PHI check applies to every save with controls, not only published calibrations, matching the API's rule that controls are stored only while affirmed.
- Unchecking the affirmation on saved controls asks for confirmation, then stages their removal in the existing "Removing" panel; Undo restores the controls and the checkbox.
- Documents calibration controls in the score calibrations reference: the CSV format, the PHI rule, and what a score re-upload does to controls.
GET /alleles/{identifier} now answers 404 for an allele that only
unreadable score sets link; the generated schema's description follows.
…d variants

MvCalibrationSelect replaces the histogram's popover and the variant
page's ad hoc select, and adds a picker to the score set page's variant
detail panel, which shares the distribution's selection. Every picker
offers "None" and orders primary, clinical-grade, then research-use-only.

The detail panel no longer falls back to the primary calibration when the
selected one doesn't classify the variant. Instead, it and the variant
page show a display-only "Outside calibrated ranges" / "Not in a
calibrated class" label in place of a call.
Node 20 cannot load a .prettierrc.ts without a loader, so Prettier ran
with its defaults. The config is now JSON. quotProps is spelled quoteProps,
and the misspelled backetLine is dropped: it never applied, and the code
follows the default. The generated OpenAPI schema is excluded from
formatting.
…ls across them

Each measurement row's Evidence column draws a small histogram of its score
set's stored score distribution, shaded by the abnormal and normal ranges of
the calibration behind the row's call, with a marker at the variant's score.
Touching ranges of one direction shade as one band. The evidence code (or the
functional impact) sits beneath it, and a no-call reads as a dashed
Unclassified or Not calibrated tag, distinct from a Not specified call. A tag
summary above the table counts the calls across every measurement. The table
drops its score column and switches to columns on its own width.

An RUO evidence switch in the table header, on by default and recorded in the
URL when off, maps to the API's include_research_use_only; when off,
research-use-only calibrations neither supply calls nor shade the strip.
Assay-level filter chips show a check when on. Selecting a measurement opens
the calibration picker on the calibration behind its call.

The Functional evidence panel spans its full width and drops the See full
calibration link. Panel header actions wrap, and the variant page no longer
doubles its side padding on phones.
Replaces the hand-edited ScoreDistribution and single-classification
AlleleMeasurement entries with generated ones, and picks up drift the file had
accumulated: the GA4GH schema upgrade and the calibration_json form field the
calibration upload already sends.
The superseded score sets option in View options becomes a labeled switch,
matching RUO evidence on the measurement table, so it reads as a setting that
can be turned on rather than a button.
…ghest AF

The gnomAD cell reported the maximum allele frequency across matched
records, which needn't be the record ACMG BA1/BS1 would read. It now shows
the record with the highest FAF95 grpmax (then AF), with its AF and FAF95
and how many records it was taken from. ClinVar and gnomAD notes are
rewritten for clarity and the docs updated to match.
Measurement rows tag research-use-only calls "RUO" instead of "Research use
only", spelled out on hover and for screen readers, and the Key entry is
titled "Research use only (RUO)" to introduce the abbreviation. Calibration
pickers and tables keep the full wording.
Search result rows replace the raw score with the score strip used on the
variant page, placing the score within its score set's distribution and
calibration. Searches now include research-use-only calls, tagged, as the
variant page does by default, so a row's tags agree with its strip's shading.

On phones a row stacks its title, a full-width strip, and its tags; wider
screens keep one line. The MANE transcripts toggle now lines up with the rest
of the card.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment