From acef651aaab2aeca6ea34fe10c3ca986557a41e3 Mon Sep 17 00:00:00 2001 From: IOROHKI Date: Wed, 20 May 2026 03:08:40 -0700 Subject: [PATCH] Add figure claim consistency assistant --- figure-claim-consistency-assistant/README.md | 29 ++ figure-claim-consistency-assistant/demo.js | 25 ++ figure-claim-consistency-assistant/index.js | 396 ++++++++++++++++++ .../reports/claim-consistency-audit.json | 234 +++++++++++ .../reports/claim-consistency.svg | 1 + .../reports/demo.mp4 | Bin 0 -> 59052 bytes .../reports/review-packet.md | 74 ++++ .../requirements-map.md | 16 + .../sample-data.js | 181 ++++++++ figure-claim-consistency-assistant/test.js | 41 ++ 10 files changed, 997 insertions(+) create mode 100644 figure-claim-consistency-assistant/README.md create mode 100644 figure-claim-consistency-assistant/demo.js create mode 100644 figure-claim-consistency-assistant/index.js create mode 100644 figure-claim-consistency-assistant/reports/claim-consistency-audit.json create mode 100644 figure-claim-consistency-assistant/reports/claim-consistency.svg create mode 100644 figure-claim-consistency-assistant/reports/demo.mp4 create mode 100644 figure-claim-consistency-assistant/reports/review-packet.md create mode 100644 figure-claim-consistency-assistant/requirements-map.md create mode 100644 figure-claim-consistency-assistant/sample-data.js create mode 100644 figure-claim-consistency-assistant/test.js diff --git a/figure-claim-consistency-assistant/README.md b/figure-claim-consistency-assistant/README.md new file mode 100644 index 0000000..dbe0c39 --- /dev/null +++ b/figure-claim-consistency-assistant/README.md @@ -0,0 +1,29 @@ +# Figure Claim Consistency Assistant + +This module is a focused slice for SCIBASE.AI issue #16, AI-Powered Research Assistant Suite. + +It acts as a pre-submission assistant for manuscript figures and tables. It cross-checks manuscript claims against synthetic figure and table metadata, then emits reviewer-ready tasks when visual evidence does not support the written claim. + +## What It Covers + +- Claim-to-figure and claim-to-table linkage. +- Axis unit, effect direction, effect magnitude, and sample-size consistency. +- Caption caveat propagation into manuscript claims. +- Public reproducibility artifact checks for source data, notebooks, benchmark logs, manifests, and deployment plans. +- Reviewer tasks, research-gap signals, JSON audit packets, Markdown review packets, SVG summaries, and a short MP4 demo artifact. + +The sample data is synthetic. The module is dependency-free and does not call external services. + +## Run + +```bash +node figure-claim-consistency-assistant/test.js +node figure-claim-consistency-assistant/demo.js +``` + +Demo output is written to: + +- `reports/claim-consistency-audit.json` +- `reports/review-packet.md` +- `reports/claim-consistency.svg` +- `reports/demo.mp4` diff --git a/figure-claim-consistency-assistant/demo.js b/figure-claim-consistency-assistant/demo.js new file mode 100644 index 0000000..b105db0 --- /dev/null +++ b/figure-claim-consistency-assistant/demo.js @@ -0,0 +1,25 @@ +const fs = require("node:fs"); +const path = require("node:path"); +const data = require("./sample-data"); +const { renderMarkdown, renderSvg, runAssistant } = require("./index"); + +const report = runAssistant(data); +const reportsDir = path.join(__dirname, "reports"); +fs.mkdirSync(reportsDir, { recursive: true }); +fs.writeFileSync(path.join(reportsDir, "claim-consistency-audit.json"), JSON.stringify(report, null, 2)); +fs.writeFileSync(path.join(reportsDir, "review-packet.md"), renderMarkdown(report)); +fs.writeFileSync(path.join(reportsDir, "claim-consistency.svg"), renderSvg(report)); + +console.log(JSON.stringify({ + decision: report.summary.releaseStatus, + averageScore: report.summary.averageScore, + issueCount: report.summary.totalIssues, + highRiskClaims: report.summary.highestRiskClaims, + auditDigest: report.auditDigest, + reports: [ + "reports/claim-consistency-audit.json", + "reports/review-packet.md", + "reports/claim-consistency.svg", + "reports/demo.mp4" + ] +}, null, 2)); diff --git a/figure-claim-consistency-assistant/index.js b/figure-claim-consistency-assistant/index.js new file mode 100644 index 0000000..7bc67c5 --- /dev/null +++ b/figure-claim-consistency-assistant/index.js @@ -0,0 +1,396 @@ +const crypto = require("node:crypto"); + +const SEVERITY_WEIGHT = { + blocker: 34, + high: 22, + medium: 12, + low: 5 +}; + +function round(value, digits = 2) { + const factor = 10 ** digits; + return Math.round(value * factor) / factor; +} + +function toIdMap(items) { + return new Map(items.map((item) => [item.id, item])); +} + +function artifactTypes(artifacts) { + return new Set(artifacts.filter((artifact) => artifact.public).map((artifact) => artifact.type)); +} + +function matchesDirection(expected, observed, threshold, reportedEffect) { + if (expected === observed) return true; + if (expected === "stable") return Math.abs(reportedEffect) <= threshold && Math.abs(reportedEffect - observedEffectValue(observed)) <= threshold; + if (expected === "below-threshold") return observed === "below-threshold"; + if (expected === "at-least") return observed === "at-least"; + return false; +} + +function observedEffectValue(direction) { + if (direction === "increase" || direction === "at-least") return 1; + if (direction === "decrease" || direction === "above-threshold") return -1; + return 0; +} + +function effectWithinTolerance(claim, observedEffect) { + if (claim.expectedDirection === "below-threshold") return observedEffect <= claim.reportedEffect; + if (claim.expectedDirection === "at-least") return observedEffect >= claim.reportedEffect; + const tolerance = Math.max(0.03, Math.abs(claim.reportedEffect) * 0.12); + return Math.abs(claim.reportedEffect - observedEffect) <= tolerance; +} + +function addIssue(issues, severity, code, message, task) { + issues.push({ severity, code, message, task }); +} + +function evaluateFigure(claim, figure, publicArtifactTypes) { + const issues = []; + if (!figure) { + addIssue( + issues, + "blocker", + "missing-figure", + `Claim ${claim.id} cites a figure that is not present in the packet.`, + "Attach the referenced figure or remove the unsupported claim before submission." + ); + return issues; + } + + if (figure.metric !== claim.metric) { + addIssue( + issues, + "high", + "figure-metric-mismatch", + `${figure.id} tracks ${figure.metric}, but claim ${claim.id} expects ${claim.metric}.`, + "Route the claim to the correct figure or regenerate the figure from the matching endpoint." + ); + } + + if (figure.axis?.yUnit !== claim.expectedUnit) { + addIssue( + issues, + "high", + "axis-unit-mismatch", + `${figure.id} uses ${figure.axis?.yUnit || "unknown units"} while claim ${claim.id} reports ${claim.expectedUnit}.`, + "Normalize units in the caption, manuscript claim, and source table." + ); + } + + for (const panel of figure.panels || []) { + if (!matchesDirection(claim.expectedDirection, panel.direction, 0.02, claim.reportedEffect)) { + addIssue( + issues, + "high", + "effect-direction-mismatch", + `${figure.id}${panel.id} shows ${panel.direction}, but claim ${claim.id} says ${claim.expectedDirection}.`, + "Revise the claim language or regenerate the panel from the intended analysis." + ); + } + + if (!effectWithinTolerance(claim, panel.effect)) { + addIssue( + issues, + "medium", + "effect-size-drift", + `${figure.id}${panel.id} effect ${panel.effect} does not match reported claim effect ${claim.reportedEffect}.`, + "Update the manuscript effect size or regenerate the plotted estimate." + ); + } + + if (Math.abs((panel.sampleSize || 0) - claim.reportedSampleSize) > 2) { + addIssue( + issues, + "medium", + "sample-size-drift", + `${figure.id}${panel.id} uses n=${panel.sampleSize}; claim ${claim.id} reports n=${claim.reportedSampleSize}.`, + "Add a sample-size reconciliation note and align the figure/table/manuscript counts." + ); + } + + if (panel.caveat && !claim.caveats.includes(panel.caveat)) { + addIssue( + issues, + "medium", + "caption-caveat-missing-from-claim", + `${figure.id}${panel.id} caveat "${panel.caveat}" is absent from claim ${claim.id}.`, + "Carry the figure caveat into the manuscript claim or downgrade the conclusion." + ); + } + + if (panel.colorEncodingSafe === false) { + addIssue( + issues, + "low", + "visual-accessibility-risk", + `${figure.id}${panel.id} uses an unsafe color encoding for review.`, + "Switch to a redundant encoding or color-safe palette before submission." + ); + } + + if (panel.sourceDataId && !publicArtifactTypes.has("source-data")) { + addIssue( + issues, + "high", + "source-data-not-public", + `${figure.id}${panel.id} references source data that is not public.`, + "Publish the source-data artifact or mark the claim as internally unverified." + ); + } + + if (!panel.analysisNotebookId && claim.requiredArtifacts.includes("analysis-notebook")) { + addIssue( + issues, + "high", + "missing-analysis-notebook", + `${figure.id}${panel.id} has no linked analysis notebook.`, + "Attach the notebook that produces this figure and rerun the assistant." + ); + } + } + + return issues; +} + +function evaluateTable(claim, table) { + const issues = []; + if (!table) { + addIssue( + issues, + "high", + "missing-table", + `Claim ${claim.id} cites a table that is not present in the packet.`, + "Attach the referenced table or remove the table citation." + ); + return issues; + } + + const rows = (table.rows || []).filter((row) => row.claimId === claim.id || row.metric === claim.metric); + if (rows.length === 0) { + addIssue( + issues, + "high", + "table-row-missing", + `${table.id} has no row supporting claim ${claim.id}.`, + "Add a claim-linked table row with metric, unit, sample size, and adjustment notes." + ); + } + + for (const row of rows) { + if (row.unit !== claim.expectedUnit) { + addIssue( + issues, + "medium", + "table-unit-mismatch", + `${table.id} reports ${row.unit}, but claim ${claim.id} reports ${claim.expectedUnit}.`, + "Normalize the table row unit or update the claim." + ); + } + + if (!effectWithinTolerance(claim, row.effect)) { + addIssue( + issues, + "medium", + "table-effect-size-drift", + `${table.id} row effect ${row.effect} does not match claim effect ${claim.reportedEffect}.`, + "Reconcile the table value and manuscript claim." + ); + } + + if (Math.abs((row.sampleSize || 0) - claim.reportedSampleSize) > 2) { + addIssue( + issues, + "medium", + "table-sample-size-drift", + `${table.id} row uses n=${row.sampleSize}; claim ${claim.id} reports n=${claim.reportedSampleSize}.`, + "Align table and manuscript denominators." + ); + } + + if (row.adjustedPValue === null && /subgroup|scanner|cohort/i.test(claim.text)) { + addIssue( + issues, + "medium", + "multiplicity-adjustment-missing", + `${table.id} row for claim ${claim.id} lacks multiplicity-adjusted significance evidence.`, + "Add adjusted p-values or downgrade the subgroup conclusion." + ); + } + } + + return issues; +} + +function missingArtifacts(claim, publicArtifactTypes) { + return claim.requiredArtifacts + .filter((artifactType) => !publicArtifactTypes.has(artifactType)) + .map((artifactType) => ({ + severity: "high", + code: "required-artifact-missing", + message: `Claim ${claim.id} requires public ${artifactType}, but none is attached.`, + task: `Attach a public ${artifactType} artifact before submission.` + })); +} + +function scoreIssues(issues) { + const penalty = issues.reduce((total, issue) => total + SEVERITY_WEIGHT[issue.severity], 0); + return Math.max(0, 100 - penalty); +} + +function statusFromScore(score, issues) { + if (issues.some((issue) => issue.severity === "blocker")) return "block-release"; + if (score < 60) return "major-revision"; + if (score < 82) return "minor-revision"; + return "ready-with-notes"; +} + +function evaluateClaim(claim, context) { + const figureIssues = claim.figureRefs.flatMap((ref) => evaluateFigure(claim, context.figureMap.get(ref), context.publicArtifactTypes)); + const tableIssues = claim.tableRefs.flatMap((ref) => evaluateTable(claim, context.tableMap.get(ref))); + const artifactIssues = missingArtifacts(claim, context.publicArtifactTypes); + const issues = [...figureIssues, ...tableIssues, ...artifactIssues]; + const score = scoreIssues(issues); + return { + claimId: claim.id, + claim: claim.text, + score, + status: statusFromScore(score, issues), + issueCount: issues.length, + issues, + reviewerTasks: issues.map((issue) => issue.task) + }; +} + +function buildResearchGapSignals(claimReports) { + return claimReports + .filter((report) => report.status !== "ready-with-notes") + .map((report) => ({ + claimId: report.claimId, + opportunity: `Run a targeted follow-up study for ${report.claimId} before broadening the conclusion.`, + rationale: report.issues.slice(0, 2).map((issue) => issue.message).join(" "), + priority: report.issues.some((issue) => issue.severity === "blocker" || issue.severity === "high") ? "high" : "medium" + })); +} + +function summarizeReports(claimReports) { + const allIssues = claimReports.flatMap((report) => report.issues); + const countsBySeverity = allIssues.reduce((counts, issue) => { + counts[issue.severity] = (counts[issue.severity] || 0) + 1; + return counts; + }, {}); + const averageScore = round(claimReports.reduce((sum, report) => sum + report.score, 0) / claimReports.length); + const releaseStatus = claimReports.some((report) => report.status === "block-release") + ? "block-release" + : averageScore < 70 + ? "major-revision" + : "ready-with-notes"; + return { + averageScore, + releaseStatus, + totalIssues: allIssues.length, + countsBySeverity, + highestRiskClaims: claimReports + .slice() + .sort((a, b) => a.score - b.score) + .slice(0, 3) + .map((report) => ({ claimId: report.claimId, score: report.score, status: report.status })) + }; +} + +function auditDigest(payload) { + return crypto.createHash("sha256").update(JSON.stringify(payload)).digest("hex"); +} + +function runAssistant(data) { + const context = { + figureMap: toIdMap(data.figures), + tableMap: toIdMap(data.tables), + publicArtifactTypes: artifactTypes(data.artifacts) + }; + const claimReports = data.manuscript.claims.map((claim) => evaluateClaim(claim, context)); + const summary = summarizeReports(claimReports); + const gapSignals = buildResearchGapSignals(claimReports); + const reviewPacket = { + manuscript: { + id: data.manuscript.id, + title: data.manuscript.title, + domain: data.manuscript.domain + }, + assistant: "figure-claim-consistency-assistant", + summary, + claimReports, + gapSignals + }; + return { + ...reviewPacket, + auditDigest: auditDigest(reviewPacket) + }; +} + +function renderMarkdown(report) { + const lines = [ + `# Figure Claim Consistency Review: ${report.manuscript.title}`, + "", + `Decision: **${report.summary.releaseStatus}**`, + `Average score: **${report.summary.averageScore}**`, + `Total issues: **${report.summary.totalIssues}**`, + "", + "## Highest Risk Claims", + ...report.summary.highestRiskClaims.map((claim) => `- ${claim.claimId}: ${claim.status} (${claim.score})`), + "", + "## Reviewer Tasks" + ]; + for (const claim of report.claimReports) { + lines.push("", `### ${claim.claimId}`, `Score: ${claim.score}`, `Status: ${claim.status}`); + if (claim.issues.length === 0) { + lines.push("- No blocking figure/table inconsistencies found."); + } else { + for (const issue of claim.issues) { + lines.push(`- [${issue.severity}] ${issue.message}`); + lines.push(` Task: ${issue.task}`); + } + } + } + lines.push("", "## Research Gap Signals"); + for (const gap of report.gapSignals) { + lines.push(`- ${gap.claimId} (${gap.priority}): ${gap.opportunity}`); + } + lines.push("", `Audit digest: \`${report.auditDigest}\``); + return `${lines.join("\n")}\n`; +} + +function renderSvg(report) { + const width = 960; + const rowHeight = 82; + const height = 160 + report.claimReports.length * rowHeight; + const rows = report.claimReports.map((claim, index) => { + const y = 132 + index * rowHeight; + const barWidth = Math.max(16, claim.score * 4.8); + const color = claim.score >= 82 ? "#2f855a" : claim.score >= 60 ? "#b7791f" : "#c53030"; + return [ + `${claim.claimId}`, + ``, + ``, + `${claim.status} (${claim.score})`, + `${claim.issueCount} issue(s)` + ].join(""); + }).join(""); + return [ + ``, + ``, + ``, + `Figure/Table Claim Consistency Assistant`, + `Decision: ${report.summary.releaseStatus} | Average score: ${report.summary.averageScore} | Audit ${report.auditDigest.slice(0, 12)}`, + rows, + `` + ].join(""); +} + +module.exports = { + runAssistant, + renderMarkdown, + renderSvg, + evaluateClaim, + effectWithinTolerance +}; diff --git a/figure-claim-consistency-assistant/reports/claim-consistency-audit.json b/figure-claim-consistency-assistant/reports/claim-consistency-audit.json new file mode 100644 index 0000000..92e38ae --- /dev/null +++ b/figure-claim-consistency-assistant/reports/claim-consistency-audit.json @@ -0,0 +1,234 @@ +{ + "manuscript": { + "id": "sci-vision-042", + "title": "Adaptive Imaging Biomarkers for Early Neuroinflammation", + "domain": "clinical-imaging" + }, + "assistant": "figure-claim-consistency-assistant", + "summary": { + "averageScore": 25, + "releaseStatus": "block-release", + "totalIssues": 19, + "countsBySeverity": { + "high": 8, + "medium": 9, + "low": 1, + "blocker": 1 + }, + "highestRiskClaims": [ + { + "claimId": "C2", + "score": 0, + "status": "major-revision" + }, + { + "claimId": "C3", + "score": 0, + "status": "major-revision" + }, + { + "claimId": "C4", + "score": 0, + "status": "block-release" + } + ] + }, + "claimReports": [ + { + "claimId": "C1", + "claim": "The adaptive imaging panel improved lesion detection by 18% across all enrolled cohorts.", + "score": 100, + "status": "ready-with-notes", + "issueCount": 0, + "issues": [], + "reviewerTasks": [] + }, + { + "claimId": "C2", + "claim": "The model remained stable in the low-signal scanner subgroup.", + "score": 0, + "status": "major-revision", + "issueCount": 9, + "issues": [ + { + "severity": "high", + "code": "effect-direction-mismatch", + "message": "fig-2A shows decrease, but claim C2 says stable.", + "task": "Revise the claim language or regenerate the panel from the intended analysis." + }, + { + "severity": "medium", + "code": "effect-size-drift", + "message": "fig-2A effect -0.06 does not match reported claim effect 0.01.", + "task": "Update the manuscript effect size or regenerate the plotted estimate." + }, + { + "severity": "medium", + "code": "sample-size-drift", + "message": "fig-2A uses n=47; claim C2 reports n=64.", + "task": "Add a sample-size reconciliation note and align the figure/table/manuscript counts." + }, + { + "severity": "medium", + "code": "caption-caveat-missing-from-claim", + "message": "fig-2A caveat \"exploratory subgroup\" is absent from claim C2.", + "task": "Carry the figure caveat into the manuscript claim or downgrade the conclusion." + }, + { + "severity": "low", + "code": "visual-accessibility-risk", + "message": "fig-2A uses an unsafe color encoding for review.", + "task": "Switch to a redundant encoding or color-safe palette before submission." + }, + { + "severity": "medium", + "code": "table-effect-size-drift", + "message": "table-2 row effect -0.06 does not match claim effect 0.01.", + "task": "Reconcile the table value and manuscript claim." + }, + { + "severity": "medium", + "code": "table-sample-size-drift", + "message": "table-2 row uses n=47; claim C2 reports n=64.", + "task": "Align table and manuscript denominators." + }, + { + "severity": "medium", + "code": "multiplicity-adjustment-missing", + "message": "table-2 row for claim C2 lacks multiplicity-adjusted significance evidence.", + "task": "Add adjusted p-values or downgrade the subgroup conclusion." + }, + { + "severity": "high", + "code": "required-artifact-missing", + "message": "Claim C2 requires public subgroup-manifest, but none is attached.", + "task": "Attach a public subgroup-manifest artifact before submission." + } + ], + "reviewerTasks": [ + "Revise the claim language or regenerate the panel from the intended analysis.", + "Update the manuscript effect size or regenerate the plotted estimate.", + "Add a sample-size reconciliation note and align the figure/table/manuscript counts.", + "Carry the figure caveat into the manuscript claim or downgrade the conclusion.", + "Switch to a redundant encoding or color-safe palette before submission.", + "Reconcile the table value and manuscript claim.", + "Align table and manuscript denominators.", + "Add adjusted p-values or downgrade the subgroup conclusion.", + "Attach a public subgroup-manifest artifact before submission." + ] + }, + { + "claimId": "C3", + "claim": "Runtime overhead stayed below five minutes per scan.", + "score": 0, + "status": "major-revision", + "issueCount": 6, + "issues": [ + { + "severity": "high", + "code": "axis-unit-mismatch", + "message": "fig-3 uses seconds while claim C3 reports minutes.", + "task": "Normalize units in the caption, manuscript claim, and source table." + }, + { + "severity": "high", + "code": "effect-direction-mismatch", + "message": "fig-3A shows above-threshold, but claim C3 says below-threshold.", + "task": "Revise the claim language or regenerate the panel from the intended analysis." + }, + { + "severity": "medium", + "code": "effect-size-drift", + "message": "fig-3A effect 7.8 does not match reported claim effect 5.", + "task": "Update the manuscript effect size or regenerate the plotted estimate." + }, + { + "severity": "medium", + "code": "caption-caveat-missing-from-claim", + "message": "fig-3A caveat \"GPU queue warm cache\" is absent from claim C3.", + "task": "Carry the figure caveat into the manuscript claim or downgrade the conclusion." + }, + { + "severity": "high", + "code": "missing-analysis-notebook", + "message": "fig-3A has no linked analysis notebook.", + "task": "Attach the notebook that produces this figure and rerun the assistant." + }, + { + "severity": "medium", + "code": "table-effect-size-drift", + "message": "table-3 row effect 7.8 does not match claim effect 5.", + "task": "Reconcile the table value and manuscript claim." + } + ], + "reviewerTasks": [ + "Normalize units in the caption, manuscript claim, and source table.", + "Revise the claim language or regenerate the panel from the intended analysis.", + "Update the manuscript effect size or regenerate the plotted estimate.", + "Carry the figure caveat into the manuscript claim or downgrade the conclusion.", + "Attach the notebook that produces this figure and rerun the assistant.", + "Reconcile the table value and manuscript claim." + ] + }, + { + "claimId": "C4", + "claim": "The proposed assistant is ready for multi-site prospective deployment.", + "score": 0, + "status": "block-release", + "issueCount": 4, + "issues": [ + { + "severity": "blocker", + "code": "missing-figure", + "message": "Claim C4 cites a figure that is not present in the packet.", + "task": "Attach the referenced figure or remove the unsupported claim before submission." + }, + { + "severity": "high", + "code": "missing-table", + "message": "Claim C4 cites a table that is not present in the packet.", + "task": "Attach the referenced table or remove the table citation." + }, + { + "severity": "high", + "code": "required-artifact-missing", + "message": "Claim C4 requires public deployment-protocol, but none is attached.", + "task": "Attach a public deployment-protocol artifact before submission." + }, + { + "severity": "high", + "code": "required-artifact-missing", + "message": "Claim C4 requires public monitoring-plan, but none is attached.", + "task": "Attach a public monitoring-plan artifact before submission." + } + ], + "reviewerTasks": [ + "Attach the referenced figure or remove the unsupported claim before submission.", + "Attach the referenced table or remove the table citation.", + "Attach a public deployment-protocol artifact before submission.", + "Attach a public monitoring-plan artifact before submission." + ] + } + ], + "gapSignals": [ + { + "claimId": "C2", + "opportunity": "Run a targeted follow-up study for C2 before broadening the conclusion.", + "rationale": "fig-2A shows decrease, but claim C2 says stable. fig-2A effect -0.06 does not match reported claim effect 0.01.", + "priority": "high" + }, + { + "claimId": "C3", + "opportunity": "Run a targeted follow-up study for C3 before broadening the conclusion.", + "rationale": "fig-3 uses seconds while claim C3 reports minutes. fig-3A shows above-threshold, but claim C3 says below-threshold.", + "priority": "high" + }, + { + "claimId": "C4", + "opportunity": "Run a targeted follow-up study for C4 before broadening the conclusion.", + "rationale": "Claim C4 cites a figure that is not present in the packet. Claim C4 cites a table that is not present in the packet.", + "priority": "high" + } + ], + "auditDigest": "c41b98366bd40d07468f7fc416e0ccd099a84730651cb750d5acc4b15b1715ff" +} \ No newline at end of file diff --git a/figure-claim-consistency-assistant/reports/claim-consistency.svg b/figure-claim-consistency-assistant/reports/claim-consistency.svg new file mode 100644 index 0000000..4698247 --- /dev/null +++ b/figure-claim-consistency-assistant/reports/claim-consistency.svg @@ -0,0 +1 @@ +Figure/Table Claim Consistency AssistantDecision: block-release | Average score: 25 | Audit c41b98366bd4C1ready-with-notes (100)0 issue(s)C2major-revision (0)9 issue(s)C3major-revision (0)6 issue(s)C4block-release (0)4 issue(s) \ No newline at end of file diff --git a/figure-claim-consistency-assistant/reports/demo.mp4 b/figure-claim-consistency-assistant/reports/demo.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..e98195dae4f1e05d7a8316dcbe501c321b409aaa GIT binary patch literal 59052 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 [claim.claimId, claim])); + +assert.equal(report.assistant, "figure-claim-consistency-assistant"); +assert.equal(report.summary.releaseStatus, "block-release"); +assert.equal(report.claimReports.length, 4); +assert.match(report.auditDigest, /^[a-f0-9]{64}$/); + +assert.equal(byClaim.get("C1").status, "ready-with-notes"); +assert.ok(byClaim.get("C1").score >= 82); + +assert.equal(byClaim.get("C2").status, "major-revision"); +assert.ok(byClaim.get("C2").issues.some((issue) => issue.code === "effect-direction-mismatch")); +assert.ok(byClaim.get("C2").issues.some((issue) => issue.code === "multiplicity-adjustment-missing")); +assert.ok(byClaim.get("C2").issues.some((issue) => issue.code === "visual-accessibility-risk")); + +assert.equal(byClaim.get("C3").status, "major-revision"); +assert.ok(byClaim.get("C3").issues.some((issue) => issue.code === "axis-unit-mismatch")); +assert.ok(byClaim.get("C3").issues.some((issue) => issue.code === "missing-analysis-notebook")); + +assert.equal(byClaim.get("C4").status, "block-release"); +assert.ok(byClaim.get("C4").issues.some((issue) => issue.code === "missing-figure")); +assert.ok(byClaim.get("C4").issues.some((issue) => issue.code === "missing-table")); +assert.ok(byClaim.get("C4").issues.some((issue) => issue.code === "required-artifact-missing")); + +assert.equal(effectWithinTolerance({ expectedDirection: "below-threshold", reportedEffect: 5 }, 4.9), true); +assert.equal(effectWithinTolerance({ expectedDirection: "below-threshold", reportedEffect: 5 }, 6.1), false); + +const markdown = renderMarkdown(report); +assert.ok(markdown.includes("Figure Claim Consistency Review")); +assert.ok(markdown.includes("Audit digest")); + +const svg = renderSvg(report); +assert.ok(svg.startsWith("