From 4b3af934d62d3ecfd30f4e2a9ffda162d6e89ea5 Mon Sep 17 00:00:00 2001 From: Jorel97 Date: Mon, 1 Jun 2026 10:26:30 -0600 Subject: [PATCH] Add scientific terminology unit guard --- scientific-terminology-unit-guard/README.md | 17 ++ scientific-terminology-unit-guard/demo.js | 59 +++++ .../demo_video.py | 46 ++++ scientific-terminology-unit-guard/index.js | 212 ++++++++++++++++++ .../package.json | 13 ++ .../reports/clean-document.json | 20 ++ .../reports/clean-document.md | 18 ++ .../reports/clean-document.svg | 12 + .../reports/demo.gif | Bin 0 -> 52060 bytes .../reports/demo.mp4 | Bin 0 -> 40023 bytes .../reports/risky-document.json | 101 +++++++++ .../reports/risky-document.md | 27 +++ .../reports/risky-document.svg | 12 + .../requirements-map.md | 13 ++ .../sample-data.js | 99 ++++++++ scientific-terminology-unit-guard/test.js | 45 ++++ 16 files changed, 694 insertions(+) create mode 100644 scientific-terminology-unit-guard/README.md create mode 100644 scientific-terminology-unit-guard/demo.js create mode 100644 scientific-terminology-unit-guard/demo_video.py create mode 100644 scientific-terminology-unit-guard/index.js create mode 100644 scientific-terminology-unit-guard/package.json create mode 100644 scientific-terminology-unit-guard/reports/clean-document.json create mode 100644 scientific-terminology-unit-guard/reports/clean-document.md create mode 100644 scientific-terminology-unit-guard/reports/clean-document.svg create mode 100644 scientific-terminology-unit-guard/reports/demo.gif create mode 100644 scientific-terminology-unit-guard/reports/demo.mp4 create mode 100644 scientific-terminology-unit-guard/reports/risky-document.json create mode 100644 scientific-terminology-unit-guard/reports/risky-document.md create mode 100644 scientific-terminology-unit-guard/reports/risky-document.svg create mode 100644 scientific-terminology-unit-guard/requirements-map.md create mode 100644 scientific-terminology-unit-guard/sample-data.js create mode 100644 scientific-terminology-unit-guard/test.js diff --git a/scientific-terminology-unit-guard/README.md b/scientific-terminology-unit-guard/README.md new file mode 100644 index 00000000..f2e86785 --- /dev/null +++ b/scientific-terminology-unit-guard/README.md @@ -0,0 +1,17 @@ +# Scientific Terminology And Unit Guard + +Self-contained SCIBASE real-time collaborative editor slice for issue #12. The guard checks whether collaborator edits keep scientific terminology, acronyms, units, and equation variables consistent before WYSIWYG, Markdown, LaTeX, or publication exports proceed. + +## Why this slice is distinct + +Existing #12 submissions cover broad editor foundations, operation replay, offline conflict resolution, notebook/kernel collaboration, reference formatting, round-trip export, accessibility parity, suggestion provenance, chat mentions, notification visibility, task dependencies, section locks, and figure/table review lanes. This module focuses only on shared scientific language consistency while multiple collaborators edit the same manuscript. + +## Run + +```bash +npm test +npm run demo +npm run demo:video +``` + +Demo artifacts are written to `reports/`, including JSON, Markdown, SVG, GIF, and MP4 files. diff --git a/scientific-terminology-unit-guard/demo.js b/scientific-terminology-unit-guard/demo.js new file mode 100644 index 00000000..2b8982fa --- /dev/null +++ b/scientific-terminology-unit-guard/demo.js @@ -0,0 +1,59 @@ +const fs = require("fs"); +const path = require("path"); + +const { assessTerminologyAndUnits } = require("./index"); +const { cleanDocument, riskyDocument } = require("./sample-data"); + +const reportsDir = path.join(__dirname, "reports"); +fs.mkdirSync(reportsDir, { recursive: true }); + +function markdownReport(name, report) { + const findings = report.findings.length + ? report.findings + .map((item) => `- ${item.severity.toUpperCase()} ${item.code}: ${item.message}`) + .join("\n") + : "- No terminology or unit findings."; + return `# ${report.title} + +Scenario: ${name} + +Decision: ${report.decision.toUpperCase()} + +Reviewed ${report.summary.blocksReviewed} document blocks and ${report.summary.suggestionsReviewed} collaborator suggestions. + +## Findings + +${findings} + +## Release Criteria + +${report.releaseCriteria.map((item) => `- ${item}`).join("\n")} +`; +} + +function svgReport(report) { + const color = report.decision === "hold" ? "#dc2626" : report.decision === "revise" ? "#d97706" : "#16a34a"; + return ` + + Scientific Terminology Unit Guard + ${report.documentId} + + ${report.decision.toUpperCase()} + Findings: ${report.summary.findings} + High: ${report.summary.high} + Medium: ${report.summary.medium} + Low: ${report.summary.low} + Synthetic collaborative manuscript data only. +`; +} + +for (const [name, document] of [ + ["clean-document", cleanDocument], + ["risky-document", riskyDocument], +]) { + const report = assessTerminologyAndUnits(document); + fs.writeFileSync(path.join(reportsDir, `${name}.json`), JSON.stringify(report, null, 2)); + fs.writeFileSync(path.join(reportsDir, `${name}.md`), markdownReport(name, report)); + fs.writeFileSync(path.join(reportsDir, `${name}.svg`), svgReport(report)); + console.log(`${name}: ${report.decision} (${report.summary.findings} findings)`); +} diff --git a/scientific-terminology-unit-guard/demo_video.py b/scientific-terminology-unit-guard/demo_video.py new file mode 100644 index 00000000..109ffcca --- /dev/null +++ b/scientific-terminology-unit-guard/demo_video.py @@ -0,0 +1,46 @@ +from pathlib import Path + +import imageio.v3 as iio +import numpy as np +from PIL import Image, ImageDraw, ImageFont + + +ROOT = Path(__file__).resolve().parent +REPORTS = ROOT / "reports" +REPORTS.mkdir(exist_ok=True) + + +def font(size): + for name in ("arial.ttf", "segoeui.ttf"): + try: + return ImageFont.truetype(name, size) + except OSError: + pass + return ImageFont.load_default() + + +slides = [ + ("Terminology + Unit Guard", "Real-time collaborative editor #12"), + ("Checks", "glossary drift + acronym first-use gaps"), + ("Checks", "unit conflicts + equation variable mismatch"), + ("Decision", "hold publication export until shared language is consistent"), +] + +frames = [] +for index, (title, subtitle) in enumerate(slides, start=1): + image = Image.new("RGB", (960, 544), "#172033") + draw = ImageDraw.Draw(image) + draw.rectangle((46, 54, 914, 490), outline="#a3e635", width=3) + draw.text((82, 124), title, fill="#f8fafc", font=font(42)) + draw.text((82, 206), subtitle, fill="#ecfccb", font=font(26)) + draw.rectangle((82, 326, 742, 382), fill="#365314") + draw.text((104, 342), "collaborator suggestions cannot introduce scientific drift", fill="#f7fee7", font=font(22)) + draw.text((82, 438), f"Slide {index}/4 - synthetic reviewer artifact", fill="#cbd5e1", font=font(20)) + frames.extend([image] * 14) + +gif_path = REPORTS / "demo.gif" +mp4_path = REPORTS / "demo.mp4" +frames[0].save(gif_path, save_all=True, append_images=frames[1:], duration=120, loop=0) +iio.imwrite(mp4_path, [np.asarray(frame) for frame in frames], fps=8, codec="libx264") +print(f"wrote {gif_path}") +print(f"wrote {mp4_path}") diff --git a/scientific-terminology-unit-guard/index.js b/scientific-terminology-unit-guard/index.js new file mode 100644 index 00000000..3e111647 --- /dev/null +++ b/scientific-terminology-unit-guard/index.js @@ -0,0 +1,212 @@ +const HIGH = "high"; +const MEDIUM = "medium"; +const LOW = "low"; + +function requireString(value, field) { + if (typeof value !== "string" || value.trim() === "") { + throw new TypeError(`${field} must be a non-empty string`); + } + return value.trim(); +} + +function list(value, field) { + if (!Array.isArray(value)) { + throw new TypeError(`${field} must be an array`); + } + return value; +} + +function normalizeToken(value) { + return String(value || "").trim(); +} + +function normalizeDocument(raw) { + return { + documentId: requireString(raw.documentId, "documentId"), + title: requireString(raw.title, "title"), + glossary: raw.glossary || {}, + units: raw.units || {}, + variables: raw.variables || {}, + blocks: list(raw.blocks || [], "blocks").map((block) => ({ + id: requireString(block.id, "block.id"), + author: requireString(block.author, "block.author"), + text: String(block.text || ""), + acronyms: list(block.acronyms || [], "block.acronyms"), + units: list(block.units || [], "block.units"), + variables: list(block.variables || [], "block.variables"), + })), + suggestions: list(raw.suggestions || [], "suggestions").map((suggestion) => ({ + id: requireString(suggestion.id, "suggestion.id"), + author: requireString(suggestion.author, "suggestion.author"), + targetBlock: requireString(suggestion.targetBlock, "suggestion.targetBlock"), + text: String(suggestion.text || ""), + acronyms: list(suggestion.acronyms || [], "suggestion.acronyms"), + units: list(suggestion.units || [], "suggestion.units"), + variables: list(suggestion.variables || [], "suggestion.variables"), + })), + }; +} + +function finding(code, severity, source, message, remediation) { + return { + code, + severity, + sourceId: source.id, + author: source.author, + message, + remediation, + }; +} + +function analyzeSource(doc, source, findings) { + for (const item of source.acronyms) { + const short = normalizeToken(item.short); + const expected = normalizeToken(doc.glossary[short]); + const observed = normalizeToken(item.long); + if (!short) { + continue; + } + if (!expected) { + findings.push( + finding( + "UNKNOWN_ACRONYM", + MEDIUM, + source, + `${short} is used but is absent from the shared glossary.`, + "Add the acronym to the shared glossary or replace it before publication export." + ) + ); + } else if (!observed) { + findings.push( + finding( + "MISSING_FIRST_USE_EXPANSION", + MEDIUM, + source, + `${short} appears without its first-use expansion.`, + `Expand ${short} as "${expected}" at first use in the collaborative document.` + ) + ); + } else if (observed.toLowerCase() !== expected.toLowerCase()) { + findings.push( + finding( + "ACRONYM_DRIFT", + HIGH, + source, + `${short} is defined as "${observed}" but glossary expects "${expected}".`, + "Resolve the conflicting expansion in the suggestion or block before accepting changes." + ) + ); + } + } + + for (const item of source.units) { + const quantity = normalizeToken(item.quantity); + const unit = normalizeToken(item.unit); + const expected = normalizeToken(doc.units[quantity]); + if (!expected) { + findings.push( + finding( + "UNKNOWN_QUANTITY_UNIT", + LOW, + source, + `${quantity} has unit "${unit}" but no canonical unit is registered.`, + "Register a canonical unit or mark the quantity as intentionally free-form." + ) + ); + } else if (unit !== expected) { + findings.push( + finding( + "UNIT_CONFLICT", + HIGH, + source, + `${quantity} uses "${unit}" but canonical unit is "${expected}".`, + "Convert or annotate the value before export so collaborators compare like with like." + ) + ); + } + } + + for (const item of source.variables) { + const symbol = normalizeToken(item.symbol); + const meaning = normalizeToken(item.meaning); + const expected = normalizeToken(doc.variables[symbol]); + if (!expected) { + findings.push( + finding( + "UNREGISTERED_VARIABLE", + LOW, + source, + `${symbol} is used in an equation context without a shared definition.`, + "Add the variable to the equation legend before accepting the edit." + ) + ); + } else if (meaning.toLowerCase() !== expected.toLowerCase()) { + findings.push( + finding( + "VARIABLE_MEANING_DRIFT", + HIGH, + source, + `${symbol} means "${meaning}" here but shared definition is "${expected}".`, + "Resolve the variable definition mismatch before rendering equations or exports." + ) + ); + } + } +} + +function assessTerminologyAndUnits(rawDocument) { + const doc = normalizeDocument(rawDocument); + const findings = []; + + for (const block of doc.blocks) { + analyzeSource(doc, block, findings); + } + for (const suggestion of doc.suggestions) { + analyzeSource(doc, suggestion, findings); + } + + const sourceIds = new Set([...doc.blocks, ...doc.suggestions].map((item) => item.id)); + for (const suggestion of doc.suggestions) { + if (!sourceIds.has(suggestion.targetBlock)) { + findings.push( + finding( + "ORPHAN_SUGGESTION_TARGET", + MEDIUM, + suggestion, + `Suggestion targets missing block ${suggestion.targetBlock}.`, + "Retarget or close the suggestion before merging collaborative edits." + ) + ); + } + } + + const high = findings.filter((item) => item.severity === HIGH).length; + const medium = findings.filter((item) => item.severity === MEDIUM).length; + const decision = high > 0 ? "hold" : medium > 0 ? "revise" : "release"; + + return { + documentId: doc.documentId, + title: doc.title, + decision, + summary: { + blocksReviewed: doc.blocks.length, + suggestionsReviewed: doc.suggestions.length, + findings: findings.length, + high, + medium, + low: findings.filter((item) => item.severity === LOW).length, + }, + findings, + releaseCriteria: [ + "Shared glossary acronyms keep one expansion across all blocks and suggestions.", + "Scientific quantities use the canonical unit selected for the collaborative document.", + "Equation variables keep one meaning before WYSIWYG, Markdown, LaTeX, or export render.", + "Suggestions cannot introduce terminology drift while being accepted into the manuscript.", + ], + }; +} + +module.exports = { + assessTerminologyAndUnits, + normalizeDocument, +}; diff --git a/scientific-terminology-unit-guard/package.json b/scientific-terminology-unit-guard/package.json new file mode 100644 index 00000000..eaaf4759 --- /dev/null +++ b/scientific-terminology-unit-guard/package.json @@ -0,0 +1,13 @@ +{ + "name": "scientific-terminology-unit-guard", + "version": "1.0.0", + "description": "Collaborative terminology and unit consistency guard for SCIBASE editor issue #12", + "main": "index.js", + "type": "commonjs", + "scripts": { + "test": "node test.js", + "demo": "node demo.js", + "demo:video": "python demo_video.py" + }, + "license": "MIT" +} diff --git a/scientific-terminology-unit-guard/reports/clean-document.json b/scientific-terminology-unit-guard/reports/clean-document.json new file mode 100644 index 00000000..346e8425 --- /dev/null +++ b/scientific-terminology-unit-guard/reports/clean-document.json @@ -0,0 +1,20 @@ +{ + "documentId": "editor-term-001", + "title": "Collaborative catalyst manuscript", + "decision": "release", + "summary": { + "blocksReviewed": 2, + "suggestionsReviewed": 1, + "findings": 0, + "high": 0, + "medium": 0, + "low": 0 + }, + "findings": [], + "releaseCriteria": [ + "Shared glossary acronyms keep one expansion across all blocks and suggestions.", + "Scientific quantities use the canonical unit selected for the collaborative document.", + "Equation variables keep one meaning before WYSIWYG, Markdown, LaTeX, or export render.", + "Suggestions cannot introduce terminology drift while being accepted into the manuscript." + ] +} \ No newline at end of file diff --git a/scientific-terminology-unit-guard/reports/clean-document.md b/scientific-terminology-unit-guard/reports/clean-document.md new file mode 100644 index 00000000..3dc5c2b8 --- /dev/null +++ b/scientific-terminology-unit-guard/reports/clean-document.md @@ -0,0 +1,18 @@ +# Collaborative catalyst manuscript + +Scenario: clean-document + +Decision: RELEASE + +Reviewed 2 document blocks and 1 collaborator suggestions. + +## Findings + +- No terminology or unit findings. + +## Release Criteria + +- Shared glossary acronyms keep one expansion across all blocks and suggestions. +- Scientific quantities use the canonical unit selected for the collaborative document. +- Equation variables keep one meaning before WYSIWYG, Markdown, LaTeX, or export render. +- Suggestions cannot introduce terminology drift while being accepted into the manuscript. diff --git a/scientific-terminology-unit-guard/reports/clean-document.svg b/scientific-terminology-unit-guard/reports/clean-document.svg new file mode 100644 index 00000000..cd96cc57 --- /dev/null +++ b/scientific-terminology-unit-guard/reports/clean-document.svg @@ -0,0 +1,12 @@ + + + Scientific Terminology Unit Guard + editor-term-001 + + RELEASE + Findings: 0 + High: 0 + Medium: 0 + Low: 0 + Synthetic collaborative manuscript data only. + \ No newline at end of file diff --git a/scientific-terminology-unit-guard/reports/demo.gif b/scientific-terminology-unit-guard/reports/demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..1d224ff8d8b25daaba2710d4f623c8e07180da60 GIT binary patch literal 52060 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 literal 0 HcmV?d00001 diff --git a/scientific-terminology-unit-guard/reports/demo.mp4 b/scientific-terminology-unit-guard/reports/demo.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..5b736d039dfbcea4fbeb8f09aba5f1dd9fc7d2e1 GIT binary patch literal 40023 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 V!J#L{IHw@s!FB*1Y+2lM{VxuI literal 0 HcmV?d00001 diff --git a/scientific-terminology-unit-guard/reports/risky-document.json b/scientific-terminology-unit-guard/reports/risky-document.json new file mode 100644 index 00000000..33797da1 --- /dev/null +++ b/scientific-terminology-unit-guard/reports/risky-document.json @@ -0,0 +1,101 @@ +{ + "documentId": "editor-term-002", + "title": "Collaborative catalyst manuscript", + "decision": "hold", + "summary": { + "blocksReviewed": 2, + "suggestionsReviewed": 1, + "findings": 10, + "high": 7, + "medium": 2, + "low": 1 + }, + "findings": [ + { + "code": "MISSING_FIRST_USE_EXPANSION", + "severity": "medium", + "sourceId": "abstract", + "author": "alice", + "message": "HER appears without its first-use expansion.", + "remediation": "Expand HER as \"hydrogen evolution reaction\" at first use in the collaborative document." + }, + { + "code": "MISSING_FIRST_USE_EXPANSION", + "severity": "medium", + "sourceId": "abstract", + "author": "alice", + "message": "FE appears without its first-use expansion.", + "remediation": "Expand FE as \"faradaic efficiency\" at first use in the collaborative document." + }, + { + "code": "UNIT_CONFLICT", + "severity": "high", + "sourceId": "abstract", + "author": "alice", + "message": "temperature uses \"C\" but canonical unit is \"K\".", + "remediation": "Convert or annotate the value before export so collaborators compare like with like." + }, + { + "code": "VARIABLE_MEANING_DRIFT", + "severity": "high", + "sourceId": "abstract", + "author": "alice", + "message": "eta means \"efficiency\" here but shared definition is \"overpotential\".", + "remediation": "Resolve the variable definition mismatch before rendering equations or exports." + }, + { + "code": "ACRONYM_DRIFT", + "severity": "high", + "sourceId": "methods", + "author": "bob", + "message": "RHE is defined as \"rapid heat exchange\" but glossary expects \"reversible hydrogen electrode\".", + "remediation": "Resolve the conflicting expansion in the suggestion or block before accepting changes." + }, + { + "code": "UNIT_CONFLICT", + "severity": "high", + "sourceId": "methods", + "author": "bob", + "message": "currentDensity uses \"A m^-2\" but canonical unit is \"mA cm^-2\".", + "remediation": "Convert or annotate the value before export so collaborators compare like with like." + }, + { + "code": "UNIT_CONFLICT", + "severity": "high", + "sourceId": "methods", + "author": "bob", + "message": "potential uses \"V vs Ag/AgCl\" but canonical unit is \"V vs RHE\".", + "remediation": "Convert or annotate the value before export so collaborators compare like with like." + }, + { + "code": "VARIABLE_MEANING_DRIFT", + "severity": "high", + "sourceId": "methods", + "author": "bob", + "message": "j means \"flux\" here but shared definition is \"current density\".", + "remediation": "Resolve the variable definition mismatch before rendering equations or exports." + }, + { + "code": "UNREGISTERED_VARIABLE", + "severity": "low", + "sourceId": "methods", + "author": "bob", + "message": "E is used in an equation context without a shared definition.", + "remediation": "Add the variable to the equation legend before accepting the edit." + }, + { + "code": "ACRONYM_DRIFT", + "severity": "high", + "sourceId": "sug-risk", + "author": "dana", + "message": "RHE is defined as \"rapid heat exchange\" but glossary expects \"reversible hydrogen electrode\".", + "remediation": "Resolve the conflicting expansion in the suggestion or block before accepting changes." + } + ], + "releaseCriteria": [ + "Shared glossary acronyms keep one expansion across all blocks and suggestions.", + "Scientific quantities use the canonical unit selected for the collaborative document.", + "Equation variables keep one meaning before WYSIWYG, Markdown, LaTeX, or export render.", + "Suggestions cannot introduce terminology drift while being accepted into the manuscript." + ] +} \ No newline at end of file diff --git a/scientific-terminology-unit-guard/reports/risky-document.md b/scientific-terminology-unit-guard/reports/risky-document.md new file mode 100644 index 00000000..94277715 --- /dev/null +++ b/scientific-terminology-unit-guard/reports/risky-document.md @@ -0,0 +1,27 @@ +# Collaborative catalyst manuscript + +Scenario: risky-document + +Decision: HOLD + +Reviewed 2 document blocks and 1 collaborator suggestions. + +## Findings + +- MEDIUM MISSING_FIRST_USE_EXPANSION: HER appears without its first-use expansion. +- MEDIUM MISSING_FIRST_USE_EXPANSION: FE appears without its first-use expansion. +- HIGH UNIT_CONFLICT: temperature uses "C" but canonical unit is "K". +- HIGH VARIABLE_MEANING_DRIFT: eta means "efficiency" here but shared definition is "overpotential". +- HIGH ACRONYM_DRIFT: RHE is defined as "rapid heat exchange" but glossary expects "reversible hydrogen electrode". +- HIGH UNIT_CONFLICT: currentDensity uses "A m^-2" but canonical unit is "mA cm^-2". +- HIGH UNIT_CONFLICT: potential uses "V vs Ag/AgCl" but canonical unit is "V vs RHE". +- HIGH VARIABLE_MEANING_DRIFT: j means "flux" here but shared definition is "current density". +- LOW UNREGISTERED_VARIABLE: E is used in an equation context without a shared definition. +- HIGH ACRONYM_DRIFT: RHE is defined as "rapid heat exchange" but glossary expects "reversible hydrogen electrode". + +## Release Criteria + +- Shared glossary acronyms keep one expansion across all blocks and suggestions. +- Scientific quantities use the canonical unit selected for the collaborative document. +- Equation variables keep one meaning before WYSIWYG, Markdown, LaTeX, or export render. +- Suggestions cannot introduce terminology drift while being accepted into the manuscript. diff --git a/scientific-terminology-unit-guard/reports/risky-document.svg b/scientific-terminology-unit-guard/reports/risky-document.svg new file mode 100644 index 00000000..7cc08d9e --- /dev/null +++ b/scientific-terminology-unit-guard/reports/risky-document.svg @@ -0,0 +1,12 @@ + + + Scientific Terminology Unit Guard + editor-term-002 + + HOLD + Findings: 10 + High: 7 + Medium: 2 + Low: 1 + Synthetic collaborative manuscript data only. + \ No newline at end of file diff --git a/scientific-terminology-unit-guard/requirements-map.md b/scientific-terminology-unit-guard/requirements-map.md new file mode 100644 index 00000000..a7e88e79 --- /dev/null +++ b/scientific-terminology-unit-guard/requirements-map.md @@ -0,0 +1,13 @@ +# Requirements Map + +Issue #12 asks for a real-time collaborative research editor with rich scientific formatting, suggestions/change tracking, version history, publication workflows, and collaborative review. + +| Issue capability | This implementation | +| --- | --- | +| Rich scientific formatting | Validates acronyms, scientific terms, units, and equation variable definitions before Markdown/LaTeX/export rendering. | +| Suggestions and change tracking | Checks collaborator suggestions for glossary drift before they are accepted into the manuscript. | +| Multi-user collaboration | Tracks source block and author on each finding so collaborators can resolve the exact edit. | +| Publication-ready fidelity | Holds export when unit or variable meaning drift would make figures, tables, equations, or text inconsistent. | +| Version/review workflow | Emits deterministic `release`, `revise`, or `hold` decisions with remediation steps for reviewer packets. | + +The module uses synthetic manuscript data only and does not contact credentials, private documents, external APIs, or live editor services. diff --git a/scientific-terminology-unit-guard/sample-data.js b/scientific-terminology-unit-guard/sample-data.js new file mode 100644 index 00000000..2d29edec --- /dev/null +++ b/scientific-terminology-unit-guard/sample-data.js @@ -0,0 +1,99 @@ +const cleanDocument = { + documentId: "editor-term-001", + title: "Collaborative catalyst manuscript", + glossary: { + HER: "hydrogen evolution reaction", + RHE: "reversible hydrogen electrode", + FE: "faradaic efficiency", + }, + units: { + currentDensity: "mA cm^-2", + potential: "V vs RHE", + temperature: "K", + }, + variables: { + eta: "overpotential", + j: "current density", + T: "temperature", + }, + blocks: [ + { + id: "intro", + author: "alice", + text: "The hydrogen evolution reaction (HER) was measured versus the reversible hydrogen electrode (RHE).", + acronyms: [{ short: "HER", long: "hydrogen evolution reaction" }, { short: "RHE", long: "reversible hydrogen electrode" }], + units: [{ quantity: "potential", unit: "V vs RHE" }], + variables: [], + }, + { + id: "results", + author: "bob", + text: "The HER reached 42 mA cm^-2 and 91% faradaic efficiency (FE) at 298 K.", + acronyms: [{ short: "FE", long: "faradaic efficiency" }], + units: [ + { quantity: "currentDensity", unit: "mA cm^-2" }, + { quantity: "temperature", unit: "K" }, + ], + variables: [ + { symbol: "eta", meaning: "overpotential" }, + { symbol: "j", meaning: "current density" }, + ], + }, + ], + suggestions: [ + { + id: "sug-1", + author: "carol", + targetBlock: "results", + text: "Clarify that eta is the overpotential used for Tafel analysis.", + acronyms: [], + units: [], + variables: [{ symbol: "eta", meaning: "overpotential" }], + }, + ], +}; + +const riskyDocument = { + ...cleanDocument, + documentId: "editor-term-002", + blocks: [ + { + id: "abstract", + author: "alice", + text: "HER improves at 25 C with strong FE, but no first-use expansions are provided.", + acronyms: [{ short: "HER", long: "" }, { short: "FE", long: "" }], + units: [{ quantity: "temperature", unit: "C" }], + variables: [{ symbol: "eta", meaning: "efficiency" }], + }, + { + id: "methods", + author: "bob", + text: "Current density j was normalized as A/m2, and E was reported versus Ag/AgCl.", + acronyms: [{ short: "RHE", long: "rapid heat exchange" }], + units: [ + { quantity: "currentDensity", unit: "A m^-2" }, + { quantity: "potential", unit: "V vs Ag/AgCl" }, + ], + variables: [ + { symbol: "j", meaning: "flux" }, + { symbol: "E", meaning: "electrode potential" }, + ], + }, + ], + suggestions: [ + { + id: "sug-risk", + author: "dana", + targetBlock: "methods", + text: "Rename RHE to rapid heat exchange throughout.", + acronyms: [{ short: "RHE", long: "rapid heat exchange" }], + units: [], + variables: [], + }, + ], +}; + +module.exports = { + cleanDocument, + riskyDocument, +}; diff --git a/scientific-terminology-unit-guard/test.js b/scientific-terminology-unit-guard/test.js new file mode 100644 index 00000000..60accca2 --- /dev/null +++ b/scientific-terminology-unit-guard/test.js @@ -0,0 +1,45 @@ +const assert = require("assert"); + +const { assessTerminologyAndUnits, normalizeDocument } = require("./index"); +const { cleanDocument, riskyDocument } = require("./sample-data"); + +const clean = assessTerminologyAndUnits(cleanDocument); +assert.strictEqual(clean.decision, "release"); +assert.strictEqual(clean.summary.findings, 0); + +const risky = assessTerminologyAndUnits(riskyDocument); +assert.strictEqual(risky.decision, "hold"); +for (const code of [ + "MISSING_FIRST_USE_EXPANSION", + "ACRONYM_DRIFT", + "UNIT_CONFLICT", + "VARIABLE_MEANING_DRIFT", + "UNREGISTERED_VARIABLE", +]) { + assert(risky.findings.some((finding) => finding.code === code), `missing ${code}`); +} + +const unknown = assessTerminologyAndUnits({ + ...cleanDocument, + blocks: [ + { + id: "new-block", + author: "eve", + text: "New metric ABC is introduced.", + acronyms: [{ short: "ABC", long: "adaptive binding coefficient" }], + units: [{ quantity: "bindingRate", unit: "s^-1" }], + variables: [], + }, + ], + suggestions: [], +}); +assert.strictEqual(unknown.decision, "revise"); +assert(unknown.findings.some((finding) => finding.code === "UNKNOWN_ACRONYM")); +assert(unknown.findings.some((finding) => finding.code === "UNKNOWN_QUANTITY_UNIT")); + +assert.throws( + () => normalizeDocument({ ...cleanDocument, documentId: "" }), + /documentId must be a non-empty string/ +); + +console.log("scientific terminology and unit guard tests passed");