medsci-skills 5.23.0 → 5.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. package/README.md +58 -11
  2. package/README.zh-CN.md +1048 -0
  3. package/metadata/distribution_files.json +539 -299
  4. package/metadata/distribution_manifest.json +2 -1
  5. package/metadata/skills_catalog.json +11 -1
  6. package/package.json +1 -1
  7. package/skills/academic-aio/SKILL.md +9 -1
  8. package/skills/check-reporting/SKILL.md +54 -15
  9. package/skills/check-reporting/references/LICENSES.md +76 -52
  10. package/skills/check-reporting/references/checklists/AMSTAR2.md +17 -1
  11. package/skills/check-reporting/references/checklists/ARRIVE_2.md +95 -118
  12. package/skills/check-reporting/references/checklists/CARE.md +9 -1
  13. package/skills/check-reporting/references/checklists/CHEERS_2022.md +4 -0
  14. package/skills/check-reporting/references/checklists/CLAIM_2024.md +7 -0
  15. package/skills/check-reporting/references/checklists/CLEAR.md +3 -0
  16. package/skills/check-reporting/references/checklists/CONSORT.md +7 -1
  17. package/skills/check-reporting/references/checklists/CONSORT_AI.md +14 -3
  18. package/skills/check-reporting/references/checklists/COREQ.md +2 -1
  19. package/skills/check-reporting/references/checklists/COSMIN_RoB.md +65 -61
  20. package/skills/check-reporting/references/checklists/CROSS.md +78 -58
  21. package/skills/check-reporting/references/checklists/DECIDE_AI.md +13 -4
  22. package/skills/check-reporting/references/checklists/GATHER.md +42 -23
  23. package/skills/check-reporting/references/checklists/GRRAS.md +42 -21
  24. package/skills/check-reporting/references/checklists/MI_CLEAR_LLM.md +6 -1
  25. package/skills/check-reporting/references/checklists/MOOSE.md +10 -3
  26. package/skills/check-reporting/references/checklists/NOS.md +28 -8
  27. package/skills/check-reporting/references/checklists/PGS_RS.md +8 -1
  28. package/skills/check-reporting/references/checklists/PRISMA_2020.md +18 -7
  29. package/skills/check-reporting/references/checklists/PRISMA_2020_Abstracts.md +96 -0
  30. package/skills/check-reporting/references/checklists/PRISMA_DTA.md +123 -36
  31. package/skills/check-reporting/references/checklists/PRISMA_P.md +6 -0
  32. package/skills/check-reporting/references/checklists/PRISMA_ScR.md +65 -20
  33. package/skills/check-reporting/references/checklists/PROBAST.md +60 -35
  34. package/skills/check-reporting/references/checklists/PROBAST_AI.md +4 -0
  35. package/skills/check-reporting/references/checklists/QUADAS2.md +107 -45
  36. package/skills/check-reporting/references/checklists/QUADAS3.md +242 -0
  37. package/skills/check-reporting/references/checklists/QUADAS_C.md +29 -6
  38. package/skills/check-reporting/references/checklists/RECORD.md +6 -1
  39. package/skills/check-reporting/references/checklists/REMARK.md +21 -13
  40. package/skills/check-reporting/references/checklists/ROBINS_E.md +14 -3
  41. package/skills/check-reporting/references/checklists/ROBINS_I.md +34 -8
  42. package/skills/check-reporting/references/checklists/ROBIS.md +26 -4
  43. package/skills/check-reporting/references/checklists/ROB_ME.md +15 -1
  44. package/skills/check-reporting/references/checklists/RoB2.md +106 -52
  45. package/skills/check-reporting/references/checklists/RoB_NMA.md +91 -68
  46. package/skills/check-reporting/references/checklists/SPIRIT.md +8 -2
  47. package/skills/check-reporting/references/checklists/SPIRIT_AI.md +14 -3
  48. package/skills/check-reporting/references/checklists/SQUIRE_2.md +6 -1
  49. package/skills/check-reporting/references/checklists/SRQR.md +2 -1
  50. package/skills/check-reporting/references/checklists/STARD.md +115 -124
  51. package/skills/check-reporting/references/checklists/STROBE.md +8 -0
  52. package/skills/check-reporting/references/checklists/STROBE_MR.md +128 -62
  53. package/skills/check-reporting/references/checklists/SWiM.md +20 -9
  54. package/skills/check-reporting/references/checklists/TARGET.md +10 -3
  55. package/skills/check-reporting/references/checklists/TRIPOD.md +10 -2
  56. package/skills/check-reporting/references/checklists/TRIPOD_AI.md +14 -7
  57. package/skills/check-reporting/references/checklists/TRIPOD_LLM.md +12 -1
  58. package/skills/clean-data/SKILL.md +1 -1
  59. package/skills/contribute/scripts/check_contribution_safety.py +30 -4
  60. package/skills/contribute/tests/test_contribution_safety.sh +40 -3
  61. package/skills/define-variables/SKILL.md +8 -0
  62. package/skills/fill-protocol/scripts/fill_form.py +48 -23
  63. package/skills/fill-protocol/tests/test_fill_form_newlines.sh +141 -0
  64. package/skills/find-journal/SKILL.md +1 -1
  65. package/skills/find-journal/references/journal_profiles/AJKD.md +34 -0
  66. package/skills/find-journal/references/journal_profiles/European_Journal_of_Preventive_Cardiology.md +1 -1
  67. package/skills/find-journal/references/journal_profiles/JACC_Advances.md +2 -2
  68. package/skills/find-journal/references/journal_profiles/JASN.md +34 -0
  69. package/skills/find-journal/references/journal_profiles/Journal_of_Clinical_Endocrinology_and_Metabolism.md +1 -1
  70. package/skills/find-journal/references/journal_profiles/Kidney_International.md +34 -0
  71. package/skills/find-journal/references/journal_profiles/Korean_Circulation_Journal.md +1 -1
  72. package/skills/find-journal/references/journal_profiles/Nutrition_Metabolism_and_Cardiovascular_Diseases.md +1 -1
  73. package/skills/humanize/SKILL.md +8 -0
  74. package/skills/humanize/scripts/check_sentence_variety.py +43 -1
  75. package/skills/humanize/tests/fixtures/variety_long_within_bound.md +3 -0
  76. package/skills/humanize/tests/fixtures/variety_overlong.md +3 -0
  77. package/skills/humanize/tests/test_sentence_variety.sh +45 -0
  78. package/skills/lit-sync/SKILL.md +46 -8
  79. package/skills/lit-sync/references/bbt_lookup.md +57 -0
  80. package/skills/lit-sync/scripts/check_citekey_provenance.py +210 -0
  81. package/skills/lit-sync/skill.yml +2 -0
  82. package/skills/lit-sync/tests/citekey_provenance_challenge.sh +117 -0
  83. package/skills/lit-sync/tests/citekey_provenance_challenge_selftest.sh +85 -0
  84. package/skills/lit-sync/tests/test_poll_logic.sh +14 -4
  85. package/skills/make-figures/SKILL.md +8 -0
  86. package/skills/make-figures/references/reporting_guideline_figure_map.md +2 -2
  87. package/skills/manage-refs/SKILL.md +35 -10
  88. package/skills/manage-refs/citation_styles/README.md +31 -3
  89. package/skills/manage-refs/citation_styles/american-medical-association.csl +298 -0
  90. package/skills/manage-refs/references/check_xref_symptoms.md +40 -1
  91. package/skills/manage-refs/scripts/check_citation_keys.py +38 -3
  92. package/skills/manage-refs/scripts/check_xref.py +122 -15
  93. package/skills/manage-refs/scripts/fill_journal_abbrev.py +11 -2
  94. package/skills/manage-refs/scripts/pre_submission_gate.sh +6 -2
  95. package/skills/manage-refs/tests/fixtures/pre_submission_gate/run.sh +10 -4
  96. package/skills/manage-refs/tests/test_citation_key_boundaries.sh +114 -0
  97. package/skills/manage-refs/tests/test_journal_abbrev_parsing.sh +107 -0
  98. package/skills/manage-refs/tests/test_xref_plural_citations.sh +119 -0
  99. package/skills/manage-refs/tests/test_xref_separate_supplement.sh +140 -0
  100. package/skills/meta-analysis/SKILL.md +93 -16
  101. package/skills/meta-analysis/references/checklists/NOS.md +28 -8
  102. package/skills/meta-analysis/references/checklists/PRISMA_DTA.md +123 -36
  103. package/skills/meta-analysis/references/checklists/PROBAST.md +60 -35
  104. package/skills/meta-analysis/references/checklists/QUADAS2.md +107 -45
  105. package/skills/meta-analysis/references/checklists/QUADAS3.md +242 -0
  106. package/skills/meta-analysis/references/checklists/ROBINS_I.md +34 -8
  107. package/skills/meta-analysis/references/checklists/RoB2.md +106 -52
  108. package/skills/meta-analysis/references/empirical_lessons.md +2 -1
  109. package/skills/meta-analysis/references/phase4_extraction_detail.md +1 -1
  110. package/skills/meta-analysis/references/phase6_statistical_synthesis.md +131 -7
  111. package/skills/model-validation/SKILL.md +3 -3
  112. package/skills/model-validation/references/validation_design.md +1 -1
  113. package/skills/obsidian-paper-vault/SKILL.md +144 -0
  114. package/skills/obsidian-paper-vault/assets/example_concept_note.md +50 -0
  115. package/skills/obsidian-paper-vault/assets/example_paper_note.md +51 -0
  116. package/skills/obsidian-paper-vault/assets/example_queue.md +52 -0
  117. package/skills/obsidian-paper-vault/references/concept-extraction.md +91 -0
  118. package/skills/obsidian-paper-vault/references/locale/ko/note_templates.md +127 -0
  119. package/skills/obsidian-paper-vault/references/subagent-prompt.md +100 -0
  120. package/skills/obsidian-paper-vault/references/tag-vocabulary.md +60 -0
  121. package/skills/obsidian-paper-vault/references/templates.md +145 -0
  122. package/skills/obsidian-paper-vault/references/workflow.md +85 -0
  123. package/skills/obsidian-paper-vault/scripts/extract_pdfs.py +85 -0
  124. package/skills/obsidian-paper-vault/skill.yml +54 -0
  125. package/skills/orchestrate/SKILL.md +11 -1
  126. package/skills/peer-review/SKILL.md +66 -171
  127. package/skills/peer-review/references/domain-probes/ai_overclaiming.md +2 -2
  128. package/skills/peer-review/references/domain-probes/clinical_prediction_model.md +2 -2
  129. package/skills/peer-review/references/domain-probes/diagnostic_accuracy.md +8 -2
  130. package/skills/peer-review/references/domain-probes/model_development.md +18 -2
  131. package/skills/peer-review/references/domain-probes/narrative_review.md +10 -0
  132. package/skills/peer-review/references/domain-probes/observational_confounding.md +13 -3
  133. package/skills/peer-review/references/domain-probes/radiomics.md +10 -0
  134. package/skills/peer-review/references/domain-probes/sr_ma.md +2 -2
  135. package/skills/peer-review/references/domain-probes/survival_prognostic.md +10 -0
  136. package/skills/peer-review/references/reviewer_calibration/recommendation_calibration.md +92 -0
  137. package/skills/peer-review/references/reviewer_profiles/EURE.md +12 -5
  138. package/skills/peer-review/references/reviewer_profiles/INSI.md +1 -1
  139. package/skills/peer-review/references/reviewer_profiles/README.md +41 -3
  140. package/skills/peer-review/references/reviewer_profiles/RYAI.md +28 -4
  141. package/skills/polish-language/scripts/lint_consistency.py +27 -0
  142. package/skills/polish-language/tests/test_numeral_designators.sh +84 -0
  143. package/skills/preprocess-imaging/SKILL.md +15 -0
  144. package/skills/preprocess-imaging/scripts/check_normalizer_domain.py +196 -0
  145. package/skills/preprocess-imaging/scripts/check_normalizer_domain_challenge/expected/arbitrary_mismatch.txt +10 -0
  146. package/skills/preprocess-imaging/scripts/check_normalizer_domain_challenge/expected/hu_clean.txt +9 -0
  147. package/skills/preprocess-imaging/scripts/check_normalizer_domain_challenge/fixture/plan_ct.json +25 -0
  148. package/skills/preprocess-imaging/scripts/check_normalizer_domain_challenge/fixture/profile_arbitrary.json +236 -0
  149. package/skills/preprocess-imaging/scripts/check_normalizer_domain_challenge/fixture/profile_hu.json +144 -0
  150. package/skills/preprocess-imaging/scripts/check_normalizer_domain_challenge/problem.md +42 -0
  151. package/skills/preprocess-imaging/scripts/check_normalizer_domain_challenge/verify.sh +46 -0
  152. package/skills/present-paper/SKILL.md +201 -4
  153. package/skills/present-paper/references/ai_slide_tells.md +49 -0
  154. package/skills/present-paper/references/generate_pptx_templates.py +6 -1
  155. package/skills/present-paper/scripts/check_deck_budget.py +23 -2
  156. package/skills/present-paper/scripts/check_deck_budget_challenge/make_fixtures.py +59 -2
  157. package/skills/present-paper/scripts/check_deck_budget_challenge/verify.sh +40 -0
  158. package/skills/present-paper/scripts/check_diagram_edges.py +160 -0
  159. package/skills/present-paper/scripts/check_diagram_edges_challenge/make_fixtures.py +65 -0
  160. package/skills/present-paper/scripts/check_diagram_edges_challenge/verify.sh +84 -0
  161. package/skills/present-paper/scripts/check_font_portability.py +353 -0
  162. package/skills/present-paper/scripts/check_font_portability_challenge/make_fixtures.py +111 -0
  163. package/skills/present-paper/scripts/check_font_portability_challenge/verify.sh +99 -0
  164. package/skills/present-paper/scripts/check_slide_tells.py +90 -2
  165. package/skills/present-paper/scripts/check_text_overflow.py +266 -0
  166. package/skills/present-paper/scripts/check_text_overflow_challenge/make_fixtures.py +103 -0
  167. package/skills/present-paper/scripts/check_text_overflow_challenge/verify.sh +100 -0
  168. package/skills/present-paper/skill.yml +11 -0
  169. package/skills/present-paper/tests/test_slide_page_numbers.sh +72 -0
  170. package/skills/publish-skill/scripts/audit_skill.sh +5 -2
  171. package/skills/render-pdf-doc/SKILL.md +16 -2
  172. package/skills/revise/SKILL.md +5 -2
  173. package/skills/search-lit/SKILL.md +67 -0
  174. package/skills/search-lit/scripts/check_doi_record_match.py +276 -0
  175. package/skills/search-lit/scripts/check_doi_record_match_challenge/fixture/cache/10.1000%2Fmarkup.005.json +9 -0
  176. package/skills/search-lit/scripts/check_doi_record_match_challenge/fixture/cache/10.1000%2Fmatch.001.json +9 -0
  177. package/skills/search-lit/scripts/check_doi_record_match_challenge/fixture/cache/10.1000%2Fother.002.json +9 -0
  178. package/skills/search-lit/scripts/check_doi_record_match_challenge/fixture/cache/10.1000%2Fsuppl.003.json +9 -0
  179. package/skills/search-lit/scripts/check_doi_record_match_challenge/fixture/screening.tsv +7 -0
  180. package/skills/search-lit/scripts/check_doi_record_match_challenge/verify.sh +110 -0
  181. package/skills/search-lit/skill.yml +4 -0
  182. package/skills/self-review/SKILL.md +18 -5
  183. package/skills/self-review/references/domain-probes/ai_overclaiming.md +2 -2
  184. package/skills/self-review/references/domain-probes/clinical_prediction_model.md +2 -2
  185. package/skills/self-review/references/domain-probes/diagnostic_accuracy.md +8 -2
  186. package/skills/self-review/references/domain-probes/model_development.md +18 -2
  187. package/skills/self-review/references/domain-probes/narrative_review.md +10 -0
  188. package/skills/self-review/references/domain-probes/observational_confounding.md +13 -3
  189. package/skills/self-review/references/domain-probes/radiomics.md +10 -0
  190. package/skills/self-review/references/domain-probes/sr_ma.md +2 -2
  191. package/skills/self-review/references/domain-probes/survival_prognostic.md +10 -0
  192. package/skills/self-review/references/panel_review_template.md +30 -0
  193. package/skills/self-review/references/phases/phase2_5b_screening_counts.md +4 -2
  194. package/skills/self-review/references/phases/phase2_5d_xref_qc.md +14 -5
  195. package/skills/self-review/scripts/_qc_findings.py +57 -4
  196. package/skills/self-review/scripts/check_binning_consistency.py +5 -2
  197. package/skills/self-review/scripts/check_claim_artifact.py +8 -1
  198. package/skills/self-review/scripts/check_figure_citation.py +38 -15
  199. package/skills/self-review/scripts/check_panel_diversity.py +30 -2
  200. package/skills/self-review/scripts/check_table_percentages.py +34 -2
  201. package/skills/self-review/scripts/refinement_stop.py +11 -0
  202. package/skills/self-review/tests/fixtures/claim_body_reassign.md +3 -0
  203. package/skills/self-review/tests/fixtures/claim_frontmatter_changelog.md +15 -0
  204. package/skills/self-review/tests/fixtures/cv_leakage_bad.md +2 -1
  205. package/skills/self-review/tests/fixtures/supplement_pii_clean.md +1 -1
  206. package/skills/self-review/tests/fixtures/supplement_pii_tie.md +1 -1
  207. package/skills/self-review/tests/test_claim_artifact.sh +17 -0
  208. package/skills/self-review/tests/test_figure_citation_labels.sh +122 -0
  209. package/skills/self-review/tests/test_panel_diversity.sh +34 -0
  210. package/skills/self-review/tests/test_qc_severity_vocabulary.sh +94 -0
  211. package/skills/self-review/tests/test_table_percent_denominator.sh +116 -0
  212. package/skills/sync-submission/scripts/build_marked_manuscript.py +36 -4
  213. package/skills/sync-submission/scripts/check_asset_anonymization.py +15 -2
  214. package/skills/sync-submission/scripts/check_credit_integrity.py +1 -1
  215. package/skills/sync-submission/scripts/check_wordcount_cap.py +23 -3
  216. package/skills/sync-submission/tests/test_anonymization_config_scan.sh +74 -0
  217. package/skills/sync-submission/tests/test_cross_artifact_stale.sh +3 -3
  218. package/skills/sync-submission/tests/test_marked_build_failure.sh +126 -0
  219. package/skills/sync-submission/tests/test_wordcount_heading_forms.sh +85 -0
  220. package/skills/verify-refs/scripts/verify_refs.py +103 -22
  221. package/skills/verify-refs/tests/test_audit_source_path.sh +100 -0
  222. package/skills/verify-refs/tests/test_bib_last_field.sh +137 -0
  223. package/skills/verify-refs/tests/test_bibtex_et_al.sh +101 -0
  224. package/skills/write-paper/SKILL.md +9 -1
  225. package/skills/write-paper/references/journal_profiles/AJKD.md +138 -0
  226. package/skills/write-paper/references/journal_profiles/European_Journal_of_Preventive_Cardiology.md +1 -1
  227. package/skills/write-paper/references/journal_profiles/JACC_Advances.md +1 -1
  228. package/skills/write-paper/references/journal_profiles/JASN.md +131 -0
  229. package/skills/write-paper/references/journal_profiles/JKMS.md +4 -4
  230. package/skills/write-paper/references/journal_profiles/Journal_of_Clinical_Endocrinology_and_Metabolism.md +1 -1
  231. package/skills/write-paper/references/journal_profiles/Kidney_International.md +122 -0
  232. package/skills/write-paper/references/journal_profiles/Korean_Circulation_Journal.md +1 -1
  233. package/skills/write-paper/references/journal_profiles/Liver_International.md +2 -2
  234. package/skills/write-paper/references/journal_profiles/Nutrition_Metabolism_and_Cardiovascular_Diseases.md +1 -1
  235. package/skills/write-paper/references/phase7_polish_detail.md +12 -5
  236. package/skills/write-paper/scripts/build_title_page_affiliations.py +6 -6
  237. package/skills/write-paper/tests/test_title_page_affiliations.sh +11 -11
  238. package/skills/write-protocol/SKILL.md +8 -0
package/README.md CHANGED
@@ -2,14 +2,16 @@
2
2
 
3
3
  # MedSci Skills
4
4
 
5
- **58 skills that actually work.** Built by a physician-researcher, tested on real publications.
5
+ [English](README.md) | [简体中文](README.zh-CN.md)
6
6
 
7
- *MedSci Skills is an end-to-end research tool for physician and medical-engineering researchers — design → scaffold → validate → publish — for the clinical manuscript and the medical-AI model behind it. Its moat is the compliance layer — 47 reporting guidelines and risk-of-bias tools, reference/citation verification, and deterministic integrity gates before peer review — now extended by a model-engineering lane that scaffolds reproducible, leakage-safe training repos and audits model validation. Clinical AI model research engineering is in scope; a general AI-scientist platform is not. It competes on clinical submission reliability, not skill count.*
7
+ **59 skills that actually work.** Built by a physician-researcher, tested on real publications.
8
+
9
+ *MedSci Skills is an end-to-end research tool for physician and medical-engineering researchers — design → scaffold → validate → publish — for the clinical manuscript and the medical-AI model behind it. Its moat is the compliance layer — 49 reporting guidelines and risk-of-bias tools, reference/citation verification, and deterministic integrity gates before peer review — now extended by a model-engineering lane that scaffolds reproducible, leakage-safe training repos and audits model validation. Clinical AI model research engineering is in scope; a general AI-scientist platform is not. It competes on clinical submission reliability, not skill count.*
8
10
 
9
11
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
10
12
  [![Release](https://img.shields.io/github/v/release/Aperivue/medsci-skills?style=flat-square&color=blue)](https://github.com/Aperivue/medsci-skills/releases/latest)
11
13
  [![CI](https://img.shields.io/github/actions/workflow/status/Aperivue/medsci-skills/validate.yml?branch=main&style=flat-square&label=CI)](https://github.com/Aperivue/medsci-skills/actions/workflows/validate.yml)
12
- ![Skills](https://img.shields.io/badge/Skills-58-brightgreen?style=flat-square)
14
+ ![Skills](https://img.shields.io/badge/Skills-59-brightgreen?style=flat-square)
13
15
  [![npm](https://img.shields.io/npm/v/medsci-skills?style=flat-square&label=npm&color=cb3837)](https://www.npmjs.com/package/medsci-skills)
14
16
  [![npm downloads](https://img.shields.io/npm/dw/medsci-skills?style=flat-square&label=npm%20downloads&color=cb3837)](https://www.npmjs.com/package/medsci-skills)
15
17
  [![Watch the 2-min intro](https://img.shields.io/badge/▶_Watch-2--min_intro-FF0000?style=flat-square&logo=youtube&logoColor=white)](https://youtu.be/MclQ_RIofpE)
@@ -170,9 +172,9 @@ protocol scaffolding, screening/extraction structure, PRISMA-consistent counts a
170
172
  diagram, pooled-estimate figures, and a manuscript draft. *Safety:* screening and
171
173
  extraction decisions stay with the human review team.
172
174
 
173
- ## Live Demos: Four Study Types, Four Full Pipelines
175
+ ## Live Demos: Five Study Types, Five Full Pipelines
174
176
 
175
- Four public datasets. Four study types. Demos 1–3 each produce a complete manuscript, publication-ready figures, and a reporting-compliance audit; Demo 4 runs the medical-AI **model-engineering lane** end to end (scaffold → gates → training → evaluation → interpretability).
177
+ Five public datasets. Five study types. Demos 1–3 each produce a complete manuscript, publication-ready figures, and a reporting-compliance audit; Demo 4 runs the medical-AI **model-engineering lane** end to end (scaffold → gates → training → evaluation → interpretability); Demo 5 takes that lane onto a GPU cluster and out to a **genuinely external cohort**, then reports where it broke.
176
178
 
177
179
  | Demo | Dataset | Study Type | Compliance |
178
180
  |------|---------|------------|------------|
@@ -180,6 +182,7 @@ Four public datasets. Four study types. Demos 1–3 each produce a complete manu
180
182
  | [Demo 2: BCG Vaccine](demo/02_metafor_bcg/) | `metafor::dat.bcg` (13 RCTs) | Meta-analysis | PRISMA 2020 |
181
183
  | [Demo 3: NHANES Obesity](demo/03_nhanes_obesity/) | CDC NHANES 2017-18 | Epidemiology (survey) | STROBE |
182
184
  | [Demo 4: PneumoniaMNIST CNN](demo/04_pneumoniamnist_cnn/) | `medmnist` (CC BY 4.0) | Medical-AI model engineering (CNN) | CLAIM / TRIPOD+AI |
185
+ | [Demo 5: MSD → AMOS spleen](demo/05_msd_amos_spleen/) | MSD Task09 + AMOS22 (CC BY 4.0) | 3-D segmentation, external validation + modality shift | CLAIM / Metrics Reloaded |
183
186
 
184
187
  ### Demo 1: Diagnostic Accuracy — Wisconsin Breast Cancer
185
188
 
@@ -264,6 +267,45 @@ data(dat.bcg) # 13 RCTs, 357,347 participants (Colditz et al. 1994)
264
267
 
265
268
  **Pipeline:** `analyze-stats` → `make-figures` → `write-paper` → AI pattern scan → `check-reporting` (STROBE) → `self-review` → DOCX build → `present-paper`
266
269
 
270
+ ### Demo 5: External Validation — MSD → AMOS spleen segmentation
271
+
272
+ The only demo that leaves the laptop, and the only one that reports a **failure**. It asks whether a
273
+ clinician can carry a deep-learning study to a defensible result without an engineer, then answers by
274
+ running a three-rung external-validation ladder on a GPU cluster and logging every point where the
275
+ answer was no.
276
+
277
+ | Rung | Cohort | n scored | Dice median [95% CI] |
278
+ |---|---|---:|---|
279
+ | 1 internal | MSD held-out | 9 | **0.9595** [0.9367–0.9734] |
280
+ | 2 genuine external | AMOS **CT** | 298 / 300 | **0.8932** [0.8633–0.9108] |
281
+ | 3 modality shift | AMOS **MRI** | 59 / 60 | **0.0152** [0.0000–0.0626] |
282
+ | 3b counterfactual | AMOS MRI, **rescaled** | 59 / 60 | **0.3016** [0.1744–0.4048] |
283
+
284
+ Rung 3 is a **constructed** test, and the demo says so: the evaluation plan named the normalisation
285
+ contract and predicted the collapse *before* inference ran. The trained plan carries `CTNormalization`
286
+ into inference and there is no flag that says "this is MRI", so a Hounsfield-unit clip is applied to
287
+ arbitrary-unit images: **0 of 60 MRI cases contain a negative voxel** (against 300 of 300 on CT), and a
288
+ median **23.2 %** of voxels are flattened at the clip ceiling (against 2.7 %). The run exits 0 and
289
+ returns a file for all 60 cases, 20 of them empty. Only ground truth made it loud.
290
+
291
+ A fourth arm changes **only the input intensity scale** — same checkpoint, no retraining — and
292
+ recovers median Dice to **0.3016** (+0.2864 [+0.1204, +0.4048]) while staying **−0.5916** below the
293
+ CT arm. So both mechanisms are real and differently sized: roughly **0.29 Dice is the preprocessing
294
+ contract, 0.59 a representation that does not transfer**. The arm and its prediction were written
295
+ down before it ran.
296
+
297
+ And `/profile-imaging` **had already flagged the mixed intensity scale before training — as a
298
+ Minor**, where it sat in `qc/` for nine days. So the gap this demo found is not detection; it is
299
+ **routing and severity**. A gate that fires correctly into a directory no later step reads is,
300
+ operationally, a gate that did not fire. See [the full demo](demo/05_msd_amos_spleen/) — including
301
+ [`FRICTION.md`](demo/05_msd_amos_spleen/FRICTION.md), which lists every point that needed engineering
302
+ knowledge, because the headline question is not answerable honestly without it.
303
+
304
+ **Pipeline:** `profile-imaging` → `model-sourcing` → `preprocess-imaging` (leakage gate, plus the
305
+ counterfactual that must fail) → `model-validation` (split gate) → nnU-Net training →
306
+ `model-evaluation` → `make-figures` → write-up. `bash reproduce.sh` re-runs the gates and the whole
307
+ across-cohort analysis on a laptop; training needs ~50 GPU-hours and says so.
308
+
267
309
  ### Project Folder Structure
268
310
 
269
311
  Each demo (and real project) follows this role-based folder layout:
@@ -301,6 +343,8 @@ The E2E pipeline (`orchestrate --e2e`) produces everything up to `qc/`. The `sub
301
343
 
302
344
  ## What's New
303
345
 
346
+ **v5.24.0** — a precision release: the gates were wrong about correct work. Fourteen shipped detectors were telling users something false, and the pattern behind most of them is one thing — a checker that accepts only its own generator's output and rejects the notation the world actually uses. `check_xref` did not recognise **"Figures 1 and 2"**, so a float cited the ordinary way scored `UNCITED` and the submission blocker **turned itself off** (`submission_safe: true` on a package missing a figure). `verify_refs` read BibTeX's own **`and others`** — the et-al. every reference manager writes — as `AUTHOR MISMATCH`, the render-aborting verdict, on correct consortium references; and an entry whose **last** field was the DOI parsed as having none, silently disabling the CrossRef and author cross-checks that skill exists to perform. `check_table_percentages` **invented a denominator** for the most common table in clinical research and printed specific wrong replacement percentages at MAJOR. `lint_consistency` advised writing **"type two diabetes"**. `check_asset_anonymization` passed a **double-blind institution leak** because it sat in a `.yaml`. `check_slide_tells` flagged the page numbers **this repository's own template generator** writes. `fill_journal_abbrev.py` had **never run** — it raised on its first entry, for every input, while another gate named it to the user as the remedy. And `refinement_stop` called a leftover `TODO` an *optional Minor* and told the loop to stop. Also: the release job's own failure had left v5.23.0 with **zero assets** and npm a version behind, with no way to retry a pushed tag — now create-or-update, outcome-asserted, and dispatchable; two of the four documented install paths were broken, and the worse one **succeeded** while making `~/.claude/skills` itself the skill; and the front page said **36** detectors while the catalog, the audit document and the paper said 84. Every fix ships a regression test that goes red against the previous behaviour. No new skill or detector; **58 skills / 47 guidelines / 84 integrity detectors / 23 domain-probe modules**. (See the [CHANGELOG](CHANGELOG.md) for v5.0–v5.23.)
347
+
304
348
  **v5.21** — verification-layer batch, mostly promoted from real submission failures. A **marked (tracked-changes) manuscript** is now built by driving Word's Compare from the command line and proved by a **round trip** — accepting every revision must reproduce the revised paper exactly, rejecting every revision must reproduce the original — and the gate is **move-aware**, because Word encodes a relocated paragraph as `w:moveFrom`/`w:moveTo` and an insert-and-delete-only verifier calls a good file corrupt. Every detector's `qc/*.json` now **names the detector that wrote it**, so an artifact can be traced back to the check that produced it (a CI-enforced contract). Two `/verify-refs` precision defects: a Unicode hyphen in a surname fired `MISMATCH` — the verdict that means *fabricated author* — on a correct reference, and a Better BibTeX brace-protected surname was read as a corporate author, **silently skipping** the author check the tool exists to perform. New gates: publisher markup in a `.bib` title (`<scp>WHO</scp>` renders as garbage and no gate looked at the printed title), **complete/quasi separation** before a logistic model is fitted (a pathognomonic sign has an empty cell by construction; `glm` returns OR = 0.00, *p* = 0.99, and an AUC that gets reported), and a probe + gate for manuscripts claiming a system **improved itself** (which rung of the verification hierarchy said so?). `/find-cohort-gap` now accepts a **local codebook** — an institutional registry or EMR export, not only a named public cohort — enumerating variables verbatim with provenance rather than letting a model summarise them. Additive and backward-compatible; **55 skills / 46 guidelines / 61 integrity detectors / 23 domain-probe modules**. (See the [CHANGELOG](CHANGELOG.md) for v5.0–v5.20.)
305
349
 
306
350
  **v5.20.1** — audit-driven coherence fixes. A real `/orchestrate --e2e` state-transition bug (the pipeline halted at step 3 because it required a DOCX that is only rendered at step 7), all 55 skills made routable from the single entry point with a CI reachability gate, and a README plugin-count that had drifted from the marketplace SSOT (now gated). No skill/detector change.
@@ -416,7 +460,7 @@ Earlier in this series: analysis-integrity guards (confounding completeness, cla
416
460
  | **Battle-tested** | Used on real manuscript submissions by a practicing physician-researcher | Unknown provenance and validation |
417
461
  | **Depth per skill** | 150-600 lines of documentation + bundled reference files (curated journal profile library, checklists, formula sheets, code templates) | Typically thin SKILL.md templates |
418
462
 
419
- **MedSci-Audit** — the verification edge in the first rows above is a named suite of **36 deterministic detectors** (citation & reference integrity, cohort & pool arithmetic, scope/estimand contracts, reporting compliance, and more) that catch fabricated or drifted content before a manuscript reaches a reviewer. See **[`MEDSCI_AUDIT.md`](MEDSCI_AUDIT.md)** for the suite, its six families, and its evaluation evidence.
463
+ **MedSci-Audit** — the verification edge in the first rows above is a named suite of **90 deterministic detectors** (citation & reference integrity, cohort & pool arithmetic, scope/estimand contracts, reporting compliance, and more) that catch fabricated or drifted content before a manuscript reaches a reviewer. See **[`MEDSCI_AUDIT.md`](MEDSCI_AUDIT.md)** for the suite, its six families, and its evaluation evidence.
420
464
 
421
465
  ---
422
466
 
@@ -483,11 +527,11 @@ ma-scout -> search-lit -> fulltext-retrieval -> design-study ──> write-proto
483
527
 
484
528
  ### By research stage
485
529
 
486
- All 58 skills, grouped by where they fit in the clinical-manuscript and medical-AI lifecycle. Full descriptions are in the table below; one page per skill lives in the [per-skill reference](docs/skills/).
530
+ All 59 skills, grouped by where they fit in the clinical-manuscript and medical-AI lifecycle. Full descriptions are in the table below; one page per skill lives in the [per-skill reference](docs/skills/).
487
531
 
488
532
  | Stage | Skills |
489
533
  |-------|--------|
490
- | 🔭 **Discover & scope** | `ma-scout` · `find-cohort-gap` · `search-lit` · `fulltext-retrieval` · `lit-sync` · `author-strategy` |
534
+ | 🔭 **Discover & scope** | `ma-scout` · `find-cohort-gap` · `search-lit` · `fulltext-retrieval` · `lit-sync` · `obsidian-paper-vault` · `author-strategy` |
491
535
  | 📐 **Design & plan** | `design-study` · `calc-sample-size` · `define-variables` · `write-protocol` · `fill-protocol` · `design-ai-benchmarking` |
492
536
  | 🧹 **Data & analysis** | `deidentify` · `clean-data` · `generate-codebook` · `version-dataset` · `analyze-stats` · `batch-cohort` · `cross-national` · `replicate-study` |
493
537
  | 🤖 **Medical-AI model engineering** | `profile-imaging` · `preprocess-imaging` · `architecture-zoo` · `model-scaffold` · `model-validation` · `model-evaluation` · `uncertainty-imaging` · `explainability` · `radiomics-ml` · `model-card` · `mllm-eval` |
@@ -505,7 +549,7 @@ All 58 skills, grouped by where they fit in the clinical-manuscript and medical-
505
549
  | **search-lit** | PubMed + Semantic Scholar + bioRxiv search with anti-hallucination citation verification. Token-efficient error handling -- CrossRef failures are silently batched, not repeated. BibTeX output tags each entry with `verified`/`verified_by`/`verified_on` fields so downstream skills can trust the citation provenance. |
506
550
  | **verify-refs** | Pre-submission reference audit for `.md`, `.docx`, `.bib`, or `.tsv` inputs. Extracts references, verifies DOI/PMID via CrossRef/PubMed when available, and writes `qc/reference_audit.json` as the sole output — row-level status (OK / MISMATCH / UNVERIFIED / FABRICATED) lives inside the JSON `records[]` block. `/search-lit` produces candidate BibTeX; `/lit-sync` owns `manuscript/_src/refs.bib`. |
507
551
  | **fulltext-retrieval** | Batch open-access PDF downloader. Unpaywall → PMC → OpenAlex → CrossRef pipeline. OA-only -- no paywall bypass. Input: DOI list or TSV. Optional PDF→Markdown conversion via [pymupdf4llm](https://pymupdf.readthedocs.io/en/latest/pymupdf4llm/) for token-efficient LLM analysis of academic papers. |
508
- | **check-reporting** | Manuscript compliance audit against 47 reporting guidelines and risk of bias tools (STROBE, STROBE-MR, RECORD, GATHER, STARD, STARD-AI, TRIPOD, TRIPOD+AI, TRIPOD-LLM, PGS-RS, CHEERS 2022, CROSS, SRQR, COREQ, PRISMA, PRISMA-DTA, PRISMA-P, PRISMA-ScR, MOOSE, ARRIVE, CONSORT, CONSORT-AI, CARE, SPIRIT, SPIRIT-AI, CLAIM, DECIDE-AI, SQUIRE 2.0, CLEAR, GRRAS, MI-CLEAR-LLM, SWiM, AMSTAR 2, QUADAS-2, QUADAS-C, RoB 2, ROBINS-I, ROBINS-E, ROBIS, ROB-ME, PROBAST, PROBAST+AI, NOS, COSMIN, RoB NMA). Machine-readable JSON summary with `compliance_pct` and `fixable_by_ai` flags for automated pipeline integration. |
552
+ | **check-reporting** | Manuscript compliance audit against 49 reporting guidelines and risk of bias tools (STROBE, STROBE-MR, RECORD, GATHER, STARD, STARD-AI, TRIPOD, TRIPOD+AI, TRIPOD-LLM, PGS-RS, CHEERS 2022, CROSS, SRQR, COREQ, PRISMA, PRISMA 2020 for Abstracts, PRISMA-DTA, PRISMA-P, PRISMA-ScR, MOOSE, ARRIVE, CONSORT, CONSORT-AI, CARE, SPIRIT, SPIRIT-AI, CLAIM, DECIDE-AI, SQUIRE 2.0, CLEAR, GRRAS, MI-CLEAR-LLM, SWiM, AMSTAR 2, QUADAS-3, QUADAS-2, QUADAS-C, RoB 2, ROBINS-I, ROBINS-E, ROBIS, ROB-ME, PROBAST, PROBAST+AI, NOS, COSMIN, RoB NMA). Machine-readable JSON summary with `compliance_pct` and `fixable_by_ai` flags for automated pipeline integration. |
509
553
  | **analyze-stats** | Statistical analysis code generation (Python/R) for diagnostic accuracy, DTA meta-analysis (bivariate/HSROC), inter-rater agreement, survival analysis, demographics tables, regression (logistic/linear), propensity score (matching/IPTW/overlap weighting), and repeated measures (RM ANOVA/GEE/mixed models). Calibration mandatory for prediction models. |
510
554
  | **meta-analysis** | Full systematic review and meta-analysis pipeline (8 phases). DTA (bivariate/HSROC) and intervention meta-analysis. Protocol to submission-ready manuscript with PRISMA-DTA compliance. |
511
555
  | **make-figures** | Publication-ready figures and visual abstracts: ROC curves, forest plots, PRISMA/CONSORT/STARD flow diagrams, Kaplan-Meier curves, Bland-Altman plots, confusion matrices, and journal-specific visual/graphical abstracts (python-pptx template-based). Communication-first design principles (Nat Hum Behav 2026 — key message, audience, cognitive load, figure-vs-table decision) and five flow-diagram production lessons (official-template fidelity, VML fallback PDF export, docx XML escape, sequential placeholder mapping, version freeze); critic rubric Section G adds 5 communication-first checks. `--study-type` auto-generates the full required figure set; structured `_figure_manifest.md` output for downstream pipeline consumption; D2 enforced as default for flow diagrams. |
@@ -546,6 +590,7 @@ All 58 skills, grouped by where they fit in the clinical-manuscript and medical-
546
590
  | **peer-review** | Structured peer review drafting for medical journals. Systematic manuscript analysis, journal-specific formatting (RYAI, INSI, EURE, AJR, KJR), conciseness targets (500-800 words), and pre-submission QC checklist. Constructive developmental tone. |
547
591
  | **ma-scout** | Meta-analysis topic discovery and feasibility assessment. Two modes: (A) Professor-first — profile → pillar analysis → MA gaps, (B) Topic-first — question → landscape scan → co-author matching. Multi-source validation (PubMed, PROSPERO, bioRxiv) with realistic k estimation (15-30% discount). |
548
592
  | **lit-sync** | Sync research references from .bib files to Zotero library + Obsidian literature notes. Concept extraction from 10+ literature notes with cross-cutting theme discovery. Works after `/search-lit` or standalone. |
593
+ | **obsidian-paper-vault** | Turn a folder of research PDFs into an Obsidian vault: templated literature notes with frontmatter, PDF embed links, and atomic concept notes synthesized across papers. Batch notes are written from pre-extracted text, never from PDF paths handed to subagents. Shares vault folders with `/lit-sync` and never overwrites an existing note. |
549
594
  | **academic-aio** | AI search engine (Perplexity / ChatGPT web / Elicit / Consensus / SciSpace) and RAG visibility checklist for medical AI papers. Integrates TRIPOD+AI, CLAIM, STARD-AI, TRIPOD-LLM, DECIDE-AI reporting anchors with generative-engine-optimization (GEO) principles. Covers title, abstract, structured summary boxes (Key Points / Research in Context / Plain-Language Summary), preprints, GitHub README, `CITATION.cff`, Zenodo, and Hugging Face model/dataset cards. Explicit defense against LLM citation fabrication (Agarwal 2025, Nat Commun). Produces a visible PASS/PARTIAL/FAIL checklist; never applies edits silently. Pairs with `write-paper` Phase 4/6/7, runs after `self-review` + `humanize`. |
550
595
  | **polish-language** | Academic English consistency linting and non-native (ESL) clarity polish. A deterministic linter (`lint_consistency.py`) flags abbreviation define-once violations, US/UK spelling drift, hyphen-vs-en-dash numeric ranges, `P`/`p` case and impossible `P = 0.000`, hyphenation variants, small-number style, and value/unit spacing — then a gated, style-only clarity pass fixes wording without ever changing numbers, citations, or scientific meaning. Distinct from `humanize` (AI-tell removal) and `check-reporting` (guideline items); bundles a reproducible challenge card. |
551
596
  | **manage-refs** | Reference lifecycle as a single skill: citekey ↔ `.bib` validation, journal-CSL pandoc rendering (`render_pandoc.sh`), manuscript ↔ rendered DOCX cross-reference QC (`check_xref.py --strict` is the submission gate), `[N]` ↔ `[@key]` marker conversion, and native Zotero CWYW field-code injection for co-author Word workflows. Hybrid 3-phase strategy (pandoc draft → CWYW transition → Zotero CWYW for circulation/revision/submission). Sole writer of `manuscript_final.docx` and `qc/xref_audit.json`. Split out of `write-paper` Phase 7.6 so `revise`, `peer-review`, `sync-submission`, and `find-journal` can render directly without depending on a sibling skill. |
@@ -592,6 +637,7 @@ MedSci Skills가 설치됐는지 확인하고, 오늘 실습에 쓸 대표 스
592
637
 
593
638
  ```bash
594
639
  git clone https://github.com/Aperivue/medsci-skills.git
640
+ mkdir -p ~/.claude/skills
595
641
  cp -r medsci-skills/skills/* ~/.claude/skills/
596
642
  ```
597
643
 
@@ -599,6 +645,7 @@ cp -r medsci-skills/skills/* ~/.claude/skills/
599
645
 
600
646
  ```bash
601
647
  git clone https://github.com/Aperivue/medsci-skills.git
648
+ mkdir -p ~/.claude/skills
602
649
  cp -r medsci-skills/skills/check-reporting ~/.claude/skills/
603
650
  ```
604
651
 
@@ -692,8 +739,8 @@ Projects declare their source-of-truth layout in `SSOT.yaml`, and a `qc/migratio
692
739
  ### Meta-Analysis Failure Modes
693
740
  `/meta-analysis` ships empirical failure-mode references (data integrity, review orchestration, submission package drift, post-submission release ops) with four automation hooks: `scripts/prisma_5way_consistency.py` (DI-6 PRISMA number consistency), `scripts/extraction_consensus_log_init.py` (DI-1 dual-extraction scaffold), `scripts/tag_cleanup_gate.sh` (DI-8 placeholder tag gate), and `scripts/verify_package_integrity.py` (SPD SHA-256 manifest for submission bundles).
694
741
 
695
- ### 47 Reporting Guidelines & RoB Tools Built-in
696
- `check-reporting` includes bundled checklists for 47 guidelines and risk-of-bias tools: STROBE, STROBE-MR, RECORD, GATHER, STARD, STARD-AI, TRIPOD, TRIPOD+AI, TRIPOD-LLM, PGS-RS, CHEERS 2022, CROSS, SRQR, COREQ, PRISMA 2020, PRISMA-DTA, PRISMA-P, PRISMA-ScR, MOOSE, ARRIVE, CONSORT, CONSORT-AI, CARE, SPIRIT, SPIRIT-AI, CLAIM, DECIDE-AI, SQUIRE 2.0, CLEAR, GRRAS, MI-CLEAR-LLM, SWiM, AMSTAR 2, QUADAS-2, QUADAS-C, RoB 2, ROBINS-I, ROBINS-E, ROBIS, ROB-ME, PROBAST, PROBAST+AI, NOS, COSMIN, RoB NMA. Includes Results/Discussion section boundary checks and machine-readable JSON summary for pipeline integration.
742
+ ### 49 Reporting Guidelines & RoB Tools Built-in
743
+ `check-reporting` includes bundled checklists for 49 guidelines and risk-of-bias tools: STROBE, STROBE-MR, RECORD, GATHER, STARD, STARD-AI, TRIPOD, TRIPOD+AI, TRIPOD-LLM, PGS-RS, CHEERS 2022, CROSS, SRQR, COREQ, PRISMA 2020, PRISMA 2020 for Abstracts, PRISMA-DTA, PRISMA-P, PRISMA-ScR, MOOSE, ARRIVE, CONSORT, CONSORT-AI, CARE, SPIRIT, SPIRIT-AI, CLAIM, DECIDE-AI, SQUIRE 2.0, CLEAR, GRRAS, MI-CLEAR-LLM, SWiM, AMSTAR 2, QUADAS-3, QUADAS-2, QUADAS-C, RoB 2, ROBINS-I, ROBINS-E, ROBIS, ROB-ME, PROBAST, PROBAST+AI, NOS, COSMIN, RoB NMA. Includes Results/Discussion section boundary checks and machine-readable JSON summary for pipeline integration.
697
744
 
698
745
  ### Publication-Ready Output
699
746
  `analyze-stats` generates reproducible Python/R code for 13 analysis types -- including regression, propensity score, and repeated measures -- with mandatory calibration for prediction models. `make-figures` produces journal-specification figures (300 DPI, colorblind-safe palettes, proper dimensions), visual/graphical abstracts, and a tool selection guide (D2 for flow diagrams, matplotlib for data plots). `--study-type` auto-generates the complete figure set for each study design.