From 8d009ebca4eb951d2f1478efb835692db1ec8e51 Mon Sep 17 00:00:00 2001 From: haocyan0723-code Date: Mon, 15 Jun 2026 00:05:16 +0800 Subject: [PATCH 1/9] Add notebook-rerun-determinism-guard --- notebook-rerun-determinism-guard/demo.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 notebook-rerun-determinism-guard/demo.js diff --git a/notebook-rerun-determinism-guard/demo.js b/notebook-rerun-determinism-guard/demo.js new file mode 100644 index 00000000..1861f44c --- /dev/null +++ b/notebook-rerun-determinism-guard/demo.js @@ -0,0 +1,13 @@ +const fs = require("fs"); +const path = require("path"); +const packets = require("./sample-data.json"); +const { evaluateNotebooks, renderMarkdownReport } = require("./index"); + +const artifactsDir = path.join(__dirname, "artifacts"); +fs.mkdirSync(artifactsDir, { recursive: true }); + +const results = evaluateNotebooks(packets); +fs.writeFileSync(path.join(artifactsDir, "notebook-rerun-results.json"), JSON.stringify(results, null, 2)); +fs.writeFileSync(path.join(artifactsDir, "notebook-rerun-report.md"), renderMarkdownReport(results)); + +console.log(renderMarkdownReport(results)); From 5923dd630b7db482f1fcac96ccbb6f1737c774ed Mon Sep 17 00:00:00 2001 From: haocyan0723-code Date: Mon, 15 Jun 2026 00:05:19 +0800 Subject: [PATCH 2/9] Add notebook-rerun-determinism-guard --- notebook-rerun-determinism-guard/index.js | 67 +++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 notebook-rerun-determinism-guard/index.js diff --git a/notebook-rerun-determinism-guard/index.js b/notebook-rerun-determinism-guard/index.js new file mode 100644 index 00000000..4191e50e --- /dev/null +++ b/notebook-rerun-determinism-guard/index.js @@ -0,0 +1,67 @@ +function evaluateNotebook(packet) { + const blockers = []; + const warnings = []; + + if (!packet.environmentDigest) blockers.push("missing environment digest"); + if (!packet.randomSeedPinned) blockers.push("random seed is not pinned"); + if (!packet.rawDataDigest) blockers.push("missing raw data digest"); + if (!packet.outputDigest) blockers.push("missing output digest"); + if (packet.baselineOutputDigest && packet.outputDigest && packet.baselineOutputDigest !== packet.outputDigest) { + blockers.push("output digest changed from baseline"); + } + if (packet.numericDrift > packet.allowedDrift) blockers.push("numeric drift exceeds allowed tolerance"); + if (packet.missingFigures > 0) blockers.push("expected figures are missing"); + if (packet.rerunMinutes > packet.maxRerunMinutes) warnings.push("rerun is slower than expected"); + if (!packet.provenanceAttached) warnings.push("provenance bundle is missing"); + + let decision = "PUBLISH_REPRODUCIBLE"; + if (blockers.length) { + decision = "HOLD_RELEASE"; + } else if (warnings.length) { + decision = "REVIEW_BEFORE_RELEASE"; + } + + return { + notebookId: packet.id, + title: packet.title, + decision, + blockers, + warnings, + nextStep: nextStepFor(decision), + }; +} + +function nextStepFor(decision) { + if (decision === "PUBLISH_REPRODUCIBLE") return "publish the rerun badge and output manifest"; + if (decision === "REVIEW_BEFORE_RELEASE") return "ask a reviewer to approve the reproducibility packet"; + return "hold the notebook until the rerun packet matches the baseline"; +} + +function evaluateNotebooks(packets) { + return packets.map(evaluateNotebook); +} + +function renderMarkdownReport(results) { + const lines = ["# Notebook rerun determinism report", ""]; + for (const result of results) { + lines.push(`## ${result.notebookId}: ${result.title}`); + lines.push(`Decision: ${result.decision}`); + lines.push(`Next step: ${result.nextStep}`); + if (result.blockers.length) { + lines.push("Blockers:"); + for (const blocker of result.blockers) lines.push(`- ${blocker}`); + } + if (result.warnings.length) { + lines.push("Warnings:"); + for (const warning of result.warnings) lines.push(`- ${warning}`); + } + lines.push(""); + } + return lines.join("\n"); +} + +module.exports = { + evaluateNotebook, + evaluateNotebooks, + renderMarkdownReport, +}; From fc2625509ed8cc7ec90fad5997ca25b169c82d2d Mon Sep 17 00:00:00 2001 From: haocyan0723-code Date: Mon, 15 Jun 2026 00:05:21 +0800 Subject: [PATCH 3/9] Add notebook-rerun-determinism-guard --- notebook-rerun-determinism-guard/README.md | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 notebook-rerun-determinism-guard/README.md diff --git a/notebook-rerun-determinism-guard/README.md b/notebook-rerun-determinism-guard/README.md new file mode 100644 index 00000000..3b4ab8cd --- /dev/null +++ b/notebook-rerun-determinism-guard/README.md @@ -0,0 +1,25 @@ +# Notebook rerun determinism guard + +This module checks whether hosted notebooks can receive a reproducibility badge after a rerun. + +It focuses on one part of Scientific/Engineering Data & Code Hosting: stable notebook outputs. It does not run containers, call external compute, or access live datasets. + +## What it checks + +- environment digest +- pinned random seed +- raw data digest +- output digest parity +- numeric drift tolerance +- missing figures +- slow reruns +- provenance bundle presence + +## Run it + +```bash +node notebook-rerun-determinism-guard/test.js +node notebook-rerun-determinism-guard/demo.js +``` + +The demo writes JSON and Markdown artifacts to `artifacts/`. From d0dddc321528fbecf7697868e01503b586c8a3f8 Mon Sep 17 00:00:00 2001 From: haocyan0723-code Date: Mon, 15 Jun 2026 00:05:24 +0800 Subject: [PATCH 4/9] Add notebook-rerun-determinism-guard --- .../sample-data.json | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 notebook-rerun-determinism-guard/sample-data.json diff --git a/notebook-rerun-determinism-guard/sample-data.json b/notebook-rerun-determinism-guard/sample-data.json new file mode 100644 index 00000000..86068eb0 --- /dev/null +++ b/notebook-rerun-determinism-guard/sample-data.json @@ -0,0 +1,47 @@ +[ + { + "id": "NB-100", + "title": "RNA velocity notebook", + "environmentDigest": "env-a12", + "randomSeedPinned": true, + "rawDataDigest": "raw-991", + "baselineOutputDigest": "out-441", + "outputDigest": "out-441", + "numericDrift": 0.002, + "allowedDrift": 0.01, + "missingFigures": 0, + "rerunMinutes": 12, + "maxRerunMinutes": 20, + "provenanceAttached": true + }, + { + "id": "NB-210", + "title": "Climate downscaling notebook", + "environmentDigest": "env-b77", + "randomSeedPinned": true, + "rawDataDigest": "raw-103", + "baselineOutputDigest": "out-915", + "outputDigest": "out-915", + "numericDrift": 0.004, + "allowedDrift": 0.01, + "missingFigures": 0, + "rerunMinutes": 42, + "maxRerunMinutes": 30, + "provenanceAttached": false + }, + { + "id": "NB-404", + "title": "Tumor segmentation notebook", + "environmentDigest": "", + "randomSeedPinned": false, + "rawDataDigest": "raw-700", + "baselineOutputDigest": "out-201", + "outputDigest": "out-999", + "numericDrift": 0.09, + "allowedDrift": 0.02, + "missingFigures": 2, + "rerunMinutes": 18, + "maxRerunMinutes": 25, + "provenanceAttached": true + } +] From f71ccb178ed0666b9247987e81bad7c3ea4dd438 Mon Sep 17 00:00:00 2001 From: haocyan0723-code Date: Mon, 15 Jun 2026 00:05:26 +0800 Subject: [PATCH 5/9] Add notebook-rerun-determinism-guard --- notebook-rerun-determinism-guard/test.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 notebook-rerun-determinism-guard/test.js diff --git a/notebook-rerun-determinism-guard/test.js b/notebook-rerun-determinism-guard/test.js new file mode 100644 index 00000000..adac2c7b --- /dev/null +++ b/notebook-rerun-determinism-guard/test.js @@ -0,0 +1,15 @@ +const assert = require("assert"); +const packets = require("./sample-data.json"); +const { evaluateNotebooks } = require("./index"); + +const results = evaluateNotebooks(packets); +const byId = Object.fromEntries(results.map((result) => [result.notebookId, result])); + +assert.strictEqual(byId["NB-100"].decision, "PUBLISH_REPRODUCIBLE"); +assert.strictEqual(byId["NB-210"].decision, "REVIEW_BEFORE_RELEASE"); +assert.ok(byId["NB-210"].warnings.some((warning) => warning.includes("slower"))); +assert.strictEqual(byId["NB-404"].decision, "HOLD_RELEASE"); +assert.ok(byId["NB-404"].blockers.some((blocker) => blocker.includes("output digest"))); +assert.ok(byId["NB-404"].blockers.some((blocker) => blocker.includes("random seed"))); + +console.log("notebook rerun determinism guard tests passed"); From 09e0f6ae1a267eff93c9d6d03881cffccd2fb8ff Mon Sep 17 00:00:00 2001 From: haocyan0723-code Date: Mon, 15 Jun 2026 00:05:28 +0800 Subject: [PATCH 6/9] Add notebook-rerun-determinism-guard --- .../artifacts/demo.gif | Bin 0 -> 62162 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 notebook-rerun-determinism-guard/artifacts/demo.gif diff --git a/notebook-rerun-determinism-guard/artifacts/demo.gif b/notebook-rerun-determinism-guard/artifacts/demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..32f54b57dded61a1cf5851f57db957038572f5d8 GIT binary patch literal 62162 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π^2BUwK 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 AIRF3v literal 0 HcmV?d00001 From a39d68417bc613b97d1ae3663d1276135a2e5b5f Mon Sep 17 00:00:00 2001 From: haocyan0723-code Date: Mon, 15 Jun 2026 00:05:33 +0800 Subject: [PATCH 7/9] Add notebook-rerun-determinism-guard --- .../artifacts/demo.mp4 | Bin 0 -> 24742 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 notebook-rerun-determinism-guard/artifacts/demo.mp4 diff --git a/notebook-rerun-determinism-guard/artifacts/demo.mp4 b/notebook-rerun-determinism-guard/artifacts/demo.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..1190f10636697cf33aab370d0696e6b2a8e066e0 GIT binary patch literal 24742 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 z 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 HTDSiNan@!w literal 0 HcmV?d00001 From f8bbac2494a48d253dce1e1c22fcd54e4212adc8 Mon Sep 17 00:00:00 2001 From: haocyan0723-code Date: Mon, 15 Jun 2026 00:05:35 +0800 Subject: [PATCH 8/9] Add notebook-rerun-determinism-guard --- .../artifacts/notebook-rerun-report.md | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 notebook-rerun-determinism-guard/artifacts/notebook-rerun-report.md diff --git a/notebook-rerun-determinism-guard/artifacts/notebook-rerun-report.md b/notebook-rerun-determinism-guard/artifacts/notebook-rerun-report.md new file mode 100644 index 00000000..fa2ed45b --- /dev/null +++ b/notebook-rerun-determinism-guard/artifacts/notebook-rerun-report.md @@ -0,0 +1,22 @@ +# Notebook rerun determinism report + +## NB-100: RNA velocity notebook +Decision: PUBLISH_REPRODUCIBLE +Next step: publish the rerun badge and output manifest + +## NB-210: Climate downscaling notebook +Decision: REVIEW_BEFORE_RELEASE +Next step: ask a reviewer to approve the reproducibility packet +Warnings: +- rerun is slower than expected +- provenance bundle is missing + +## NB-404: Tumor segmentation notebook +Decision: HOLD_RELEASE +Next step: hold the notebook until the rerun packet matches the baseline +Blockers: +- missing environment digest +- random seed is not pinned +- output digest changed from baseline +- numeric drift exceeds allowed tolerance +- expected figures are missing From bbbb63aab8bbd7be515b963ddd2fd301ea754da2 Mon Sep 17 00:00:00 2001 From: haocyan0723-code Date: Mon, 15 Jun 2026 00:05:39 +0800 Subject: [PATCH 9/9] Add notebook-rerun-determinism-guard --- .../artifacts/notebook-rerun-results.json | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 notebook-rerun-determinism-guard/artifacts/notebook-rerun-results.json diff --git a/notebook-rerun-determinism-guard/artifacts/notebook-rerun-results.json b/notebook-rerun-determinism-guard/artifacts/notebook-rerun-results.json new file mode 100644 index 00000000..267aac4b --- /dev/null +++ b/notebook-rerun-determinism-guard/artifacts/notebook-rerun-results.json @@ -0,0 +1,35 @@ +[ + { + "notebookId": "NB-100", + "title": "RNA velocity notebook", + "decision": "PUBLISH_REPRODUCIBLE", + "blockers": [], + "warnings": [], + "nextStep": "publish the rerun badge and output manifest" + }, + { + "notebookId": "NB-210", + "title": "Climate downscaling notebook", + "decision": "REVIEW_BEFORE_RELEASE", + "blockers": [], + "warnings": [ + "rerun is slower than expected", + "provenance bundle is missing" + ], + "nextStep": "ask a reviewer to approve the reproducibility packet" + }, + { + "notebookId": "NB-404", + "title": "Tumor segmentation notebook", + "decision": "HOLD_RELEASE", + "blockers": [ + "missing environment digest", + "random seed is not pinned", + "output digest changed from baseline", + "numeric drift exceeds allowed tolerance", + "expected figures are missing" + ], + "warnings": [], + "nextStep": "hold the notebook until the rerun packet matches the baseline" + } +] \ No newline at end of file