From 1bb7273a9813d994084f9e0d2ddc7ba226a35722 Mon Sep 17 00:00:00 2001 From: Stanislav Marek Date: Fri, 5 Jun 2026 23:11:59 +0200 Subject: [PATCH] Add scientific bounty provenance guard --- scientific-bounty-provenance-guard/README.md | 41 ++++ .../artifacts/demo.mp4 | Bin 0 -> 32704 bytes .../artifacts/reviewer-report.md | 30 +++ .../artifacts/summary.png | Bin 0 -> 77924 bytes .../artifacts/summary.svg | 20 ++ .../examples/submissions.json | 47 +++++ .../package.json | 10 + .../scripts/demo.js | 9 + .../src/index.js | 176 ++++++++++++++++++ .../test/provenanceGuard.test.js | 135 ++++++++++++++ 10 files changed, 468 insertions(+) create mode 100644 scientific-bounty-provenance-guard/README.md create mode 100644 scientific-bounty-provenance-guard/artifacts/demo.mp4 create mode 100644 scientific-bounty-provenance-guard/artifacts/reviewer-report.md create mode 100644 scientific-bounty-provenance-guard/artifacts/summary.png create mode 100644 scientific-bounty-provenance-guard/artifacts/summary.svg create mode 100644 scientific-bounty-provenance-guard/examples/submissions.json create mode 100644 scientific-bounty-provenance-guard/package.json create mode 100644 scientific-bounty-provenance-guard/scripts/demo.js create mode 100644 scientific-bounty-provenance-guard/src/index.js create mode 100644 scientific-bounty-provenance-guard/test/provenanceGuard.test.js diff --git a/scientific-bounty-provenance-guard/README.md b/scientific-bounty-provenance-guard/README.md new file mode 100644 index 00000000..49013e2b --- /dev/null +++ b/scientific-bounty-provenance-guard/README.md @@ -0,0 +1,41 @@ +# Scientific Bounty Provenance Guard + +This module adds a solver-side provenance and duplicate-submission guard for a +scientific bounty marketplace. It is intentionally separate from intake, +scoring, arbitration, escrow, IP transfer, export-control, and accessibility +workflows already represented by other issue #18 submissions. + +## Purpose + +Scientific bounty sponsors need a lightweight gate before payout review begins: + +- verify each submission declares artifact hashes and dataset/license provenance; +- identify exact artifact reuse across different solver teams; +- flag near-duplicate abstracts that may indicate derivative or recycled work; +- produce deterministic release, revise, or hold recommendations for reviewers. + +The guard does not process payments, store private data, call external APIs, or +make legal conclusions. It only prepares a reproducible reviewer packet. + +## Usage + +```bash +npm test +npm run demo +``` + +## Decision Model + +- `release`: submission has complete provenance and no duplicate signal. +- `revise`: submission can proceed after missing hash/license/repro notes are fixed. +- `hold`: duplicate hashes or near-duplicate scientific rationale require review + before payout, IP transfer, or sponsor acceptance. + +## Files + +- `src/index.js`: guard implementation. +- `test/provenanceGuard.test.js`: deterministic Node test suite. +- `examples/submissions.json`: sample challenge packet. +- `artifacts/reviewer-report.md`: reviewer-facing demo report. +- `artifacts/summary.svg` and `artifacts/summary.png`: visual summary artifacts. +- `artifacts/demo.mp4`: short demo video for bounty review. diff --git a/scientific-bounty-provenance-guard/artifacts/demo.mp4 b/scientific-bounty-provenance-guard/artifacts/demo.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..39a3abd63f2657a61091505f76a2ecdbb3881003 GIT binary patch literal 32704 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 BR&xLV literal 0 HcmV?d00001 diff --git a/scientific-bounty-provenance-guard/artifacts/reviewer-report.md b/scientific-bounty-provenance-guard/artifacts/reviewer-report.md new file mode 100644 index 00000000..84b5872f --- /dev/null +++ b/scientific-bounty-provenance-guard/artifacts/reviewer-report.md @@ -0,0 +1,30 @@ +# Provenance Review Report + +Challenge: sci-bounty-demo-001 +Generated: 2026-06-05T23:00:00Z + +## Summary + +- Release: 0 +- Revise: 1 +- Hold: 2 + +## Decisions + +### sub-clean-rainfall + +- Team: atlas-lab +- Decision: hold +- Reasons: duplicate or near-duplicate signal requires reviewer triage + +### sub-copied-rainfall + +- Team: mirror-lab +- Decision: hold +- Reasons: duplicate or near-duplicate signal requires reviewer triage + +### sub-incomplete-biomarker + +- Team: cell-lab +- Decision: revise +- Reasons: missing reproducibility note; missing sha256 for biomarkers/rankings.csv; missing license for biomarkers/rankings.csv diff --git a/scientific-bounty-provenance-guard/artifacts/summary.png b/scientific-bounty-provenance-guard/artifacts/summary.png new file mode 100644 index 0000000000000000000000000000000000000000..da9a3eb08d0c4628309bd22d18a143ff6a9e1ec4 GIT binary patch literal 77924 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�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 literal 0 HcmV?d00001 diff --git a/scientific-bounty-provenance-guard/artifacts/summary.svg b/scientific-bounty-provenance-guard/artifacts/summary.svg new file mode 100644 index 00000000..c0c60087 --- /dev/null +++ b/scientific-bounty-provenance-guard/artifacts/summary.svg @@ -0,0 +1,20 @@ + + + + Scientific Bounty Provenance Guard + Pre-payout duplicate and evidence provenance triage for solver submissions + + + Release + 0 clean + + Revise + 1 incomplete + + Hold + 2 duplicate + + Guard checks + artifact sha256, dataset license, reproducibility note, cross-team hash reuse, near-duplicate rationale + No payment processing, private data, credentials, external APIs, or legal conclusions. + diff --git a/scientific-bounty-provenance-guard/examples/submissions.json b/scientific-bounty-provenance-guard/examples/submissions.json new file mode 100644 index 00000000..4efa0291 --- /dev/null +++ b/scientific-bounty-provenance-guard/examples/submissions.json @@ -0,0 +1,47 @@ +{ + "challengeId": "sci-bounty-demo-001", + "generatedAt": "2026-06-05T23:00:00Z", + "submissions": [ + { + "id": "sub-clean-rainfall", + "teamId": "atlas-lab", + "title": "Regional rainfall model", + "abstract": "Forecast regional rainfall with an open climate dataset and documented metrics.", + "reproducibilityNote": "Run notebook.ipynb with seed 42 and compare metrics.json.", + "artifacts": [ + { + "path": "rainfall/model-card.md", + "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "license": "CC-BY-4.0", + "dataset": "open-climate-demo" + } + ] + }, + { + "id": "sub-copied-rainfall", + "teamId": "mirror-lab", + "title": "Regional rainfall model", + "abstract": "Forecast regional rainfall with an open climate dataset and documented metrics.", + "reproducibilityNote": "Run notebook.ipynb with seed 42 and compare metrics.json.", + "artifacts": [ + { + "path": "copy/model-card.md", + "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "license": "CC-BY-4.0", + "dataset": "open-climate-demo" + } + ] + }, + { + "id": "sub-incomplete-biomarker", + "teamId": "cell-lab", + "title": "Biomarker screen", + "abstract": "Rank candidate biomarkers for a single-cell RNA sequencing challenge.", + "artifacts": [ + { + "path": "biomarkers/rankings.csv" + } + ] + } + ] +} diff --git a/scientific-bounty-provenance-guard/package.json b/scientific-bounty-provenance-guard/package.json new file mode 100644 index 00000000..191040fb --- /dev/null +++ b/scientific-bounty-provenance-guard/package.json @@ -0,0 +1,10 @@ +{ + "name": "scientific-bounty-provenance-guard", + "version": "1.0.0", + "private": true, + "type": "module", + "scripts": { + "test": "node --test test/*.test.js", + "demo": "node scripts/demo.js" + } +} diff --git a/scientific-bounty-provenance-guard/scripts/demo.js b/scientific-bounty-provenance-guard/scripts/demo.js new file mode 100644 index 00000000..3ea77f81 --- /dev/null +++ b/scientific-bounty-provenance-guard/scripts/demo.js @@ -0,0 +1,9 @@ +import { readFile } from "node:fs/promises"; +import { evaluateSubmissionProvenance, renderReviewerReport } from "../src/index.js"; + +const packet = JSON.parse( + await readFile(new URL("../examples/submissions.json", import.meta.url), "utf8") +); +const result = evaluateSubmissionProvenance(packet); + +console.log(renderReviewerReport(result)); diff --git a/scientific-bounty-provenance-guard/src/index.js b/scientific-bounty-provenance-guard/src/index.js new file mode 100644 index 00000000..06121e6a --- /dev/null +++ b/scientific-bounty-provenance-guard/src/index.js @@ -0,0 +1,176 @@ +import { createHash } from "node:crypto"; + +const HOLD_SIMILARITY_THRESHOLD = 0.82; + +export function normalizeText(value) { + return String(value ?? "") + .toLowerCase() + .replace(/[^a-z0-9]+/g, " ") + .trim() + .replace(/\s+/g, " "); +} + +export function tokenize(value) { + const normalized = normalizeText(value); + return normalized ? new Set(normalized.split(" ")) : new Set(); +} + +export function jaccardSimilarity(left, right) { + const a = tokenize(left); + const b = tokenize(right); + + if (a.size === 0 && b.size === 0) { + return 1; + } + + const intersection = [...a].filter((token) => b.has(token)).length; + const union = new Set([...a, ...b]).size; + return intersection / union; +} + +export function hashArtifactDescriptor(artifact) { + const descriptor = JSON.stringify({ + path: artifact.path ?? "", + sha256: artifact.sha256 ?? "", + license: artifact.license ?? "", + dataset: artifact.dataset ?? "" + }); + + return createHash("sha256").update(descriptor).digest("hex"); +} + +function findArtifactIssues(submission) { + const issues = []; + + if (!submission.reproducibilityNote) { + issues.push("missing reproducibility note"); + } + + for (const artifact of submission.artifacts ?? []) { + if (!artifact.sha256) { + issues.push(`missing sha256 for ${artifact.path ?? "artifact"}`); + } + + if (!artifact.license) { + issues.push(`missing license for ${artifact.path ?? "artifact"}`); + } + } + + if ((submission.artifacts ?? []).length === 0) { + issues.push("no artifacts declared"); + } + + return issues; +} + +function findDuplicateSignals(submissions) { + const signals = []; + + for (let i = 0; i < submissions.length; i += 1) { + for (let j = i + 1; j < submissions.length; j += 1) { + const left = submissions[i]; + const right = submissions[j]; + + if (left.teamId === right.teamId) { + continue; + } + + const leftHashes = new Set((left.artifacts ?? []).map((artifact) => artifact.sha256).filter(Boolean)); + const rightHashes = new Set((right.artifacts ?? []).map((artifact) => artifact.sha256).filter(Boolean)); + const sharedHashes = [...leftHashes].filter((hash) => rightHashes.has(hash)); + const similarity = jaccardSimilarity(`${left.title} ${left.abstract}`, `${right.title} ${right.abstract}`); + + if (sharedHashes.length > 0 || similarity >= HOLD_SIMILARITY_THRESHOLD) { + signals.push({ + leftId: left.id, + rightId: right.id, + sharedHashes, + similarity: Number(similarity.toFixed(3)) + }); + } + } + } + + return signals; +} + +export function evaluateSubmissionProvenance(packet) { + const submissions = packet.submissions ?? []; + const duplicateSignals = findDuplicateSignals(submissions); + const heldIds = new Set(duplicateSignals.flatMap((signal) => [signal.leftId, signal.rightId])); + + const decisions = submissions.map((submission) => { + const issues = findArtifactIssues(submission); + const artifactDescriptorHashes = (submission.artifacts ?? []).map(hashArtifactDescriptor); + + if (heldIds.has(submission.id)) { + return { + submissionId: submission.id, + teamId: submission.teamId, + decision: "hold", + reasons: ["duplicate or near-duplicate signal requires reviewer triage", ...issues], + artifactDescriptorHashes + }; + } + + if (issues.length > 0) { + return { + submissionId: submission.id, + teamId: submission.teamId, + decision: "revise", + reasons: issues, + artifactDescriptorHashes + }; + } + + return { + submissionId: submission.id, + teamId: submission.teamId, + decision: "release", + reasons: ["provenance complete and no duplicate signal found"], + artifactDescriptorHashes + }; + }); + + return { + challengeId: packet.challengeId, + generatedAt: packet.generatedAt ?? "demo", + duplicateSignals, + decisions, + summary: { + release: decisions.filter((decision) => decision.decision === "release").length, + revise: decisions.filter((decision) => decision.decision === "revise").length, + hold: decisions.filter((decision) => decision.decision === "hold").length + } + }; +} + +export function renderReviewerReport(result) { + const lines = [ + `# Provenance Review Report`, + ``, + `Challenge: ${result.challengeId}`, + `Generated: ${result.generatedAt}`, + ``, + `## Summary`, + ``, + `- Release: ${result.summary.release}`, + `- Revise: ${result.summary.revise}`, + `- Hold: ${result.summary.hold}`, + ``, + `## Decisions` + ]; + + for (const decision of result.decisions) { + lines.push( + ``, + `### ${decision.submissionId}`, + ``, + `- Team: ${decision.teamId}`, + `- Decision: ${decision.decision}`, + `- Reasons: ${decision.reasons.join("; ")}` + ); + } + + return `${lines.join("\n")}\n`; +} diff --git a/scientific-bounty-provenance-guard/test/provenanceGuard.test.js b/scientific-bounty-provenance-guard/test/provenanceGuard.test.js new file mode 100644 index 00000000..e209695f --- /dev/null +++ b/scientific-bounty-provenance-guard/test/provenanceGuard.test.js @@ -0,0 +1,135 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { + evaluateSubmissionProvenance, + jaccardSimilarity, + renderReviewerReport +} from "../src/index.js"; + +const completeArtifact = { + path: "results/model-card.md", + sha256: "a".repeat(64), + license: "CC-BY-4.0", + dataset: "open-climate-demo" +}; + +test("complete unique submissions are released", () => { + const result = evaluateSubmissionProvenance({ + challengeId: "challenge-clean", + submissions: [ + { + id: "sub-1", + teamId: "team-a", + title: "Regional rainfall model", + abstract: "Forecast regional rainfall using a documented open dataset.", + reproducibilityNote: "Run notebook.ipynb with seed 42.", + artifacts: [completeArtifact] + } + ] + }); + + assert.equal(result.summary.release, 1); + assert.equal(result.decisions[0].decision, "release"); +}); + +test("missing artifact provenance requests revision", () => { + const result = evaluateSubmissionProvenance({ + challengeId: "challenge-revise", + submissions: [ + { + id: "sub-2", + teamId: "team-b", + title: "Biomarker screen", + abstract: "Rank candidate biomarkers for single-cell analysis.", + artifacts: [{ path: "rankings.csv" }] + } + ] + }); + + assert.equal(result.summary.revise, 1); + assert.equal(result.decisions[0].decision, "revise"); + assert.match(result.decisions[0].reasons.join(" "), /missing sha256/); + assert.match(result.decisions[0].reasons.join(" "), /missing license/); +}); + +test("shared artifact hashes across teams put both submissions on hold", () => { + const result = evaluateSubmissionProvenance({ + challengeId: "challenge-duplicate-hash", + submissions: [ + { + id: "sub-3", + teamId: "team-c", + title: "Noise-reduction prototype", + abstract: "Prototype for quantum noise reduction with artifact evidence.", + reproducibilityNote: "Run demo.js.", + artifacts: [completeArtifact] + }, + { + id: "sub-4", + teamId: "team-d", + title: "Independent quantum denoising prototype", + abstract: "Separate writeup but reuses the same artifact hash.", + reproducibilityNote: "Run demo.js.", + artifacts: [{ ...completeArtifact, path: "copied/model-card.md" }] + } + ] + }); + + assert.equal(result.summary.hold, 2); + assert.equal(result.duplicateSignals.length, 1); + assert.deepEqual(result.duplicateSignals[0].sharedHashes, [completeArtifact.sha256]); +}); + +test("near-duplicate scientific rationale is held for reviewer triage", () => { + const similarity = jaccardSimilarity( + "Open climate benchmark with regional rainfall model and transparent metrics", + "Open climate benchmark with regional rainfall model and transparent metrics" + ); + + const result = evaluateSubmissionProvenance({ + challengeId: "challenge-near-duplicate", + submissions: [ + { + id: "sub-5", + teamId: "team-e", + title: "Open climate benchmark", + abstract: "Regional rainfall model with transparent benchmark metrics.", + reproducibilityNote: "Run notebook.", + artifacts: [{ ...completeArtifact, sha256: "b".repeat(64) }] + }, + { + id: "sub-6", + teamId: "team-f", + title: "Open climate benchmark", + abstract: "Regional rainfall model with transparent benchmark metrics.", + reproducibilityNote: "Run notebook.", + artifacts: [{ ...completeArtifact, sha256: "c".repeat(64) }] + } + ] + }); + + assert.equal(similarity, 1); + assert.equal(result.summary.hold, 2); +}); + +test("reviewer report renders deterministic summary", () => { + const result = evaluateSubmissionProvenance({ + challengeId: "challenge-report", + generatedAt: "2026-06-05T23:00:00Z", + submissions: [ + { + id: "sub-7", + teamId: "team-g", + title: "Clean submission", + abstract: "Complete scientific packet.", + reproducibilityNote: "Run npm test.", + artifacts: [completeArtifact] + } + ] + }); + const report = renderReviewerReport(result); + + assert.match(report, /Challenge: challenge-report/); + assert.match(report, /Release: 1/); + assert.match(report, /Decision: release/); +});