Assess how much evidence AOP-Wiki actually carries for a Key Event Relationship before curating from it. Use when judging whether a KER, or a set of them, is backed by literature; when reading `completion_score`, `weight_of_evidence`, `empirical_support`, or `oecd_status` off a KER or its parent AOP; when deciding how much deep-research effort an AOP-derived causal edge will cost; or when auditing an existing dismech edge whose provenance traces to AOP-Wiki.
Scanned 9/9/2026
Install to Claude Code
npx -y skills add monarch-initiative/dismech --skill ker-evidence-triage --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Ker Evidence Triage?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/monarch-initiative-ker-evidence-triage)More formats (shields.io, HTML) on the badges page.
---
name: ker-evidence-triage
description: >
Assess how much evidence AOP-Wiki actually carries for a Key Event
Relationship before curating from it. Use when judging whether a KER, or a set
of them, is backed by literature; when reading `completion_score`,
`weight_of_evidence`, `empirical_support`, or `oecd_status` off a KER or its
parent AOP; when deciding how much deep-research effort an AOP-derived causal
edge will cost; or when auditing an existing dismech edge whose provenance
traces to AOP-Wiki.
---
# KER evidence triage
**A KER can be completely uncited.** At the time this skill was written
(09-03-2026), the AOP-Wiki XML export — the 08-06-2026 snapshot — held 2,369
KERs, of which 738 (31%) carry references and the other 1,631 (69%) carry none.
A KER with an empty evidence block still renders as a clean arrow between two
named events, and nothing in the console output distinguishes it from a
well-supported one.
This is the procedure for finding out which you have. It changes what the rest
of the work costs, so run it **before** committing deep-research effort, not
after — it is a prioritization gate, not a post-hoc note.
Reaching the records is the `aop-wiki` skill's job — read it for the CLI, the
date footgun, and the entity shapes. This skill is what you do with a KER once
you have one.
## The 29.41% rule
`completion_score.percent == 29.41` on a KER means the record is an empty stub:
endpoints and identifiers, nothing else. This is exact, not a heuristic. In the
08-06-2026 snapshot 1,536 of 2,369 KERs (65%) sit at that value and **zero of
them carry a single reference**. It is also the corpus median, so most of
AOP-Wiki's causal edges are assertions with nothing behind them.
One number, read before anything else, tells you whether the KER has content.
A stub KER is not disqualified — but it means AOP-Wiki is contributing a
hypothesis and no evidence, and every citation will have to be found from
scratch. Rank the work accordingly, and say so when you report the plan.
## The evidence fields
For each KER you are assessing, read three fields on `ker_info` and one on its
parent AOP:
| Field | On | What it tells you |
|---|---|---|
| `references` | KER | whether any literature is attached to *this edge* |
| `weight_of_evidence.free_text` | KER | whether anyone assessed the edge |
| `empirical_support.free_text` | KER | whether experimental support is described |
| `oecd_status` | AOP | whether the pathway was ever externally reviewed |
Three traps live here.
**`completion_score` is not a quality score.** It counts populated fields on the
wiki record. AOPs 552, 555, 556, 558 and 560 score 94–100% complete, have never
been OECD reviewed (`oecd_status: ""`), and every one of their KERs sampled in a
cardiac Na/K-ATPase and phosphodiesterase sweep carries zero references. High
completeness on an unreviewed pathway is the most misleading state in the data.
The 29.41% value makes the same point more sharply, and provably.
`ker_completion_score()` scores 17 fields unconditionally, so 5/17 is the only
route to that percentage. The five are `aop_ids` plus the four evidence blocks —
which the parser always builds as three-key dicts, and which `_has_content()`
scores on `len(dict) > 0`, so a wholly empty evidence block still counts as
populated. `references` is a separate scored field, so **a KER carrying any
reference scores at least 35.29%**. "Zero of them carry a single reference" is
therefore guaranteed by the scoring function, not merely observed in this
snapshot.
**An empty `oecd_status` is not a rejection.** 450 of 596 AOPs are empty. It means
no review has happened. Endorsement raises confidence in a pathway; its absence
is not evidence against one, and neither state substitutes for literature.
**AOP-level references do not discharge a KER.** The AOP record carries a
`references` HTML blob — real citations, often substantial. They attest to the
pathway as a whole and cannot be attributed to any specific causal step. Treat
them as a starting bibliography for primary-literature verification, never as
the citation for an edge.
## Map the AOP's citations onto its own steps
An AOP carries a `references` blob even when its KERs carry nothing. Do not stop
at counting it. Split it into individual citations and assign each one to the step
it actually serves — upstream, this edge, downstream, or none.
Two things fall out that a count cannot show.
**Whether the author evidenced this step at all.** AOP 558 carries ten citations
and not one measures cAMP after PDE inhibition — the edge the AOP is named for.
Four are enzyme-background or therapy reviews, four belong to the downstream
RyR2/calcium half, one is tangential, one has no evident connection to the
pathway. The bibliography is real and the step is still unevidenced.
**Whether the bibliography contradicts the pathway.** In the same list, Zhou 2017
attributes RyR2 hyperphosphorylation to oxidative-stress-driven calpain
activation — a competing mechanism to the cAMP/PKA route asserted by the very
next KER. An AOP citing evidence against its own edge is a strong signal to
verify that edge before curating it, and you only see it by reading the
citations rather than counting them.
## Recording the result
Record the triage result per edge. An uncited KER is not disqualified — it is a
claim you will have to source entirely yourself, and knowing that up front is the
point.
Whatever the triage says, the edge still needs its own primary literature before
it can be curated. **AOP-Wiki is never a dismech reference**: there is no `AOP:`
prefix in `references_cache/`, no fetcher, and no cacheable body for a snippet to
match. See `dismech-references`.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!