From 578005bb5bc67729f3574acfb0ac8dca9be83979 Mon Sep 17 00:00:00 2001 From: Grant Fletcher Date: Sat, 9 May 2026 05:39:01 -0400 Subject: [PATCH] feat: add project repository version control --- README.md | 4 + project-repository-version-control/README.md | 60 +++++ .../docs/demo-script.md | 8 + .../docs/demo/dashboard.png | Bin 0 -> 93238 bytes ...roject-repository-version-control-demo.mp4 | Bin 0 -> 59730 bytes .../package.json | 14 ++ .../public/app.js | 33 +++ .../public/index.html | 41 +++ .../public/styles.css | 153 ++++++++++++ .../src/repository-core.js | 234 ++++++++++++++++++ .../src/server.js | 64 +++++ .../test/repository-core.test.js | 57 +++++ 12 files changed, 668 insertions(+) create mode 100644 project-repository-version-control/README.md create mode 100644 project-repository-version-control/docs/demo-script.md create mode 100644 project-repository-version-control/docs/demo/dashboard.png create mode 100644 project-repository-version-control/docs/demo/project-repository-version-control-demo.mp4 create mode 100644 project-repository-version-control/package.json create mode 100644 project-repository-version-control/public/app.js create mode 100644 project-repository-version-control/public/index.html create mode 100644 project-repository-version-control/public/styles.css create mode 100644 project-repository-version-control/src/repository-core.js create mode 100644 project-repository-version-control/src/server.js create mode 100644 project-repository-version-control/test/repository-core.test.js diff --git a/README.md b/README.md index d338cf6..5af20b8 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,6 @@ # deepevents.ai deepevents.ai main codebase + +## Modules + +- [`project-repository-version-control`](./project-repository-version-control) - runnable prototype for citable scientific project repositories, version control, reproducibility checks, and export metadata. diff --git a/project-repository-version-control/README.md b/project-repository-version-control/README.md new file mode 100644 index 0000000..79bc030 --- /dev/null +++ b/project-repository-version-control/README.md @@ -0,0 +1,60 @@ +# Project Repository & Version Control + +This module is a self-contained implementation for SCIBASE.AI issue #10. It models the scientific project repository as a citable, versioned, reproducible workspace with manuscript, data, code, notebook, result, protocol, and metadata components. + +## What It Covers + +- Repository structure for `manuscript/`, `data/`, `code/`, `notebooks/`, `results/`, `protocols/`, and `metadata.json`. +- Hash-based manifest generation for file integrity and reproducible export bundles. +- Commit history, branch timelines, semantic version DOI metadata, forks, attribution, and merge request summaries. +- Markdown/notebook-aware diff summaries for review workflows. +- Computation-aware reproducibility checks for pipeline presence, raw data hashes, expected outputs, metadata schema, and sandbox execution. +- Auto-generated APA, MLA, and BibTeX citations. +- JSON API and browser dashboard for reviewer smoke testing. + +## Run Locally + +```bash +cd project-repository-version-control +npm test +npm start +``` + +Then open `http://localhost:4129`. + +## API Surface + +- `GET /api/dashboard` +- `GET /api/repositories/repo-organoid-response` +- `GET /api/repositories/repo-organoid-response/manifest` +- `GET /api/repositories/repo-organoid-response/merge-request` +- `GET /api/repositories/repo-organoid-response/reproducibility` +- `GET /api/repositories/repo-organoid-response/citation?style=APA|MLA|BibTeX` +- `GET /api/repositories/repo-organoid-response/export` + +## Requirement Mapping + +- Repository components: represented in `demoRepository.files`. +- File and metadata versioning: implemented by `buildManifest`, hash generation, branches, and commits. +- Collaboration and forking: represented by `forks`, `mergeRequests`, branch timelines, discussion, and reviewer metadata. +- In-browser editors and diffs: implemented as Markdown/notebook-aware diff summaries and dashboard review surfaces. +- Computation-aware reproducibility: implemented by `runReproducibilityCheck`. +- Repository identifiers and citation: implemented by DOI generation and `buildCitation`. +- Programmatic access and export: implemented by the JSON API and `buildExportBundle`. + +## Verification + +```bash +npm test +node src/server.js +``` + +Optional smoke checks: + +```bash +curl -s http://localhost:4129/api/dashboard +curl -s http://localhost:4129/api/repositories/repo-organoid-response/manifest +curl -s "http://localhost:4129/api/repositories/repo-organoid-response/citation?style=BibTeX" +``` + +Demo artifacts are committed under `docs/demo/`, including `dashboard.png` and `project-repository-version-control-demo.mp4`. diff --git a/project-repository-version-control/docs/demo-script.md b/project-repository-version-control/docs/demo-script.md new file mode 100644 index 0000000..e47f6db --- /dev/null +++ b/project-repository-version-control/docs/demo-script.md @@ -0,0 +1,8 @@ +# Demo Script + +1. Run `npm test` to verify manifest, commit, diff, reproducibility, citation, and export logic. +2. Run `npm start` and open `http://localhost:4129`. +3. Confirm the dashboard shows repository DOI, file count, component list, and integrity hash. +4. Inspect the merge request card for changed files and Markdown/notebook-aware diff types. +5. Confirm the reproducibility checks all pass. +6. Review the generated citation and export bundle metadata. diff --git a/project-repository-version-control/docs/demo/dashboard.png b/project-repository-version-control/docs/demo/dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..d26f09bb7313863977bc779c526fc96a17def8fa GIT binary patch literal 93238 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 literal 0 HcmV?d00001 diff --git a/project-repository-version-control/package.json b/project-repository-version-control/package.json new file mode 100644 index 0000000..6e1f02b --- /dev/null +++ b/project-repository-version-control/package.json @@ -0,0 +1,14 @@ +{ + "name": "@scibase/project-repository-version-control", + "version": "0.1.0", + "private": true, + "description": "Self-contained scientific project repository and version-control prototype for SCIBASE.AI issue #10.", + "type": "module", + "scripts": { + "start": "node src/server.js", + "test": "node --test test/*.test.js" + }, + "engines": { + "node": ">=20" + } +} diff --git a/project-repository-version-control/public/app.js b/project-repository-version-control/public/app.js new file mode 100644 index 0000000..3ff1959 --- /dev/null +++ b/project-repository-version-control/public/app.js @@ -0,0 +1,33 @@ +const dashboard = await fetch("/api/dashboard").then((response) => response.json()); + +document.querySelector("#repoTitle").textContent = dashboard.manifest.title; +document.querySelector("#manifest").innerHTML = [ + stat("DOI", dashboard.manifest.doi), + stat("Files", dashboard.manifest.files.length), + stat("Components", Object.keys(dashboard.manifest.components).join(", ")), + stat("Integrity", dashboard.manifest.integrityHash.slice(0, 16)) +].join(""); + +document.querySelector("#mergeRequest").innerHTML = ` +
+ ${dashboard.mergeRequest.id} + ${dashboard.mergeRequest.status} +
+
    + ${dashboard.mergeRequest.diffs.map((diff) => `
  • ${diff.path} · ${diff.type} · ${diff.hunks.length} hunks
  • `).join("")} +
+`; + +document.querySelector("#checks").innerHTML = ` +
${dashboard.reproducibility.status}
+
    + ${dashboard.reproducibility.checks.map((check) => `
  • ${check.passed ? "PASS" : "FAIL"} · ${check.name}
  • `).join("")} +
+`; + +document.querySelector("#citation").textContent = dashboard.citation.apa; +document.querySelector("#export").textContent = `${dashboard.exportBundle.fileName} · ${dashboard.exportBundle.cliCommand}`; + +function stat(label, value) { + return `
${label}${String(value)}
`; +} diff --git a/project-repository-version-control/public/index.html b/project-repository-version-control/public/index.html new file mode 100644 index 0000000..00f5ab4 --- /dev/null +++ b/project-repository-version-control/public/index.html @@ -0,0 +1,41 @@ + + + + + + SCIBASE Project Repository + + + +
+
+

SCIBASE.AI / issue #10

+

Project Repository & Version Control

+
+
+
+

Repository

+

Loading...

+
+
+
+

Version Control

+

Commit history and merge requests

+
+
+
+

Reproducibility

+

Sandbox validation

+
+
+
+

Citation & Export

+

Citable version bundle

+ +

+
+
+
+ + + diff --git a/project-repository-version-control/public/styles.css b/project-repository-version-control/public/styles.css new file mode 100644 index 0000000..32b7594 --- /dev/null +++ b/project-repository-version-control/public/styles.css @@ -0,0 +1,153 @@ +:root { + --ink: #111615; + --muted: #64706d; + --line: #d7ded9; + --paper: #f3f6f1; + --panel: #ffffff; + --green: #17664c; + --blue: #285f8f; +} + +* { + box-sizing: border-box; +} + +body { + margin: 0; + background: var(--paper); + color: var(--ink); + font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; +} + +.shell { + max-width: 1280px; + margin: 0 auto; + padding: 32px; +} + +header { + display: flex; + align-items: end; + justify-content: space-between; + gap: 24px; + margin-bottom: 24px; +} + +header p, +.label { + color: var(--muted); + font-size: 12px; + font-weight: 900; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +h1, +h2, +p { + margin: 0; +} + +h1 { + max-width: 820px; + font-size: clamp(38px, 6vw, 76px); + line-height: 0.95; + letter-spacing: 0; +} + +h2 { + margin-top: 8px; + font-size: 24px; +} + +.grid { + display: grid; + grid-template-columns: 1.1fr 0.9fr; + gap: 16px; +} + +.panel { + min-height: 260px; + border: 1px solid var(--line); + background: var(--panel); + padding: 24px; +} + +.hero { + grid-row: span 2; +} + +.stats { + display: grid; + gap: 12px; + margin-top: 26px; +} + +.stats div, +.callout, +li, +code, +#export, +.status { + border-top: 1px solid var(--line); + padding-top: 12px; +} + +.stats span { + display: block; + color: var(--muted); + font-size: 12px; + font-weight: 900; + text-transform: uppercase; +} + +.stats strong { + display: block; + margin-top: 5px; + overflow-wrap: anywhere; +} + +.callout { + display: flex; + justify-content: space-between; + gap: 14px; + margin-top: 18px; +} + +.callout span, +.status { + color: var(--green); + font-weight: 900; + text-transform: uppercase; +} + +ul { + margin: 18px 0 0; + padding: 0; + list-style: none; +} + +li { + line-height: 1.35; +} + +code, +#export { + display: block; + margin-top: 18px; + color: var(--blue); + line-height: 1.5; + white-space: normal; +} + +@media (max-width: 820px) { + .shell { + padding: 18px; + } + + header, + .grid { + display: grid; + grid-template-columns: 1fr; + } +} diff --git a/project-repository-version-control/src/repository-core.js b/project-repository-version-control/src/repository-core.js new file mode 100644 index 0000000..f80ef68 --- /dev/null +++ b/project-repository-version-control/src/repository-core.js @@ -0,0 +1,234 @@ +import crypto from "node:crypto"; + +export const demoRepository = { + id: "repo-organoid-response", + title: "Organoid chemotherapy response atlas", + doiPrefix: "10.5555/scibase", + visibility: "public", + authors: [ + { name: "Alice Chen", orcid: "0000-0002-1825-0097", affiliation: "SCIBASE Oncology Lab" }, + { name: "Mateo Rivera", orcid: "0000-0003-2201-4120", affiliation: "Open Reproducibility Center" } + ], + files: { + "manuscript/main.md": "# Predicting chemotherapy response\n\nPatient-derived organoids predict response.", + "data/growth_curves.csv": "sample,dose,response\nP001,0.1,0.83\nP001,1.0,0.32\n", + "code/run_analysis.py": "print('fit random forest with fixed seed 42')\n", + "notebooks/qc.ipynb": "{\"cells\":[],\"metadata\":{\"kernel\":\"python3\"}}", + "results/figure-1.svg": "dose response", + "protocols/organoid-culture.md": "Seed organoids, dose compounds, capture viability.", + "metadata.json": JSON.stringify({ + license: "CC-BY-4.0", + tags: ["oncology", "organoids", "reproducibility"], + funding: ["Open Science Accelerator"], + schema: "https://schema.org/Dataset" + }) + }, + branches: { + main: ["commit-root", "commit-analysis-v1"], + "hypothesis-resistant-cohort": ["commit-root", "commit-analysis-v1", "commit-resistant-cohort"] + }, + commits: [ + { + id: "commit-root", + message: "Initial repository scaffold", + author: "Alice Chen", + createdAt: "2026-05-01T10:00:00.000Z", + parent: null, + changedFiles: ["manuscript/main.md", "metadata.json"] + }, + { + id: "commit-analysis-v1", + message: "Add analysis code, data, and first figure", + author: "Mateo Rivera", + createdAt: "2026-05-03T14:20:00.000Z", + parent: "commit-root", + changedFiles: ["data/growth_curves.csv", "code/run_analysis.py", "results/figure-1.svg"] + }, + { + id: "commit-resistant-cohort", + message: "Explore resistant cohort hypothesis", + author: "Alice Chen", + createdAt: "2026-05-05T09:15:00.000Z", + parent: "commit-analysis-v1", + changedFiles: ["manuscript/main.md", "notebooks/qc.ipynb"] + } + ], + forks: [ + { + id: "fork-validation-lab", + owner: "Validation Lab", + sourceCommit: "commit-analysis-v1", + attribution: "Derived from Organoid chemotherapy response atlas", + createdAt: "2026-05-06T12:00:00.000Z" + } + ], + mergeRequests: [ + { + id: "mr-resistant-cohort", + sourceBranch: "hypothesis-resistant-cohort", + targetBranch: "main", + status: "open", + reviewers: ["Mateo Rivera"], + discussion: ["Please add confidence intervals before merge."], + changedFiles: ["manuscript/main.md", "notebooks/qc.ipynb"] + } + ], + reproducibility: { + pipeline: "notebooks/qc.ipynb", + container: "Dockerfile", + environment: "environment.yml", + rawDataHash: "sha256:raw-growth-curve-fixture", + expectedOutputs: ["results/figure-1.svg"], + lastRun: { + status: "passed", + durationSeconds: 42, + sandbox: "node-local-demo", + completedAt: "2026-05-07T16:30:00.000Z" + } + } +}; + +export function buildManifest(repository = demoRepository) { + const fileEntries = Object.entries(repository.files).map(([path, contents]) => ({ + path, + component: path.split("/")[0], + bytes: Buffer.byteLength(contents), + hash: sha256(contents) + })); + return { + repositoryId: repository.id, + title: repository.title, + visibility: repository.visibility, + doi: `${repository.doiPrefix}.${repository.id}.v1`, + authors: repository.authors, + components: groupByComponent(fileEntries), + files: fileEntries, + integrityHash: sha256(fileEntries.map((file) => `${file.path}:${file.hash}`).join("|")) + }; +} + +export function createCommit(repository, { message, author, branch = "main", changes }) { + const parent = repository.branches[branch]?.at(-1) || null; + const changedFiles = Object.keys(changes); + const nextFiles = { ...repository.files, ...changes }; + const id = `commit-${sha256(`${parent}:${message}:${changedFiles.join(",")}`).slice(0, 12)}`; + return { + repository: { + ...repository, + files: nextFiles, + branches: { ...repository.branches, [branch]: [...(repository.branches[branch] || []), id] }, + commits: [ + ...repository.commits, + { id, message, author, createdAt: new Date("2026-05-09T00:00:00.000Z").toISOString(), parent, changedFiles } + ] + }, + commit: { id, parent, changedFiles } + }; +} + +export function diffFiles(before, after) { + const beforeLines = before.split("\n"); + const afterLines = after.split("\n"); + const max = Math.max(beforeLines.length, afterLines.length); + const hunks = []; + for (let index = 0; index < max; index += 1) { + if (beforeLines[index] !== afterLines[index]) { + if (beforeLines[index] !== undefined) hunks.push({ type: "remove", line: index + 1, text: beforeLines[index] }); + if (afterLines[index] !== undefined) hunks.push({ type: "add", line: index + 1, text: afterLines[index] }); + } + } + return hunks; +} + +export function buildMergeRequestSummary(repository = demoRepository, mrId = "mr-resistant-cohort") { + const mr = repository.mergeRequests.find((item) => item.id === mrId); + if (!mr) throw new Error(`Unknown merge request: ${mrId}`); + const timeline = repository.branches[mr.sourceBranch].map((commitId) => repository.commits.find((commit) => commit.id === commitId)); + return { + ...mr, + commitCount: timeline.length, + timeline, + diffs: mr.changedFiles.map((path) => ({ + path, + type: path.endsWith(".ipynb") ? "notebook-aware" : path.endsWith(".md") ? "markdown-aware" : "text", + hunks: diffFiles(repository.files[path] || "", mutateForDemo(path, repository.files[path] || "")) + })) + }; +} + +export function runReproducibilityCheck(repository = demoRepository) { + const manifest = buildManifest(repository); + const files = new Set(manifest.files.map((file) => file.path)); + const checks = [ + { name: "analysis pipeline", passed: files.has(repository.reproducibility.pipeline) }, + { name: "raw data hash", passed: repository.reproducibility.rawDataHash.startsWith("sha256:") }, + { name: "expected outputs", passed: repository.reproducibility.expectedOutputs.every((path) => files.has(path)) }, + { name: "metadata schema", passed: files.has("metadata.json") && repository.files["metadata.json"].includes("schema") }, + { name: "sandbox execution", passed: repository.reproducibility.lastRun.status === "passed" } + ]; + return { + status: checks.every((check) => check.passed) ? "passed" : "failed", + checks, + integrityHash: manifest.integrityHash, + lastRun: repository.reproducibility.lastRun + }; +} + +export function buildCitation(repository = demoRepository, style = "APA") { + const year = "2026"; + const authors = repository.authors.map((author) => author.name); + const doi = `${repository.doiPrefix}.${repository.id}.v1`; + if (style === "BibTeX") { + return `@dataset{${repository.id}, title={${repository.title}}, author={${authors.join(" and ")}}, year={${year}}, doi={${doi}}}`; + } + if (style === "MLA") return `${authors.join(", ")}. "${repository.title}." SCIBASE.AI, ${year}, doi:${doi}.`; + return `${authors.join(", ")} (${year}). ${repository.title}. SCIBASE.AI. https://doi.org/${doi}`; +} + +export function buildExportBundle(repository = demoRepository) { + const manifest = buildManifest(repository); + return { + fileName: `${repository.id}-v1-export.zip`, + manifest, + includedComponents: Object.keys(manifest.components), + apiRoutes: [ + `GET /api/repositories/${repository.id}`, + `GET /api/repositories/${repository.id}/manifest`, + `GET /api/repositories/${repository.id}/export` + ], + cliCommand: `scibase clone ${repository.id} --tag v1` + }; +} + +export function buildDashboard(repository = demoRepository) { + return { + manifest: buildManifest(repository), + mergeRequest: buildMergeRequestSummary(repository), + reproducibility: runReproducibilityCheck(repository), + citation: { + apa: buildCitation(repository, "APA"), + mla: buildCitation(repository, "MLA"), + bibtex: buildCitation(repository, "BibTeX") + }, + exportBundle: buildExportBundle(repository) + }; +} + +function groupByComponent(files) { + return files.reduce((groups, file) => { + groups[file.component] ||= { fileCount: 0, bytes: 0 }; + groups[file.component].fileCount += 1; + groups[file.component].bytes += file.bytes; + return groups; + }, {}); +} + +function sha256(value) { + return crypto.createHash("sha256").update(value).digest("hex"); +} + +function mutateForDemo(path, value) { + if (path.endsWith(".md")) return `${value}\n\nProspective validation will be added before publication.`; + if (path.endsWith(".ipynb")) return value.replace("\"cells\":[]", "\"cells\":[{\"cell_type\":\"markdown\",\"source\":[\"QC complete\"]}]"); + return value; +} diff --git a/project-repository-version-control/src/server.js b/project-repository-version-control/src/server.js new file mode 100644 index 0000000..c3c6f17 --- /dev/null +++ b/project-repository-version-control/src/server.js @@ -0,0 +1,64 @@ +import http from "node:http"; +import { readFile } from "node:fs/promises"; +import { extname, join, resolve, sep } from "node:path"; +import { fileURLToPath } from "node:url"; +import { + buildCitation, + buildDashboard, + buildExportBundle, + buildManifest, + buildMergeRequestSummary, + demoRepository, + runReproducibilityCheck +} from "./repository-core.js"; + +const root = join(fileURLToPath(new URL("..", import.meta.url)), "public"); +const port = Number(process.env.PORT || 4129); +const contentTypes = { ".html": "text/html; charset=utf-8", ".css": "text/css; charset=utf-8", ".js": "text/javascript; charset=utf-8" }; + +const server = http.createServer(async (request, response) => { + try { + const url = new URL(request.url, `http://${request.headers.host}`); + if (url.pathname === "/api/dashboard") return json(response, buildDashboard()); + if (url.pathname.endsWith("/manifest")) return json(response, buildManifest()); + if (url.pathname.endsWith("/merge-request")) return json(response, buildMergeRequestSummary()); + if (url.pathname.endsWith("/reproducibility")) return json(response, runReproducibilityCheck()); + if (url.pathname.endsWith("/citation")) return json(response, { citation: buildCitation(demoRepository, url.searchParams.get("style") || "APA") }); + if (url.pathname.endsWith("/export")) return json(response, buildExportBundle()); + if (url.pathname === `/api/repositories/${demoRepository.id}`) return json(response, demoRepository); + return await serveStatic(url.pathname === "/" ? "/index.html" : url.pathname, response); + } catch (error) { + response.writeHead(500, { "content-type": "application/json; charset=utf-8" }); + response.end(JSON.stringify({ error: error.message })); + } +}); + +server.listen(port, () => { + console.log(`Project repository demo running at http://localhost:${port}`); +}); + +function json(response, body) { + response.writeHead(200, { "content-type": "application/json; charset=utf-8" }); + response.end(JSON.stringify(body, null, 2)); +} + +async function serveStatic(pathname, response) { + const filePath = resolve(root, pathname.replace(/^\/+/, "")); + if (!filePath.startsWith(`${root}${sep}`)) { + response.writeHead(403, { "content-type": "text/plain; charset=utf-8" }); + response.end("Forbidden"); + return; + } + try { + const body = await readFile(filePath); + response.writeHead(200, { "content-type": contentTypes[extname(filePath)] || "application/octet-stream" }); + response.end(body); + } catch (error) { + if (error.code === "ENOENT") { + response.writeHead(404, { "content-type": "text/plain; charset=utf-8" }); + response.end("Not found"); + return; + } + throw error; + } +} diff --git a/project-repository-version-control/test/repository-core.test.js b/project-repository-version-control/test/repository-core.test.js new file mode 100644 index 0000000..9791bb6 --- /dev/null +++ b/project-repository-version-control/test/repository-core.test.js @@ -0,0 +1,57 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { + buildCitation, + buildDashboard, + buildExportBundle, + buildManifest, + buildMergeRequestSummary, + createCommit, + demoRepository, + diffFiles, + runReproducibilityCheck +} from "../src/repository-core.js"; + +test("builds a structured scientific repository manifest", () => { + const manifest = buildManifest(demoRepository); + + assert.equal(manifest.repositoryId, demoRepository.id); + assert.ok(manifest.components.manuscript.fileCount >= 1); + assert.ok(manifest.components.data.fileCount >= 1); + assert.ok(manifest.files.every((file) => file.hash.length === 64)); + assert.match(manifest.doi, /10\.5555\/scibase/); +}); + +test("creates immutable commits and appends them to a branch", () => { + const { repository, commit } = createCommit(demoRepository, { + message: "Add validation notes", + author: "Alice Chen", + changes: { "manuscript/validation.md": "Validation cohort details." } + }); + + assert.ok(commit.id.startsWith("commit-")); + assert.equal(repository.branches.main.at(-1), commit.id); + assert.equal(repository.files["manuscript/validation.md"], "Validation cohort details."); + assert.deepEqual(commit.changedFiles, ["manuscript/validation.md"]); +}); + +test("produces text diffs and merge request summaries", () => { + const diff = diffFiles("a\nb\n", "a\nc\n"); + const mr = buildMergeRequestSummary(demoRepository); + + assert.deepEqual(diff.map((hunk) => hunk.type), ["remove", "add"]); + assert.equal(mr.status, "open"); + assert.ok(mr.diffs.some((item) => item.type === "notebook-aware")); +}); + +test("runs reproducibility checks and generates citations and export metadata", () => { + const reproducibility = runReproducibilityCheck(demoRepository); + const citation = buildCitation(demoRepository, "BibTeX"); + const bundle = buildExportBundle(demoRepository); + const dashboard = buildDashboard(demoRepository); + + assert.equal(reproducibility.status, "passed"); + assert.match(citation, /^@dataset/); + assert.ok(bundle.includedComponents.includes("code")); + assert.equal(dashboard.exportBundle.fileName, bundle.fileName); +});