Genomic Intelligence Promoter Atlas

A gene therapy has to switch its cargo on in the right cell type and leave every other one alone, and the part of the DNA that decides this is the promoter. Pick the wrong one and the gene is expressed in the wrong tissue. This project uses an expression model to find promoters that are ON in a chosen cell type and OFF in another, and to design new ones where the genome has nothing good enough: 19,987 protein-coding promoters ranked genome-wide across the 11 cell-type descriptions we have measured end to end1, and 64 designed sequences selected from 832 recorded candidates. Every entry carries the window it was measured in, its noise floor and its verdict.

Research use only. Not for clinical, diagnostic or therapeutic use, and nothing here has been measured in a wet lab. Read the limitations.

natural — real human promoters
19,987 × 11
Every protein-coding promoter in the genome, scored under each of 11 cell-type contexts, giving 110 ordered on/off pairs ranked genome-wide.
designed — sequences in no genome
64 shipped
From 832 candidates recorded with the result of all six selection checks, of which 402 clear the selection rule. 0 of the 64 shipped designs is an unmodified natural sequence — so no rank here can be recall of the model’s training data.
design over nature
1.351–2.308×
A design’s margin against the best natural promoter in the same window, in the same run, under the same two context strings. A margin measured in a different window is a different number. A1 1.351× vs TNNT2, A2 2.308× vs TRIM54, both in FAM47C.
64 designed sequences19,987 natural promoters, ranked
Three questions, and what comes backDesign pipelineLimitations — what this is not

Each of the 64 shipped designs travels with the margin, the floor, the verdict and the window it was measured in; so does every natural promoter in the other tree.

Downloads: natural candidates (TSV) · every design candidate with its six checks (TSV) · designs (FASTA) · admitted context strings (JSON) · natural release manifest (JSON) · designed release manifest, including the limitations block (JSON) · not-shipped pairs, with their per-candidate measurements (JSON) · synthesis handoff files (FASTA, order CSV, README). Every file is schema-validated and checksummed.

What the model does

The model takes a DNA sequence and a free-text description of an experiment, and predicts how strongly a gene at that sequence would be expressed under those conditions. Score one promoter twice — once with the target cell type described, once with the off-target cell type described — and the difference between the two answers is a prediction of selectivity. That difference is the margin.

One sequence, two questions

TNNT2 promoter600 bp, in theFAM47C windowidentical in both rowsON context stringVentricular cardiomyocyteOFF context stringHepatocyte (liver parenchymal cell)4.656predicted expression-0.024predicted expressionmargin4.680
Same DNA, two context strings. A context string is a real row of training metadata, reproduced byte for byte — selected, never written, because a string for a cell type the model never saw returns a confident, structured, entirely plausible answer rather than a refusal. The margin between the two answers is the quantity this project ranks, designs against and selects on. The numbers here are TNNT2 measured in the FAM47C window under this pair’s two verbatim strings.

The strings are quoted, not written. Each one is a row of the model’s own training metadata, reproduced byte for byte — including the places where a string contradicts itself. Those contradictions are kept on purpose and must not be corrected: editing one to make it internally consistent moves predictions by several log units and collapses the model toward a population average that still looks plausible. Every record in both databases carries both of its strings verbatim, so any number here can be re-asked exactly as it was asked. The natural release publishes its context strings with complete SHA-256 digests, and the designed release the same with their measured paraphrase floors.

The answer also depends on where the sequence is placed. Scaffold choice is the largest confound in the design work, which is why every margin on this site is quoted with its window named.

The window decides the answer

The same 600 bp ALB promoter, the same hepatocyte context string, the same checkpoint — dropped into two different quiet genomic windows. Grey bar: that window’s entire OFF-arm dynamic range across every insert tested in it.

FOXB2FOXB2 OFF-arm dynamic range over 173 inserts: -0.046 to 1.281, i.e. 1.327 log unitsrange 1.327ALB, 600 bp, in FOXB2: hepatocyte-arm score -0.0119ALB -0.012FAM47CFAM47C OFF-arm dynamic range over 173 inserts: -0.051 to 4.844, i.e. 4.895 log unitsrange 4.895ALB, 600 bp, in FAM47C: hepatocyte-arm score 4.8438ALB 4.844024hepatocyte-arm score, ln(quantile-normalised TPM + 1)
The same 600 bp sequence, two windows. In FOXB2 the model scores albumin — the canonical liver gene — at -0.012 in the hepatocyte arm; in FAM47C it scores the identical sequence at 4.844. FOXB2’s off arm moves 1.327 log units in total across every insert tested in it, so it has no room to report a difference; FAM47C’s moves 4.895. This is why no margin on this site is quoted without naming the window it was measured in, and why the only quantity we let cross between windows is a ratio against a natural promoter measured in the same one.

Biological Design Pipeline

The pipeline does two different jobs, in this order. First it searches the genome: every human protein-coding promoter is scored under the target cell type and again under the off-target cell type, and the ones with the widest gap between the two are shortlisted. That is 19,987 promoters under each of the 11 cell-type descriptions we have measured end to end, which yields all 110 ordered on/off combinations of them from a single stored matrix — asking for a new pair costs 0 further model calls, because the ranking is arithmetic over numbers we already have.

Then, where the genome has nothing good enough, it builds one. A genetic algorithm starts from the best natural promoters that search found, cuts and recombines them, and keeps whatever widens the gap — the same evolutionary loop used to breed anything else, with the expression model standing in for the environment that decides who survives. What comes out is a 600 bp sequence that exists in no genome.

Five stages, then. Each links to the published record it produced, so the scale beside a stage is checkable against the data behind it; the machine-readable files are in the downloads above.

01Select a context from training metadata11 contexts, floors measuredThe independent variable is a row of the model’s own training metadata, reproduced byte for byte. The model takes the cell type as free text and always answers, so a plausible string for a cell type it never saw comes back as a confident profile rather than a refusal. That is why the contexts behind this database had their marker controls and their noise floor measured first, and why a context supplied at request time is graded instead.02Screen every promoter in the genome, twice19,987 windowsEvery protein-coding TSS window, scored under the ON context and again under the OFF context, in a 9,198 bp window centred on the canonical transcript start site. The difference is the margin.03Rank against a measured noise floor110 ordered pairsEach margin is graded against its own context’s measured paraphrase floor in its own magnitude band. Below the floor is provisional; below that is not a finding and is published as one.04Generate designs832 candidates recordedA module-level genetic algorithm, seeded with the best natural promoters, mutating inside a fixed genomic window and scoring both arms every generation. Every candidate is published with the result of all six selection checks, passing or failing.05Join measured laboratory data18,114 windows with a CAGE measurementMeasured laboratory data — CAGE, lentiMPRA, cCRE and accessibility registries — joined to every ranked window. Every cross-model gate we built failed and is published with its failure.

What each release was built from — assembly, annotation and MANE releases, model revision, checkpoint, unit and endpoint — is stated on its own page: the natural release · the designed release.

How a design is evolved

Design here is breeding, not writing. The algorithm never invents a sequence from nothing: it starts from real promoters that already work in the target cell, makes a generation of variants by cutting and recombining them, scores every variant in both cell types, keeps the ones with the widest ON-minus-OFF gap, and repeats. The parent population is called the seeds; one round is a generation. The implementation is gena_expression.optimization.core.SequenceOptimizer, subclassed for this project.

1 — start from what the genome already has

The first population is 25 real human promoters — the best natural candidates the screen found for this pair, each already measured in this window — plus 39 mutated copies of them to fill the 64 slots. Nothing is invented from scratch. For the cardiac pair the strongest starting promoter is TNNT2, at a margin of 4.6801 in the FAM47C window; that number is what every later design has to beat.

2 — mutate blocks, never single bases

Each child is made by 20 edits that swap, duplicate, revcomp whole blocks of 100–200 bp, with a crossover probability of 0.6 between two parents, and total length held constant. The reason is the model, not biology: it reads DNA in multi-base tokens, so a one-letter change is usually swallowed inside a token and the model returns the same answer. The unit of design is a module — an enhancer block, a core promoter, an array of transcription-factor sites. Measured, in this project: DNA is tokenized at ~6.25 bp/token, so a 9,198 bp window is ~1,400-1,500 tokens against ~1,022 usable slots.

3 — score both arms, every generation

Every candidate is rebuilt into the genomic window and scored twice: once under the ON-cell context string, once under the OFF-cell string. Fitness is the difference — the margin. Two rules keep that honest. The off-target arm is aggregated by max, not by an average, because selectivity is a worst-case property; and a candidate whose ON score falls below a floor of 0.0554 — derived from control promoters scored in this same window before any design existed — is penalised, so the margin cannot be won by being quiet in both cells.

4 — keep the best, repeat

64 children per generation, the top 64 survive, 1 elite carried through untouched, for a budget of 40 generations. The run is deterministic given its seed (20260804) and every prediction is cached, so it replays exactly. This one cost 5,207 model calls and 868 seconds.

Parameters, cost and stopping record are read from the shipped cardiac run’s own manifest; the seeds, their scores and the baseline they set are in that pair’s published record. Source: releases/generated/pairs/*.json.

Cardiac run, as configured: population 64 · offspring 64 · generation budget 40 · seeds 25 measured + 39 mutated top-ups · mutations per child 20 · block size 100–200 bp · selection top_k with 1 elite · designed region 600 bp inside a 9,198 bp window.

It did not converge, and no run in this project has. The cardiac run stopped because it ran out of generations (generation_budget_exhausted), not because it stopped improving: the last improvement came at generation 12 of 40, and the plateau rule that would have ended it early — no gain of 0.80 for 30 generations — never fired. In the run’s own words: The run hit its generation budget without plateauing, so it had not converged and a longer run may still improve. Read the shipped designs as the best of a budget, not as the best available.

Where the design is put, and why it changes the answer

A 600 bp design cannot be scored on its own. It is dropped into a real genomic window — the scaffold — replacing that gene’s own proximal promoter, and the whole window is scored. The scaffold is not neutral, and it is the largest confound in this half of the project: as the figure above shows, the identical albumin promoter reads as silent in one window and as one of the loudest sequences in the genome in another. Five genomic environments were tried, and four of the five are refusals published with their measurements.

01FAM47C384 recordsscaffold of record. A real, quiet gene TSS window whose -500..+100 proximal promoter is replaced by the 600 bp design. This is the regime the model was trained on and the environment every shipped design was measured in.
02FOXB2192 recordssuperseded design environment. The first gene-TSS scaffold used for A1. Superseded by FAM47C on dynamic range: the identical 600 bp ALB promoter scores -0.012 hepatic here and +4.844 in FAM47C, and A1's design-over-nature ratio moved 2.73x -> 1.35x on nothing but that change. Runs measured here are real records; their raw margins are not comparable with FAM47C's.
03CCR5site_plus128 recordsREJECTED as a design environment; adopted for A2's control panel. A safe-harbour integration coordinate, not a transcription start site, so it is further out of distribution than a gene-TSS window. Raw margins rise here and the best NATURAL promoter in the same window rises more, so the design-over-nature ratio FALLS in both pairs (A1 1.351x -> 1.168x, A2 2.31x -> 1.256x). This is the clearest demonstration in the project that the ratio and not the raw margin is the quantity.
04AAVS1_plus64 recordsrejected for A4. A safe-harbour integration coordinate. The EMPTY scaffold is already loud on the neuronal arm, and the designs evolved here collapse from a 6.331 median to 0.802 when re-scored in a real gene TSS window.
05Keppel19_minus64 recordsrejected for A5. A safe-harbour integration coordinate, not a transcription start site. It is the only environment of twelve that admitted A5 on a criterion cleared by more than the API-vs-GPU path-disagreement band, and the admission is still `hollow: true` -- carried by ENO2 alone of eight panel members. The designs evolved here collapse from a 3.961 median margin to 0.090 when re-scored in FAM47C, with a margin-rank Spearman of 0.0724: the two environments do not agree on which design is better at all.

The clearest of those refusals is the one that looked like a success. Re-running both shipped pairs in a safe-harbour integration site raised every raw margin — and lowered the design-over-nature ratio in both, because the window lifted the natural promoters more than it lifted the designs (cardiac 1.351× in FAM47C → 1.168× there; skeletal 2.308× → 1.256×). It was rejected as a design environment and kept as a control panel. This is why the ratio, and never the raw margin, is the number quoted as a headline: a raw margin is a property of the window; a ratio against the best natural promoter measured in that same window is a property of the design. A further 64 candidates were evolved inside a plasmid cassette, which is out of distribution for this model; they are published segregated and never tabulated beside a genomic-window number.

Designs against the best nature could do in the same window

Every mark on each axis was measured in that pair’s own run: the designs, the natural promoter they are compared with, the field-standard controls, the reportable floor and the composition-matched random DNA. Hover any tick for its full construct label and verdict.

A1 — Ventricular cardiomyocyte ON / Hepatocyte (liver parenchymal cell) OFF, every mark measured in FAM47C

TBGtbg__region_600bp — TBG (Homo sapiens, 600 bp): margin -1.3330 in FAM47C, not_a_findingDESdes__region_600bp — Desmin promoter (human genomic) (Homo sapiens, 600 bp): margin 0.0821 in FAM47C, not_a_findingMCKmck__region_600bp — MCK (Homo sapiens, 600 bp): margin 0.0949 in FAM47C, not_a_findinghSYN1hsyn1__region_600bp — hSYN1 (Homo sapiens, 600 bp): margin 0.1194 in FAM47C, not_a_findingNPPBnppb__region_600bp — Natriuretic peptide B promoter (human genomic) (Homo sapiens, 600 bp): margin 0.1400 in FAM47C, not_a_findingRYR2ryr2__region_600bp — Ryanodine receptor 2 promoter (human genomic) (Homo sapiens, 600 bp): margin 0.2212 in FAM47C, not_a_findingMYH7myh7__region_600bp — beta-myosin heavy chain promoter (human genomic) (Homo sapiens, 600 bp): margin 0.4428 in FAM47C, not_a_findingNPPAnppa__region_600bp — Natriuretic peptide A promoter (human genomic) (Homo sapiens, 600 bp): margin 0.4817 in FAM47C, not_a_findingcTnTctnt__region_600bp — cTnT (Homo sapiens, 600 bp): margin 4.6801 in FAM47C, reportablerandom DNA 0.14reportable floor 1.8517 shipped designs, margins 5.9169 to 6.3228 in FAM47C17 designs, 5.92–6.32best natural: TNNT2 4.680246

Design-over-nature 1.351× — the best design’s margin over the best natural promoter’s, both measured in FAM47C, in the same run, under the same two verbatim context strings. One tick per control promoter, using its 600 bp genomic window where one exists, so it is compared with a 600 bp design like for like; every construct route is on the /designed page.

A2 — Skeletal muscle myofiber ON / Hepatocyte (liver parenchymal cell) OFF, every mark measured in FAM47C

TBGtbg__region_600bp — TBG (Homo sapiens, 600 bp): margin -1.3626 in FAM47C, not_a_findinghSYN1hsyn1__region_600bp — hSYN1 (Homo sapiens, 600 bp): margin 0.0479 in FAM47C, not_a_findingDESdes__region_600bp — Desmin promoter (human genomic) (Homo sapiens, 600 bp): margin 0.0611 in FAM47C, not_a_findingMCKmck__region_600bp — MCK (Homo sapiens, 600 bp): margin 0.0654 in FAM47C, not_a_findingMYL1myl1__region_600bp — Myosin light chain 1 promoter (human genomic) (Homo sapiens, 600 bp): margin 0.0660 in FAM47C, not_a_findingcTnTctnt__region_600bp — cTnT (Homo sapiens, 600 bp): margin 0.3403 in FAM47C, not_a_findingrandom DNA 0.06reportable floor 2.4447 shipped designs, margins 4.1451 to 4.5822 in FAM47C47 designs, 4.15–4.58best natural: TRIM54 1.99024

Design-over-nature 2.308× — the best design’s margin over the best natural promoter’s, both measured in FAM47C, in the same run, under the same two verbatim context strings. One tick per control promoter, using its 600 bp genomic window where one exists, so it is compared with a 600 bp design like for like; every construct route is on the /designed page.

TBG on the cardiac axis. TBG is a liver promoter, and in a cardiomyocyte-versus-hepatocyte contrast it lands far to the left of zero — the instrument reports, correctly, that it points the other way; its own tick carries its margin in this window and its verdict. The two axes are separate: different pairs mean different context strings and different baselines, so these margins are not comparable with each other either. Source: releases/generated/pairs/*.json.

Six checks, recorded rather than enforced

A candidate is not shipped because it scored well. Six checks run on every candidate, in order, all of them fixed before any design was scored — and since August they are recorded rather than enforced: every candidate is published with which checks it meets and by how much, so a reader can disagree with a threshold and re-select without re-running anything. The ladder below is the shipped cardiac run.

S1drop unmodified natural seeds64 kept · nothing dropped
S2banded per-context margin gate (grade.margin_verdict == reportable), unmodified64 kept · nothing dropped
S3ON score >= pre-derived in-scaffold on-target floor 0.055464 kept · nothing dropped
S4OFF score <= max OFF of this run's own composition-matched negatives (-0.0091)24 kept · −40 dropped
S5greedy by descending margin, minimum pairwise edit distance 60 bp between selected designs (uncapped: this is the run's diversity ceiling)17 kept · −7 dropped
S6take the first 5017 kept · 33 short of the target

One check does nearly all the work. S4 — the off-arm check — is the only one that removes candidates on quality here: it asks whether a design is louder in the off-target cell than this run’s own random, composition-matched DNA is, and the run’s own negatives set that bar at -0.0091. S5 is not a quality judgement at all — it drops designs that are near-duplicates of ones already selected, which is what caps this run at 17. S6 then reports the shortfall against the target of 50 rather than making it up. Three different counts come out of the pipeline and they are not interchangeable: 832 recorded, 402 clearing the rule across every run, 64 shipped from the two pairs that produced something.

Three questions, and what comes back

The same pipeline is reachable from an agent session. Three questions, asked in plain language — one it can answer instantly, one it can only answer with a warning attached, and one it refuses.

Three words recur in the answers, and they are what turn a score into a claim. The margin is the ON-cell score minus the OFF-cell score. The floor is how large a margin has to be before it means anything at all in that cell type and at that magnitude — measured, by re-asking the same question in paraphrased wording and seeing how much the answer moves on its own. The verdict compares the two: reportable above the floor, provisional_within_noise beneath it, and not_a_finding below that, published as such rather than quietly dropped.

1 — ask for a ranking

“Rank promoters that are on in Ventricular cardiomyocyte and off in Primary hepatocyte.” MYL2 7.9666, TTN 7.7686, TNNI3 7.4360 — every one measured in its own native_tss_window, graded against a floor of 1.85 at that magnitude, verdict reportable. No row is ever returned without its window, its floor and its verdict. The answer is immediate because this ranking is a published artifact — all 110 ordered pairs already exist — so it is being read, not recomputed.

2 — ask in your own words

Name a cell type that is not one of the admitted contexts and the pipeline still answers, ranked — but first it grades the string it is about to send, on four measurements: the swap test, a paraphrase floor, a prep-metadata probe and the candidate-over-nonsense margin on marker genes. That grade comes back with the answer, and it can never say the context was admitted, because admission is a longer offline procedure. At the lowest grade every margin is reported as not a finding, because a floor means nothing for a context the model cannot see.

3 — ask it to ship, and watch it refuse

A5 (CNS neuron ON / Astrocyte OFF) generated 64 designs, ran to completion, and beat the best natural promoter in its own window 1.943× — every reason to say yes. 0 shipped. Re-scored into the scaffold of record the ordering does not survive: margin rank Spearman 0.0724, and the best design in one scaffold is not the best design in the other. The margin was a property of the Keppel19_minus integration coordinate, not of the designs. A5 is not validated and may never be described as such.

All three answers are read from published artifacts rather than recomputed, and the refusal in question 3 is reproducible from committed files. Source: releases/generated/not_shipped.json.

Every refusal on this site is reproducible from the files linked beside it — each question above names the artifact it was read from, and the third is written up under what was attempted and not shipped on the designed release page. The per-candidate measurements behind it are in the not-shipped pairs file, linked in the downloads above.

Independent evidence

Measured laboratory evidence, produced by other people with no model in the chain, tracks our ranking of natural promoters. There is no corroboration of any kind for the designs: every cross-model gate built to obtain some has failed, and measured evidence gives a sequence nobody has synthesised nothing at all.

A measurement nobody made for us, tracking our ranking

All 19,987 ranked genes split into ten bins by OUR margin (18,114 of them carry a CAGE measurement). Vertical axis: the median FANTOM5 CAGE log2(on-target − off-target) in that bin. No model is involved in the vertical axis.

A1 decile 1 (our ranks 1–1,998, n=1,998): median CAGE log2(on−off) = 1.3434A1 decile 2 (our ranks 1,999–3,997, n=1,999): median CAGE log2(on−off) = 0.4340A1 decile 3 (our ranks 3,998–5,996, n=1,999): median CAGE log2(on−off) = 0.2282A1 decile 4 (our ranks 5,997–7,994, n=1,998): median CAGE log2(on−off) = 0.1062A1 decile 5 (our ranks 7,995–9,993, n=1,999): median CAGE log2(on−off) = 0.0000A1 decile 6 (our ranks 9,994–11,992, n=1,999): median CAGE log2(on−off) = 0.0000A1 decile 7 (our ranks 11,993–13,990, n=1,998): median CAGE log2(on−off) = 0.0000A1 decile 8 (our ranks 13,991–15,989, n=1,999): median CAGE log2(on−off) = 0.0000A1 decile 9 (our ranks 15,990–17,988, n=1,999): median CAGE log2(on−off) = 0.0000A1 decile 10 (our ranks 17,989–19,987, n=1,999): median CAGE log2(on−off) = -0.5273A1 (ρ 0.345)A2 decile 1 (our ranks 1–1,998, n=1,998): median CAGE log2(on−off) = 0.5200A2 decile 2 (our ranks 1,999–3,997, n=1,999): median CAGE log2(on−off) = 0.1476A2 decile 3 (our ranks 3,998–5,996, n=1,999): median CAGE log2(on−off) = 0.1034A2 decile 4 (our ranks 5,997–7,994, n=1,998): median CAGE log2(on−off) = 0.0369A2 decile 5 (our ranks 7,995–9,993, n=1,999): median CAGE log2(on−off) = 0.0000A2 decile 6 (our ranks 9,994–11,992, n=1,999): median CAGE log2(on−off) = 0.0000A2 decile 7 (our ranks 11,993–13,990, n=1,998): median CAGE log2(on−off) = 0.0000A2 decile 8 (our ranks 13,991–15,989, n=1,999): median CAGE log2(on−off) = -0.0986A2 decile 9 (our ranks 15,990–17,988, n=1,999): median CAGE log2(on−off) = -0.0871A2 decile 10 (our ranks 17,989–19,987, n=1,999): median CAGE log2(on−off) = -0.4686A2 (ρ 0.234)123456789100.01.0decile of our margin rank — 1 is our best
Monotone across all ten bins, and it changes sign at the bottom. Our worst-ranked decile is measurably more transcribed in the off-target cell — a direction a spurious correlation has no reason to produce. The bound: the rank correlation is modest — Spearman 0.345 for A1 and 0.234 for A2. The decile structure may not be quoted without those two numbers beside it. It applies to natural promoters only, never to the designs — a generated sequence has no CAGE peak and never will until somebody builds it.

The check that could have falsified us — lower is better

Share of our top liver-OFF candidates whose window contains an element another laboratory measured as active in HepG2, against the background share across every gene window with a measurement. We claim these promoters are quiet in liver, so a bar to the LEFT of the red line is the good outcome.

A1A1: 2 of 25 candidate windows contain a HepG2-active lentiMPRA element8.0% (2 of 25)A2A2: 1 of 24 candidate windows contain a HepG2-active lentiMPRA element4.2% (1 of 24)A4A4: 3 of 20 candidate windows contain a HepG2-active lentiMPRA element15.0% (3 of 20)background rate 35.7%across 15,041 gene windows carrying any measured HepG2 element
A functional measurement, made by another laboratory, in a real reporter assay, agreeing with our off-target claim — with no model anywhere in the chain. The bounds: lentiMPRA measured three immortalised cell lines and none of them is one of our on-targets, so it can falsify our off-target claim and cannot confirm our on-target one; the elements are 200 bp episomal fragments, not our windows; the activity threshold is ours, because the released data carries no significance calls; and one top-five cardiac candidate does carry a HepG2-active element, and it is flagged here. Natural promoters only. No measured data exists for a sequence nobody has built.

Every cross-model gate we built, and what it did

Each was pre-registered with its pass criterion fixed in code before anything was scored. The third column states that criterion; the fourth states the outcome against it.

gatedatewhat would have made it passoutcomefailure typewhat changed
Borzoi positive-control gate2026-08-01All three negative controls stay flat AND every named positive marker separates its own cell type in the right direction, by more than its own measured null band.FAILcell-type coverage — the track exists and is mislabelled for the biology, not for the metadataA cardiac arm and a neuronal arm were withdrawn from this model; no candidate of ours was ever scored against it. This was the second run — the first failed too, and its remediation was applied in full before the re-run.
h1_housekeeping=pass, n1_scrambled=pass, n2_gene_desert=pass, n3_wrong_strand=pass, p1_direction=FAIL, p2_magnitude=FAIL, p3_ALB_rank=pass
Malinois MPRA reporter gate2026-08-04Liver markers rank above non-liver housekeeping genes, AND the seed promoters beat their own dinucleotide shuffles at AUROC ≥ 0.70.FAILcomposition confound — the readout tracked GC content, and the negatives preserved GC exactlyNo design was scored, so there is no correlation with our margins and no design distribution to quote.
observed AUROC 0.6408 against a floor of 0.70
Liver-arm gate — 3 independent arms2026-08-05Every hepatocyte marker outranks every non-hepatocyte liver marker, in each arm separately.FAIL on all 3 armsthe same failure in all three — a sinusoidal-endothelium marker outranking hepatocyte markers, across different assays, corpora, labs and architecturesCross-model validation is halted. Independent corroboration on this site comes from measured laboratory data instead, and it covers the natural promoters only.
arms: borzoi__hepatocyte_cage, borzoi__hepatocyte_rna, malinois__hepg2 — failing assertions: malinois·L2_liver_positives_beat_gc_matched_random; malinois·L4_marker_panel_that_catches_a_pooled_track; borzoi·borzoi__hepatocyte_rna::L4_marker_panel_that_catches_a_pooled_track; borzoi·borzoi__hepatocyte_cage::L4_marker_panel_that_catches_a_pooled_track
The contrast — the one threshold change in this project’s history2026-08-06Not a gate. A reporting threshold was made stricter, and the question was what it would move.moved nothingNo reportable verdict moves anywhere — verified over all 170 published records
All four gates failed. Nothing on this site claims a second model agrees with it. What a third-party expression model would buy is an artifact filter rather than corroboration: every candidate model trains on the same public corpora and the main lineage is one architecture, so agreement would be substantially correlated error. The bottom row is the contrast: the one reporting-threshold change in this project’s history was applied to every published record and moved no verdict, which is how the stability of the instruments is checked.

Memorisation, measured

The model was trained on essentially every gene’s TSS window paired with its measured expression, so a natural promoter’s high rank is partly recall. Re-ranking only the 4,053 held-out genes, with no score changed, asks how much.

as often as training genesA1A1: 95 held-out genes clear both gates against 85.1 expected once the held-out pool’s own composition is accounted for (Poisson p 0.869)clean — 95 of 85.1 expectedA2A2: 443 held-out genes clear both gates against 405.2 expected once the held-out pool’s own composition is accounted for (Poisson p 0.970)strong — 443 of 405.2 expectedA3A3: 1 held-out genes clear both gates against 6.1 expected once the held-out pool’s own composition is accounted for (Poisson p 0.016)not demonstrated — 1 of 6.1 expectedA4A4: 320 held-out genes clear both gates against 258.2 expected once the held-out pool’s own composition is accounted for (Poisson p 1.000)strong — 320 of 258.2 expectedA5A5: 10 held-out genes clear both gates against 19.8 expected once the held-out pool’s own composition is accounted for (Poisson p 0.012)not demonstrated — 10 of 19.8 expectedheld-out genes clearing both gates, relative to how many should
shipped top-25 rows that are training genes
94.4%
118 of the 125 provenanced top-25 rows (25 per pair) are genes in the model's training split -- 94.4%
held-out base rate
21.0%
4,053 of the 19,987 rankable windows are held out, test plus validation; 21.0% is that share among the windows carrying a split label
generated designs that could be recall
0 of them
A sequence that exists in no genome was in no training set. This is the one thing the designed release can say that the natural one cannot.
What survives it. Re-ranking ONLY the 4,053 held-out genes, with the identical gates and no score changed, four of the five field-standard promoters that are held out are recovered under both gates: ENO2 (NSE) at held-out rank 17 of 4,053 in A4 and 11 in A5, MYL1 at 3 in A2, DES (desmin) at 60 in A2, SNAP25 at 101 in A4. The fifth is SYN1, which fails its on-target floor in the all-genes ranking too and is neither rescued nor worsened by excluding memorisation. MYBPC3 -- a held-out cardiac gene -- is the top held-out hit in both cardiac pairs. These cannot be memorisation: the model never saw their expression. What does not: two pairs show a real held-out deficit and are named as such above rather than averaged away, and neither of them may ever be described as validated. And the split is locus-blocked rather than random, so this analysis cannot separate memorisation from a chromosome-level confound. It puts a bound on the confound; it does not remove it. Source: releases/natural/recall_check.json.

Two datasets delivered

Two databases ship, and they are never merged into one ranking. The reason is that a rank means a different thing in each: the model was trained on essentially every gene’s promoter, so a natural promoter’s rank is partly recall of its own training data, while a designed sequence exists in no genome and cannot be recalled at all. Pooling them would put those two kinds of rank in one column.

/natural
Real human promoters, ranked
Backed by measured lab evidence — and partly recalled from the model's training data. Browse
/designed
Sequences that exist in no genome
No memorisation is possible — and no measured evidence exists either. Browse

Each is strong exactly where the other is weak. One quantity is allowed to cross between them — a design’s margin against the best natural promoter measured in the same window — and it has its own comparison view. No table on this site puts rows from the two releases in one ranking.

Synthesis readiness

All 64 designs are 600 bp, inside every vendor's published composition limits, and screened against the design rules the synthesis vendors publish. 0 of 64 trip a hard vendor rule — and 0 of 64 are clean. Every single one carries at least one advisory.

The dominant one is ours: 64 of 64 carry a direct or inverted repeat at or above the length vendors ask you to avoid. That is the design method's own fingerprint — it builds a sequence by swapping, duplicating and reverse-complementing 100–200 bp blocks, which manufactures repeats — and the fix belongs in the next run rather than in a filter over this one.

Nothing here has been synthesised. "Order-ready" means a vendor's intake would accept the file, and nothing more; it does not mean validated. The synthesis handoff files (FASTA, order CSV, README) carry the submittable FASTA, a CSV with every check beside every construct, and a schema-validated sidecar.

What this is, and what it is not

Collaboration and contact

We are looking for groups who will test one of these in a cell — not adopt it. The offer is a design hypothesis with its whole provenance attached: both context strings verbatim, the controls from the same run, the noise floor, the window it was measured in, the sequence and its checksum, and an ordered file a vendor would accept. If it fails at the bench, that is a result we want, and it is the only kind of evidence that moves the designs from prediction to fact.

To start by trying to break it, start with the limitations above — what this is, and what it is not — and then read the limitations of the designed release, which carry every one of them with the measurement behind it.

1. The 11 contexts behind this database are the ones whose paraphrase noise floor we measured and whose marker controls we ran, and that measurement is what lets a number here be graded. The model itself is not restricted to them — it reads the cell type as free text and this pipeline will take one in your own words, with a measured grade on the exact string sent, which can be low enough to void every verdict in that answer (what this is, and what it is not). Back