Skip to content

Commit a451bfd

Browse files
committed
feat: add release notes for knowledge graph refresh and update protein structure display
1 parent 1a32315 commit a451bfd

3 files changed

Lines changed: 109 additions & 6 deletions

File tree

src/app/docs/release-notes/releases.ts

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,107 @@ export const AREA_ORDER: ChangeArea[] = [
8989
];
9090

9191
export const RELEASES: Release[] = [
92+
{
93+
version: "2026.06.02",
94+
date: "2026-06-02",
95+
title: "Knowledge graph refresh",
96+
tag: "minor",
97+
summary:
98+
"The platform moved to the rebuilt knowledge graph. New node and relation types landed in the data layer, new gene-page views show them, variant-trait associations were consolidated, and detail-page sections that no longer have backing data were removed.",
99+
changes: [
100+
{
101+
kind: "added",
102+
area: "data",
103+
text: "New node types: Protein, Transcript, Complex, Motif, Dataset, Scoreset, and CellLine. They appear in graph traversals now; dedicated pages come later.",
104+
},
105+
{
106+
kind: "added",
107+
area: "data",
108+
text: "Gene-to-gene relations: co-expression (CoXPresdb v8), co-essentiality, genetic interactions, and TF regulation of target genes (TRRUST v2).",
109+
},
110+
{
111+
kind: "added",
112+
area: "data",
113+
text: "Single-cell gene expression by cell type, from CellxGene Census 2024.",
114+
},
115+
{
116+
kind: "added",
117+
area: "data",
118+
text: "Allele-specific disruption of TF binding by variants, from AdAstra.",
119+
},
120+
{
121+
kind: "added",
122+
area: "data",
123+
text: "Drug-to-drug structural similarity, from ChEMBL fingerprints (Tanimoto).",
124+
},
125+
{
126+
kind: "added",
127+
area: "data",
128+
text: "Variant-centric gene prioritization for diseases and phenotypes, plus pharmacogenomic guidelines.",
129+
},
130+
{
131+
kind: "added",
132+
area: "data",
133+
text: "Gene links to its protein, transcripts, complexes, perturbation datasets, and DMS scoresets.",
134+
},
135+
{
136+
kind: "updated",
137+
area: "data",
138+
text: "Variant-trait associations were consolidated into a single relation (they used to be split into disease, phenotype, and EFO-trait buckets). Gene-disease scoring now keys on the Open Targets composite score (ot_score), with validity tier, ClinGen and GenCC classifications, and per-source evidence subscores.",
139+
},
140+
{
141+
kind: "removed",
142+
area: "data",
143+
text: "Retired the GWAS-Study and EFO-trait (Entity) node types, along with the study-investigates-trait, variant-reported-in-study, and per-bucket gene and variant trait relations.",
144+
},
145+
{
146+
kind: "added",
147+
area: "platform",
148+
source: "Gene",
149+
navSlug: "functional-partners",
150+
text: "New Functional Partners view under Gene Annotation puts gene-to-gene relations in one sortable, filterable table: co-expression (CoXPresdb z-score), co-essentiality, genetic interactions, TF regulation, and protein-protein interactions.",
151+
},
152+
{
153+
kind: "added",
154+
area: "platform",
155+
source: "Gene",
156+
navSlug: "expression",
157+
text: "Expression view adds single-cell expression by cell type (CellxGene Census) next to bulk tissue expression. Sort by specificity, mean expression, or fraction of cells expressing, and group by organ system.",
158+
},
159+
{
160+
kind: "added",
161+
area: "platform",
162+
source: "Gene",
163+
navSlug: "protein-structure",
164+
text: "Protein Structure view now resolves the gene's protein product: UniProt identity, isoform transcripts (Ensembl), and protein-complex memberships (EBI Complex Portal), each with an outbound link.",
165+
},
166+
{
167+
kind: "added",
168+
area: "platform",
169+
source: "Gene",
170+
navSlug: "disease-portfolio",
171+
text: "Disease Portfolio adds a Pharmacogenomic Guidelines table and a variant-centric prioritized targets table (genes prioritized for a disease or phenotype).",
172+
},
173+
{
174+
kind: "removed",
175+
area: "platform",
176+
source: "Detail pages",
177+
text: "Disease pages drop the Studies tab. Phenotype pages drop the Variants and Studies tabs. The graph relations behind them were retired.",
178+
},
179+
{
180+
kind: "fixed",
181+
area: "platform",
182+
source: "Gene",
183+
text: "Pathway-leverage map is populated again. Parent and child pathways and member genes were coming back empty after the schema change.",
184+
},
185+
{
186+
kind: "fixed",
187+
area: "platform",
188+
source: "Graph Explorer",
189+
text: "Edge sort and per-edge filters work again. The schema response shape changed and the controls were reading stale field names.",
190+
},
191+
],
192+
},
92193
{
93194
version: "2026.05.07",
94195
date: "2026-05-07",

src/app/hg38/gene/[id]/gene-level-annotation/(protein-structure)/protein-structure/page.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,8 @@ export default async function GeneProteinStructurePage({
9999
direction: "out",
100100
edgeFields: ["evidence_count"],
101101
nodeFields: [
102-
"name",
103-
"mnemonic",
102+
"protein_name",
103+
"uniprot_mnemonic",
104104
"length_aa",
105105
"mass_da",
106106
"function_description",
@@ -173,8 +173,8 @@ export default async function GeneProteinStructurePage({
173173
const protein: ProteinSummary | null = firstProtein
174174
? {
175175
uniprotId: firstProtein.targetId,
176-
name: str(firstProtein.node.name),
177-
mnemonic: str(firstProtein.node.mnemonic),
176+
name: str(firstProtein.node.protein_name),
177+
mnemonic: str(firstProtein.node.uniprot_mnemonic),
178178
lengthAa: num(firstProtein.node.length_aa),
179179
massDa: num(firstProtein.node.mass_da),
180180
functionDescription: str(firstProtein.node.function_description),

src/features/gene/components/protein-structure/protein-object.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@ import type { ComplexRow, ProteinSummary, TranscriptRow } from "./types";
1111
// =============================================================================
1212

1313
export function ProteinHeader({ protein }: { protein: ProteinSummary }) {
14+
const displayName = protein.mnemonic ?? protein.uniprotId;
1415
const facts = [
15-
protein.uniprotId,
16+
// Skip the accession when it's already the displayed name (no mnemonic).
17+
protein.uniprotId !== displayName ? protein.uniprotId : null,
1618
protein.lengthAa !== null
1719
? `${protein.lengthAa.toLocaleString()} aa`
1820
: null,
@@ -25,7 +27,7 @@ export function ProteinHeader({ protein }: { protein: ProteinSummary }) {
2527
<div className="space-y-1.5">
2628
<div className="flex flex-wrap items-center gap-x-2.5 gap-y-1">
2729
<span className="text-base font-semibold text-foreground">
28-
{protein.mnemonic ?? protein.uniprotId}
30+
{displayName}
2931
</span>
3032
{facts.map((fact) => (
3133
<span

0 commit comments

Comments
 (0)