From 5352668c56a5d739dca5df86a831afbfbc72e121 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E9=93=AD=E9=94=8B?= Date: Fri, 15 May 2026 20:26:20 +0800 Subject: [PATCH] Add execution drift governance module --- .../README.md | 66 +++ .../demo.js | 21 + .../demo/demo-card.html | 51 ++ .../demo/demo-card.html.png | Bin 0 -> 152015 bytes .../demo/demo-text.txt | 7 + .../demo/execution-drift-governance-demo.mp4 | Bin 0 -> 40010 bytes .../execution-drift-governance-packet.json | 483 ++++++++++++++++ .../package.json | 15 + .../src/index.js | 518 ++++++++++++++++++ .../src/sample-data.js | 189 +++++++ .../test.js | 102 ++++ 11 files changed, 1452 insertions(+) create mode 100644 execution-environment-drift-governance/README.md create mode 100644 execution-environment-drift-governance/demo.js create mode 100644 execution-environment-drift-governance/demo/demo-card.html create mode 100644 execution-environment-drift-governance/demo/demo-card.html.png create mode 100644 execution-environment-drift-governance/demo/demo-text.txt create mode 100644 execution-environment-drift-governance/demo/execution-drift-governance-demo.mp4 create mode 100644 execution-environment-drift-governance/demo/execution-drift-governance-packet.json create mode 100644 execution-environment-drift-governance/package.json create mode 100644 execution-environment-drift-governance/src/index.js create mode 100644 execution-environment-drift-governance/src/sample-data.js create mode 100644 execution-environment-drift-governance/test.js diff --git a/execution-environment-drift-governance/README.md b/execution-environment-drift-governance/README.md new file mode 100644 index 0000000..5f9acf5 --- /dev/null +++ b/execution-environment-drift-governance/README.md @@ -0,0 +1,66 @@ +# Execution Environment Drift Governance + +This module is a focused slice for SCIBASE.AI issue #14, **Scientific/Engineering Data & Code Hosting**. It covers the reproducible execution side of data/code hosting: environment fingerprints, dependency drift, artifact-to-runtime readiness, scheduled rerun decisions, retention/export evidence, and reviewer-ready requirement mapping. + +It is intentionally dependency-free and credential-free. The sample data is synthetic. + +## What It Adds + +- Deterministic artifact capsules for datasets, notebooks, JSON supplements, scripts, and media. +- Metadata-aware preview decisions for notebook, tabular, JSON, image, code, and generic artifacts. +- FAIR scoring plus JSON-LD and DataCite payload generation for DOI/export readiness. +- Container/runtime fingerprinting with pinned image checks, dependency version drift, GPU capability changes, and network policy drift. +- Compute trigger planning for scheduled reruns and "reproduce results" workflows. +- Retention/export evidence for regulated artifacts, embargoes, DOI readiness, and audit digests. +- Requirement mapping back to issue #14 for storage, metadata, executable environments, compute triggers, and export governance. + +## Demo + +```bash +npm run demo +``` + +The demo writes: + +```text +demo/execution-drift-governance-packet.json +``` + +That packet includes artifact digests, environment drift decisions, rerun actions, retention/export evidence, and the requirement map. + +A short visual demo is included at: + +```text +demo/execution-drift-governance-demo.mp4 +``` + +## Tests + +```bash +npm test +``` + +The tests cover: + +- Stable hashing regardless of object key order. +- Artifact type detection. +- Environment fingerprint determinism. +- Blocking unpinned container images and `latest` dependencies. +- Restricted human-subject artifact gating. +- Safe scheduled rerun decisions. +- Retention/export evidence and requirement mapping. + +## Requirement Map + +| Issue #14 requirement | Evidence in this module | +| --- | --- | +| Scalable storage engine for datasets/code/supplementary files | Artifact capsules include type detection, content digests, preview policy, version metadata, and path organization. | +| Metadata-aware previews and versioning/diffing | Preview policy and stable artifact digests enable deterministic review and version comparison. | +| JSON-LD, DataCite, schema.org, FAIR compliance | Each artifact evaluation emits JSON-LD/DataCite payloads and FAIR score checks with DOI thresholds. | +| Executable environments | Runtime capsules are normalized and fingerprinted; drift checks cover base image, package versions, GPU, and network policy. | +| Sandboxed execution and compute triggers | Rerun plans decide `RUN_NOW`, `SCHEDULED`, `REVIEW_REQUIRED`, or `BLOCKED` using artifacts, environments, cadence, and compute budgets. | +| Export/retention governance | Retention evidence covers regulated data, embargoes, DOI readiness, and immutable evidence digests. | + +## Design Notes + +The module does not run untrusted code. It produces governance decisions that an execution service can consume before enabling notebook/script reruns. That keeps the slice safe and reviewable while still addressing the executable-environment requirements in the bounty. diff --git a/execution-environment-drift-governance/demo.js b/execution-environment-drift-governance/demo.js new file mode 100644 index 0000000..c3251b6 --- /dev/null +++ b/execution-environment-drift-governance/demo.js @@ -0,0 +1,21 @@ +const { writeFileSync, mkdirSync } = require("fs"); +const path = require("path"); +const { buildGovernancePacket } = require("./src"); +const { sampleProject } = require("./src/sample-data"); + +const packet = buildGovernancePacket(sampleProject); +const outDir = path.join(__dirname, "demo"); +const outFile = path.join(outDir, "execution-drift-governance-packet.json"); + +mkdirSync(outDir, { recursive: true }); +writeFileSync(outFile, `${JSON.stringify(packet, null, 2)}\n`); + +console.log("Execution Environment Drift Governance Demo"); +console.log(`Project: ${packet.projectId}`); +console.log(`Artifacts: ${packet.summary.artifacts}`); +console.log(`Ready artifacts: ${packet.summary.readyArtifacts}`); +console.log(`Blocked artifacts: ${packet.summary.blockedArtifacts}`); +console.log(`Runnable now: ${packet.summary.runnableNow}`); +console.log(`Review-required reruns: ${packet.summary.reviewReruns}`); +console.log(`Blocked reruns: ${packet.summary.blockedReruns}`); +console.log(`Packet: ${outFile}`); diff --git a/execution-environment-drift-governance/demo/demo-card.html b/execution-environment-drift-governance/demo/demo-card.html new file mode 100644 index 0000000..d7eb6ac --- /dev/null +++ b/execution-environment-drift-governance/demo/demo-card.html @@ -0,0 +1,51 @@ + + + + + Execution Drift Governance Demo + + + +
+

SCIBASE.AI execution drift governance

+

Artifacts: 3, ready: 2, blocked: 1

+

Environment checks: pinned images, dependency drift, GPU, network policy

+

Rerun plans: 1 RUN_NOW, 1 BLOCKED with audit reasons

+

Output: demo/execution-drift-governance-packet.json

+

No credentials, no external services, synthetic data only

+
+ + diff --git a/execution-environment-drift-governance/demo/demo-card.html.png b/execution-environment-drift-governance/demo/demo-card.html.png new file mode 100644 index 0000000000000000000000000000000000000000..0e5e4152c6ca4bcb57dda81717ecde7719cf31cd GIT binary patch literal 152015 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
  • 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 } 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 literal 0 HcmV?d00001 diff --git a/execution-environment-drift-governance/demo/demo-text.txt b/execution-environment-drift-governance/demo/demo-text.txt new file mode 100644 index 0000000..afb22af --- /dev/null +++ b/execution-environment-drift-governance/demo/demo-text.txt @@ -0,0 +1,7 @@ +SCIBASE.AI execution drift governance + +Artifacts: 3, ready: 2, blocked: 1 +Environment checks: pinned images, dependency drift, GPU, network policy +Rerun plans: 1 RUN_NOW, 1 BLOCKED with audit reasons +Output: demo/execution-drift-governance-packet.json +No credentials, no external services, synthetic data only diff --git a/execution-environment-drift-governance/demo/execution-drift-governance-demo.mp4 b/execution-environment-drift-governance/demo/execution-drift-governance-demo.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..88fbbf55135424958a9885ac66b57bba932be06a GIT binary patch literal 40010 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 q`=6tXe*_wfKgLO=18" + }, + "license": "MIT" +} diff --git a/execution-environment-drift-governance/src/index.js b/execution-environment-drift-governance/src/index.js new file mode 100644 index 0000000..fa83099 --- /dev/null +++ b/execution-environment-drift-governance/src/index.js @@ -0,0 +1,518 @@ +const crypto = require("crypto"); + +const DAY_MS = 24 * 60 * 60 * 1000; + +function stableStringify(value) { + if (Array.isArray(value)) { + return `[${value.map((item) => stableStringify(item)).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 sha256(value) { + return crypto.createHash("sha256").update(stableStringify(value)).digest("hex"); +} + +function normalizePackageMap(packages = {}) { + return Object.fromEntries( + Object.entries(packages) + .map(([name, version]) => [name.toLowerCase(), String(version)]) + .sort(([left], [right]) => left.localeCompare(right)), + ); +} + +function normalizeEnvironmentSpec(spec = {}) { + return { + baseImage: spec.baseImage || null, + runtime: spec.runtime || null, + runtimeVersion: spec.runtimeVersion || null, + packages: normalizePackageMap(spec.packages), + gpu: Boolean(spec.gpu), + network: spec.network || "blocked", + osPackages: [...(spec.osPackages || [])].sort(), + }; +} + +function fingerprintEnvironment(spec) { + const normalized = normalizeEnvironmentSpec(spec); + return { + digest: sha256(normalized), + normalized, + }; +} + +function hasPinnedContainerDigest(baseImage) { + return typeof baseImage === "string" && baseImage.includes("@sha256:"); +} + +function detectDependencyChanges(baselinePackages, currentPackages) { + const names = new Set([...Object.keys(baselinePackages), ...Object.keys(currentPackages)]); + return [...names].sort().flatMap((name) => { + const before = baselinePackages[name]; + const after = currentPackages[name]; + + if (!before) { + return [{ type: "dependency_added", severity: "review", package: name, current: after }]; + } + + if (!after) { + return [{ type: "dependency_removed", severity: "review", package: name, baseline: before }]; + } + + if (before !== after) { + return [ + { + type: "dependency_changed", + severity: after === "latest" || after === "*" ? "block" : "review", + package: name, + baseline: before, + current: after, + }, + ]; + } + + return []; + }); +} + +function detectEnvironmentDrift(environment) { + const baseline = normalizeEnvironmentSpec(environment.baseline); + const current = normalizeEnvironmentSpec(environment.current); + const findings = []; + + if (baseline.baseImage !== current.baseImage) { + findings.push({ + type: "base_image_changed", + severity: hasPinnedContainerDigest(current.baseImage) ? "review" : "block", + baseline: baseline.baseImage, + current: current.baseImage, + }); + } + + if (!hasPinnedContainerDigest(current.baseImage)) { + findings.push({ + type: "base_image_unpinned", + severity: "block", + current: current.baseImage, + }); + } + + if (baseline.runtime !== current.runtime || baseline.runtimeVersion !== current.runtimeVersion) { + findings.push({ + type: "runtime_changed", + severity: "review", + baseline: `${baseline.runtime || "unknown"}@${baseline.runtimeVersion || "unknown"}`, + current: `${current.runtime || "unknown"}@${current.runtimeVersion || "unknown"}`, + }); + } + + findings.push(...detectDependencyChanges(baseline.packages, current.packages)); + + Object.entries(current.packages).forEach(([name, version]) => { + if (version === "latest" || version === "*" || version.startsWith("^") || version.startsWith("~")) { + findings.push({ + type: "dependency_unpinned", + severity: "block", + package: name, + current: version, + }); + } + }); + + if (baseline.gpu !== current.gpu) { + findings.push({ + type: "gpu_capability_changed", + severity: "review", + baseline: baseline.gpu, + current: current.gpu, + }); + } + + if (baseline.network !== current.network) { + findings.push({ + type: "network_policy_changed", + severity: current.network === "blocked" ? "review" : "block", + baseline: baseline.network, + current: current.network, + }); + } + + const baselineFingerprint = fingerprintEnvironment(baseline); + const currentFingerprint = fingerprintEnvironment(current); + + return { + environmentId: environment.id, + baselineDigest: baselineFingerprint.digest, + currentDigest: currentFingerprint.digest, + drifted: baselineFingerprint.digest !== currentFingerprint.digest, + findings, + status: findings.some((finding) => finding.severity === "block") + ? "BLOCKED" + : findings.length > 0 + ? "REVIEW" + : "READY", + }; +} + +function detectArtifactType(path = "", explicitType) { + if (explicitType) return explicitType; + const lower = path.toLowerCase(); + if (lower.endsWith(".ipynb")) return "code/notebook"; + if (lower.endsWith(".csv") || lower.endsWith(".tsv")) return "dataset/tabular"; + if (lower.endsWith(".json") || lower.endsWith(".jsonld")) return "dataset/json"; + if (lower.endsWith(".py") || lower.endsWith(".r") || lower.endsWith(".jl")) return "code/script"; + if (lower.match(/\.(png|jpg|jpeg|gif|svg)$/)) return "image"; + return "artifact/generic"; +} + +function scoreFairMetadata(artifact) { + const metadata = artifact.metadata || {}; + const checks = [ + ["unique_identifier", Boolean(artifact.id || metadata.doi || metadata.uuid)], + ["title", Boolean(metadata.title)], + ["creator", Array.isArray(metadata.creators) && metadata.creators.length > 0], + ["license", Boolean(artifact.license)], + ["machine_readable_type", Boolean(detectArtifactType(artifact.path, artifact.type))], + ["version", Boolean(artifact.version)], + ["tags", Array.isArray(artifact.tags) && artifact.tags.length > 0], + ["variable_metadata", Array.isArray(metadata.variables) && metadata.variables.length > 0], + ]; + + const passed = checks.filter(([, ok]) => ok).length; + return { + score: Number((passed / checks.length).toFixed(2)), + checks: checks.map(([name, ok]) => ({ name, ok })), + }; +} + +function classifyPreview(artifact) { + const type = detectArtifactType(artifact.path, artifact.type); + if (type.includes("notebook")) return "render-notebook"; + if (type.includes("csv") || type.includes("tabular")) return "sample-table-preview"; + if (type.includes("json")) return "schema-and-tree-preview"; + if (type.startsWith("image")) return "thumbnail-preview"; + if (type.includes("script")) return "syntax-highlighted-code-preview"; + return "metadata-only-preview"; +} + +function buildJsonLd(artifact) { + const metadata = artifact.metadata || {}; + return { + "@context": "https://schema.org", + "@type": artifact.type && artifact.type.startsWith("code") ? "SoftwareSourceCode" : "Dataset", + identifier: artifact.id, + name: metadata.title || artifact.path, + license: artifact.license || "UNSPECIFIED", + creator: (metadata.creators || []).map((creator) => ({ "@type": "Person", identifier: creator })), + keywords: artifact.tags || [], + version: artifact.version || "unversioned", + encodingFormat: detectArtifactType(artifact.path, artifact.type), + }; +} + +function buildDataCite(artifact) { + const metadata = artifact.metadata || {}; + return { + identifiers: [{ identifier: artifact.id, identifierType: "SCIBASE-ID" }], + titles: [{ title: metadata.title || artifact.path }], + creators: (metadata.creators || []).map((creator) => ({ name: creator })), + publisher: "SCIBASE.AI", + publicationYear: new Date().getUTCFullYear(), + resourceType: { + resourceTypeGeneral: artifact.type && artifact.type.startsWith("code") ? "Software" : "Dataset", + resourceType: detectArtifactType(artifact.path, artifact.type), + }, + rightsList: artifact.license ? [{ rights: artifact.license }] : [], + }; +} + +function evaluateArtifact(artifact, environmentsById, policy = {}) { + const fair = scoreFairMetadata(artifact); + const requiredEnvironmentIds = artifact.requiredEnvironmentIds || []; + const missingEnvironments = requiredEnvironmentIds.filter((id) => !environmentsById.has(id)); + const reasons = []; + + if (missingEnvironments.length > 0) { + reasons.push({ + type: "missing_execution_environment", + severity: "block", + detail: missingEnvironments.join(", "), + }); + } + + if (artifact.access?.containsHumanSubjects && !artifact.license) { + reasons.push({ + type: "restricted_artifact_missing_license", + severity: "block", + detail: "Human-subject or restricted artifacts need explicit reuse/licensing metadata.", + }); + } + + if (artifact.access?.embargoUntil && policy.embargoedExportRequiresApproval) { + reasons.push({ + type: "embargo_requires_export_approval", + severity: "review", + detail: `Embargo active until ${artifact.access.embargoUntil}.`, + }); + } + + if (fair.score < (policy.minimumFairScoreForDoi || 0.82)) { + reasons.push({ + type: "fair_score_below_doi_threshold", + severity: "review", + detail: `FAIR score ${fair.score} is below DOI threshold.`, + }); + } + + const digest = sha256({ + path: artifact.path, + type: detectArtifactType(artifact.path, artifact.type), + version: artifact.version, + content: artifact.content, + metadata: artifact.metadata, + }); + + return { + artifactId: artifact.id, + path: artifact.path, + type: detectArtifactType(artifact.path, artifact.type), + digest, + preview: classifyPreview(artifact), + fair, + jsonLd: buildJsonLd(artifact), + dataCite: buildDataCite(artifact), + status: reasons.some((reason) => reason.severity === "block") + ? "BLOCKED" + : reasons.length > 0 + ? "REVIEW" + : "READY", + reasons, + }; +} + +function cadenceToDays(cadence) { + return { + daily: 1, + weekly: 7, + monthly: 30, + quarterly: 90, + }[cadence] || 7; +} + +function isDue(trigger) { + const lastRunAt = new Date(trigger.lastRunAt || 0).getTime(); + const requestedAt = new Date(trigger.requestedAt || Date.now()).getTime(); + const dueAfter = lastRunAt + cadenceToDays(trigger.cadence) * DAY_MS; + return requestedAt >= dueAfter; +} + +function planRerun(trigger, artifactEvaluations, environmentDrift, environment) { + const artifactStatuses = trigger.artifactIds.map((artifactId) => artifactEvaluations.get(artifactId)); + const missingArtifacts = artifactStatuses.filter(Boolean).length !== trigger.artifactIds.length; + const blockingArtifacts = artifactStatuses.filter((artifact) => artifact?.status === "BLOCKED"); + const reviewArtifacts = artifactStatuses.filter((artifact) => artifact?.status === "REVIEW"); + const estimatedCpuMinutes = trigger.estimatedCpuMinutes || 0; + const maxCpuMinutes = environment.computePolicy?.maxCpuMinutes || Infinity; + const due = isDue(trigger); + const reasons = []; + + if (missingArtifacts) { + reasons.push({ type: "missing_artifact", severity: "block" }); + } + + if (blockingArtifacts.length > 0) { + reasons.push({ + type: "artifact_blocked", + severity: "block", + artifacts: blockingArtifacts.map((artifact) => artifact.artifactId), + }); + } + + if (environmentDrift.status === "BLOCKED") { + reasons.push({ + type: "environment_drift_blocked", + severity: "block", + findings: environmentDrift.findings.filter((finding) => finding.severity === "block"), + }); + } else if (environmentDrift.status === "REVIEW") { + reasons.push({ + type: "environment_drift_review", + severity: "review", + findings: environmentDrift.findings, + }); + } + + if (reviewArtifacts.length > 0) { + reasons.push({ + type: "artifact_review_required", + severity: "review", + artifacts: reviewArtifacts.map((artifact) => artifact.artifactId), + }); + } + + if (estimatedCpuMinutes > maxCpuMinutes) { + reasons.push({ + type: "compute_budget_exceeded", + severity: "review", + estimatedCpuMinutes, + maxCpuMinutes, + }); + } + + const inputDigest = sha256({ + artifacts: artifactStatuses.map((artifact) => artifact && { + artifactId: artifact.artifactId, + digest: artifact.digest, + }), + environmentDigest: environmentDrift.currentDigest, + expectedOutputs: trigger.expectedOutputs || [], + }); + + const action = reasons.some((reason) => reason.severity === "block") + ? "BLOCKED" + : reasons.some((reason) => reason.severity === "review") + ? "REVIEW_REQUIRED" + : due + ? "RUN_NOW" + : "SCHEDULED"; + + return { + triggerId: trigger.id, + name: trigger.name, + action, + due, + cadence: trigger.cadence, + inputDigest, + environmentDigest: environmentDrift.currentDigest, + estimatedCpuMinutes, + expectedOutputs: trigger.expectedOutputs || [], + reasons, + }; +} + +function buildRetentionAndExportEvidence(artifact, evaluation, policy = {}) { + const regulated = artifact.access?.containsHumanSubjects || artifact.access?.classification === "restricted"; + const retentionDays = regulated + ? policy.regulatedRetentionDays || policy.defaultRetentionDays || 2555 + : policy.defaultRetentionDays || 2555; + + return { + artifactId: artifact.id, + retentionDays, + exportEligible: evaluation.status !== "BLOCKED" && !artifact.access?.embargoUntil, + doiReady: evaluation.fair.score >= (policy.minimumFairScoreForDoi || 0.82) && Boolean(artifact.license), + evidenceDigest: sha256({ + artifactDigest: evaluation.digest, + jsonLd: evaluation.jsonLd, + dataCite: evaluation.dataCite, + retentionDays, + }), + }; +} + +function buildRequirementMap(packet) { + return [ + { + requirement: "Scalable storage engine for datasets, code, supplementary files", + evidence: `${packet.artifacts.length} artifact capsules include type detection, content digests, preview policy, and version metadata.`, + }, + { + requirement: "Metadata-aware previews and version/diff readiness", + evidence: "Each artifact receives a deterministic preview policy and digest suitable for version comparison.", + }, + { + requirement: "JSON-LD, DataCite, schema.org, and FAIR compliance", + evidence: "Artifact evaluations emit JSON-LD/DataCite payloads and FAIR score checks with DOI readiness thresholds.", + }, + { + requirement: "Executable environments and sandboxed reruns", + evidence: `${packet.environments.length} environment capsules are fingerprinted and checked for pinned images, dependencies, GPU, and network policy drift.`, + }, + { + requirement: "Built-in compute triggers and scheduled reruns", + evidence: `${packet.reruns.length} rerun plans include due-state, input digests, compute budget checks, expected outputs, and block/review decisions.`, + }, + { + requirement: "Research artifact export and retention governance", + evidence: "Retention/export evidence records DOI readiness, embargo checks, regulated retention days, and immutable evidence digests.", + }, + ]; +} + +function buildGovernancePacket(project) { + const environmentsById = new Map(project.environments.map((environment) => [environment.id, environment])); + const environmentEvaluations = project.environments.map(detectEnvironmentDrift); + const environmentEvaluationsById = new Map( + environmentEvaluations.map((evaluation) => [evaluation.environmentId, evaluation]), + ); + + const artifactEvaluations = project.artifacts.map((artifact) => + evaluateArtifact(artifact, environmentsById, project.retentionPolicy), + ); + const artifactEvaluationsById = new Map( + artifactEvaluations.map((evaluation) => [evaluation.artifactId, evaluation]), + ); + + const reruns = project.rerunTriggers.map((trigger) => + planRerun( + trigger, + artifactEvaluationsById, + environmentEvaluationsById.get(trigger.environmentId), + environmentsById.get(trigger.environmentId), + ), + ); + + const retentionAndExport = project.artifacts.map((artifact) => + buildRetentionAndExportEvidence( + artifact, + artifactEvaluationsById.get(artifact.id), + project.retentionPolicy, + ), + ); + + const packet = { + projectId: project.projectId, + generatedAt: project.generatedAt || new Date().toISOString(), + summary: { + artifacts: project.artifacts.length, + environments: project.environments.length, + rerunTriggers: project.rerunTriggers.length, + readyArtifacts: artifactEvaluations.filter((artifact) => artifact.status === "READY").length, + blockedArtifacts: artifactEvaluations.filter((artifact) => artifact.status === "BLOCKED").length, + blockedReruns: reruns.filter((rerun) => rerun.action === "BLOCKED").length, + reviewReruns: reruns.filter((rerun) => rerun.action === "REVIEW_REQUIRED").length, + runnableNow: reruns.filter((rerun) => rerun.action === "RUN_NOW").length, + }, + artifacts: artifactEvaluations, + environments: environmentEvaluations, + reruns, + retentionAndExport, + }; + + return { + ...packet, + requirementMap: buildRequirementMap(packet), + }; +} + +module.exports = { + buildGovernancePacket, + buildRetentionAndExportEvidence, + detectArtifactType, + detectEnvironmentDrift, + evaluateArtifact, + fingerprintEnvironment, + normalizeEnvironmentSpec, + planRerun, + scoreFairMetadata, + sha256, + stableStringify, +}; diff --git a/execution-environment-drift-governance/src/sample-data.js b/execution-environment-drift-governance/src/sample-data.js new file mode 100644 index 0000000..3fecb9b --- /dev/null +++ b/execution-environment-drift-governance/src/sample-data.js @@ -0,0 +1,189 @@ +const sampleProject = { + projectId: "scibase-neuro-protein-2026", + generatedAt: "2026-05-15T12:00:00.000Z", + retentionPolicy: { + defaultRetentionDays: 2555, + regulatedRetentionDays: 3650, + embargoedExportRequiresApproval: true, + minimumFairScoreForDoi: 0.82, + }, + artifacts: [ + { + id: "artifact:raw-assay-csv", + path: "data/raw/assay-readings.csv", + type: "dataset/csv", + version: "v3", + bytes: 1843902, + license: "CC-BY-4.0", + tags: ["protein-folding", "assay", "raw"], + metadata: { + title: "Raw protein folding assay readings", + creators: ["ORCID:0000-0002-1825-0097"], + funder: "NIH-R01-EXAMPLE", + instrument: "plate-reader", + variables: ["sample_id", "timepoint", "fluorescence"], + }, + content: [ + ["sample_id", "timepoint", "fluorescence"], + ["S-001", "0h", 0.12], + ["S-001", "24h", 0.87], + ], + access: { + classification: "controlled", + containsHumanSubjects: false, + embargoUntil: null, + }, + requiredEnvironmentIds: ["env:python-analysis"], + }, + { + id: "artifact:analysis-notebook", + path: "notebooks/folding-analysis.ipynb", + type: "code/notebook", + version: "v5", + bytes: 93712, + license: "MIT", + tags: ["notebook", "reproducibility", "figure-generation"], + metadata: { + title: "Protein folding analysis notebook", + creators: ["ORCID:0000-0002-1825-0097"], + variables: ["fold_change", "confidence_interval"], + }, + content: { + cells: [ + { cell_type: "markdown", source: "# Protein folding analysis" }, + { cell_type: "code", source: "import pandas as pd\nprint('ready')" }, + ], + }, + access: { + classification: "public", + containsHumanSubjects: false, + embargoUntil: null, + }, + requiredEnvironmentIds: ["env:python-analysis"], + }, + { + id: "artifact:clinical-supplement", + path: "supplemental/clinical-cohort.json", + type: "dataset/json", + version: "v1", + bytes: 29231, + license: null, + tags: ["clinical", "supplemental", "restricted"], + metadata: { + title: "Restricted clinical cohort covariates", + creators: ["ORCID:0000-0002-1825-0097"], + variables: ["age_bucket", "condition_code", "site"], + }, + content: { + cohort: "redacted-demo-only", + variables: ["age_bucket", "condition_code", "site"], + }, + access: { + classification: "restricted", + containsHumanSubjects: true, + embargoUntil: "2026-08-01", + }, + requiredEnvironmentIds: ["env:python-analysis"], + }, + ], + environments: [ + { + id: "env:python-analysis", + kind: "container", + name: "Python data science capsule", + baseline: { + baseImage: "python:3.12.3-slim@sha256:demo-baseline", + runtime: "python", + runtimeVersion: "3.12.3", + packages: { + numpy: "1.26.4", + pandas: "2.2.2", + scipy: "1.13.0", + }, + gpu: false, + network: "blocked", + osPackages: ["libgomp1=13.2"], + }, + current: { + baseImage: "python:3.12.3-slim@sha256:demo-baseline", + runtime: "python", + runtimeVersion: "3.12.3", + packages: { + numpy: "1.26.4", + pandas: "2.2.2", + scipy: "1.13.0", + }, + gpu: false, + network: "blocked", + osPackages: ["libgomp1=13.2"], + }, + computePolicy: { + maxCpuMinutes: 40, + maxMemoryGb: 8, + allowGpu: false, + }, + }, + { + id: "env:ml-training", + kind: "container", + name: "GPU model training capsule", + baseline: { + baseImage: "pytorch/pytorch:2.3.0-cuda12.1-cudnn8-runtime@sha256:demo-old", + runtime: "python", + runtimeVersion: "3.11.9", + packages: { + torch: "2.3.0", + transformers: "4.41.0", + numpy: "1.26.4", + }, + gpu: true, + network: "egress-allowlist", + osPackages: ["cuda=12.1"], + }, + current: { + baseImage: "pytorch/pytorch:2.4.1-cuda12.1-cudnn9-runtime", + runtime: "python", + runtimeVersion: "3.11.9", + packages: { + torch: "2.4.1", + transformers: "latest", + numpy: "1.26.4", + }, + gpu: true, + network: "egress-allowlist", + osPackages: ["cuda=12.1"], + }, + computePolicy: { + maxCpuMinutes: 120, + maxMemoryGb: 24, + allowGpu: true, + }, + }, + ], + rerunTriggers: [ + { + id: "trigger:weekly-figures", + name: "Weekly figure regeneration", + artifactIds: ["artifact:raw-assay-csv", "artifact:analysis-notebook"], + environmentId: "env:python-analysis", + cadence: "weekly", + lastRunAt: "2026-05-01T00:00:00.000Z", + requestedAt: "2026-05-15T12:00:00.000Z", + estimatedCpuMinutes: 12, + expectedOutputs: ["figures/folding-response.svg", "tables/folding-summary.csv"], + }, + { + id: "trigger:model-refresh", + name: "Quarterly model training refresh", + artifactIds: ["artifact:raw-assay-csv", "artifact:clinical-supplement"], + environmentId: "env:ml-training", + cadence: "quarterly", + lastRunAt: "2026-02-15T00:00:00.000Z", + requestedAt: "2026-05-15T12:00:00.000Z", + estimatedCpuMinutes: 180, + expectedOutputs: ["models/folding-risk.pt", "reports/model-card.md"], + }, + ], +}; + +module.exports = { sampleProject }; diff --git a/execution-environment-drift-governance/test.js b/execution-environment-drift-governance/test.js new file mode 100644 index 0000000..e183aaa --- /dev/null +++ b/execution-environment-drift-governance/test.js @@ -0,0 +1,102 @@ +const assert = require("assert"); +const { + buildGovernancePacket, + detectArtifactType, + detectEnvironmentDrift, + evaluateArtifact, + fingerprintEnvironment, + scoreFairMetadata, + sha256, + stableStringify, +} = require("./src"); +const { sampleProject } = require("./src/sample-data"); + +function testStableHashing() { + const left = { b: 2, a: { d: 4, c: 3 } }; + const right = { a: { c: 3, d: 4 }, b: 2 }; + + assert.strictEqual(stableStringify(left), stableStringify(right)); + assert.strictEqual(sha256(left), sha256(right)); +} + +function testArtifactTypeDetection() { + assert.strictEqual(detectArtifactType("analysis.ipynb"), "code/notebook"); + assert.strictEqual(detectArtifactType("dataset.csv"), "dataset/tabular"); + assert.strictEqual(detectArtifactType("figure.svg"), "image"); +} + +function testEnvironmentFingerprinting() { + const a = fingerprintEnvironment({ + baseImage: "python:3.12@sha256:abc", + packages: { pandas: "2.2.2", numpy: "1.26.4" }, + }); + const b = fingerprintEnvironment({ + packages: { numpy: "1.26.4", pandas: "2.2.2" }, + baseImage: "python:3.12@sha256:abc", + }); + + assert.strictEqual(a.digest, b.digest); +} + +function testEnvironmentDriftBlocksUnpinnedLatest() { + const mlEnv = sampleProject.environments.find((environment) => environment.id === "env:ml-training"); + const drift = detectEnvironmentDrift(mlEnv); + + assert.strictEqual(drift.status, "BLOCKED"); + assert.ok(drift.findings.some((finding) => finding.type === "base_image_unpinned")); + assert.ok(drift.findings.some((finding) => finding.type === "dependency_unpinned")); +} + +function testFairScoringAndRestrictedArtifactBlock() { + const envs = new Map(sampleProject.environments.map((environment) => [environment.id, environment])); + const clinical = sampleProject.artifacts.find((artifact) => artifact.id === "artifact:clinical-supplement"); + const fair = scoreFairMetadata(clinical); + const evaluation = evaluateArtifact(clinical, envs, sampleProject.retentionPolicy); + + assert.ok(fair.score < 1); + assert.strictEqual(evaluation.status, "BLOCKED"); + assert.ok(evaluation.reasons.some((reason) => reason.type === "restricted_artifact_missing_license")); +} + +function testPacketSummaryAndRerunDecisions() { + const packet = buildGovernancePacket(sampleProject); + + assert.strictEqual(packet.summary.artifacts, 3); + assert.strictEqual(packet.summary.environments, 2); + assert.strictEqual(packet.summary.rerunTriggers, 2); + assert.strictEqual(packet.summary.runnableNow, 1); + assert.strictEqual(packet.summary.blockedReruns, 1); + + const weekly = packet.reruns.find((rerun) => rerun.triggerId === "trigger:weekly-figures"); + const modelRefresh = packet.reruns.find((rerun) => rerun.triggerId === "trigger:model-refresh"); + + assert.strictEqual(weekly.action, "RUN_NOW"); + assert.strictEqual(modelRefresh.action, "BLOCKED"); + assert.ok(modelRefresh.reasons.some((reason) => reason.type === "artifact_blocked")); + assert.ok(modelRefresh.reasons.some((reason) => reason.type === "environment_drift_blocked")); +} + +function testRetentionAndRequirementEvidence() { + const packet = buildGovernancePacket(sampleProject); + const rawAssay = packet.retentionAndExport.find((item) => item.artifactId === "artifact:raw-assay-csv"); + const clinical = packet.retentionAndExport.find((item) => item.artifactId === "artifact:clinical-supplement"); + + assert.strictEqual(rawAssay.exportEligible, true); + assert.strictEqual(rawAssay.doiReady, true); + assert.strictEqual(clinical.exportEligible, false); + assert.strictEqual(clinical.retentionDays, sampleProject.retentionPolicy.regulatedRetentionDays); + assert.ok(packet.requirementMap.length >= 6); +} + +const tests = [ + testStableHashing, + testArtifactTypeDetection, + testEnvironmentFingerprinting, + testEnvironmentDriftBlocksUnpinnedLatest, + testFairScoringAndRestrictedArtifactBlock, + testPacketSummaryAndRerunDecisions, + testRetentionAndRequirementEvidence, +]; + +tests.forEach((test) => test()); +console.log(`${tests.length} tests passed`);