Skip to content
Research
Skill

/research-integrity-audit

学术审查 / research-integrity screening of a manuscript's figures and reported numbers. Finds duplicated, reused, or transformed image panels and data anomalies: copied value blocks, fixed differences/ratios between groups, digit patterns, Benford deviations,

BOOST
From plugin
wisp-science
1k27 skills
Install
$ npx -y skills add xuzhougeng/wisp-science --skill research-integrity-audit --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/research-integrity-audit

Context preview

The summary Claude sees to decide when to auto-load this skill.

学术审查 / research-integrity screening of a manuscript's figures and reported numbers. Finds duplicated, reused, or transformed image panels and data anomalies: copied value blocks, fixed differences/ratios between groups, digit patterns, Benford deviations,

SKILL.md

research-integrity-audit.SKILL.md
name: research-integrity-audit
description: "学术审查 / research-integrity screening of a manuscript's figures and reported numbers. Finds duplicated, reused, or transformed image panels and data anomalies: copied value blocks, fixed differences/ratios between groups, digit patterns, Benford deviations, GRIM/GRIMMER-inconsistent means and SDs, p-values mismatching their statistics. Use for 学术诚信, 图片查重, 论文图像重复, 数据造假筛查, Source Data 审查, 末位数字, 本福特, GRIM, statcheck, p 值核对, or when the user attaches a PDF, image directory, or CSV/Excel source data to audit."
compatibility: Python 3.10+. Figure track needs Pillow, NumPy, pypdf, and pypdfium2, plus OpenCV with SIFT for the full feature-matching pass. Data track is standard library only, plus openpyxl for .xlsx input.

Research integrity audit

Screen a manuscript's evidence at the smallest meaningful unit: one experimental image panel, or one independently measured data series. Hashes, feature matches, and statistical tests find candidates; they do not establish misconduct, or even duplication, on their own.

Inputs and workspace

Accept a PDF, a directory of manuscript images, and/or source data (CSV, TSV, Excel, or a directory of them). Resolve tagged or attached paths before running anything. Choose tracks from the input and the request:

  • **Figure track** (`scripts/audit_figures.py`): PDFs and image directories.
  • **Data track** (`scripts/audit_data.py`): Source Data files, supplementary

tables, and numeric tables transcribed from the PDF.

A PDF usually warrants both unless the user limits scope. Ask for a page range only when the user did not specify one and scanning the whole PDF would materially change scope.

Create a new analysis directory such as `analysis/integrity-audit-YYYYMMDD-HHMM/` with `figures/` and `data/` as the two script workspaces. Never modify source files, overwrite a prior audit, or silently omit an unreadable file.

Locate both scripts from the resource paths returned by `use_skill`. If imports fail, load `local-env-setup`, create a project-local environment, and install the packages named in `compatibility`. Do not continue with the hash-only figure fallback when the user requested a strict or exhaustive review.

Figure track

F1. Prepare sources

For a PDF:

python audit_figures.py prepare --input PAPER.pdf --output AUDIT_DIR/figures --pages "1-40,49-54"

The script extracts qualifying embedded raster images first. It renders a page only when no large embedded image is available and the page looks like a figure page, or when `--render-fallback all` is explicitly used. Review `sources.json`, `skipped.json`, and `sources-contact-sheet.png`; confirm that every requested figure is represented. A page render still contains captions and page furniture, so crop the figure before panel splitting.

For a directory:

python audit_figures.py prepare --input FIGURE_DIR --output AUDIT_DIR/figures

The script recursively inventories supported images, normalizes EXIF orientation into audit copies, and records hashes and original paths. It does not alter the directory.

F2. Verify panel boundaries

`prepare` writes conservative panel proposals to `panels.json`. They are only proposals. View every source at full resolution and edit the manifest until:

  • every data-bearing photograph, microscopy field, histology tile, plate,

wound, gel/blot region, or other experimental image has its own box;

  • repeated grids are split into individual experimental units, with stable

labels such as `Fig2-D-r1-c2` rather than anonymous indices;

  • labels, legends, scale bars, and axes are not mistaken for independent data

panels;

  • adjacent boxes do not overlap accidentally;
  • expected derivatives share a `derivation_group` (for example raw channels

and merge, overview and inset, or known longitudinal views);

  • `kind` records the modality when known (`microscopy`, `histology`,

`western-blot`, `gel`, `plate`, `wound`, `ivis`, `chart`, or `schematic`).

Run:

python audit_figures.py materialize --workspace AUDIT_DIR/figures

Inspect `panels-contact-sheet.png` immediately. Fix bad crops and rerun. Do not scan until `manifest-warnings.json` has no unexplained out-of-bounds, duplicate-ID, or overlapping-box warning. Preserve parent/context crops when a tighter data-only crop is needed for matching.

F3. Run all-pairs screening

python audit_figures.py scan --workspace AUDIT_DIR/figures --features required

The scan combines exact pixel hashes, perceptual hashes, normalized correlation, and SIFT + RANSAC geometry. It writes `candidates.csv`, `candidates.json`, `quality-flags.csv`, and `scan-summary.json`. Review every candidate, not only the first page of the table. Re-scan after any crop change.

Automatic scores are triage signals. Repeated labels, axes, membrane grids, plate rims, scale bars, and regular tissue texture often produce false matches. Conversely, different crops, contrast changes, rotation, mirroring, or recompression can hide a duplicate from hashes and global correlation.

F4. Confirm or exclude candidates

Generate evidence for selected pairs or the highest-ranked unresolved pairs:

python audit_figures.py evidence --workspace AUDIT_DIR/figures --pair PANEL_A,PANEL_B
python audit_figures.py evidence --workspace AUDIT_DIR/figures --top 20

Inspect the full panels, data-only crops, match-line view, registered red/green overlay, and metrics together. For circular plates or other strong borders, repeat with a tighter interior crop. For blots, compare both whole blot context and protein-by-lane crops. For microscopy, distinguish same-field channel derivation from cross-condition reuse. Consult `references/review-protocol.md` for modality-specific checks and verdicts.

Never call a pair confirmed from an inlier count or NCC alone. Confirmation requires geometrically consistent correspondence across independent random details in the data region, a plaus

Read more
Ships withwisp-science

The open-source, local-first AI research workbench. WISP — Workspace for Intelligent Scientific Practice Search the literature, run Python and R, query ~80 scientific databases, and keep the trail — figures, runs, decisions, and drafts — in one project.

Get the whole plugin
Stats
1,042
Stars
106
Forks
Active
Maintenance
Rust
Language
AGPL-3.0
License
33m ago
Last commit
3mo ago
Created
5h ago
Added

Repo: xuzhougeng/wisp-science

Other skills on wisp-science.