This pre-workshop artifact tests whether Semiotic's portable IDID metadata can carry an expert biomedical typology without flattening it. It is generated from the versionedHRA kidney ASCT+B v1.6 digital object, not illustrative rows.
Evidence snapshot78 ASCT+B records;61 observed anatomical structures; 70 observed cell types. The chart uses the 8 observed direct children of kidney (UBERON:0002113). Source created2026-06-08 by HuBMAP.
Actual query result
Review signalInterstitium, renal collecting system, and kidney capsule each include one provisional cell-type term. That status is an editorial claim derived from ccf_is_provisional, separate from the measured bar height.
| Anatomical structure | Ontology ID | Cell types | Records | Provisional cell types |
|---|
| nephron | UBERON:0001285 | 25 | 25 | 0 |
| Interstitium | UBERON:0005215 | 22 | 21 | 1 |
| renal collecting system | UBERON:0004100 | 11 | 12 | 1 |
| Vessels | UBERON:0006544 | 10 | 10 | 0 |
| renal medulla | UBERON:0000362 | 4 | 5 | 0 |
| cortex of kidney | UBERON:0001225 | 2 | 4 | 0 |
| renal papilla | UBERON:0001228 | 2 | 2 | 0 |
| kidney capsule | UBERON:0002015 | 2 | 1 | 1 |
A real failure found before the workshop
The first candidate ranked every anatomical-structure path by its display label. The real data shows why that is unsafe: a parent count includes cell types associated with descendant records, and distinct ontology identifiers can share the same label. The kidney root would dominate simply because it is the root, while a label-keyed chart would merge different concepts.
- Endothelium (non glomerular):
UBERON:0001986UBERON:0002042UBERON:0012441 - Loop of Henle (Thin Limb):
UBERON:0001289UBERON:0004193 - Tubules:
UBERON:0001231UBERON:0001232
The corrected artifact uses ontology IDs as semantic keys, renders IDs beside labels, and compares one explicit sibling scope. It still does not claim the sibling counts are additive: a record can participate in more than one hierarchy path.
JSX
import { BarChart } from "semiotic/ordinal" const chartRows = kidneyDirectChildren.map(row => ({ ...row, reviewStatus: row.temporaryCellTypeCount > 0 ? "Contains provisional cell type" : "No provisional cell type", })) <BarChart data={chartRows} categoryAccessor="displayLabel" valueAccessor="cellTypeCount" colorBy="reviewStatus" orientation="horizontal" sort={false} categoryLabel="Anatomical structure · ontology ID" valueLabel="Distinct cell types" description="Distinct cell-type coverage for observed direct children of kidney in HRA ASCT+B kidney v1.6. Counts are set memberships and are not additive." />
Offline workshop kit
The field kit turns the workshop question into a thirty-minute, auditable protocol. All required evidence is bundled locally; the HRA PURL is provenance, not a live-session dependency.
Decision gateKeep x-hra when receivers only preserve or display context. Prototype an opt-in grounding envelope when reception needs selected domain fields. Consider a ContextProfile RFC only when at least two tools share stable context identity and use it to change validation, scoring, permitted actions, or governance.
Workshop question
Where does this typology mapping break for WPP? In particular, which facts must be typed and acted on across tools rather than merely preserved as ontology-linked extension metadata?
The remaining human validation is deliberately narrow: review the role/domain-literacy terms, identify one case where the corrected chart or reader-grounding envelope still miscommunicates the task, and decide whether that case justifies a typed ContextProfile. Until then, context remains namespaced x-hra metadata.
Rebuild the pinned fixture withnpm run generate:hra-wpp-pilot; the aggregator and its ontology-identity regression test live in scripts/.