brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
, e.g. `CRD42024500001`). Run `grep -oE 'CRD42[0-9]+' manuscript.md` and\nassert each match is 14 characters long; a 15-character ID (a stray inserted digit) is a\ntranscription error logged as `[REGISTRATION-TIMING]` (`fixable_by_ai: false` — verify against\nthe live PROSPERO record, do not guess the correct digit).\n\n### Step 4d: PRISMA Figure 1 Arithmetic & Cross-Reference Audit\n\n**Applies to:** systematic reviews and meta-analyses using PRISMA 2020 / PRISMA-DTA /\nPRISMA-P. Triggers when Item 16a (flow diagram) is PRESENT — the diagram can pass Step 4 while its\nnumbers do not add up or disagree with the text.\n\n1. Choose the Figure 1 source, in this order: (a) `analysis/figures/Figure1_PRISMA.md` markdown\n manifest, (b) caption text in `manuscript.md`, (c) PPTX text run if a `.pptx` exists,\n (d) manual entry from PNG/SVG.\n2. Run the audit. It checks the five subtractions (screened = identified − duplicates;\n sought-for-retrieval = screened − excluded at screening; retrieved = sought − not retrieved;\n assessed for eligibility = sought − not retrieved; included = assessed for eligibility −\n excluded with reasons) and that the body-text PRISMA\n numbers match the Figure 1 boxes 1:1, and writes `qc/prisma_figure_audit.json`:\n\n ```bash\n python3 ${CLAUDE_SKILL_DIR}/scripts/check_prisma_figure.py \\\n --md \u003cmanuscript.md> --figure \u003cFigure 1 source: .md manifest / caption / text export> \\\n --out qc/prisma_figure_audit.json\n ```\n\n Exit `1` = an arithmetic or cross-reference MISMATCH; exit `2` = missing/unparsable input.\n When the Figure 1 numbers exist only in a PNG/SVG, transcribe them by hand and run the same\n checks manually as `${CLAUDE_SKILL_DIR}/references/step4d_prisma_figure_audit.md` specifies\n (regex set, JSON schema, and edge cases: duplicates across databases, the citation-searching\n strand, dual-reviewer screening).\n3. By hand (the script does not do this): the reasons for exclusion in Methods and the Figure\n legend must agree on counts and category names, and when identification is split across\n sources (databases, registers, other methods) the per-source counts must sum to the\n `identified` total — the script reads only the first `identified` count.\n4. If `analysis/figures/_figure_manifest.md` (from `/make-figures`) exists, verify that the row\n whose `Type = prisma` (or `Type = prisma-dta`) points at the same file used as the audit\n source, and that its `Critic` field is `yes` or `partial` (not `no`). A missing row,\n mismatched path, or `Critic = no` logs `[MANIFEST-XREF]` (advisory); the arithmetic check\n still runs.\n\n**Flagging:** any MISMATCH or arithmetic failure logs a Part C Action Item with label\n`[PRISMA-FIGURE]`, `fixable_by_ai: false` (the author must reconcile the numbers).\n\n### PRISMA Cascade Arithmetic Auto-Verify\n\nWhen PRISMA 2020 or PRISMA-DTA is selected and round-by-round screening TSV artifacts are\navailable, recompute the screening cascade from the raw decisions. Off-by-one errors in the prose\ncascade are a high-frequency reviewer red flag (e.g., `151 + 108 + 39 + 1 + 1 + 4 = 304`\nfollowed by a prose summary \"305\" four lines later).\n\n```bash\npython \"${CLAUDE_SKILL_DIR}/scripts/prisma_cascade_check.py\" \\\n --round1 2_Screening/round1.tsv \\\n --round2 2_Screening/round2.tsv \\\n --round3 2_Screening/round3_adjudication.tsv \\\n --manuscript manuscript.md \\\n --out qc/prisma_cascade.json --strict\n```\n\nThe script counts `INCLUDE` / `EXCLUDE` / `MAYBE` decisions per round, computes the cascade, and\nreports per-stage drift where the manuscript's stage counts disagree. Treat any\n`manuscript_drift` entry as a P0 blocker — fix the prose to match the computed cascade and re-run.\nA `--manuscript` path that is not a file exits `2`. When the manuscript is read but none of the\nscript's stage phrases is found in it, `manuscript_check` is `\"unverifiable\"`,\n`submission_safe` is `false`, an `UNVERIFIED` line is printed, and `--strict` exits `1`: the\ndrift check did not run, so compare the prose stage counts to `stage_counts` by hand.\n`stages_compared` lists the stages that were actually checked.\n\n### Step 4e: Reporting-Framework Naming Audit\n\n**Applies to:** any manuscript that invokes an AI/extension reporting framework\n(PROBAST+AI, STARD-AI, TRIPOD+AI, TRIPOD-LLM, CONSORT-AI, SPIRIT-AI, PRISMA-DTA, QUADAS-C).\nA base reporting tool and its extension are distinct instruments with separate citations, and\nStep 1 does not police how the framework is *named* in prose. The recurring failures: invoking an\nextension without ever naming or citing the base instrument it extends; mixing `+AI` and `-AI`\nhyphenation for one family within a single document; coining item labels like \"12-AI\"; and waving\nat \"recent guidance\" instead of naming the framework.\n\n```bash\npython3 \"${CLAUDE_SKILL_DIR}/scripts/check_framework_naming.py\" \\\n --manuscript manuscript.md --out qc/framework_naming.json --strict\n```\n\n**Verdicts:** `BASE_MISSING` (extension used, base instrument never named standalone) is a\nMajor and logs `[FRAMEWORK-NAMING]` in Part C with `fixable_by_ai: true` (insert the base\nname + its citation). `HYPHEN_MIX`, `CITE_MISSING`, `SELF_COINED_LABEL`, and `VAGUE_GUIDANCE`\nare Minor (`fixable_by_ai: true`). Part D JSON includes a `framework_naming` object mirroring\nthe script's `claims[]`.\n\n### Step 4f: Critical-item floor cross-check\n\n**Applies to:** every guideline assessment **for which the floor defines a row** (load and\ncheck only those; do not invent a floor for an unlisted guideline). After the item-by-item\ntable, read `${CLAUDE_SKILL_DIR}/references/critical_item_floor.md` and check the small set of\n**non-waivable** items for this study type — and, for AI/ML and radiomics manuscripts, the\nmethodological-quality / risk-of-bias instrument (PROBAST+AI, METRICS/RQS, APPRAISE-AI) and\nconcerns it lists. A MISSING critical item is surfaced as a **Critical gap** and becomes the\nreport's headline regardless of the overall percentage — a high percentage with a missing\ncritical item (undefined reference standard, no leakage-controlled partition, calibration absent\nfor a prediction model, an unreconciled flow diagram) is not \"broadly acceptable.\"\n\n### Step 5: Generate Report\n\nThis report is an **internal working audit** — it carries auto-fix annotations, a\nmachine-readable JSON block (`compliance_pct`, `fixable_by_ai`, …), and Action Items. It is\n**NOT** the official reporting checklist a journal expects (that is the blank guideline form with\n`Item | Recommendation | Reported in page/section`, which the authors fill in). **Never submit\nthis report as the submission checklist.** So that the file is self-identifying and cannot be\nreused by filename into a later submission package, **the report MUST begin with this banner as\nits very first line**:\n\n```\n\u003c!-- INTERNAL AUDIT — NOT FOR SUBMISSION. This is the /check-reporting working\nreport, not the official journal checklist. Do not upload to a submission portal. -->\n```\n\nWrite the checklist content and report in English (matching the guideline originals), whatever\nlanguage you use with the user. Save it as `qc/reporting_checklist.md` and the Part D JSON as\n`qc/reporting_checklist.json`.\n\nRead `${CLAUDE_SKILL_DIR}/references/report_templates.md` when you write the report — it holds the\nliteral templates for the four parts:\n\n- **Part A — Summary.** Header (manuscript file, version token, guideline, date), the\n PRESENT/PARTIAL/MISSING/N-A count table, and overall compliance. The **headline is the critical\n items (Step 4f)**, not the percentage: report `{present}/{total}` and name every missing\n critical item with the section it belongs in.\n- **Part B — Item-by-item checklist.** One row per item: `# | Section | Item | Status | Location | Notes`.\n- **Part C — Action items** (MISSING and PARTIAL only), ordered by: items most journals enforce\n strictly (ethics approval, registration, sample size) → items in Methods (easiest to fix) →\n everything else.\n- **Part D — Machine-readable JSON**, appended as a fenced block. **MUST** be present under\n `--json` or when called from `/write-paper` Phase 7, which parses it.\n\n**JSON field contract** (the part other skills depend on — get these right):\n\n- `compliance_pct` — `present / (total_items - na) * 100`, one decimal; `null` when every item\n is N/A (`total_items == na`).\n- `action_items` — MISSING and PARTIAL only; PRESENT and N/A are excluded.\n- `fixable_by_ai` — `true` when the fix inserts or expands text using information already in the\n manuscript or inferable from it; `false` when it needs external facts the author alone holds\n (registration number, IRB approval number, protocol details, sample-size rationale and target).\n- `suggested_fix` — concrete draft text, insertable as written. A fix that still contains a\n bracketed placeholder (`[N]`, `[rationale]`) is not insertable and is `fixable_by_ai: false`.\n- `source_sha256` — first 12 hex chars of the SHA-256 of the manuscript bytes, so a stale report\n cannot be silently attributed to a newer manuscript.\n\nIn notes and suggested fixes, cite a reference only with a `/search-lit`-confirmed DOI or PMID and\nmark any other `[UNVERIFIED - NEEDS MANUAL CHECK]`; never invent clinical definitions, diagnostic\ncriteria, or guideline recommendations — flag anything uncertain `[VERIFY]` and ask the user.\n\nWhen the user asks for the filled checklist a journal requires, build it from the *Submission\nchecklist export* template in `${CLAUDE_SKILL_DIR}/references/report_templates.md`.\n\n---\n\n## Skill Interactions\n\n| When | Call | Purpose |\n|------|------|---------|\n| During manuscript writing | `/write-paper` Phase 7 | Final compliance check |\n| Need to add Methods text | `/write-paper` Phase 3 | Draft missing Methods content |\n| Need statistical details | `/analyze-stats` | Generate missing statistical reporting |\n| Need flow diagram | `/make-figures` | Generate CONSORT/STARD/PRISMA diagram |\n\n## Gates\n\n| Gate | Severity | Trigger | Action on fail |\n|---|---|---|---|\n| Mandatory items present | ENFORCED at submission | \u003c 100% of guideline-mandatory items marked PRESENT | Auto-fix MISSING items where text exists; otherwise route to `/write-paper` Phase 7 for re-draft |\n| Step 4d PRISMA Figure 1 arithmetic & cross-reference audit (PRISMA / PRISMA-DTA only) | ENFORCED for SR/MA | flow numbers don't sum (e.g., screened ≠ included + excluded), or in-text counts mismatch flow diagram | HALT; reconcile against extraction artifacts |\n| Optional items (e.g., supplementary AI declarations) | ADVISORY | \u003c 80% of optional items present | warn; user accepts |\n| Cross-reporting-guideline routing (study type → guideline) | ENFORCED | study type undeclared or guideline missing | Ask user; do not silently default |\n","licenseDocuments":[]}}
check-reportingUse when auditing a manuscript item by item against a reporting guideline or risk-of-bias tool. Covers 49 reporting guidelines and risk-of-bias tools (STROBE, CONSORT, STARD, TRIPOD+AI, PRISMA, QUADAS and more), marking each item PRESENT, PARTIAL or MISSING. Not a reviewer critique (/self-review).
Independent GitHub snapshot · Automated classification · Original documentation governs
Checklists are vendored under ${CLAUDE_SKILL_DIR}/references/checklists/, one file per
instrument. Each file's header gives its version, source citation and licence, and says when its
item text is an own-words summary rather than the published wording.
STROBE.md -- STROBESTROBE_MR.md -- STROBE-MR 2021RECORD.md -- RECORD 2015 (RECORD-PE for drug studies)REMARK.md -- REMARKTARGET.md -- TARGET 2025GATHER.md -- GATHER 2016CHEERS_2022.md -- CHEERS 2022CROSS.md -- CROSS 2021 + CHERRIES (internet surveys)SRQR.md -- SRQR 2014 (all qualitative approaches)COREQ.md -- COREQ 2007 (interviews and focus groups)STARD.md -- STARD 2015STARD_AI.md -- STARD-AI 2025TRIPOD.md -- TRIPOD 2015TRIPOD_AI.md -- TRIPOD+AI 2024TRIPOD_LLM.md -- TRIPOD-LLM 2025PGS_RS.md -- PGS-RS / PRS-RS 2021CONSORT.md -- CONSORT 2025CONSORT_AI.md -- CONSORT-AI 2020SPIRIT.md -- SPIRIT 2025SPIRIT_AI.md -- SPIRIT-AI 2020CLAIM_2024.md -- CLAIM 2024DECIDE_AI.md -- DECIDE-AI 2022MI_CLEAR_LLM.md -- MI-CLEAR-LLMCLEAR.md -- CLEAR (radiomics)ARRIVE_2.md -- ARRIVE 2.0CARE.md -- CARE 2013SQUIRE_2.md -- SQUIRE 2.0GRRAS.md -- GRRASPRISMA_2020.md -- PRISMA 2020PRISMA_2020_Abstracts.md -- PRISMA 2020 for Abstracts, 12 items. A separate instrument, not a subset of the 27-item checklist (main item 2 defers to it): score it with its own denominator.PRISMA_DTA.md -- PRISMA-DTAPRISMA_P.md -- PRISMA-PPRISMA_ScR.md -- PRISMA-ScRMOOSE.md -- MOOSESWiM.md -- SWiMAMSTAR2.md -- AMSTAR 2QUADAS3.md -- QUADAS-3QUADAS2.md -- QUADAS-2QUADAS_C.md -- QUADAS-CRoB2.md -- RoB 2ROBINS_I.md -- ROBINS-IROBINS_E.md -- ROBINS-EROBIS.md -- ROBISROB_ME.md -- ROB-MERoB_NMA.md -- RoB NMAPROBAST.md -- PROBASTPROBAST_AI.md -- PROBAST+AINOS.md -- NOSCOSMIN_RoB.md -- COSMIN RoBIf a checklist already exists for this project (qc/reporting_checklist.json or a prior .md
report), verify it targets the current manuscript before reusing it — one generated against an
older version carries stale section/line references and a stale version label:
python3 "${CLAUDE_SKILL_DIR}/scripts/check_checklist_version.py" \
--checklist qc/reporting_checklist.json --manuscript manuscript_v8.md
A non-zero exit means the checklist is stale (older target_version, changed source_sha256,
different target_manuscript) or pre-dates the version contract: regenerate it against the current
manuscript (Steps 1–5) rather than reusing it. Every report you generate carries the
target_manuscript / target_version / source_sha256 fields (Part A header + Part D JSON) so
this check works next round.
Use the guideline the user names; otherwise auto-detect it from the study type. If the study type is ambiguous, ask the user to confirm before selecting a guideline.
Auto-detection mapping:
| Study Type | Primary Guideline | AI Extension |
|---|---|---|
| Observational study | STROBE | -- |
| Mendelian randomization study | STROBE-MR (base STROBE + MR extension) | -- |
| Health economic evaluation (cost-effectiveness / cost-utility / cost-benefit / budget-impact) | CHEERS 2022 | -- |
| Observational study using routinely-collected data (claims / EHR / registry / health-checkup DB) | RECORD (base STROBE + RECORD extension; RECORD-PE for drug studies) | -- |
| Survey / questionnaire study (KAP, physician/patient, cross-sectional, e-survey) | CROSS (+ CHERRIES for internet surveys) | -- |
| Scoping review (maps breadth/nature of evidence, clarifies concepts, identifies gaps — not a focused effectiveness/accuracy question) | PRISMA-ScR (base PRISMA + scoping-review extension) | -- |
| Qualitative study (interviews, focus groups, ethnography, grounded theory, phenomenology, document analysis) | SRQR (all qualitative approaches); COREQ (interviews/focus groups specifically) | -- |
| Randomized controlled trial | CONSORT 2025 | CONSORT-AI |
| Diagnostic accuracy study | STARD 2015 | STARD-AI |
| Prediction model (development/validation) | TRIPOD | TRIPOD+AI |
| Polygenic (risk) score prediction study | PGS-RS (with TRIPOD / TRIPOD+AI) | -- |
| Prognostic tumor-marker / biomarker study (single or multiple markers; e.g., ctDNA / molecular residual disease) | REMARK (pair with STROBE for the observational-design items; TRIPOD / TRIPOD+AI if a prognostic model is developed) | -- |
| Causal / comparative-effectiveness question emulated on observational data (treatment vs treatment, screening vs none, drug A vs B on registry / EHR / claims data) | TARGET (pair with the /design-study target-trial-emulation module for design; RECORD / STROBE for the routinely-collected-data items) | -- |
| Health-estimate / burden-of-disease modeling study (GBD or GBD-satellite, comparative-risk / population-attributable-fraction, cause-of-death or prevalence/incidence estimation, with or without forecasts) | GATHER (pair with /analyze-stats burden-decomposition-forecasting guide for the analytic layer) | -- |
| Systematic review / meta-analysis | PRISMA 2020 | PRISMA 2020 for Abstracts (run on the abstract, scored separately) |
| DTA systematic review / meta-analysis | PRISMA-DTA | PRISMA 2020 for Abstracts (run on the abstract, scored separately) |
| Meta-analysis of observational studies | MOOSE | PRISMA 2020 (use both) |
| Risk of bias (DTA studies) | QUADAS-3 (current recommended version) | QUADAS-2 only when appraising or reproducing a review that used it |
| Risk of bias (RCTs) | RoB 2 | -- |
| Risk of bias (non-randomised intervention studies) | ROBINS-I | -- |
| Risk of bias (non-randomised exposure studies) | ROBINS-E | -- |
| Risk of bias (comparative DTA studies) | QUADAS-C | QUADAS-3 (use both; apply the E&E's adaptation — see Using QUADAS-C with QUADAS-3 in QUADAS3.md) |
| Risk of bias (prediction models) | PROBAST | PROBAST+AI |
| Risk of bias (systematic reviews) | ROBIS | AMSTAR 2 |
| Risk of bias (missing evidence in MA) | ROB-ME | -- |
| Risk of bias (network meta-analysis) | RoB NMA | -- |
| Risk of bias (measurement properties) | COSMIN RoB | -- |
| Quality assessment (observational) | NOS | -- |
| Case report | CARE | -- |
| Study protocol | SPIRIT 2025 | SPIRIT-AI |
| Animal study | ARRIVE 2.0 | -- |
| AI/ML study in clinical imaging | CLAIM 2024 | -- |
| Study using a large language model (develop/fine-tune/prompt/evaluate an LLM) | TRIPOD-LLM | MI-CLEAR-LLM (use alongside when LLM accuracy is an outcome) |
| Early-stage / live clinical evaluation of an AI decision-support system (human factors, workflow, safety) | DECIDE-AI | -- |
| LLM accuracy evaluation in healthcare | MI-CLEAR-LLM | STARD-AI or CLAIM 2024 (use alongside) |
| Reliability / agreement study | GRRAS | -- |
| SR protocol | PRISMA-P | -- |
| Synthesis without meta-analysis | SWiM | PRISMA 2020 (use both) |
| Quality of systematic reviews | AMSTAR 2 | ROBIS |
| Radiomics study | CLEAR | CLAIM 2024 (if deep learning component) |
| Educational / QI study | SQUIRE 2.0 | -- |
| Generative AI images ARE the study object (realism / real-vs-synthetic reader study / model-vs-model quality) | (no single guideline -- assemble) | see decision aid below |
QUADAS-3 has two protocol-stage phases, and this skill usually runs too late for them. Phase 1 (state the synthesis question) and phase 2 (define the ideal test accuracy trial each judgement is made against) are review-level and belong in the protocol, with the review-specific guidance for answering each signalling question. Reaching them for the first time during manuscript QC means writing the comparator after seeing the results. If they are missing, say so as a limitation rather than reconstructing them, and route the protocol work to
/meta-analysisPhase 1. Phases 3–6 are what a QC pass can genuinely run.
Rules:
/check-reporting STARD-AI. Do not switch or add instruments on your own: the user maps the report
to the checklist form the journal asked for.${CLAUDE_SKILL_DIR}/references/genai_image_study_object_decision_aid.md.Run the fail-fast guard first for every guideline you intend to apply:
python "${CLAUDE_SKILL_DIR}/scripts/check_checklist_exists.py" --guideline "STARD-AI"
${CLAUDE_SKILL_DIR}/references/checklists/ and proceed.MISSING_CHECKLIST_CONTRACT_VIOLATION) → the guideline is routed but no checklist
file is vendored. Do not construct items from memory. Halt, report the violation to the
user, and stop unless they explicitly opt in (next bullet).UNKNOWN_GUIDELINE) → the name is not recognised; confirm the correct guideline
with the user.No silent fallback. A from-memory checklist is permitted only when the user explicitly
accepts it — re-run the guard with --allow-from-memory (exit 0 + a NON-AUTHORITATIVE
warning). The report MUST then carry a prominent banner that the assessment was constructed
from model knowledge and is not backed by a vendored checklist, and submission_safe must not
be asserted on its basis.
Read the whole manuscript before assessing any item — including tables, figures and their captions, supplementary material, and the reference list (registration numbers and protocol references often sit there).
Items most often missing in medical manuscripts — look for these first, whichever guideline applies: registration number and registration/amendment date consistency (run Step 4c), sample-size justification, missing-data handling, blinding, funding and conflicts of interest, ethics approval with committee name and approval number, and a data availability statement; for AI studies, the training/validation/test split, model architecture and hyperparameters, failure-mode analysis, fairness/bias assessment, and commercial interests with data/code availability.
For every checklist item, determine:
| Status | Criteria |
|---|---|
| PRESENT | The item is fully addressed with sufficient detail. |
| PARTIAL | The item is mentioned or partially addressed but lacks required detail. |
| MISSING | The item is not found anywhere in the manuscript. |
| N/A | The item does not apply to this particular study (justify why). |
For each item, record:
Be strict. PARTIAL means the item is mentioned but lacks specificity; a vague reference does not count as PRESENT — the detail level must match what the guideline expects. "We used appropriate statistical tests" = PARTIAL (which tests?); "We used the Mann-Whitney U test for continuous variables and Fisher's exact test for categorical variables" = PRESENT. If an item is genuinely unclear in its applicability, mark it N/A with justification.
Two gaps that are easy to pass:
What is appraised is the source paper's reporting — never your convenience in using it. This holds for every instrument here, reporting checklists and risk-of-bias / quality tools alike, and is easiest to lose in a systematic review, where you read each paper in order to extract from it. An item asking "are the results clearly reported?" is not asking "were they reported in the unit my pool needs". If a downgrade's stated reason turns on a denominator, an analysis unit, a subgroup you needed and they did not report separately, or a format you could not parse, it is an extraction note, not a scoring reason: record it in a separate extraction-note column and restore the score. An extraction limitation often belongs in your limitations paragraph; folded into the score it makes the appraisal unreproducible, because another assessor with a different pool would score the same paper differently.
In addition to checklist items, verify that:
[BOUNDARY].Applies to: systematic reviews, meta-analyses, and intervention studies with prospective registration (PRISMA 2020, PRISMA-DTA, PRISMA-P, MOOSE, CONSORT, SPIRIT). The registration identifier is a single checklist item and can pass Step 4 while the manuscript is inconsistent about when registration and amendments happened relative to the analysis.
Read ${CLAUDE_SKILL_DIR}/references/step4c_registration_timing.md (item-by-item procedure,
JSON schema, flagging edge cases) and run its five checks: (1) registration identifier present in
Methods, Abstract, and cover letter; (2) initial registration date precedes — or is explicitly
disclosed as post-dating — the extraction milestone; (3) amendment dates appear in Methods, the
described change is visible in Methods, analysis was re-run if the amendment post-dates the lock,
and no amendment post-dates submission; (4) Methods agree with the registry record (PROSPERO PDF,
ClinicalTrials.gov export) — a silent discrepancy is a finding; (5) a retrospective-registration
disclosure paragraph when evidence suggests post-extraction filing.
Flagging: any failure is logged in Part C Action Items with label [REGISTRATION-TIMING].
fixable_by_ai: false when reconciliation requires an external amendment filing; true only when
the fix is a Methods-text insertion of a date already disclosed elsewhere. Part D JSON includes a
registration_timing object (registry, id, initial_registration_date, amendments[],
timing_consistency, findings[]).
Registration-ID format gate: a PROSPERO ID is CRD42 + 9 digits = 14 characters
(^CRD42\d{9}$, e.g. CRD42024500001). Run grep -oE 'CRD42[0-9]+' manuscript.md and
assert each match is 14 characters long; a 15-character ID (a stray inserted digit) is a
transcription error logged as [REGISTRATION-TIMING] (fixable_by_ai: false — verify against
the live PROSPERO record, do not guess the correct digit).
Applies to: systematic reviews and meta-analyses using PRISMA 2020 / PRISMA-DTA / PRISMA-P. Triggers when Item 16a (flow diagram) is PRESENT — the diagram can pass Step 4 while its numbers do not add up or disagree with the text.
Choose the Figure 1 source, in this order: (a) analysis/figures/Figure1_PRISMA.md markdown
manifest, (b) caption text in manuscript.md, (c) PPTX text run if a .pptx exists,
(d) manual entry from PNG/SVG.
Run the audit. It checks the five subtractions (screened = identified − duplicates;
sought-for-retrieval = screened − excluded at screening; retrieved = sought − not retrieved;
assessed for eligibility = sought − not retrieved; included = assessed for eligibility −
excluded with reasons) and that the body-text PRISMA
numbers match the Figure 1 boxes 1:1, and writes qc/prisma_figure_audit.json:
python3 ${CLAUDE_SKILL_DIR}/scripts/check_prisma_figure.py \
--md <manuscript.md> --figure <Figure 1 source: .md manifest / caption / text export> \
--out qc/prisma_figure_audit.json
Exit 1 = an arithmetic or cross-reference MISMATCH; exit 2 = missing/unparsable input.
When the Figure 1 numbers exist only in a PNG/SVG, transcribe them by hand and run the same
checks manually as ${CLAUDE_SKILL_DIR}/references/step4d_prisma_figure_audit.md specifies
(regex set, JSON schema, and edge cases: duplicates across databases, the citation-searching
strand, dual-reviewer screening).
By hand (the script does not do this): the reasons for exclusion in Methods and the Figure
legend must agree on counts and category names, and when identification is split across
sources (databases, registers, other methods) the per-source counts must sum to the
identified total — the script reads only the first identified count.
If analysis/figures/_figure_manifest.md (from /make-figures) exists, verify that the row
whose Type = prisma (or Type = prisma-dta) points at the same file used as the audit
source, and that its Critic field is yes or partial (not no). A missing row,
mismatched path, or Critic = no logs [MANIFEST-XREF] (advisory); the arithmetic check
still runs.
Flagging: any MISMATCH or arithmetic failure logs a Part C Action Item with label
[PRISMA-FIGURE], fixable_by_ai: false (the author must reconcile the numbers).
When PRISMA 2020 or PRISMA-DTA is selected and round-by-round screening TSV artifacts are
available, recompute the screening cascade from the raw decisions. Off-by-one errors in the prose
cascade are a high-frequency reviewer red flag (e.g., 151 + 108 + 39 + 1 + 1 + 4 = 304
followed by a prose summary "305" four lines later).
python "${CLAUDE_SKILL_DIR}/scripts/prisma_cascade_check.py" \
--round1 2_Screening/round1.tsv \
--round2 2_Screening/round2.tsv \
--round3 2_Screening/round3_adjudication.tsv \
--manuscript manuscript.md \
--out qc/prisma_cascade.json --strict
The script counts INCLUDE / EXCLUDE / MAYBE decisions per round, computes the cascade, and
reports per-stage drift where the manuscript's stage counts disagree. Treat any
manuscript_drift entry as a P0 blocker — fix the prose to match the computed cascade and re-run.
A --manuscript path that is not a file exits 2. When the manuscript is read but none of the
script's stage phrases is found in it, manuscript_check is "unverifiable",
submission_safe is false, an UNVERIFIED line is printed, and --strict exits 1: the
drift check did not run, so compare the prose stage counts to stage_counts by hand.
stages_compared lists the stages that were actually checked.
Applies to: any manuscript that invokes an AI/extension reporting framework
(PROBAST+AI, STARD-AI, TRIPOD+AI, TRIPOD-LLM, CONSORT-AI, SPIRIT-AI, PRISMA-DTA, QUADAS-C).
A base reporting tool and its extension are distinct instruments with separate citations, and
Step 1 does not police how the framework is named in prose. The recurring failures: invoking an
extension without ever naming or citing the base instrument it extends; mixing +AI and -AI
hyphenation for one family within a single document; coining item labels like "12-AI"; and waving
at "recent guidance" instead of naming the framework.
python3 "${CLAUDE_SKILL_DIR}/scripts/check_framework_naming.py" \
--manuscript manuscript.md --out qc/framework_naming.json --strict
Verdicts: BASE_MISSING (extension used, base instrument never named standalone) is a
Major and logs [FRAMEWORK-NAMING] in Part C with fixable_by_ai: true (insert the base
name + its citation). HYPHEN_MIX, CITE_MISSING, SELF_COINED_LABEL, and VAGUE_GUIDANCE
are Minor (fixable_by_ai: true). Part D JSON includes a framework_naming object mirroring
the script's claims[].
Applies to: every guideline assessment for which the floor defines a row (load and
check only those; do not invent a floor for an unlisted guideline). After the item-by-item
table, read ${CLAUDE_SKILL_DIR}/references/critical_item_floor.md and check the small set of
non-waivable items for this study type — and, for AI/ML and radiomics manuscripts, the
methodological-quality / risk-of-bias instrument (PROBAST+AI, METRICS/RQS, APPRAISE-AI) and
concerns it lists. A MISSING critical item is surfaced as a Critical gap and becomes the
report's headline regardless of the overall percentage — a high percentage with a missing
critical item (undefined reference standard, no leakage-controlled partition, calibration absent
for a prediction model, an unreconciled flow diagram) is not "broadly acceptable."
This report is an internal working audit — it carries auto-fix annotations, a
machine-readable JSON block (compliance_pct, fixable_by_ai, …), and Action Items. It is
NOT the official reporting checklist a journal expects (that is the blank guideline form with
Item | Recommendation | Reported in page/section, which the authors fill in). Never submit
this report as the submission checklist. So that the file is self-identifying and cannot be
reused by filename into a later submission package, the report MUST begin with this banner as
its very first line:
<!-- INTERNAL AUDIT — NOT FOR SUBMISSION. This is the /check-reporting working
report, not the official journal checklist. Do not upload to a submission portal. -->
Write the checklist content and report in English (matching the guideline originals), whatever
language you use with the user. Save it as qc/reporting_checklist.md and the Part D JSON as
qc/reporting_checklist.json.
Read ${CLAUDE_SKILL_DIR}/references/report_templates.md when you write the report — it holds the
literal templates for the four parts:
{present}/{total} and name every missing
critical item with the section it belongs in.# | Section | Item | Status | Location | Notes.--json or when called from /write-paper Phase 7, which parses it.JSON field contract (the part other skills depend on — get these right):
compliance_pct — present / (total_items - na) * 100, one decimal; null when every item
is N/A (total_items == na).action_items — MISSING and PARTIAL only; PRESENT and N/A are excluded.fixable_by_ai — true when the fix inserts or expands text using information already in the
manuscript or inferable from it; false when it needs external facts the author alone holds
(registration number, IRB approval number, protocol details, sample-size rationale and target).suggested_fix — concrete draft text, insertable as written. A fix that still contains a
bracketed placeholder ([N], [rationale]) is not insertable and is fixable_by_ai: false.source_sha256 — first 12 hex chars of the SHA-256 of the manuscript bytes, so a stale report
cannot be silently attributed to a newer manuscript.In notes and suggested fixes, cite a reference only with a /search-lit-confirmed DOI or PMID and
mark any other [UNVERIFIED - NEEDS MANUAL CHECK]; never invent clinical definitions, diagnostic
criteria, or guideline recommendations — flag anything uncertain [VERIFY] and ask the user.
When the user asks for the filled checklist a journal requires, build it from the Submission
checklist export template in ${CLAUDE_SKILL_DIR}/references/report_templates.md.
| When | Call | Purpose |
|---|---|---|
| During manuscript writing | /write-paper Phase 7 | Final compliance check |
| Need to add Methods text | /write-paper Phase 3 | Draft missing Methods content |
| Need statistical details | /analyze-stats | Generate missing statistical reporting |
| Need flow diagram | /make-figures | Generate CONSORT/STARD/PRISMA diagram |
| Gate | Severity | Trigger | Action on fail |
|---|---|---|---|
| Mandatory items present | ENFORCED at submission | < 100% of guideline-mandatory items marked PRESENT | Auto-fix MISSING items where text exists; otherwise route to /write-paper Phase 7 for re-draft |
| Step 4d PRISMA Figure 1 arithmetic & cross-reference audit (PRISMA / PRISMA-DTA only) | ENFORCED for SR/MA | flow numbers don't sum (e.g., screened ≠ included + excluded), or in-text counts mismatch flow diagram | HALT; reconcile against extraction artifacts |
| Optional items (e.g., supplementary AI declarations) | ADVISORY | < 80% of optional items present | warn; user accepts |
| Cross-reporting-guideline routing (study type → guideline) | ENFORCED | study type undeclared or guideline missing | Ask user; do not silently default |