A response that cannot be true
One fictional subject, three domain records — and a combination RECIST 1.1 does not allow.
- Meet Subject 001 in fictional Study XYZ: target lesions shrank 24% — a PR-level change.
- Non-target lesions are stable, and no new lesions appeared.
- Yet the overall response record says CR — complete response.
- Under RECIST 1.1 this combination is clinically impossible.
- Both industry validators reviewed this data — and reported it clean.
- domain record
- the impossible combination
- validator verdict
Teaching schematic — not measured. Fictional records (Study XYZ, Subject 001); the scenario follows the RECIST 1.1 example in the post and the paper's introduction.
Sources: The Contradictions Your Validator Can't See · CAVE-Onc, PLOS One 2026 (introduction).
One domain at a time
A domain-scoped rule is a filter over the rows of a single table — so every domain passes, and the join stays unchecked.
- A rule engine like CORE sees one domain as one table — a DataFrame.
- Every check is a filter over the rows of that single table.
- TR passes its checks. TU passes. RS passes.
- The contradiction only exists across the tables — in the join nobody evaluates.
- This is an expressiveness boundary, not a coverage gap you can patch with more rules.
- domain table
- domain-local rules pass
- cross-domain join, unchecked
Teaching schematic — not measured. Validator behavior simplified for teaching; the post carries the formal argument.
Source: The Contradictions Your Validator Can't See (section: why domain-scoped rules can't express this).
Two-thirds port. The dangerous third doesn't.
Measured on the real CORE oncology rule set: what a SHACL porting pipeline could and could not carry over.
- CDISC CORE ships 122 oncology rules.
- 85 of them — 69.7% — port to SHACL shapes with zero loss.
- 31 cannot be ported: they join across domains.
- 6 more need row-set uniqueness that a single-record shape can't state.
- The dangerous contradictions live exactly in that unportable third.
- ports losslessly (85)
- cross-domain joins (31)
- row-set uniqueness (6)
Measured, not schematic. Counts from the paper's SHACL shape-porting pipeline (85/122 = 69.7%; 31 cross-domain joins + 6 row-set uniqueness); bar proportions drawn to scale.
Sources: the post · CAVE-Onc, PLOS One 2026 (porting statistics).
Turn the submission into one graph
Nine oncology domains leave their XPT silos; RELREC relationships become real edges, and SUPP-- qualifiers become plain properties.
- Nine oncology SDTM domains leave their XPT silos.
- Each becomes nodes and edges in a single RDF knowledge graph.
- Subject 001's records are now nodes you can walk between.
- RELREC foreign keys survive as real edges — the joins validators couldn't see are now explicit.
- SUPP-- qualifiers unfold onto their parent record as plain properties.
Shapes patrol the graph
Layer 1 is a library of 111 SHACL shapes; each one is a graph pattern that either matches cleanly or raises a traced flag.
- Layer 1 is a library of 111 SHACL shapes.
- 85 are the ported CORE rules from Scene 3; 8 encode RECIST derivations; 18 are archetype-specific SHACL-SPARQL.
- A shape matches the pattern from Scene 1 across TR, TU and RS — and fires.
- The flag says what a validator never could: the response contradicts the lesion evidence.
- Every firing writes a trace to an append-only Merkle audit chain — the 21 CFR Part 11 foundation.
The rule that can't be one rule
Archetype A19 — the RECIST Table 7 matrix — is where a single SPARQL rule collapses, and a deterministic state machine takes over.
- One archetype — A19, the RECIST Table 7 matrix — defeats a single SPARQL rule.
- SHACL-SPARQL forbids lookup tables: 34 matrix rows become 34 nested IFs.
- Zero independently testable pieces — unmaintainable by construction.
- The agent layer instead runs a deterministic state machine: three typed queries against the graph.
- Then a flat 34-row dictionary lookup and one comparison — 22 unit-testable blocks, maximum nesting 7, not 34.
- No LLM call on this path: $0.000 per subject, exactly replayable for an inspector.
What the evaluation showed — and what it didn't
Twenty expert-reviewed contradiction archetypes, injected into clean data; each cell is one archetype.
- Twenty expert-reviewed contradiction archetypes were injected into otherwise clean data.
- CAVE caught all 20 — nineteen by the shape layer, A19 by the deterministic agent.
- CORE caught 8 — the ones seeded from its own rule corpus.
- Pinnacle 21's FDA engine caught 6; on the ten cross-domain RECIST archetypes, both industry engines caught zero.
- On clean data the flag sets barely overlap — Jaccard 0.004: this augments validators, it doesn't replace them.
- Honest fine print: with the shape library frozen, 3 of 5 held-out archetypes were caught — construction validation on a synthetic corpus.
- archetype detected
- missed
- needed the agent layer (A19)
Measured results — detection counts: paper Table 3; cross-domain subset and p-value: Table 3 / Results; Jaccard 0.004: Table 2; held-out 3/5: Table 4. Cell grid is a schematic echo of Fig 2, not the figure itself.
Sources: the post (evaluation; warnings) · CAVE-Onc, Tables 2–4, Fig 2.