Delivery systems: recording what carries a drug
A treatment's carrier — the lipid nanoparticle, the liposome, the albumin
particle, the viral vector — is recorded in a delivery_system block on the
Treatment, alongside any targeting ligand on that carrier and what the carrier
is aimed at.
treatments:
- name: Vutrisiran
therapeutic_modality: SIRNA
delivery_system:
delivery_platform: CONJUGATE
targeting_ligand: GALNAC
targeting_receptor:
preferred_term: ASGR1
term:
id: hgnc:742
label: ASGR1
target_cell_types:
- preferred_term: hepatocyte
term:
id: CL:0000182
label: hepatocyte
Why this is not inside oligonucleotide_details
It used to be. delivery_platform and conjugation were slots of
OligonucleotideDetail, reachable only from a Treatment whose
therapeutic_modality was ANTISENSE_OLIGONUCLEOTIDE or SIRNA. That put the
carrier axis inside the payload chemistry, and the consequences were visible in
the KB:
nab-sirolimus(Perivascular_Epithelioid_Cell_Neoplasm) is an FDA-approved albumin-bound nanoparticle. Its modality isSMALL_MOLECULE, so the carrier survived only in a free-textpreferred_term,sirolimus albumin-bound nanoparticles.- Liposomal irinotecan in NALIRIFOX (
Pancreatic_Ductal_Adenocarcinoma) is the one component of that regimen that distinguishes it from FOLFIRINOX, and that difference is entirely the carrier. Same problem. MRNA_THERAPYhas been a permissibletherapeutic_modalitywith zero uses across the KB. It is a modality defined by its carrier, and there was no slot to name one.
None of those is an oligonucleotide, and a query for "every treatment in the KB delivered in a nanoparticle" could not have returned any of them.
The four attributes, and what each claims
| Slot | Claim |
|---|---|
delivery_platform |
What carries the agent at all — unformulated, a ligand conjugate, an LNP, a liposome, an albumin particle, a viral vector |
targeting_ligand |
What is on the carrier (or on the agent) that drives uptake |
targeting_receptor |
The receptor or antigen that ligand binds, bindable to HGNC |
target_cell_types |
The cell type the carrier is aimed at, bindable to CL |
delivery_platform and targeting_ligand are orthogonal, in both
directions. Patisiran is UNCONJUGATED and LIPID_NANOPARTICLE; vutrisiran
is GALNAC and CONJUGATE. A nanoparticle may also carry a ligand on its own
surface — an antibody-coated mRNA-LNP is ANTIBODY and LIPID_NANOPARTICLE —
which is the case that motivated generalizing the ligand slot beyond covalent
attachment to an oligonucleotide.
LIPOSOME is not a spelling of LIPID_NANOPARTICLE. The ionizable lipid in
an LNP is what destabilizes the endosomal membrane on acidification and releases
a nucleic-acid payload; a PEGylated phospholipid bilayer vesicle carrying an
already cell-permeant cytotoxic does no such thing. It changes biodistribution
and toxicity instead. Collapsing them would erase the reason one exists.
An untargeted carrier is a normal record. A PEGylated liposome accumulates
passively: it has no ligand, no receptor, and no target cell type. Leave those
three slots absent rather than asserting a target the formulation does not have.
Naming a targeting_receptor while setting targeting_ligand: UNCONJUGATED is
a contradiction and is gated.
targeting_receptor is the receptor, not the ligand. A receptor may be
reachable by more than one ligand, and the ligand's chemical class already has a
slot.
Dosing interval lives on Treatment, not here
dosing_interval / dosing_interval_days apply to any treatment, so they stay
where they were. They are worth reading next to a delivery_system, because the
carrier is usually why the interval is what it is — vutrisiran's quarterly
subcutaneous dose against patisiran's three-weekly infusion with premedication is
a difference in carrier, not in mechanism or target.
Two homes, for now
oligonucleotide_details.delivery_platform and
oligonucleotide_details.conjugation are still valid. They were kept rather than
removed for the reason recorded in
Retired Enum Values:
retiring a spelling invalidates every PR already in flight that uses it, and
~44 oligonucleotide entries carry these slots. conjugation is marked deprecated
in favour of targeting_ligand; both render.
So two spellings are legal, and just check-delivery-system is what stops them
drifting:
just check-delivery-system # gate (runs in `just qc`)
just check-delivery-system --format list # the full census, including the worklist
just check-delivery-system --strict # also gate on the redundant case
It gates on three things, each a real defect:
CONFLICT— the same fact in both places with different values. One is wrong and nothing downstream can tell which; the renderer resolvesdelivery_systemfirst, so the nested value is hidden rather than surfaced.EMPTY— adelivery_systemcarrying no carrier fact. It renders as nothing; its absence says the same thing more honestly.LIGANDLESS_TARGET— a receptor named alongsidetargeting_ligand: UNCONJUGATED.
It reports, and does not gate on:
DUPLICATE— the same fact in both places with the same value. Harmless today, one edit from aCONFLICT.LEGACY— the carrier recorded only in the nested block. This is the migration worklist and currently holds 81 findings. Gating on it would turn every oligonucleotide entry in the KB red for a change none of their curators made.
New treatments — oligonucleotide or not — use delivery_system. Only
ATTR_Amyloidosis's vutrisiran has been migrated, as the worked targeted
example; the rest of the oligonucleotide corpus is deliberately left on the
nested spelling.
Worked examples
| Entry | Treatment | What it demonstrates |
|---|---|---|
ATTR_Amyloidosis |
Vutrisiran | All four slots: CONJUGATE + GALNAC + ASGR1 + hepatocyte, migrated off the nested spelling |
Pancreatic_Ductal_Adenocarcinoma |
NALIRIFOX | LIPOSOME on a regimen where only one component is carried, with evidence |
Perivascular_Epithelioid_Cell_Neoplasm |
Nab-Sirolimus | PROTEIN_NANOPARTICLE, and a notes: recording why a hypothesized uptake route is not recorded as targeting |
INORGANIC_NANOPARTICLE has no worked example yet.
The case that motivated the change
An antibody-coated mRNA lipid nanoparticle is the shape that the old schema
could not express at any point: the modality has no oligonucleotide_details
block to hang a carrier on, the ligand is coupled to the particle rather than to
the payload, and the whole therapeutic claim is which cell it reaches. Chen
et al. (Sci Adv 2026, 10.1126/sciadv.aed9568)
coat an mRNA-LNP with an anti-TREM2 antibody to reach tumor-associated
macrophages rather than the tumor cells beside them, reporting a
macrophage-to-tumour-cell uptake ratio of 5.1. In delivery_system that is:
therapeutic_modality: MRNA_THERAPY
delivery_system:
delivery_platform: LIPID_NANOPARTICLE
targeting_ligand: ANTIBODY
targeting_receptor:
preferred_term: TREM2
target_cell_types:
- preferred_term: tumor-associated macrophage
This snippet is illustrative only — the agent is preclinical and no KB entry curates it. It is here because it is the clearest statement of what the block is for: the mechanism claim of a targeted nanomedicine is a claim about the delivery system, not about the drug.