Oncofusion

start / graph / ana-q181-the-epigenetics-detector-reads-key-names-and-never-field-values

Analysisstrong confidence 4 of 5: Replicated in peer-reviewed work by more than one group.Q181-epigenetics-dimension

The epigenetics coverage test inspects data{} KEY NAMES and never a field's value, so 71 entries that state a histone mark INSIDE a data field score zero - and four more are missed by one character

also called q181 key-versus-value · _EPI_KEY audit

The tool that scores epigenetics coverage looks only at the NAMES of the fields in an entry, never at what those fields say. So an entry with a field called 'mechanism' whose text reads 'deposits H3K4me3 at target promoters' counts as having no epigenetics at all.

The same thing, for a scientist

check-pi-dimensions.py computes epi_field as any(_EPI_KEY.search(k) for k in dat) - a regex over the KEY NAMES of the data payload. The value side is never examined. Measured over the 134 stratum-B entries (a mark named somewhere, no epigenetics-named key), 71 carry a mark token inside a data{} VALUE, under keys the regex does not match. These are structured, machine-readable statements sitting in exactly the place the metric is supposed to reward, scoring zero because of the field's name. A second, smaller defect is adjacent: four entries carry keys that are epigenetic by any reading but miss _EPI_KEY by one character - gene-kmt2e 'chromatin_binding', gene-rbm15b 'chromatin_link', gene-kat8 'h3k79_zone_link', gene-mme 'silencing_mechanism'. The regex has 'chromatin_mark' but not bare 'chromat'; it has 'eraser' but 'marks_erased' matches neither '^mark$' nor '^mark_'. Both defects are reported, not fixed: scripts/check-pi-dimensions.py was NOT modified.

Go deeper
The test, and the asymmetry inside it
"epi_field": any(_EPI_KEY.search(k) for k in dat),          # KEYS only
"epi_text":  bool(_EPI_MARK.search(json.dumps(d, ...))),     # WHOLE entry

The two tests read completely different surfaces 1. epi_field is strict in the right way -- it demands a named field, which is what makes a dimension filterable -- but it is strict about the wrong thing: the name, not the content. epi_text is the opposite, so generous it sweeps the entire serialised entry including citation titles and URLs.

There is no test in between, and the thing a reader actually wants -- a structured field whose value names a mark -- falls in the gap.

71 entries state a mark inside a data value and get nothing

Of the 134 stratum-B entries, 71 (53.0%) carry a mark token inside data{} itself, under a key _EPI_KEY does not match 1. These are not prose. They are payload fields -- the exact structured form the measurements[] rule and the dashboard's filters are built on.

The count by where the mark lives across stratum B:

location of the mark tokenentries
in a data{} value71
in sections[] or summary_*(overlapping)
in evidence[] ONLY -- citation titles and claims17
in data, summary or sections (substantive body)110

The 17 evidence-only entries are the ones the current test is right about and a value-reading test would also have to exclude, because a mark appearing solely in a cited paper's title says nothing about the entry's subject. Any fix has to read data{} values and not the whole serialisation, or it re-creates the epi_text problem.

The four near-misses, and the pattern in them

Enumerating every data{} key over the 541-entry population gives 24 distinct keys _EPI_KEY matches (led by epigenetic_readout on 182 entries, epigenetic_mark_named on 23, mark_written on 22, epigenetic_role on 19) and 1,179 it does not 2. Four of the 1,179 are epigenetic by any reading:

entrykeywhy it is missed
gene-kmt2echromatin_bindingregex has chromatin_mark, not bare chromat
gene-rbm15bchromatin_linksame
gene-kat8h3k79_zone_linkno mark names in _EPI_KEY at all
gene-mmesilencing_mechanismno repression vocabulary in _EPI_KEY

And one near-miss with no instance yet, worth recording because it will happen: marks_erased matches neither ^mark$ nor ^mark_ nor eraser. The plural breaks the anchor and 'erased' is not 'eraser'. mark_erased (singular) is matched; marks_erased is not. One entry in the corpus already uses the plural form.

Four entries is 0.7% of the population and does not move the headline. It is recorded because the failure mode -- a convention introduced to satisfy a reporter, in a spelling the reporter was never told about -- is the same one documented three times already in this file's own comments, most recently localization_shown_for_fusion, which left 27 entries invisible.

Proposed fix, NOT APPLIED

Reported as a finding per the dispatch instruction; scripts/check-pi-dimensions.py is unmodified.

  1. Add a third line between the two existing ones: epi_value -- _EPI_MARK over the serialised data{} payload only, not the whole entry. Print it alongside epi_field, do not merge them. On this population that line reads at least 71/541 = 13.1% above epi_field, and it would have to be computed fresh because stratum A entries may also qualify.
  2. Widen _EPI_KEY minimally: chromat (not chromatin_mark), ^marks?[_$], silenc, and the mark names themselves (h3k, h4k, h2a).
  3. Print the near-miss list. The most useful thing this reporter could do is name the keys it ALMOST matched, so a new spelling is caught the cycle it appears rather than three cycles later. The enumeration is fifteen lines.

Point 3 is the one that matters. Points 1 and 2 fix today's four entries; point 3 stops the fourth recurrence of a failure this file has already logged three times.

Facts and figures
scriptanalyses/q181-is-the-epigenetics-gap-real/{keys,run}.py
statusrun
generated2026-09-24
tool modifiedfalse
proposed fix appliedfalse
epi key spellings in use
eraser_of_that_mark5.000eraser_of_that_mark: 5writer_of_that_mark6.000writer_of_that_mark: 6reader_of_that_mark6.000reader_of_that_mark: 6epigenetic_bounded_absence10.0epigenetic_bounded_absence: 10non_histone_substrate16.0non_histone_substrate: 16epigenetic_role19.0epigenetic_role: 19mark_written22.0mark_written: 22epigenetic_mark_named23.0epigenetic_mark_named: 23epigenetic_readout182.0epigenetic_readout: 182
measurements
data{} keys that are epig…4.000data{} keys that are epigenetic in substance but miss _EPI_KEY: 4entries whose mark token …17.0entries whose mark token appears ONLY inside evidence[]: 17entries naming a mark ins…71.0entries naming a mark inside a data{} VALUE under a key the detector does not match: 71
near miss keys
{
  "gene-kmt2e": "chromatin_binding",
  "gene-rbm15b": "chromatin_link",
  "gene-kat8": "h3k79_zone_link",
  "gene-mme": "silencing_mechanism"
}
epi key spellings in use — the numbers behind the chart
{
  "epigenetic_readout": 182,
  "epigenetic_mark_named": 23,
  "mark_written": 22,
  "epigenetic_role": 19,
  "non_histone_substrate": 16,
  "epigenetic_bounded_absence": 10,
  "writer_of_that_mark": 6,
  "reader_of_that_mark": 6,
  "eraser_of_that_mark": 5
}
measurements — the numbers behind the chart
[
  {
    "quantity": "entries naming a mark inside a data{} VALUE under a key the detector does not match",
    "value": 71,
    "units": "entries",
    "n": 134,
    "subject": "stratum B - no _EPI_KEY-matching key, mark named somewhere in the entry",
    "universe": "541 gene/protein entries at commit ac2aeab; stratum B is 134 of them",
    "null": null,
    "note": "53.0% of stratum B; 13.1% of the whole population"
  },
  {
    "quantity": "entries whose mark token appears ONLY inside evidence[]",
    "value": 17,
    "units": "entries",
    "n": 134,
    "subject": "stratum B entries where the mark is in a citation title or claim and nowhere else",
    "universe": "same 134-entry stratum B",
    "null": null,
    "note": "the subset the current strict test is RIGHT to exclude, and which any fix must keep excluding"
  },
  {
    "quantity": "data{} keys that are epigenetic in substance but miss _EPI_KEY",
    "value": 4,
    "units": "entries",
    "n": 541,
    "subject": "chromatin_binding, chromatin_link, h3k79_zone_link, silencing_mechanism",
    "universe": "1,179 distinct unmatched top-level data keys across 541 entries",
    "null": null,
    "note": "0.7% - too small to move the headline; recorded for the recurrence pattern, not the count"
  }
]
Still open
  1. How many stratum-A entries would also gain an epi_value credit, and how many would LOSE credit if the test required a non-empty, non-hedged value? Nobody has audited the 212 covered entries for empty fields.
  2. Does the key enumeration need to descend into nested data objects? Four complex entries carry subunit-level maps, and a mark recorded one level down is invisible to the reporter and to this audit alike.
  3. Is gene-mme's 'silencing_mechanism' about chromatin silencing or about transcriptional downregulation of a surface peptidase? If the latter, the near-miss count is three and this entry overstates by one.
Every source behind this entry (2)
  1. E1established confidence 5 of 5: Multiple independent lines of evidence; treated as settled in the field.dataset

    check-pi-dimensions.py computes epi_field by iterating data{} key names only (any(_EPI_KEY.search(k) for k in dat)) and never inspects a field's value; of the 134 entries that name a mark but carry no matching key, 71 carry that mark token inside a data{} value, 110 carry it in data, summary_* or sections, and 17 carry it only inside evidence[].

    What this evidence cannot show

    The location buckets overlap by construction - an entry with the mark in both data and sections appears in both counts - so 71, 110 and 17 do not sum to 134. 'In a data value' was tested by serialising data{} alone and matching _EPI_MARK, which cannot distinguish a mark in a field meant to record it from a mark inside a free-text note that happens to live under data{}.

    Evidence that argues against this (1)
    • The 71 figure overstates the fix's benefit. The same objection that sinks epi_text applies inside data{}: a mark named in a data field can be a statement about KMT2A rather than about the entry's subject, and this count does not separate the two. The stratum-B hand-read put subject-relevance at 15/20 (Wilson 53.1-88.8) across the whole stratum, not specifically among the 71, so the number of entries a value-reading test would CORRECTLY newly credit could be as low as ~38.
  2. E2established confidence 5 of 5: Multiple independent lines of evidence; treated as settled in the field.dataset

    Enumerating every data{} key across the 541-entry gene/protein population yields 24 distinct keys matched by _EPI_KEY - epigenetic_readout on 182 entries, epigenetic_mark_named on 23, mark_written on 22, epigenetic_role on 19, non_histone_substrate on 16, epigenetic_bounded_absence on 10, and eighteen one-to-six-instance variants - against 1,179 unmatched keys, of which exactly four are epigenetic in substance: chromatin_binding (gene-kmt2e), chromatin_link (gene-rbm15b), h3k79_zone_link (gene-kat8) and silencing_mechanism (gene-mme).

    What this evidence cannot show

    The four near-misses were selected by a second regex of my own over the 1,179 unmatched keys and then hand-read; a key that is epigenetic in substance under a name neither regex anticipated would be missed by this audit exactly as it is missed by the reporter. The enumeration covers top-level data{} keys only and does not descend into nested objects, so a mark-named key one level down is invisible to both the reporter and this audit.

    Evidence that argues against this (1)
    • Calling these four a defect assumes the value behind each key is a real epigenetic statement, which was not checked for all four. gene-mme's 'silencing_mechanism' in particular is most likely about gene silencing in the transcriptional sense on a cell-surface peptidase, which would make it a category error rather than a missed field - so the true near-miss count may be three, not four.
Connected to