From 3bcc6b5da02683d958177d8428b69c4d5bbf63bc Mon Sep 17 00:00:00 2001 From: evilfps <208441420+evilfps@users.noreply.github.com> Date: Sat, 16 May 2026 23:08:10 +0530 Subject: [PATCH] Add instrument method compatibility graph --- README.md | 2 + .../README.md | 39 ++ .../data/sample-graph-input.json | 89 +++ .../docs/demo.svg | 20 + .../docs/demo.webm | Bin 0 -> 147584 bytes .../docs/requirement-map.md | 11 + .../package.json | 15 + .../scripts/demo.js | 14 + .../instrument-method-compatibility-graph.js | 527 ++++++++++++++++++ ...trument-method-compatibility-graph.test.js | 372 +++++++++++++ 10 files changed, 1089 insertions(+) create mode 100644 instrument-method-compatibility-graph/README.md create mode 100644 instrument-method-compatibility-graph/data/sample-graph-input.json create mode 100644 instrument-method-compatibility-graph/docs/demo.svg create mode 100644 instrument-method-compatibility-graph/docs/demo.webm create mode 100644 instrument-method-compatibility-graph/docs/requirement-map.md create mode 100644 instrument-method-compatibility-graph/package.json create mode 100644 instrument-method-compatibility-graph/scripts/demo.js create mode 100644 instrument-method-compatibility-graph/src/instrument-method-compatibility-graph.js create mode 100644 instrument-method-compatibility-graph/test/instrument-method-compatibility-graph.test.js diff --git a/README.md b/README.md index d338cf6..515e0cb 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,4 @@ # deepevents.ai deepevents.ai main codebase + +- `instrument-method-compatibility-graph/` adds instrument, method, and dataset compatibility checks for scientific knowledge graphs. diff --git a/instrument-method-compatibility-graph/README.md b/instrument-method-compatibility-graph/README.md new file mode 100644 index 0000000..1b7b4bb --- /dev/null +++ b/instrument-method-compatibility-graph/README.md @@ -0,0 +1,39 @@ +# Instrument Method Compatibility Graph + +This module adds a focused knowledge graph slice for instrument, method, and dataset compatibility. + +It covers: + +- typed instrument, method, dataset, and experiment nodes +- compatibility edges across instruments, methods, and datasets +- modality, file format, resolution, calibration, and evidence checks +- entity pages for instrument, method, and dataset navigation +- candidate edge recommendations for graph discovery +- curator actions, audit events, and deterministic digests + +The implementation is dependency-free and uses synthetic sample data only. + +## Run + +```bash +npm run check +npm test +npm run demo +``` + +## Demo Assets + +- short demo video: `docs/demo.webm` +- `docs/demo.svg` + +## API + +```js +import { + evaluateInstrumentMethodCompatibility, + renderInstrumentMethodCompatibilityReport +} from "./src/instrument-method-compatibility-graph.js"; + +const result = evaluateInstrumentMethodCompatibility(input); +console.log(renderInstrumentMethodCompatibilityReport(result)); +``` diff --git a/instrument-method-compatibility-graph/data/sample-graph-input.json b/instrument-method-compatibility-graph/data/sample-graph-input.json new file mode 100644 index 0000000..a289a47 --- /dev/null +++ b/instrument-method-compatibility-graph/data/sample-graph-input.json @@ -0,0 +1,89 @@ +{ + "generatedAt": "2026-05-16T17:10:00Z", + "project": { + "id": "kg-neuroimmune-221", + "title": "Neuroimmune Knowledge Map", + "domain": "neuroscience" + }, + "instruments": [ + { + "id": "inst-confocal-7", + "name": "Confocal Microscope 7", + "modalities": ["imaging"], + "supportedMethodIds": ["method-cell-segmentation", "method-colocalization"], + "calibrationDate": "2026-04-22T00:00:00Z" + }, + { + "id": "inst-flow-alpha", + "name": "Flow Cytometer Alpha", + "modalities": ["single-cell"], + "supportedMethodIds": ["method-cell-count"], + "calibrationDate": "2025-11-15T00:00:00Z" + } + ], + "methods": [ + { + "id": "method-cell-segmentation", + "name": "Cell Segmentation", + "status": "active", + "requiredModalities": ["imaging"], + "acceptedOutputs": ["ome-tiff", "tiff"], + "maxResolutionMicrons": 0.8, + "maxCalibrationAgeDays": 60 + }, + { + "id": "method-legacy-clustering", + "name": "Legacy Clustering", + "status": "deprecated", + "requiredModalities": ["single-cell"], + "acceptedOutputs": ["fcs"], + "maxCalibrationAgeDays": 120 + } + ], + "datasets": [ + { + "id": "data-glia-images", + "name": "Glia marker image stack", + "modality": "imaging", + "format": "ome-tiff", + "resolutionMicrons": 0.5 + }, + { + "id": "data-cytokine-fcs", + "name": "Cytokine panel FCS", + "modality": "single-cell", + "format": "fcs", + "resolutionMicrons": 1.2 + } + ], + "experiments": [ + { + "id": "exp-segmentation-01", + "instrumentId": "inst-confocal-7", + "methodId": "method-cell-segmentation", + "datasetId": "data-glia-images", + "evidence": [ + { + "id": "ev-segmentation-validation", + "type": "validation", + "status": "ready", + "quality": 0.91 + } + ] + }, + { + "id": "exp-legacy-flow-02", + "instrumentId": "inst-flow-alpha", + "methodId": "method-legacy-clustering", + "datasetId": "data-cytokine-fcs", + "evidence": [ + { + "id": "ev-flow-draft", + "type": "notebook", + "status": "draft", + "quality": 0.44 + } + ] + } + ] +} diff --git a/instrument-method-compatibility-graph/docs/demo.svg b/instrument-method-compatibility-graph/docs/demo.svg new file mode 100644 index 0000000..bde0b55 --- /dev/null +++ b/instrument-method-compatibility-graph/docs/demo.svg @@ -0,0 +1,20 @@ + + Instrument method compatibility demo + Terminal-style demo output for the instrument method compatibility graph. + + + + + + + Instrument Method Compatibility + Neuroimmune Knowledge Map: blocked (55/100) + Edges ready/review: 1/1 + Findings high/medium/low: 1/3/0 + Manifest: 4e5e12a454a2e68a + Curator actions: + - high method_deprecated: Pick a supported method or add curator approval for legacy use. + - medium calibration_out_of_window: Attach fresh calibration evidence before using this edge in recommendations. + - medium compatibility_evidence_weak: Add validation evidence before surfacing the relationship to researchers. + - medium instrument_method_not_listed: Confirm the instrument-method edge or choose a supported instrument. + diff --git a/instrument-method-compatibility-graph/docs/demo.webm b/instrument-method-compatibility-graph/docs/demo.webm new file mode 100644 index 0000000000000000000000000000000000000000..374c084c7754883b4a9ad67805ab8b93d298a00a GIT binary patch literal 147584 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%0D@ZU0!t;C9LL&@>15&y5w#%Il5L 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" + }, + "license": "MIT" +} diff --git a/instrument-method-compatibility-graph/scripts/demo.js b/instrument-method-compatibility-graph/scripts/demo.js new file mode 100644 index 0000000..d3e8b58 --- /dev/null +++ b/instrument-method-compatibility-graph/scripts/demo.js @@ -0,0 +1,14 @@ +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import { + evaluateInstrumentMethodCompatibility, + renderInstrumentMethodCompatibilityReport +} from "../src/instrument-method-compatibility-graph.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const inputPath = path.join(__dirname, "..", "data", "sample-graph-input.json"); +const input = JSON.parse(fs.readFileSync(inputPath, "utf8")); + +const result = evaluateInstrumentMethodCompatibility(input); +console.log(renderInstrumentMethodCompatibilityReport(result)); diff --git a/instrument-method-compatibility-graph/src/instrument-method-compatibility-graph.js b/instrument-method-compatibility-graph/src/instrument-method-compatibility-graph.js new file mode 100644 index 0000000..a3f9cc5 --- /dev/null +++ b/instrument-method-compatibility-graph/src/instrument-method-compatibility-graph.js @@ -0,0 +1,527 @@ +import crypto from "node:crypto"; + +const SEVERITY_WEIGHT = { + high: 18, + medium: 9, + low: 4 +}; + +const SEVERITY_RANK = { + high: 0, + medium: 1, + low: 2 +}; + +const DAY_MS = 24 * 60 * 60 * 1000; + +function asArray(value) { + return Array.isArray(value) ? value : []; +} + +function asObject(value) { + return value && typeof value === "object" && !Array.isArray(value) ? value : {}; +} + +function normalize(value) { + return String(value ?? "") + .trim() + .toLowerCase() + .replace(/[_-]+/g, " ") + .replace(/\s+/g, " "); +} + +function parseNumber(value) { + if (typeof value === "number" && Number.isFinite(value)) { + return value; + } + + if (typeof value === "string" && value.trim() !== "") { + const parsed = Number(value); + return Number.isFinite(parsed) ? parsed : null; + } + + return null; +} + +function parseDate(value) { + if (typeof value !== "string" || value.trim() === "") { + return null; + } + + const timestamp = Date.parse(value); + return Number.isFinite(timestamp) ? new Date(timestamp) : null; +} + +function stableStringify(value) { + if (Array.isArray(value)) { + return `[${value.map(stableStringify).join(",")}]`; + } + + if (value && typeof value === "object") { + return `{${Object.keys(value) + .sort() + .map((key) => `${JSON.stringify(key)}:${stableStringify(value[key])}`) + .join(",")}}`; + } + + return JSON.stringify(value); +} + +function digest(value, length = 16) { + return crypto.createHash("sha256").update(stableStringify(value)).digest("hex").slice(0, length); +} + +function indexById(items) { + return new Map( + asArray(items) + .map(asObject) + .map((item) => [item.id, item]) + .filter(([id]) => Boolean(id)) + ); +} + +function normalizedSet(values) { + return new Set(asArray(values).map(normalize).filter(Boolean)); +} + +function intersects(left, right) { + for (const value of left) { + if (right.has(value)) { + return true; + } + } + return false; +} + +function addFinding(findings, experiment, severity, code, message, action, metadata = {}) { + findings.push({ + experimentId: experiment.id ?? "unlabeled-experiment", + severity, + code, + message, + action, + ...metadata + }); +} + +function addNodeMissing(findings, experiment, type, id) { + addFinding( + findings, + experiment, + "high", + `${type}_node_missing`, + `The ${type} node ${id ?? "unknown"} is not present in the graph.`, + `Add the ${type} node or remove the stale experiment edge.`, + { nodeType: type, nodeId: id } + ); +} + +function calibrationAgeDays(instrument, generatedAt) { + const generatedDate = parseDate(generatedAt); + const calibrationDate = parseDate(instrument.calibrationDate); + if (!generatedDate || !calibrationDate) { + return null; + } + + return Math.floor((generatedDate.getTime() - calibrationDate.getTime()) / DAY_MS); +} + +function bestEvidence(evidenceItems) { + const evidence = asArray(evidenceItems) + .map(asObject) + .map((evidence) => ({ + id: evidence.id, + status: normalize(evidence.status), + quality: parseNumber(evidence.quality) ?? 0, + type: normalize(evidence.type) + })); + const ready = evidence.filter((item) => item.status === "ready"); + const ranked = (ready.length > 0 ? ready : evidence).sort((left, right) => right.quality - left.quality); + + return ranked[0] ?? null; +} + +function checkCompatibility(experiment, context, findings) { + const { instruments, methods, datasets, generatedAt } = context; + const instrument = instruments.get(experiment.instrumentId); + const method = methods.get(experiment.methodId); + const dataset = datasets.get(experiment.datasetId); + const startCount = findings.length; + + if (!instrument) { + addNodeMissing(findings, experiment, "instrument", experiment.instrumentId); + } + + if (!method) { + addNodeMissing(findings, experiment, "method", experiment.methodId); + } + + if (!dataset) { + addNodeMissing(findings, experiment, "dataset", experiment.datasetId); + } + + if (!instrument || !method || !dataset) { + return null; + } + + if (normalize(method.status) === "deprecated") { + addFinding( + findings, + experiment, + "high", + "method_deprecated", + `${method.name ?? method.id} is deprecated for new graph recommendations.`, + "Pick a supported method or add curator approval for legacy use.", + { methodId: method.id } + ); + } + + const supportedMethods = normalizedSet(instrument.supportedMethodIds); + if (supportedMethods.size > 0 && !supportedMethods.has(normalize(method.id))) { + addFinding( + findings, + experiment, + "medium", + "instrument_method_not_listed", + `${instrument.name ?? instrument.id} does not list ${method.name ?? method.id} as a supported method.`, + "Confirm the instrument-method edge or choose a supported instrument.", + { instrumentId: instrument.id, methodId: method.id } + ); + } + + const instrumentModalities = normalizedSet(instrument.modalities); + const methodModalities = normalizedSet(method.requiredModalities); + const datasetModality = normalize(dataset.modality); + if (methodModalities.size > 0 && (!datasetModality || !methodModalities.has(datasetModality))) { + addFinding( + findings, + experiment, + "high", + "dataset_method_modality_mismatch", + datasetModality + ? `${dataset.name ?? dataset.id} uses ${dataset.modality}, which does not match the method requirements.` + : `${dataset.name ?? dataset.id} is missing a modality required by ${method.name ?? method.id}.`, + "Use a compatible dataset or change the method assignment.", + { datasetId: dataset.id, methodId: method.id, datasetModality: datasetModality || null } + ); + } + + if (instrumentModalities.size > 0 && datasetModality && !instrumentModalities.has(datasetModality)) { + addFinding( + findings, + experiment, + "high", + "instrument_dataset_modality_mismatch", + `${instrument.name ?? instrument.id} does not support ${dataset.modality} data.`, + "Route the dataset to an instrument that supports this modality.", + { instrumentId: instrument.id, datasetId: dataset.id } + ); + } + + const acceptedOutputs = normalizedSet(method.acceptedOutputs); + const datasetFormat = normalize(dataset.format); + if (acceptedOutputs.size > 0 && (!datasetFormat || !acceptedOutputs.has(datasetFormat))) { + addFinding( + findings, + experiment, + "medium", + "dataset_format_not_accepted", + datasetFormat + ? `${dataset.format} is not listed as an accepted output for ${method.name ?? method.id}.` + : `${dataset.name ?? dataset.id} is missing an output format required by ${method.name ?? method.id}.`, + "Add a conversion step or pick a method that accepts the dataset format.", + { datasetId: dataset.id, methodId: method.id, datasetFormat: datasetFormat || null } + ); + } + + const resolution = parseNumber(dataset.resolutionMicrons); + const minResolution = parseNumber(method.maxResolutionMicrons); + if (resolution !== null && minResolution !== null && resolution > minResolution) { + addFinding( + findings, + experiment, + "medium", + "resolution_too_coarse", + `Dataset resolution ${resolution}um is coarser than the method limit ${minResolution}um.`, + "Attach a higher-resolution dataset or document the method exception.", + { datasetId: dataset.id, methodId: method.id } + ); + } + + const maxCalibrationAgeDays = parseNumber(method.maxCalibrationAgeDays); + const ageDays = calibrationAgeDays(instrument, generatedAt); + if (maxCalibrationAgeDays !== null && (ageDays === null || ageDays > maxCalibrationAgeDays)) { + addFinding( + findings, + experiment, + "medium", + "calibration_out_of_window", + `${instrument.name ?? instrument.id} calibration is missing or older than ${maxCalibrationAgeDays} days.`, + "Attach fresh calibration evidence before using this edge in recommendations.", + { instrumentId: instrument.id, ageDays } + ); + } + + const evidence = bestEvidence(experiment.evidence); + if (!evidence || evidence.status !== "ready" || evidence.quality < 0.7) { + addFinding( + findings, + experiment, + "medium", + "compatibility_evidence_weak", + "The compatibility edge has weak or non-ready evidence.", + "Add validation evidence before surfacing the relationship to researchers.", + { evidenceId: evidence?.id } + ); + } + + const added = findings.slice(startCount); + const status = added.some((finding) => finding.severity === "high") + ? "blocked" + : added.some((finding) => finding.severity === "medium") + ? "review" + : "ready"; + + return { + id: `${instrument.id}:${method.id}:${dataset.id}`, + type: "instrument_method_dataset", + status, + from: instrument.id, + through: method.id, + to: dataset.id, + evidenceQuality: evidence?.quality ?? 0, + findingCodes: added.map((finding) => finding.code) + }; +} + +function buildEntityPages(instruments, methods, datasets, edges) { + const pages = []; + + for (const instrument of instruments.values()) { + const instrumentEdges = edges.filter((edge) => edge.from === instrument.id); + pages.push({ + id: instrument.id, + type: "instrument", + title: instrument.name ?? instrument.id, + methods: [...new Set(instrumentEdges.map((edge) => edge.through))], + datasets: [...new Set(instrumentEdges.map((edge) => edge.to))], + readyEdges: instrumentEdges.filter((edge) => edge.status === "ready").length, + reviewEdges: instrumentEdges.filter((edge) => edge.status !== "ready").length + }); + } + + for (const method of methods.values()) { + const methodEdges = edges.filter((edge) => edge.through === method.id); + pages.push({ + id: method.id, + type: "method", + title: method.name ?? method.id, + instruments: [...new Set(methodEdges.map((edge) => edge.from))], + datasets: [...new Set(methodEdges.map((edge) => edge.to))] + }); + } + + for (const dataset of datasets.values()) { + const datasetEdges = edges.filter((edge) => edge.to === dataset.id); + pages.push({ + id: dataset.id, + type: "dataset", + title: dataset.name ?? dataset.id, + modality: dataset.modality, + linkedMethods: [...new Set(datasetEdges.map((edge) => edge.through))] + }); + } + + return pages; +} + +function buildRecommendations(instruments, methods, datasets, edges) { + const recommendations = []; + const readyTriples = new Set(edges.filter((edge) => edge.status === "ready").map((edge) => edge.id)); + + for (const instrument of instruments.values()) { + const supportedMethods = normalizedSet(instrument.supportedMethodIds); + const instrumentModalities = normalizedSet(instrument.modalities); + + for (const method of methods.values()) { + if (normalize(method.status) === "deprecated") { + continue; + } + + if (supportedMethods.size > 0 && !supportedMethods.has(normalize(method.id))) { + continue; + } + + const methodModalities = normalizedSet(method.requiredModalities); + if (methodModalities.size > 0 && instrumentModalities.size > 0 && !intersects(methodModalities, instrumentModalities)) { + continue; + } + + const candidateDatasets = [...datasets.values()].filter((dataset) => { + const modality = normalize(dataset.modality); + const format = normalize(dataset.format); + const acceptedOutputs = normalizedSet(method.acceptedOutputs); + const edgeId = `${instrument.id}:${method.id}:${dataset.id}`; + const matchesInstrumentModality = + instrumentModalities.size === 0 || Boolean(modality && instrumentModalities.has(modality)); + const matchesMethodModality = + methodModalities.size === 0 || Boolean(modality && methodModalities.has(modality)); + const matchesFormat = acceptedOutputs.size === 0 || Boolean(format && acceptedOutputs.has(format)); + return !readyTriples.has(edgeId) && matchesInstrumentModality && matchesMethodModality && matchesFormat; + }); + + if (candidateDatasets.length > 0) { + recommendations.push({ + type: "candidate_edge", + instrumentId: instrument.id, + methodId: method.id, + datasetIds: candidateDatasets.map((dataset) => dataset.id), + reason: "Instrument, method, and dataset metadata share compatible modality/output requirements." + }); + } + } + } + + return recommendations.slice(0, 8); +} + +function statusFromFindings(score, findings) { + if (findings.some((finding) => finding.severity === "high")) { + return "blocked"; + } + + if (findings.some((finding) => finding.severity === "medium")) { + return "review"; + } + + if (score >= 80) { + return "ready"; + } + + if (score >= 55) { + return "review"; + } + + return "blocked"; +} + +function severityCounts(findings) { + return findings.reduce( + (counts, finding) => { + counts[finding.severity] += 1; + return counts; + }, + { high: 0, medium: 0, low: 0 } + ); +} + +function curatorActions(findings) { + return [...findings] + .sort( + (left, right) => + SEVERITY_RANK[left.severity] - SEVERITY_RANK[right.severity] || left.code.localeCompare(right.code) + ) + .filter((finding) => finding.severity !== "low") + .map((finding) => ({ + severity: finding.severity, + code: finding.code, + experimentId: finding.experimentId, + nodeId: finding.nodeId, + action: finding.action + })); +} + +export function evaluateInstrumentMethodCompatibility(input) { + const packet = asObject(input); + const project = asObject(packet.project); + const instruments = indexById(packet.instruments); + const methods = indexById(packet.methods); + const datasets = indexById(packet.datasets); + const experiments = asArray(packet.experiments).map(asObject); + const findings = []; + + if (!packet.generatedAt) { + throw new Error("generatedAt is required"); + } + + if (experiments.length === 0) { + addFinding( + findings, + { id: "packet" }, + "high", + "experiment_set_empty", + "No experiment edges were supplied for graph compatibility review.", + "Add experiment edges that connect instruments, methods, and datasets." + ); + } + + const context = { instruments, methods, datasets, generatedAt: packet.generatedAt }; + const compatibilityEdges = experiments + .map((experiment) => checkCompatibility(experiment, context, findings)) + .filter(Boolean); + const entityPages = buildEntityPages(instruments, methods, datasets, compatibilityEdges); + const recommendations = buildRecommendations(instruments, methods, datasets, compatibilityEdges); + const penalty = findings.reduce((total, finding) => total + SEVERITY_WEIGHT[finding.severity], 0); + const score = Math.max(0, 100 - penalty); + const counts = severityCounts(findings); + const manifestDigest = digest({ + project, + instruments: [...instruments.values()], + methods: [...methods.values()], + datasets: [...datasets.values()], + experiments, + generatedAt: packet.generatedAt + }); + + return { + projectId: project.id ?? "unlabeled-project", + title: project.title ?? "Untitled project", + status: statusFromFindings(score, findings), + score, + counts, + findings, + compatibilityEdges, + entityPages, + recommendations, + graphQueries: [ + "instrument -> compatible methods -> datasets", + "dataset -> candidate instruments", + "method -> blocked experiments" + ], + curatorActions: curatorActions(findings), + auditEvents: [ + { + type: "instrument_method_compatibility_evaluated", + at: packet.generatedAt, + edges: compatibilityEdges.length, + findings: findings.length, + findingsDigest: digest(findings) + } + ], + manifestDigest + }; +} + +export function renderInstrumentMethodCompatibilityReport(result) { + const readyEdges = result.compatibilityEdges.filter((edge) => edge.status === "ready").length; + const reviewEdges = result.compatibilityEdges.length - readyEdges; + const lines = [ + "Instrument Method Compatibility", + `${result.title}: ${result.status} (${result.score}/100)`, + `Edges ready/review: ${readyEdges}/${reviewEdges}`, + `Findings high/medium/low: ${result.counts.high}/${result.counts.medium}/${result.counts.low}`, + `Manifest: ${result.manifestDigest}`, + "", + "Curator actions:" + ]; + + if (result.curatorActions.length === 0) { + lines.push("- none"); + } else { + for (const action of result.curatorActions) { + lines.push(`- ${action.severity} ${action.code}: ${action.action}`); + } + } + + return lines.join("\n"); +} diff --git a/instrument-method-compatibility-graph/test/instrument-method-compatibility-graph.test.js b/instrument-method-compatibility-graph/test/instrument-method-compatibility-graph.test.js new file mode 100644 index 0000000..a56f490 --- /dev/null +++ b/instrument-method-compatibility-graph/test/instrument-method-compatibility-graph.test.js @@ -0,0 +1,372 @@ +import assert from "node:assert/strict"; +import test from "node:test"; +import { + evaluateInstrumentMethodCompatibility, + renderInstrumentMethodCompatibilityReport +} from "../src/instrument-method-compatibility-graph.js"; + +function basePacket(overrides = {}) { + return { + generatedAt: "2026-05-16T17:10:00Z", + project: { + id: "project-1", + title: "Clean Graph" + }, + instruments: [ + { + id: "inst-a", + name: "Instrument A", + modalities: ["imaging"], + supportedMethodIds: ["method-a"], + calibrationDate: "2026-05-01T00:00:00Z" + } + ], + methods: [ + { + id: "method-a", + name: "Method A", + status: "active", + requiredModalities: ["imaging"], + acceptedOutputs: ["ome-tiff"], + maxResolutionMicrons: 1, + maxCalibrationAgeDays: 60 + } + ], + datasets: [ + { + id: "data-a", + name: "Dataset A", + modality: "imaging", + format: "ome-tiff", + resolutionMicrons: 0.5 + } + ], + experiments: [ + { + id: "exp-a", + instrumentId: "inst-a", + methodId: "method-a", + datasetId: "data-a", + evidence: [{ id: "ev-a", type: "validation", status: "ready", quality: 0.9 }] + } + ], + ...overrides + }; +} + +test("allows a clean compatible graph edge", () => { + const result = evaluateInstrumentMethodCompatibility(basePacket()); + + assert.equal(result.status, "ready"); + assert.equal(result.score, 100); + assert.equal(result.compatibilityEdges[0].status, "ready"); + assert.equal(result.curatorActions.length, 0); +}); + +test("requires generatedAt", () => { + assert.throws(() => evaluateInstrumentMethodCompatibility({}), /generatedAt is required/); +}); + +test("blocks missing graph nodes", () => { + const result = evaluateInstrumentMethodCompatibility( + basePacket({ + experiments: [ + { + id: "exp-missing", + instrumentId: "inst-missing", + methodId: "method-a", + datasetId: "data-a", + evidence: [] + } + ] + }) + ); + + assert.equal(result.status, "blocked"); + assert(result.findings.some((finding) => finding.code === "instrument_node_missing")); +}); + +test("ignores malformed graph nodes instead of throwing", () => { + const result = evaluateInstrumentMethodCompatibility( + basePacket({ + instruments: [null, "bad-node", ...basePacket().instruments] + }) + ); + + assert.equal(result.compatibilityEdges.length, 1); + assert.equal(result.status, "ready"); +}); + +test("blocks dataset and method modality mismatches", () => { + const result = evaluateInstrumentMethodCompatibility( + basePacket({ + datasets: [{ ...basePacket().datasets[0], modality: "single-cell" }] + }) + ); + + assert(result.findings.some((finding) => finding.code === "dataset_method_modality_mismatch")); + assert(result.findings.some((finding) => finding.code === "instrument_dataset_modality_mismatch")); +}); + +test("flags missing dataset modality with a readable finding", () => { + const dataset = { ...basePacket().datasets[0] }; + delete dataset.modality; + const result = evaluateInstrumentMethodCompatibility( + basePacket({ + datasets: [dataset] + }) + ); + const finding = result.findings.find((finding) => finding.code === "dataset_method_modality_mismatch"); + + assert(finding); + assert.match(finding.message, /missing a modality/); + assert(!finding.message.includes("undefined")); +}); + +test("flags deprecated methods", () => { + const result = evaluateInstrumentMethodCompatibility( + basePacket({ + methods: [{ ...basePacket().methods[0], status: "deprecated" }] + }) + ); + + assert.equal(result.status, "blocked"); + assert(result.findings.some((finding) => finding.code === "method_deprecated")); +}); + +test("flags instruments that do not list a method", () => { + const result = evaluateInstrumentMethodCompatibility( + basePacket({ + instruments: [{ ...basePacket().instruments[0], supportedMethodIds: ["other-method"] }] + }) + ); + + assert(result.findings.some((finding) => finding.code === "instrument_method_not_listed")); +}); + +test("sets overall status to review for medium findings", () => { + const result = evaluateInstrumentMethodCompatibility( + basePacket({ + instruments: [{ ...basePacket().instruments[0], supportedMethodIds: ["other-method"] }] + }) + ); + + assert.equal(result.status, "review"); + assert.equal(result.compatibilityEdges[0].status, "review"); +}); + +test("flags dataset formats that are not accepted by the method", () => { + const result = evaluateInstrumentMethodCompatibility( + basePacket({ + datasets: [{ ...basePacket().datasets[0], format: "csv" }] + }) + ); + + assert(result.findings.some((finding) => finding.code === "dataset_format_not_accepted")); +}); + +test("flags missing dataset formats when the method requires accepted outputs", () => { + const dataset = { ...basePacket().datasets[0] }; + delete dataset.format; + const result = evaluateInstrumentMethodCompatibility( + basePacket({ + datasets: [dataset] + }) + ); + + assert(result.findings.some((finding) => finding.code === "dataset_format_not_accepted")); + assert.equal(result.compatibilityEdges[0].status, "review"); +}); + +test("flags coarse resolution", () => { + const result = evaluateInstrumentMethodCompatibility( + basePacket({ + datasets: [{ ...basePacket().datasets[0], resolutionMicrons: 4 }] + }) + ); + + assert(result.findings.some((finding) => finding.code === "resolution_too_coarse")); +}); + +test("flags stale or missing calibration", () => { + const result = evaluateInstrumentMethodCompatibility( + basePacket({ + instruments: [{ ...basePacket().instruments[0], calibrationDate: "2025-01-01T00:00:00Z" }] + }) + ); + + assert(result.findings.some((finding) => finding.code === "calibration_out_of_window")); +}); + +test("flags weak compatibility evidence", () => { + const result = evaluateInstrumentMethodCompatibility( + basePacket({ + experiments: [ + { + ...basePacket().experiments[0], + evidence: [{ id: "ev-draft", type: "notebook", status: "draft", quality: 0.5 }] + } + ] + }) + ); + + assert(result.findings.some((finding) => finding.code === "compatibility_evidence_weak")); +}); + +test("ignores malformed evidence entries instead of throwing", () => { + const result = evaluateInstrumentMethodCompatibility( + basePacket({ + experiments: [ + { + ...basePacket().experiments[0], + evidence: [null, undefined, "bad-entry", { id: "ev-ready", status: "ready", quality: 0.8 }] + } + ] + }) + ); + + assert.equal(result.status, "ready"); + assert.equal(result.compatibilityEdges[0].evidenceQuality, 0.8); +}); + +test("uses ready evidence over higher-quality draft evidence", () => { + const result = evaluateInstrumentMethodCompatibility( + basePacket({ + experiments: [ + { + ...basePacket().experiments[0], + evidence: [ + { id: "ev-draft", type: "notebook", status: "draft", quality: 0.98 }, + { id: "ev-ready", type: "validation", status: "ready", quality: 0.82 } + ] + } + ] + }) + ); + + assert.equal(result.compatibilityEdges[0].evidenceQuality, 0.82); + assert(!result.findings.some((finding) => finding.code === "compatibility_evidence_weak")); +}); + +test("builds entity pages and recommendations", () => { + const result = evaluateInstrumentMethodCompatibility(basePacket({ experiments: [] })); + + assert(result.entityPages.some((page) => page.type === "instrument")); + assert(result.recommendations.some((recommendation) => recommendation.type === "candidate_edge")); +}); + +test("recommends extra compatible datasets for an existing instrument-method pair", () => { + const result = evaluateInstrumentMethodCompatibility( + basePacket({ + datasets: [ + ...basePacket().datasets, + { + id: "data-b", + name: "Dataset B", + modality: "imaging", + format: "ome-tiff", + resolutionMicrons: 0.7 + } + ] + }) + ); + + assert( + result.recommendations.some( + (recommendation) => recommendation.instrumentId === "inst-a" && recommendation.datasetIds.includes("data-b") + ) + ); + assert( + !result.recommendations.some( + (recommendation) => recommendation.instrumentId === "inst-a" && recommendation.datasetIds.includes("data-a") + ) + ); +}); + +test("does not recommend unsupported dataset modalities", () => { + const result = evaluateInstrumentMethodCompatibility( + basePacket({ + instruments: [{ ...basePacket().instruments[0], supportedMethodIds: ["method-a", "method-b"] }], + methods: [ + ...basePacket().methods, + { + id: "method-b", + name: "Method B", + status: "active", + requiredModalities: ["single-cell"], + acceptedOutputs: ["fcs"] + } + ], + datasets: [ + ...basePacket().datasets, + { + id: "data-flow", + name: "Flow Dataset", + modality: "single-cell", + format: "fcs" + } + ], + experiments: [] + }) + ); + + assert( + !result.recommendations.some( + (recommendation) => recommendation.methodId === "method-b" && recommendation.datasetIds.includes("data-flow") + ) + ); +}); + +test("does not recommend datasets with missing required modality or format", () => { + const result = evaluateInstrumentMethodCompatibility( + basePacket({ + experiments: [], + datasets: [ + { + id: "data-no-modality", + name: "No Modality", + format: "ome-tiff" + }, + { + id: "data-no-format", + name: "No Format", + modality: "imaging" + } + ] + }) + ); + + assert.equal(result.recommendations.length, 0); +}); + +test("does not recommend deprecated methods", () => { + const result = evaluateInstrumentMethodCompatibility( + basePacket({ + experiments: [], + methods: [{ ...basePacket().methods[0], status: "deprecated" }] + }) + ); + + assert.equal(result.recommendations.length, 0); +}); + +test("produces deterministic digests", () => { + const first = evaluateInstrumentMethodCompatibility(basePacket()); + const second = evaluateInstrumentMethodCompatibility(basePacket()); + + assert.equal(first.manifestDigest, second.manifestDigest); + assert.equal(first.auditEvents[0].findingsDigest, second.auditEvents[0].findingsDigest); +}); + +test("renders a curator-friendly report", () => { + const result = evaluateInstrumentMethodCompatibility( + basePacket({ + methods: [{ ...basePacket().methods[0], status: "deprecated" }] + }) + ); + const report = renderInstrumentMethodCompatibilityReport(result); + + assert.match(report, /Instrument Method Compatibility/); + assert.match(report, /method_deprecated/); + assert.match(report, /Manifest:/); +});