Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions knowledge-graph-conflict-arbiter/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Knowledge Graph Conflict Arbiter

This is a self-contained module for SCIBASE issue #17, focused on trust operations for Scientific Knowledge Graph Integration.

The module arbitrates contradictory scientific knowledge graph relationships before they flow into graph search, entity pages, or AI research recommendations. It groups extracted relationship triples, scores evidence by confidence, evidence type, citation count, and freshness, then decides whether to accept, quarantine, suppress, or send an edge for low-confidence review.

## What It Covers

- Relationship grouping for subject/predicate/object graph triples.
- Support/refute polarity handling for contradictory scientific claims.
- Evidence scoring for replicated experiments, replication failures, dataset lineage, curator assertions, and weak text mentions.
- Recommendation suppression when dependent graph edges are quarantined or suppressed.
- Curator action packets for conflict review, relationship suppression, and low-confidence evidence.
- Deterministic audit hashes for relationship evidence and full arbitration packets.

## Demo

Run npm run check, npm test, and npm run demo from this directory.

Expected demo output includes relationship groups, conflicts, quarantined relationships, suppressed recommendations, curator actions, and an audit digest.

The reviewer-facing visual is in docs/demo.svg; a short demo video is in docs/demo.mp4.

## Files

- src/conflict-arbiter.js - deterministic graph arbitration logic.
- data/sample-graph.json - synthetic scientific graph entities, relationships, and recommendations.
- test/conflict-arbiter.test.js - Node assert coverage for conflict quarantine, accepted lineage, weak evidence review, and recommendation suppression.
- scripts/demo.js - terminal demo for reviewers.
- docs/requirement-map.md - maps this module to issue #17 requirements.

## Safety Notes

No live ontology, DOI, PubMed, Crossref, LLM, private research, credential, or external service is used. All graph data is synthetic.
98 changes: 98 additions & 0 deletions knowledge-graph-conflict-arbiter/data/sample-graph.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
{
"graphId": "kg-crispr-neuro-2026",
"freshnessHalfLifeDays": 365,
"entities": [
{ "id": "method-crispr-prime-editing", "type": "method", "label": "CRISPR prime editing" },
{ "id": "disease-parkinsons", "type": "disease", "label": "Parkinsons disease" },
{ "id": "dataset-neuro-organoid-q2", "type": "dataset", "label": "Neuro organoid perturbation Q2" },
{ "id": "protocol-dopamine-neurons", "type": "protocol", "label": "Dopamine neuron differentiation" },
{ "id": "paper-alpha", "type": "paper", "label": "Alpha lab preprint" },
{ "id": "paper-beta", "type": "paper", "label": "Beta lab replication note" }
],
"relationships": [
{
"id": "edge-1",
"subject": "method-crispr-prime-editing",
"predicate": "improves-model-for",
"object": "disease-parkinsons",
"polarity": "supports",
"evidenceType": "replicated-experiment",
"confidence": 0.89,
"citationCount": 42,
"sourceDate": "2026-04-20",
"source": "paper-alpha",
"extractor": "pubmed-ner-v2",
"evidenceSpan": "Prime editing improved dopaminergic neuron rescue in three replicated organoid batches."
},
{
"id": "edge-2",
"subject": "method-crispr-prime-editing",
"predicate": "improves-model-for",
"object": "disease-parkinsons",
"polarity": "refutes",
"evidenceType": "replication-failure",
"confidence": 0.82,
"citationCount": 17,
"sourceDate": "2026-05-08",
"source": "paper-beta",
"extractor": "crossref-abstract-v1",
"evidenceSpan": "Independent replication did not reproduce rescue after batch correction."
},
{
"id": "edge-3",
"subject": "dataset-neuro-organoid-q2",
"predicate": "reuses-protocol",
"object": "protocol-dopamine-neurons",
"polarity": "supports",
"evidenceType": "dataset-lineage",
"confidence": 0.93,
"citationCount": 9,
"sourceDate": "2026-05-01",
"source": "dataset-neuro-organoid-q2",
"extractor": "metadata-parser-v3",
"evidenceSpan": "Dataset manifest links batch generation to protocol v3.2."
},
{
"id": "edge-4",
"subject": "dataset-neuro-organoid-q2",
"predicate": "reuses-protocol",
"object": "protocol-dopamine-neurons",
"polarity": "supports",
"evidenceType": "curator-assertion",
"confidence": 0.78,
"citationCount": 3,
"sourceDate": "2026-04-28",
"source": "paper-alpha",
"extractor": "manual-curation",
"evidenceSpan": "Curator confirmed protocol linkage during import review."
},
{
"id": "edge-5",
"subject": "method-crispr-prime-editing",
"predicate": "requires-dataset",
"object": "dataset-neuro-organoid-q2",
"polarity": "supports",
"evidenceType": "weak-text-mention",
"confidence": 0.47,
"citationCount": 1,
"sourceDate": "2024-09-10",
"source": "paper-alpha",
"extractor": "legacy-pdf-ocr",
"evidenceSpan": "An OCR mention suggests possible use of organoid data."
}
],
"recommendations": [
{
"id": "rec-1",
"topic": "prime-editing-parkinsons-collaboration",
"dependsOnEdges": ["edge-1", "edge-2"],
"text": "Recommend collaborators using CRISPR prime editing for Parkinsons disease."
},
{
"id": "rec-2",
"topic": "organoid-protocol-reuse",
"dependsOnEdges": ["edge-3", "edge-4"],
"text": "Recommend projects that reuse the dopamine neuron differentiation protocol."
}
]
}
Binary file added knowledge-graph-conflict-arbiter/docs/demo.mp4
Binary file not shown.
26 changes: 26 additions & 0 deletions knowledge-graph-conflict-arbiter/docs/demo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
18 changes: 18 additions & 0 deletions knowledge-graph-conflict-arbiter/docs/requirement-map.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Requirement Map

This module targets SCIBASE-AI/SCIBASE.AI issue #17, "Scientific Knowledge Graph Integration".

| Issue capability | Implementation evidence |
| --- | --- |
| Entity extraction output and linked graph relationships | data/sample-graph.json models scientific entities and extracted relationship edges with evidence spans, extractors, and sources. |
| Knowledge navigation with trustworthy graph search | src/conflict-arbiter.js groups relationship triples and quarantines contradictory edges before graph search or recommendations use them. |
| AI research recommendations with provenance | Recommendation decisions explain whether suggestions are allowed or suppressed based on relationship arbitration. |
| Entity pages with citations and usage contexts | Leading evidence records include source, source date, evidence type, polarity, and audit hash for entity-page conflict notes. |
| Cross-project inference and knowledge gaps | The arbiter prevents inference from mutually contradictory claims and emits curator actions for review gaps. |
| Structured linked data quality | Deterministic audit digests make curation packets reproducible and reviewable. |

## Non-goals

- No live PubMed, Crossref, DOI, ontology, or LLM service calls.
- No private research content or external credentials are used.
- This slice is a graph-quality control module, not another broad extractor or graph UI.
12 changes: 12 additions & 0 deletions knowledge-graph-conflict-arbiter/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"name": "knowledge-graph-conflict-arbiter",
"version": "1.0.0",
"private": true,
"description": "Dependency-free scientific knowledge graph relationship conflict arbiter for SCIBASE.",
"type": "commonjs",
"scripts": {
"check": "node --check src/conflict-arbiter.js && node --check scripts/demo.js && node --check test/conflict-arbiter.test.js",
"test": "node test/conflict-arbiter.test.js",
"demo": "node scripts/demo.js"
}
}
17 changes: 17 additions & 0 deletions knowledge-graph-conflict-arbiter/scripts/demo.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
"use strict";

const fs = require("node:fs");
const path = require("node:path");
const { arbitrateKnowledgeGraph } = require("../src/conflict-arbiter");

const graph = JSON.parse(fs.readFileSync(path.join(__dirname, "../data/sample-graph.json"), "utf8"));
const packet = arbitrateKnowledgeGraph(graph, { asOfDate: "2026-05-15" });

console.log("Graph: " + packet.graphId);
console.log("Relationship groups: " + packet.summary.relationshipGroups);
console.log("Conflicts: " + packet.summary.conflicts);
console.log("Quarantined relationships: " + packet.summary.quarantined);
console.log("Suppressed recommendations: " + packet.summary.suppressedRecommendations);
console.log("Curator actions: " + packet.summary.curatorActions);
console.log("First action: " + packet.actions[0].message);
console.log("Audit digest: " + packet.auditDigest);
Loading