medsci-skills 4.1.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 (702) hide show
  1. package/LICENSE +50 -0
  2. package/README.md +602 -0
  3. package/README_FIRST.md +27 -0
  4. package/bin/medsci-skills.js +159 -0
  5. package/installers/install-macos.command +19 -0
  6. package/installers/install-windows.cmd +26 -0
  7. package/installers/install-windows.ps1 +17 -0
  8. package/installers/install.py +218 -0
  9. package/metadata/skills_catalog.json +452 -0
  10. package/package.json +48 -0
  11. package/skills/academic-aio/SKILL.md +408 -0
  12. package/skills/academic-aio/references/case_studies/kjr_mllm_2025.md +82 -0
  13. package/skills/academic-aio/references/checklists/AIO_GENERAL.md +354 -0
  14. package/skills/academic-aio/references/journal_summarybox_templates.yaml +126 -0
  15. package/skills/academic-aio/references/oac_funding_checklist.yaml +129 -0
  16. package/skills/academic-aio/references/reporting_guideline_mapping.md +39 -0
  17. package/skills/academic-aio/references/schema_markup_templates/CodeRepository.jsonld +32 -0
  18. package/skills/academic-aio/references/schema_markup_templates/Dataset.jsonld +36 -0
  19. package/skills/academic-aio/references/schema_markup_templates/Person.jsonld +30 -0
  20. package/skills/academic-aio/references/schema_markup_templates/README.md +43 -0
  21. package/skills/academic-aio/references/schema_markup_templates/ScholarlyArticle.jsonld +55 -0
  22. package/skills/academic-aio/scripts/batch_metadata_audit.py +169 -0
  23. package/skills/academic-aio/scripts/validate_schema.py +118 -0
  24. package/skills/academic-aio/skill.yml +36 -0
  25. package/skills/academic-aio/templates/aio_audit_checklist.md.j2 +108 -0
  26. package/skills/add-journal/SKILL.md +482 -0
  27. package/skills/add-journal/skill.yml +33 -0
  28. package/skills/analyze-stats/SKILL.md +598 -0
  29. package/skills/analyze-stats/references/analysis_guides/missing_data.md +109 -0
  30. package/skills/analyze-stats/references/analysis_guides/nhis_icd10_mapping.md +247 -0
  31. package/skills/analyze-stats/references/analysis_guides/propensity_score.md +132 -0
  32. package/skills/analyze-stats/references/analysis_guides/regression.md +115 -0
  33. package/skills/analyze-stats/references/analysis_guides/repeated_measures.md +160 -0
  34. package/skills/analyze-stats/references/analysis_guides/survey_weighted.md +366 -0
  35. package/skills/analyze-stats/references/analysis_guides/test_selection.md +86 -0
  36. package/skills/analyze-stats/references/style/figure_style.mplstyle +69 -0
  37. package/skills/analyze-stats/references/style/theme_publication.R +147 -0
  38. package/skills/analyze-stats/references/table-standards/journal-profiles/ajr.yaml +51 -0
  39. package/skills/analyze-stats/references/table-standards/journal-profiles/european_radiology.yaml +55 -0
  40. package/skills/analyze-stats/references/table-standards/journal-profiles/jama.yaml +66 -0
  41. package/skills/analyze-stats/references/table-standards/journal-profiles/lancet.yaml +57 -0
  42. package/skills/analyze-stats/references/table-standards/journal-profiles/nejm.yaml +51 -0
  43. package/skills/analyze-stats/references/table-standards/journal-profiles/radiology.yaml +66 -0
  44. package/skills/analyze-stats/references/table-standards/table-standards.md +287 -0
  45. package/skills/analyze-stats/references/table-standards/table-types/diagnostic_accuracy.md +36 -0
  46. package/skills/analyze-stats/references/table-standards/table-types/meta_analysis.md +58 -0
  47. package/skills/analyze-stats/references/table-standards/table-types/model_comparison.md +36 -0
  48. package/skills/analyze-stats/references/table-standards/table-types/regression_results.md +50 -0
  49. package/skills/analyze-stats/references/table-standards/table-types/table1_demographics.md +51 -0
  50. package/skills/analyze-stats/references/table-standards/tool-comparison.md +79 -0
  51. package/skills/analyze-stats/references/templates/agreement_analysis.py +436 -0
  52. package/skills/analyze-stats/references/templates/dca_plot.R +237 -0
  53. package/skills/analyze-stats/references/templates/diagnostic_accuracy.py +401 -0
  54. package/skills/analyze-stats/references/templates/dta_meta_analysis.R +384 -0
  55. package/skills/analyze-stats/references/templates/forest_plot.py +412 -0
  56. package/skills/analyze-stats/references/templates/likert_summary.py +356 -0
  57. package/skills/analyze-stats/references/templates/meta_analysis.R +365 -0
  58. package/skills/analyze-stats/references/templates/propensity_score.py +478 -0
  59. package/skills/analyze-stats/references/templates/regression.py +425 -0
  60. package/skills/analyze-stats/references/templates/repeated_measures.py +434 -0
  61. package/skills/analyze-stats/references/templates/sample_size.R +382 -0
  62. package/skills/analyze-stats/references/templates/survey_weighted_analysis.py +411 -0
  63. package/skills/analyze-stats/references/templates/survival_analysis.py +325 -0
  64. package/skills/analyze-stats/references/templates/table1_demographics.py +287 -0
  65. package/skills/analyze-stats/scripts/check_generated_code.py +335 -0
  66. package/skills/analyze-stats/skill.yml +38 -0
  67. package/skills/analyze-stats/tests/fixtures/gen_bad.R +16 -0
  68. package/skills/analyze-stats/tests/fixtures/gen_bad.py +24 -0
  69. package/skills/analyze-stats/tests/fixtures/gen_clean.py +21 -0
  70. package/skills/analyze-stats/tests/test_generated_code.sh +59 -0
  71. package/skills/analyze-stats/tests/test_survival_template.sh +53 -0
  72. package/skills/author-strategy/SKILL.md +117 -0
  73. package/skills/author-strategy/analyze_patterns.py +303 -0
  74. package/skills/author-strategy/fetch_pubmed.py +374 -0
  75. package/skills/author-strategy/skill.yml +34 -0
  76. package/skills/batch-cohort/SKILL.md +223 -0
  77. package/skills/batch-cohort/references/base_template_knhanes.R +210 -0
  78. package/skills/batch-cohort/references/batch_template_generator.R +222 -0
  79. package/skills/batch-cohort/references/variable_coding_registry.md +136 -0
  80. package/skills/batch-cohort/skill.yml +35 -0
  81. package/skills/calc-sample-size/SKILL.md +491 -0
  82. package/skills/calc-sample-size/references/formulas.md +655 -0
  83. package/skills/calc-sample-size/references/observational_cohort.md +49 -0
  84. package/skills/calc-sample-size/skill.yml +51 -0
  85. package/skills/check-reporting/SKILL.md +534 -0
  86. package/skills/check-reporting/references/LICENSES.md +41 -0
  87. package/skills/check-reporting/references/checklists/AMSTAR2.md +54 -0
  88. package/skills/check-reporting/references/checklists/ARRIVE_2.md +234 -0
  89. package/skills/check-reporting/references/checklists/CARE.md +102 -0
  90. package/skills/check-reporting/references/checklists/CLAIM_2024.md +128 -0
  91. package/skills/check-reporting/references/checklists/CLEAR.md +113 -0
  92. package/skills/check-reporting/references/checklists/CONSORT.md +86 -0
  93. package/skills/check-reporting/references/checklists/COSMIN_RoB.md +136 -0
  94. package/skills/check-reporting/references/checklists/GRRAS.md +61 -0
  95. package/skills/check-reporting/references/checklists/MI_CLEAR_LLM.md +167 -0
  96. package/skills/check-reporting/references/checklists/MOOSE.md +85 -0
  97. package/skills/check-reporting/references/checklists/NOS.md +88 -0
  98. package/skills/check-reporting/references/checklists/PRISMA_2020.md +135 -0
  99. package/skills/check-reporting/references/checklists/PRISMA_DTA.md +36 -0
  100. package/skills/check-reporting/references/checklists/PRISMA_P.md +56 -0
  101. package/skills/check-reporting/references/checklists/PROBAST.md +75 -0
  102. package/skills/check-reporting/references/checklists/PROBAST_AI.md +130 -0
  103. package/skills/check-reporting/references/checklists/QUADAS2.md +77 -0
  104. package/skills/check-reporting/references/checklists/QUADAS_C.md +131 -0
  105. package/skills/check-reporting/references/checklists/ROBINS_E.md +179 -0
  106. package/skills/check-reporting/references/checklists/ROBINS_I.md +87 -0
  107. package/skills/check-reporting/references/checklists/ROBIS.md +114 -0
  108. package/skills/check-reporting/references/checklists/ROB_ME.md +126 -0
  109. package/skills/check-reporting/references/checklists/RoB2.md +79 -0
  110. package/skills/check-reporting/references/checklists/RoB_NMA.md +96 -0
  111. package/skills/check-reporting/references/checklists/SPIRIT.md +112 -0
  112. package/skills/check-reporting/references/checklists/SQUIRE_2.md +68 -0
  113. package/skills/check-reporting/references/checklists/STARD.md +129 -0
  114. package/skills/check-reporting/references/checklists/STARD_AI.md +211 -0
  115. package/skills/check-reporting/references/checklists/STROBE.md +80 -0
  116. package/skills/check-reporting/references/checklists/SWiM.md +33 -0
  117. package/skills/check-reporting/references/checklists/TRIPOD.md +157 -0
  118. package/skills/check-reporting/references/checklists/TRIPOD_AI.md +140 -0
  119. package/skills/check-reporting/references/step4c_registration_timing.md +93 -0
  120. package/skills/check-reporting/references/step4d_prisma_figure_audit.md +137 -0
  121. package/skills/check-reporting/scripts/check_checklist_exists.py +183 -0
  122. package/skills/check-reporting/scripts/check_checklist_version.py +168 -0
  123. package/skills/check-reporting/scripts/check_framework_naming.py +206 -0
  124. package/skills/check-reporting/scripts/check_prisma_figure.py +209 -0
  125. package/skills/check-reporting/scripts/prisma_cascade_check.py +274 -0
  126. package/skills/check-reporting/skill.yml +41 -0
  127. package/skills/check-reporting/tests/fixtures/framework_bad.md +8 -0
  128. package/skills/check-reporting/tests/fixtures/framework_clean.md +7 -0
  129. package/skills/check-reporting/tests/test_checklist_fail_fast.sh +77 -0
  130. package/skills/check-reporting/tests/test_checklist_version.sh +72 -0
  131. package/skills/check-reporting/tests/test_framework_naming.sh +45 -0
  132. package/skills/check-reporting/tests/test_prisma_cascade.sh +104 -0
  133. package/skills/clean-data/SKILL.md +180 -0
  134. package/skills/clean-data/references/cleaning_patterns.md +299 -0
  135. package/skills/clean-data/references/profiling_template.py +304 -0
  136. package/skills/clean-data/scripts/check_structural_zero.py +174 -0
  137. package/skills/clean-data/skill.yml +35 -0
  138. package/skills/clean-data/tests/fixtures/smoking.csv +8 -0
  139. package/skills/clean-data/tests/test_structural_zero.sh +49 -0
  140. package/skills/cross-national/SKILL.md +264 -0
  141. package/skills/cross-national/skill.yml +37 -0
  142. package/skills/define-variables/SKILL.md +146 -0
  143. package/skills/define-variables/references/common_definitions.md +190 -0
  144. package/skills/define-variables/skill.yml +34 -0
  145. package/skills/define-variables/templates/variable_operationalization.md +64 -0
  146. package/skills/deidentify/SKILL.md +203 -0
  147. package/skills/deidentify/deidentify.py +1224 -0
  148. package/skills/deidentify/locales/_template.json +45 -0
  149. package/skills/deidentify/locales/au.json +43 -0
  150. package/skills/deidentify/locales/ca.json +44 -0
  151. package/skills/deidentify/locales/cn.json +47 -0
  152. package/skills/deidentify/locales/de.json +48 -0
  153. package/skills/deidentify/locales/fr.json +48 -0
  154. package/skills/deidentify/locales/in.json +48 -0
  155. package/skills/deidentify/locales/jp.json +48 -0
  156. package/skills/deidentify/locales/kr.json +48 -0
  157. package/skills/deidentify/locales/uk.json +45 -0
  158. package/skills/deidentify/locales/us.json +43 -0
  159. package/skills/deidentify/references/date_shift_guide.md +82 -0
  160. package/skills/deidentify/references/hipaa_18_identifiers.md +48 -0
  161. package/skills/deidentify/references/korean_phi_patterns.md +135 -0
  162. package/skills/deidentify/skill.yml +43 -0
  163. package/skills/deidentify/tests/README.md +26 -0
  164. package/skills/deidentify/tests/test_clean.csv +16 -0
  165. package/skills/deidentify/tests/test_edge_cases.csv +11 -0
  166. package/skills/deidentify/tests/test_phi_korean.csv +11 -0
  167. package/skills/design-ai-benchmarking/SKILL.md +214 -0
  168. package/skills/design-ai-benchmarking/references/benchmark_export_schema.json +69 -0
  169. package/skills/design-ai-benchmarking/references/elicitation_rubric_template.md +37 -0
  170. package/skills/design-ai-benchmarking/skill.yml +38 -0
  171. package/skills/design-study/SKILL.md +298 -0
  172. package/skills/design-study/skill.yml +33 -0
  173. package/skills/fill-icmje-coi/SKILL.md +216 -0
  174. package/skills/fill-icmje-coi/scripts/fill_icmje_coi.py +140 -0
  175. package/skills/fill-icmje-coi/skill.yml +35 -0
  176. package/skills/fill-icmje-coi/templates/icmje_coi_seed_synthetic.docx +0 -0
  177. package/skills/fill-protocol/SKILL.md +248 -0
  178. package/skills/fill-protocol/examples/example_irb_template.yaml +53 -0
  179. package/skills/fill-protocol/references/best_practices.md +121 -0
  180. package/skills/fill-protocol/scripts/doc_to_docx.py +111 -0
  181. package/skills/fill-protocol/scripts/fill_form.py +611 -0
  182. package/skills/fill-protocol/scripts/inspect_template.py +61 -0
  183. package/skills/fill-protocol/setup.sh +162 -0
  184. package/skills/fill-protocol/skill.yml +37 -0
  185. package/skills/find-cohort-gap/SKILL.md +309 -0
  186. package/skills/find-cohort-gap/references/cohort_profile_template.md +93 -0
  187. package/skills/find-cohort-gap/references/onepager_template.md +84 -0
  188. package/skills/find-cohort-gap/references/pattern_scoring_rubric.md +169 -0
  189. package/skills/find-cohort-gap/references/saturation_query_templates.md +143 -0
  190. package/skills/find-cohort-gap/skill.yml +35 -0
  191. package/skills/find-journal/POLICY.md +87 -0
  192. package/skills/find-journal/SKILL.md +340 -0
  193. package/skills/find-journal/references/journal_profiles/AJNR.md +29 -0
  194. package/skills/find-journal/references/journal_profiles/AJR.md +30 -0
  195. package/skills/find-journal/references/journal_profiles/Abdominal_Radiology.md +30 -0
  196. package/skills/find-journal/references/journal_profiles/Academic_Radiology.md +30 -0
  197. package/skills/find-journal/references/journal_profiles/Annals_of_Internal_Medicine.md +33 -0
  198. package/skills/find-journal/references/journal_profiles/Artificial_Intelligence_in_Medicine.md +28 -0
  199. package/skills/find-journal/references/journal_profiles/BMC_Medicine.md +31 -0
  200. package/skills/find-journal/references/journal_profiles/British_Journal_of_Radiology.md +39 -0
  201. package/skills/find-journal/references/journal_profiles/CVIR.md +30 -0
  202. package/skills/find-journal/references/journal_profiles/Chest.md +39 -0
  203. package/skills/find-journal/references/journal_profiles/Clinical_Radiology.md +30 -0
  204. package/skills/find-journal/references/journal_profiles/Clinical_and_Molecular_Hepatology.md +32 -0
  205. package/skills/find-journal/references/journal_profiles/Diabetes_Metabolism_Journal.md +36 -0
  206. package/skills/find-journal/references/journal_profiles/Diagnostic_and_Interventional_Radiology.md +32 -0
  207. package/skills/find-journal/references/journal_profiles/Endocrinology_and_Metabolism.md +37 -0
  208. package/skills/find-journal/references/journal_profiles/European_Journal_of_Preventive_Cardiology.md +39 -0
  209. package/skills/find-journal/references/journal_profiles/European_Radiology.md +29 -0
  210. package/skills/find-journal/references/journal_profiles/Hepatology_Communications.md +40 -0
  211. package/skills/find-journal/references/journal_profiles/Hepatology_International.md +37 -0
  212. package/skills/find-journal/references/journal_profiles/IEEE_JBHI.md +28 -0
  213. package/skills/find-journal/references/journal_profiles/IEEE_TMI.md +28 -0
  214. package/skills/find-journal/references/journal_profiles/INSI.md +29 -0
  215. package/skills/find-journal/references/journal_profiles/Investigative_Radiology.md +25 -0
  216. package/skills/find-journal/references/journal_profiles/JACC_Advances.md +41 -0
  217. package/skills/find-journal/references/journal_profiles/JACC_Asia.md +30 -0
  218. package/skills/find-journal/references/journal_profiles/JACR.md +28 -0
  219. package/skills/find-journal/references/journal_profiles/JAMA.md +40 -0
  220. package/skills/find-journal/references/journal_profiles/JAMA_Network_Open.md +30 -0
  221. package/skills/find-journal/references/journal_profiles/JCSM.md +39 -0
  222. package/skills/find-journal/references/journal_profiles/JKMS.md +32 -0
  223. package/skills/find-journal/references/journal_profiles/JMIR.md +29 -0
  224. package/skills/find-journal/references/journal_profiles/JMIR_Medical_Education.md +29 -0
  225. package/skills/find-journal/references/journal_profiles/JNIS.md +35 -0
  226. package/skills/find-journal/references/journal_profiles/JVIR.md +31 -0
  227. package/skills/find-journal/references/journal_profiles/Journal_of_Biomedical_Informatics.md +29 -0
  228. package/skills/find-journal/references/journal_profiles/Journal_of_Clinical_Endocrinology_and_Metabolism.md +40 -0
  229. package/skills/find-journal/references/journal_profiles/Journal_of_Magnetic_Resonance_Imaging.md +30 -0
  230. package/skills/find-journal/references/journal_profiles/Journal_of_Nuclear_Medicine.md +31 -0
  231. package/skills/find-journal/references/journal_profiles/Journal_of_Stroke.md +32 -0
  232. package/skills/find-journal/references/journal_profiles/KJR.md +38 -0
  233. package/skills/find-journal/references/journal_profiles/Korean_Circulation_Journal.md +38 -0
  234. package/skills/find-journal/references/journal_profiles/Korean_Journal_of_Internal_Medicine.md +36 -0
  235. package/skills/find-journal/references/journal_profiles/Lancet_Diabetes_and_Endocrinology.md +40 -0
  236. package/skills/find-journal/references/journal_profiles/Lancet_Gastroenterology_and_Hepatology.md +49 -0
  237. package/skills/find-journal/references/journal_profiles/Lancet_Infectious_Diseases.md +38 -0
  238. package/skills/find-journal/references/journal_profiles/Lancet_Neurology.md +39 -0
  239. package/skills/find-journal/references/journal_profiles/Lancet_Oncology.md +40 -0
  240. package/skills/find-journal/references/journal_profiles/Lancet_Psychiatry.md +38 -0
  241. package/skills/find-journal/references/journal_profiles/Lancet_Public_Health.md +30 -0
  242. package/skills/find-journal/references/journal_profiles/Lancet_Respiratory_Medicine.md +39 -0
  243. package/skills/find-journal/references/journal_profiles/Liver_International.md +33 -0
  244. package/skills/find-journal/references/journal_profiles/Medical_Image_Analysis.md +28 -0
  245. package/skills/find-journal/references/journal_profiles/NEJM.md +33 -0
  246. package/skills/find-journal/references/journal_profiles/Nature_Machine_Intelligence.md +31 -0
  247. package/skills/find-journal/references/journal_profiles/Nature_Medicine.md +39 -0
  248. package/skills/find-journal/references/journal_profiles/Neuroradiology.md +31 -0
  249. package/skills/find-journal/references/journal_profiles/Nutrition_Metabolism_and_Cardiovascular_Diseases.md +39 -0
  250. package/skills/find-journal/references/journal_profiles/PLOS_Medicine.md +32 -0
  251. package/skills/find-journal/references/journal_profiles/RYAI.md +28 -0
  252. package/skills/find-journal/references/journal_profiles/Radiology.md +29 -0
  253. package/skills/find-journal/references/journal_profiles/Skeletal_Radiology.md +31 -0
  254. package/skills/find-journal/references/journal_profiles/Stroke.md +37 -0
  255. package/skills/find-journal/references/journal_profiles/The_BMJ.md +31 -0
  256. package/skills/find-journal/references/journal_profiles/The_Lancet.md +31 -0
  257. package/skills/find-journal/references/journal_profiles/The_Lancet_Digital_Health.md +29 -0
  258. package/skills/find-journal/references/journal_profiles/World_Journal_of_Hepatology.md +53 -0
  259. package/skills/find-journal/references/journal_profiles/npj_Digital_Medicine.md +29 -0
  260. package/skills/find-journal/skill.yml +34 -0
  261. package/skills/fulltext-retrieval/SKILL.md +174 -0
  262. package/skills/fulltext-retrieval/fetch_oa.py +433 -0
  263. package/skills/fulltext-retrieval/pdf_to_md.py +160 -0
  264. package/skills/fulltext-retrieval/skill.yml +41 -0
  265. package/skills/generate-codebook/SKILL.md +155 -0
  266. package/skills/generate-codebook/references/codebook_schema.md +76 -0
  267. package/skills/generate-codebook/scripts/generate_codebook.py +278 -0
  268. package/skills/generate-codebook/skill.yml +35 -0
  269. package/skills/generate-codebook/tests/test_generate_codebook.sh +76 -0
  270. package/skills/grant-builder/SKILL.md +251 -0
  271. package/skills/grant-builder/skill.yml +34 -0
  272. package/skills/humanize/SKILL.md +251 -0
  273. package/skills/humanize/references/ai_patterns.md +571 -0
  274. package/skills/humanize/skill.yml +33 -0
  275. package/skills/intake-project/SKILL.md +264 -0
  276. package/skills/intake-project/skill.yml +34 -0
  277. package/skills/lit-sync/SKILL.md +448 -0
  278. package/skills/lit-sync/references/locale/ko/note_templates.md +110 -0
  279. package/skills/lit-sync/skill.yml +52 -0
  280. package/skills/lit-sync/tests/test_poll_logic.sh +92 -0
  281. package/skills/ma-scout/SKILL.md +640 -0
  282. package/skills/ma-scout/references/project_readme_template.md +95 -0
  283. package/skills/ma-scout/references/project_readme_template_ko.md +82 -0
  284. package/skills/ma-scout/skill.yml +33 -0
  285. package/skills/make-figures/SKILL.md +957 -0
  286. package/skills/make-figures/references/critic_rubrics/data_plot.md +166 -0
  287. package/skills/make-figures/references/critic_rubrics/flow_diagram.md +169 -0
  288. package/skills/make-figures/references/design_principles.md +181 -0
  289. package/skills/make-figures/references/exemplar_diagrams/README.md +65 -0
  290. package/skills/make-figures/references/exemplar_diagrams/consort/README.md +15 -0
  291. package/skills/make-figures/references/exemplar_diagrams/consort/template_input.yaml +37 -0
  292. package/skills/make-figures/references/exemplar_diagrams/consort/template_output.pdf +0 -0
  293. package/skills/make-figures/references/exemplar_diagrams/consort/template_output.png +0 -0
  294. package/skills/make-figures/references/exemplar_diagrams/consort/template_output_600.png +0 -0
  295. package/skills/make-figures/references/exemplar_diagrams/other/other_02.meta.yaml +4 -0
  296. package/skills/make-figures/references/exemplar_diagrams/other/other_02.png +0 -0
  297. package/skills/make-figures/references/exemplar_diagrams/other/other_02_why.md +13 -0
  298. package/skills/make-figures/references/exemplar_diagrams/pipeline/README.md +15 -0
  299. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_01.meta.yaml +4 -0
  300. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_01.png +0 -0
  301. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_01_why.md +13 -0
  302. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_03.meta.yaml +4 -0
  303. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_03.png +0 -0
  304. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_03_why.md +13 -0
  305. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_04.meta.yaml +4 -0
  306. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_04.png +0 -0
  307. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_04_why.md +13 -0
  308. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_05.meta.yaml +4 -0
  309. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_05.png +0 -0
  310. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_05_why.md +13 -0
  311. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_06.meta.yaml +4 -0
  312. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_06.png +0 -0
  313. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_06_why.md +13 -0
  314. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_07.meta.yaml +4 -0
  315. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_07.png +0 -0
  316. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_07_why.md +13 -0
  317. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_08.meta.yaml +4 -0
  318. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_08.png +0 -0
  319. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_08_why.md +13 -0
  320. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_09.meta.yaml +4 -0
  321. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_09.png +0 -0
  322. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_09_why.md +13 -0
  323. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_10.meta.yaml +4 -0
  324. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_10.png +0 -0
  325. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_10_why.md +13 -0
  326. package/skills/make-figures/references/exemplar_diagrams/prisma/README.md +15 -0
  327. package/skills/make-figures/references/exemplar_diagrams/prisma/template_input.yaml +47 -0
  328. package/skills/make-figures/references/exemplar_diagrams/prisma/template_output.pdf +0 -0
  329. package/skills/make-figures/references/exemplar_diagrams/prisma/template_output.png +0 -0
  330. package/skills/make-figures/references/exemplar_diagrams/prisma/template_output_600.png +0 -0
  331. package/skills/make-figures/references/exemplar_diagrams/stard/README.md +15 -0
  332. package/skills/make-figures/references/exemplar_diagrams/stard/template_input.yaml +40 -0
  333. package/skills/make-figures/references/exemplar_diagrams/stard/template_output.pdf +0 -0
  334. package/skills/make-figures/references/exemplar_diagrams/stard/template_output.png +0 -0
  335. package/skills/make-figures/references/exemplar_diagrams/stard/template_output_600.png +0 -0
  336. package/skills/make-figures/references/exemplar_diagrams/strobe/template_input.yaml +43 -0
  337. package/skills/make-figures/references/exemplar_diagrams/strobe/template_input_pptx.yaml +43 -0
  338. package/skills/make-figures/references/exemplar_diagrams/strobe/template_output.pdf +0 -0
  339. package/skills/make-figures/references/exemplar_diagrams/strobe/template_output.png +0 -0
  340. package/skills/make-figures/references/exemplar_diagrams/strobe/template_output.pptx +0 -0
  341. package/skills/make-figures/references/exemplar_diagrams/strobe/template_output_600.png +0 -0
  342. package/skills/make-figures/references/figure_specs.md +291 -0
  343. package/skills/make-figures/references/flow_diagram_lessons.md +164 -0
  344. package/skills/make-figures/references/jacc_central_illustration_principles.md +91 -0
  345. package/skills/make-figures/references/medical_illustration_sources.md +98 -0
  346. package/skills/make-figures/references/pipeline_concepts_medical_ai.md +240 -0
  347. package/skills/make-figures/references/reporting_guideline_figure_map.md +104 -0
  348. package/skills/make-figures/references/visual_abstract_templates/european_radiology.pptx +0 -0
  349. package/skills/make-figures/references/visual_abstract_templates/jacc_central_illustration.pptx +0 -0
  350. package/skills/make-figures/references/visual_abstract_templates/medsci_default.pptx +0 -0
  351. package/skills/make-figures/references/visual_abstract_templates/template_guide.md +114 -0
  352. package/skills/make-figures/scripts/build_jacc_template.py +77 -0
  353. package/skills/make-figures/scripts/build_prisma2020_template.py +371 -0
  354. package/skills/make-figures/scripts/build_strobe_template.py +351 -0
  355. package/skills/make-figures/scripts/critic_figure.py +264 -0
  356. package/skills/make-figures/scripts/derive_figure_legend_counts.py +138 -0
  357. package/skills/make-figures/scripts/extract_exemplar_from_pdf.py +186 -0
  358. package/skills/make-figures/scripts/fetch_official_templates.sh +88 -0
  359. package/skills/make-figures/scripts/fill_prisma_template.py +142 -0
  360. package/skills/make-figures/scripts/generate_flow_diagram.R +133 -0
  361. package/skills/make-figures/scripts/generate_image.py +99 -0
  362. package/skills/make-figures/scripts/generate_visual_abstract.py +438 -0
  363. package/skills/make-figures/scripts/validate_pptx_mac_compat.py +233 -0
  364. package/skills/make-figures/skill.yml +52 -0
  365. package/skills/make-figures/templates/official/NOTES.md +62 -0
  366. package/skills/make-figures/templates/official/consort2010/CONSORT_2025_editable_checklist.docx +0 -0
  367. package/skills/make-figures/templates/official/consort2010/CONSORT_2025_flow_diagram.docx +0 -0
  368. package/skills/make-figures/templates/official/prisma2020/PRISMA_2020_flow_new_v1.pptx +0 -0
  369. package/skills/make-figures/templates/official/prisma2020/PRISMA_2020_flow_new_v2.pptx +0 -0
  370. package/skills/make-figures/templates/official/prisma2020/PRISMA_2020_flow_updated_v2.pptx +0 -0
  371. package/skills/make-figures/templates/official/spirit2013/SPIRIT_2025_editable_checklist.docx +0 -0
  372. package/skills/make-figures/templates/official/spirit2013/SPIRIT_2025_participant_timeline.docx +0 -0
  373. package/skills/make-figures/templates/official/stard2015/STARD_2015_checklist.docx +0 -0
  374. package/skills/make-figures/templates/official/stard2015/STARD_2015_flow_diagram.pdf +0 -0
  375. package/skills/make-figures/tests/fixtures/figure1_flow.yaml +8 -0
  376. package/skills/make-figures/tests/fixtures/manuscript_ok.md +9 -0
  377. package/skills/make-figures/tests/fixtures/manuscript_stale.md +4 -0
  378. package/skills/make-figures/tests/test_legend_reconcile.sh +36 -0
  379. package/skills/manage-project/SKILL.md +358 -0
  380. package/skills/manage-project/references/pre_submission_checklist.md +53 -0
  381. package/skills/manage-project/references/project_state_template.json +37 -0
  382. package/skills/manage-project/references/scaffold_templates.md +118 -0
  383. package/skills/manage-project/references/status_output_format.md +44 -0
  384. package/skills/manage-project/references/timeline_example.md +20 -0
  385. package/skills/manage-project/skill.yml +36 -0
  386. package/skills/manage-project/templates/SSOT.yaml.template +41 -0
  387. package/skills/manage-refs/LICENSE.zotero-mcp +21 -0
  388. package/skills/manage-refs/NOTICE.md +29 -0
  389. package/skills/manage-refs/SKILL.md +289 -0
  390. package/skills/manage-refs/citation_styles/README.md +40 -0
  391. package/skills/manage-refs/citation_styles/american-journal-of-roentgenology.csl +211 -0
  392. package/skills/manage-refs/citation_styles/cardiovascular-and-interventional-radiology.csl +19 -0
  393. package/skills/manage-refs/citation_styles/european-radiology.csl +19 -0
  394. package/skills/manage-refs/citation_styles/journal-of-cachexia-sarcopenia-and-muscle.csl +150 -0
  395. package/skills/manage-refs/citation_styles/journal-of-korean-medical-science-strict.csl +533 -0
  396. package/skills/manage-refs/citation_styles/journal-of-korean-medical-science.csl +16 -0
  397. package/skills/manage-refs/citation_styles/korean-journal-of-radiology.csl +155 -0
  398. package/skills/manage-refs/citation_styles/nature.csl +189 -0
  399. package/skills/manage-refs/citation_styles/nlm-citation-sequence.csl +535 -0
  400. package/skills/manage-refs/citation_styles/radiology.csl +228 -0
  401. package/skills/manage-refs/citation_styles/springer-basic-brackets.csl +187 -0
  402. package/skills/manage-refs/citation_styles/springer-vancouver-brackets.csl +276 -0
  403. package/skills/manage-refs/citation_styles/vancouver-superscript.csl +536 -0
  404. package/skills/manage-refs/citation_styles/vancouver.csl +535 -0
  405. package/skills/manage-refs/references/REFERENCE_STYLE_SPECS.md +59 -0
  406. package/skills/manage-refs/references/check_xref_symptoms.md +35 -0
  407. package/skills/manage-refs/scripts/_vendor_citation_writer.py +600 -0
  408. package/skills/manage-refs/scripts/check_citation_keys.py +112 -0
  409. package/skills/manage-refs/scripts/check_csl_render.py +102 -0
  410. package/skills/manage-refs/scripts/check_xref.py +633 -0
  411. package/skills/manage-refs/scripts/fill_journal_abbrev.py +104 -0
  412. package/skills/manage-refs/scripts/inject_zotero_cwyw.py +133 -0
  413. package/skills/manage-refs/scripts/md_marker_convert.py +193 -0
  414. package/skills/manage-refs/scripts/pre_submission_gate.sh +238 -0
  415. package/skills/manage-refs/scripts/render_pandoc.sh +88 -0
  416. package/skills/manage-refs/skill.yml +70 -0
  417. package/skills/manage-refs/tests/fixtures/pre_submission_gate/README.md +32 -0
  418. package/skills/manage-refs/tests/fixtures/pre_submission_gate/manuscript.md +10 -0
  419. package/skills/manage-refs/tests/fixtures/pre_submission_gate/refs.bib +34 -0
  420. package/skills/manage-refs/tests/fixtures/pre_submission_gate/run.sh +117 -0
  421. package/skills/manage-refs/tests/test_vN_docx_check.sh +145 -0
  422. package/skills/meta-analysis/SKILL.md +739 -0
  423. package/skills/meta-analysis/references/LICENSES.md +21 -0
  424. package/skills/meta-analysis/references/PROSPERO_template.md +221 -0
  425. package/skills/meta-analysis/references/ai_pre_screening_template.py +245 -0
  426. package/skills/meta-analysis/references/checklists/JBI_Case_Series.md +45 -0
  427. package/skills/meta-analysis/references/checklists/NOS.md +88 -0
  428. package/skills/meta-analysis/references/checklists/PRISMA_DTA.md +36 -0
  429. package/skills/meta-analysis/references/checklists/PROBAST.md +75 -0
  430. package/skills/meta-analysis/references/checklists/QUADAS2.md +77 -0
  431. package/skills/meta-analysis/references/checklists/ROBINS_I.md +87 -0
  432. package/skills/meta-analysis/references/checklists/RoB2.md +79 -0
  433. package/skills/meta-analysis/references/data_integrity_checklist.md +57 -0
  434. package/skills/meta-analysis/references/icmje_coi_guide.md +181 -0
  435. package/skills/meta-analysis/references/phase10_recovery.md +136 -0
  436. package/skills/meta-analysis/references/phase4_km_composite.md +58 -0
  437. package/skills/meta-analysis/references/phase6_statistical_synthesis.md +148 -0
  438. package/skills/meta-analysis/references/phase9_circulation.md +84 -0
  439. package/skills/meta-analysis/references/post_submission_release_ops.md +41 -0
  440. package/skills/meta-analysis/references/r_templates.md +132 -0
  441. package/skills/meta-analysis/references/review_orchestration.md +40 -0
  442. package/skills/meta-analysis/references/submission_package_drift.md +71 -0
  443. package/skills/meta-analysis/scripts/check_pool_consistency.py +201 -0
  444. package/skills/meta-analysis/scripts/cohort_overlap_check.py +242 -0
  445. package/skills/meta-analysis/scripts/dta_extraction_qc.py +137 -0
  446. package/skills/meta-analysis/scripts/screening_reconcile.py +160 -0
  447. package/skills/meta-analysis/skill.yml +47 -0
  448. package/skills/meta-analysis/templates/FINAL_POOL_LOCK.yaml.template +70 -0
  449. package/skills/meta-analysis/templates/extraction_form_v2.md +129 -0
  450. package/skills/meta-analysis/templates/supplementary_8file_checklist.md +94 -0
  451. package/skills/meta-analysis/tests/test_pool_consistency.sh +123 -0
  452. package/skills/orchestrate/SKILL.md +501 -0
  453. package/skills/orchestrate/references/dialogue_nodes.md +196 -0
  454. package/skills/orchestrate/references/report_template.md +109 -0
  455. package/skills/orchestrate/references/report_template_ko.md +88 -0
  456. package/skills/orchestrate/skill.yml +44 -0
  457. package/skills/peer-review/SKILL.md +381 -0
  458. package/skills/peer-review/references/aczel_2021_reviewer2_patterns.md +88 -0
  459. package/skills/peer-review/references/domain-probes/ai_overclaiming.md +47 -0
  460. package/skills/peer-review/references/domain-probes/narrative_review.md +44 -0
  461. package/skills/peer-review/references/domain-probes/observational_confounding.md +48 -0
  462. package/skills/peer-review/references/domain-probes/radiomics.md +38 -0
  463. package/skills/peer-review/references/domain-probes/sr_ma.md +87 -0
  464. package/skills/peer-review/references/domain-probes/survival_prognostic.md +68 -0
  465. package/skills/peer-review/references/exemplar_reviews/README.md +43 -0
  466. package/skills/peer-review/references/exemplar_reviews/ai_overclaiming.md +47 -0
  467. package/skills/peer-review/references/exemplar_reviews/calibration_missing.md +44 -0
  468. package/skills/peer-review/references/exemplar_reviews/data_leakage.md +48 -0
  469. package/skills/peer-review/references/exemplar_reviews/reference_standard_validity.md +45 -0
  470. package/skills/peer-review/references/narrative_review_audit.md +67 -0
  471. package/skills/peer-review/references/reviewer_calibration/README.md +34 -0
  472. package/skills/peer-review/references/reviewer_calibration/compliance_floor.md +52 -0
  473. package/skills/peer-review/references/reviewer_profiles/AJR.md +82 -0
  474. package/skills/peer-review/references/reviewer_profiles/EURE.md +64 -0
  475. package/skills/peer-review/references/reviewer_profiles/INSI.md +57 -0
  476. package/skills/peer-review/references/reviewer_profiles/KJR.md +100 -0
  477. package/skills/peer-review/references/reviewer_profiles/README.md +32 -0
  478. package/skills/peer-review/references/reviewer_profiles/RYAI.md +86 -0
  479. package/skills/peer-review/skill.yml +39 -0
  480. package/skills/present-paper/SKILL.md +675 -0
  481. package/skills/present-paper/references/critic_rubrics/slide.md +155 -0
  482. package/skills/present-paper/references/generate_pptx_templates.py +604 -0
  483. package/skills/present-paper/references/medical_presentation_templates.md +277 -0
  484. package/skills/present-paper/references/slide_design_principles.md +202 -0
  485. package/skills/present-paper/references/slide_visual_styles/nature_lancet.md +168 -0
  486. package/skills/present-paper/references/workflow-checklist.md +109 -0
  487. package/skills/present-paper/scripts/extract_pdf_figures.py +243 -0
  488. package/skills/present-paper/scripts/inject_pronunciation_notes.py +178 -0
  489. package/skills/present-paper/scripts/inject_speaker_notes.py +133 -0
  490. package/skills/present-paper/scripts/strip_notes_for_sharing.py +140 -0
  491. package/skills/present-paper/scripts/trim_caption.py +271 -0
  492. package/skills/present-paper/skill.yml +41 -0
  493. package/skills/present-paper/templates/build_pptx_nature_lancet.py +688 -0
  494. package/skills/publish-skill/SKILL.md +370 -0
  495. package/skills/publish-skill/references/license-compatibility-matrix.md +132 -0
  496. package/skills/publish-skill/references/pii-patterns.md +130 -0
  497. package/skills/publish-skill/scripts/audit_skill.sh +278 -0
  498. package/skills/publish-skill/skill.yml +35 -0
  499. package/skills/render-pdf-doc/SKILL.md +146 -0
  500. package/skills/render-pdf-doc/references/known_pitfalls.md +53 -0
  501. package/skills/render-pdf-doc/references/pandoc_korean_cheatsheet.md +77 -0
  502. package/skills/render-pdf-doc/scripts/check_deps.sh +42 -0
  503. package/skills/render-pdf-doc/scripts/infer_colwidths.py +164 -0
  504. package/skills/render-pdf-doc/scripts/render_pdf.sh +98 -0
  505. package/skills/render-pdf-doc/skill.yml +57 -0
  506. package/skills/render-pdf-doc/templates/anchor-doc.md +27 -0
  507. package/skills/render-pdf-doc/templates/anchor-doc_ko.md +25 -0
  508. package/skills/render-pdf-doc/templates/briefing-handout.md +33 -0
  509. package/skills/render-pdf-doc/templates/briefing-handout_ko.md +31 -0
  510. package/skills/render-pdf-doc/templates/proposal-cover.md +33 -0
  511. package/skills/render-pdf-doc/templates/proposal-cover_ko.md +31 -0
  512. package/skills/render-pdf-doc/templates/reference-table.md +22 -0
  513. package/skills/render-pdf-doc/templates/reference-table_ko.md +20 -0
  514. package/skills/replicate-study/SKILL.md +150 -0
  515. package/skills/replicate-study/references/harmonization_3country.csv +47 -0
  516. package/skills/replicate-study/references/harmonization_knhanes_nhanes.csv +68 -0
  517. package/skills/replicate-study/references/methodology_extraction_template.md +134 -0
  518. package/skills/replicate-study/skill.yml +37 -0
  519. package/skills/review-paper/SKILL.md +104 -0
  520. package/skills/review-paper/references/macro_skeleton.md +6 -0
  521. package/skills/review-paper/skill.yml +25 -0
  522. package/skills/revise/SKILL.md +515 -0
  523. package/skills/revise/references/r2r_voice.md +346 -0
  524. package/skills/revise/skill.yml +43 -0
  525. package/skills/search-lit/SKILL.md +443 -0
  526. package/skills/search-lit/references/parse_pubmed.py +326 -0
  527. package/skills/search-lit/references/pubmed_eutils.sh +111 -0
  528. package/skills/search-lit/skill.yml +46 -0
  529. package/skills/self-review/SKILL.md +1045 -0
  530. package/skills/self-review/references/domain-probes/ai_overclaiming.md +47 -0
  531. package/skills/self-review/references/domain-probes/narrative_review.md +44 -0
  532. package/skills/self-review/references/domain-probes/observational_confounding.md +48 -0
  533. package/skills/self-review/references/domain-probes/radiomics.md +38 -0
  534. package/skills/self-review/references/domain-probes/sr_ma.md +87 -0
  535. package/skills/self-review/references/domain-probes/survival_prognostic.md +68 -0
  536. package/skills/self-review/references/exemplar_findings/README.md +43 -0
  537. package/skills/self-review/references/exemplar_findings/cohort_arithmetic_mismatch.md +35 -0
  538. package/skills/self-review/references/exemplar_findings/estimand_drift_posthoc_primary.md +39 -0
  539. package/skills/self-review/references/exemplar_findings/scope_overreach_cross_sectional.md +35 -0
  540. package/skills/self-review/references/exemplar_findings/unadjusted_confounder.md +36 -0
  541. package/skills/self-review/references/panel_review_template.md +177 -0
  542. package/skills/self-review/scripts/check_artifact_coverage.py +301 -0
  543. package/skills/self-review/scripts/check_claim_artifact.py +248 -0
  544. package/skills/self-review/scripts/check_classical_style.py +185 -0
  545. package/skills/self-review/scripts/check_cohort_arithmetic.py +481 -0
  546. package/skills/self-review/scripts/check_confounding_completeness.py +287 -0
  547. package/skills/self-review/scripts/check_panel_diversity.py +336 -0
  548. package/skills/self-review/scripts/check_reference_adequacy.py +392 -0
  549. package/skills/self-review/scripts/check_reviewer_team_consistency.py +412 -0
  550. package/skills/self-review/scripts/check_scope_coherence.py +177 -0
  551. package/skills/self-review/skill.yml +47 -0
  552. package/skills/self-review/tests/fixtures/claim_manuscript.md +17 -0
  553. package/skills/self-review/tests/fixtures/claim_prereg.md +6 -0
  554. package/skills/self-review/tests/fixtures/cohort_bad.md +21 -0
  555. package/skills/self-review/tests/fixtures/cohort_clean.md +21 -0
  556. package/skills/self-review/tests/fixtures/cohort_partition.csv +5 -0
  557. package/skills/self-review/tests/fixtures/coverage_analysis/31_delong_nested_added_value.csv +3 -0
  558. package/skills/self-review/tests/fixtures/coverage_analysis/table1_demographics.csv +3 -0
  559. package/skills/self-review/tests/fixtures/coverage_clean.md +13 -0
  560. package/skills/self-review/tests/fixtures/coverage_manuscript.md +11 -0
  561. package/skills/self-review/tests/fixtures/panel_collapse.json +27 -0
  562. package/skills/self-review/tests/fixtures/panel_good.json +32 -0
  563. package/skills/self-review/tests/fixtures/panel_monoculture.json +32 -0
  564. package/skills/self-review/tests/fixtures/refadeq_letter.md +13 -0
  565. package/skills/self-review/tests/fixtures/refadeq_original_fixed.md +42 -0
  566. package/skills/self-review/tests/fixtures/refadeq_original_uncited.md +40 -0
  567. package/skills/self-review/tests/fixtures/scope_bad.md +9 -0
  568. package/skills/self-review/tests/fixtures/scope_clean.md +8 -0
  569. package/skills/self-review/tests/fixtures/scope_surrogate.md +8 -0
  570. package/skills/self-review/tests/fixtures/style_bad.md +13 -0
  571. package/skills/self-review/tests/fixtures/style_clean.md +11 -0
  572. package/skills/self-review/tests/fixtures/table1_by_exposure.csv +11 -0
  573. package/skills/self-review/tests/test_artifact_coverage.sh +44 -0
  574. package/skills/self-review/tests/test_claim_artifact.sh +50 -0
  575. package/skills/self-review/tests/test_classical_style.sh +44 -0
  576. package/skills/self-review/tests/test_cohort_arithmetic.sh +49 -0
  577. package/skills/self-review/tests/test_confounding_completeness.sh +66 -0
  578. package/skills/self-review/tests/test_panel_diversity.sh +55 -0
  579. package/skills/self-review/tests/test_panel_mode.sh +69 -0
  580. package/skills/self-review/tests/test_reference_adequacy.sh +68 -0
  581. package/skills/self-review/tests/test_reviewer_team_consistency.sh +138 -0
  582. package/skills/self-review/tests/test_scope_coherence.sh +46 -0
  583. package/skills/setup-medsci/SKILL.md +110 -0
  584. package/skills/setup-medsci/references/setup-checklist.md +51 -0
  585. package/skills/setup-medsci/skill.yml +30 -0
  586. package/skills/sync-submission/SKILL.md +382 -0
  587. package/skills/sync-submission/scripts/author_registry_example.yaml +36 -0
  588. package/skills/sync-submission/scripts/blind_sweep.py +203 -0
  589. package/skills/sync-submission/scripts/check_asset_anonymization.py +300 -0
  590. package/skills/sync-submission/scripts/check_cross_artifact_stale.py +211 -0
  591. package/skills/sync-submission/scripts/cover_letter_drift_check.py +451 -0
  592. package/skills/sync-submission/scripts/cross_document_n_check.py +486 -0
  593. package/skills/sync-submission/scripts/detect_copy_divergence.py +136 -0
  594. package/skills/sync-submission/scripts/preflight_gate.py +458 -0
  595. package/skills/sync-submission/scripts/scope_drift_check.py +362 -0
  596. package/skills/sync-submission/scripts/sync_submission.py +169 -0
  597. package/skills/sync-submission/skill.yml +43 -0
  598. package/skills/sync-submission/tests/fixtures/copy_ok.md +5 -0
  599. package/skills/sync-submission/tests/fixtures/copy_stale.md +5 -0
  600. package/skills/sync-submission/tests/fixtures/ssot.md +5 -0
  601. package/skills/sync-submission/tests/test_asset_anonymization.sh +99 -0
  602. package/skills/sync-submission/tests/test_copy_divergence.sh +44 -0
  603. package/skills/sync-submission/tests/test_cross_artifact_stale.sh +80 -0
  604. package/skills/sync-submission/tests/test_cross_document_n.sh +132 -0
  605. package/skills/sync-submission/tests/test_preflight_gate.sh +112 -0
  606. package/skills/sync-submission/tests/test_scope_drift.sh +122 -0
  607. package/skills/sync-submission/tests/test_vN_docx_assertion.sh +51 -0
  608. package/skills/verify-refs/SKILL.md +177 -0
  609. package/skills/verify-refs/references/manual_checkpoint_guide.md +100 -0
  610. package/skills/verify-refs/scripts/verify_cli.sh +62 -0
  611. package/skills/verify-refs/scripts/verify_refs.py +782 -0
  612. package/skills/verify-refs/skill.yml +44 -0
  613. package/skills/verify-refs/tests/fixtures/pagination_placeholder.bib +17 -0
  614. package/skills/verify-refs/tests/test_pagination_placeholder.sh +42 -0
  615. package/skills/version-dataset/SKILL.md +143 -0
  616. package/skills/version-dataset/references/manifest_schema.md +72 -0
  617. package/skills/version-dataset/scripts/version_dataset.py +242 -0
  618. package/skills/version-dataset/skill.yml +35 -0
  619. package/skills/version-dataset/tests/test_version_dataset.sh +52 -0
  620. package/skills/write-paper/SKILL.md +1148 -0
  621. package/skills/write-paper/references/exemplar_methods/README.md +38 -0
  622. package/skills/write-paper/references/exemplar_methods/ai_validation_tripod_claim.md +47 -0
  623. package/skills/write-paper/references/exemplar_methods/diagnostic_accuracy_stard.md +50 -0
  624. package/skills/write-paper/references/exemplar_methods/observational_cohort_strobe.md +43 -0
  625. package/skills/write-paper/references/journal_profiles/AJNR.md +185 -0
  626. package/skills/write-paper/references/journal_profiles/AJR.md +149 -0
  627. package/skills/write-paper/references/journal_profiles/Abdominal_Radiology.md +139 -0
  628. package/skills/write-paper/references/journal_profiles/Academic_Radiology.md +90 -0
  629. package/skills/write-paper/references/journal_profiles/Annals_of_Internal_Medicine.md +150 -0
  630. package/skills/write-paper/references/journal_profiles/Artificial_Intelligence_in_Medicine.md +82 -0
  631. package/skills/write-paper/references/journal_profiles/British_Journal_of_Radiology.md +161 -0
  632. package/skills/write-paper/references/journal_profiles/CVIR.md +157 -0
  633. package/skills/write-paper/references/journal_profiles/Chest.md +270 -0
  634. package/skills/write-paper/references/journal_profiles/Clinical_Radiology.md +160 -0
  635. package/skills/write-paper/references/journal_profiles/Clinical_and_Molecular_Hepatology.md +147 -0
  636. package/skills/write-paper/references/journal_profiles/Diabetes_Metabolism_Journal.md +163 -0
  637. package/skills/write-paper/references/journal_profiles/Diagnostic_and_Interventional_Radiology.md +216 -0
  638. package/skills/write-paper/references/journal_profiles/Endocrinology_and_Metabolism.md +167 -0
  639. package/skills/write-paper/references/journal_profiles/European_Journal_of_Preventive_Cardiology.md +192 -0
  640. package/skills/write-paper/references/journal_profiles/European_Radiology.md +159 -0
  641. package/skills/write-paper/references/journal_profiles/Hepatology_Communications.md +110 -0
  642. package/skills/write-paper/references/journal_profiles/Hepatology_International.md +106 -0
  643. package/skills/write-paper/references/journal_profiles/IEEE_TMI.md +180 -0
  644. package/skills/write-paper/references/journal_profiles/INSI.md +163 -0
  645. package/skills/write-paper/references/journal_profiles/Investigative_Radiology.md +86 -0
  646. package/skills/write-paper/references/journal_profiles/JACC_Advances.md +197 -0
  647. package/skills/write-paper/references/journal_profiles/JACC_Asia.md +168 -0
  648. package/skills/write-paper/references/journal_profiles/JACR.md +87 -0
  649. package/skills/write-paper/references/journal_profiles/JAMA.md +188 -0
  650. package/skills/write-paper/references/journal_profiles/JAMA_Network_Open.md +170 -0
  651. package/skills/write-paper/references/journal_profiles/JCSM.md +266 -0
  652. package/skills/write-paper/references/journal_profiles/JKMS.md +201 -0
  653. package/skills/write-paper/references/journal_profiles/JMIR.md +88 -0
  654. package/skills/write-paper/references/journal_profiles/JMIR_Medical_Education.md +86 -0
  655. package/skills/write-paper/references/journal_profiles/JNIS.md +227 -0
  656. package/skills/write-paper/references/journal_profiles/JVIR.md +158 -0
  657. package/skills/write-paper/references/journal_profiles/Journal_of_Clinical_Endocrinology_and_Metabolism.md +191 -0
  658. package/skills/write-paper/references/journal_profiles/Journal_of_Stroke.md +176 -0
  659. package/skills/write-paper/references/journal_profiles/KJR.md +185 -0
  660. package/skills/write-paper/references/journal_profiles/Korean_Circulation_Journal.md +184 -0
  661. package/skills/write-paper/references/journal_profiles/Korean_Journal_of_Internal_Medicine.md +178 -0
  662. package/skills/write-paper/references/journal_profiles/Lancet_Gastroenterology_and_Hepatology.md +127 -0
  663. package/skills/write-paper/references/journal_profiles/Liver_International.md +165 -0
  664. package/skills/write-paper/references/journal_profiles/Medical_Image_Analysis.md +147 -0
  665. package/skills/write-paper/references/journal_profiles/NEJM.md +147 -0
  666. package/skills/write-paper/references/journal_profiles/Nature_Medicine.md +181 -0
  667. package/skills/write-paper/references/journal_profiles/Neuroradiology.md +151 -0
  668. package/skills/write-paper/references/journal_profiles/Nutrition_Metabolism_and_Cardiovascular_Diseases.md +184 -0
  669. package/skills/write-paper/references/journal_profiles/PLOS_Medicine.md +166 -0
  670. package/skills/write-paper/references/journal_profiles/RYAI.md +124 -0
  671. package/skills/write-paper/references/journal_profiles/Radiology.md +173 -0
  672. package/skills/write-paper/references/journal_profiles/Skeletal_Radiology.md +135 -0
  673. package/skills/write-paper/references/journal_profiles/Stroke.md +210 -0
  674. package/skills/write-paper/references/journal_profiles/The_BMJ.md +121 -0
  675. package/skills/write-paper/references/journal_profiles/The_Lancet.md +112 -0
  676. package/skills/write-paper/references/journal_profiles/The_Lancet_Digital_Health.md +104 -0
  677. package/skills/write-paper/references/journal_profiles/World_Journal_of_Hepatology.md +106 -0
  678. package/skills/write-paper/references/journal_profiles/npj_Digital_Medicine.md +93 -0
  679. package/skills/write-paper/references/paper_types/ai_validation.md +270 -0
  680. package/skills/write-paper/references/paper_types/animal_study.md +194 -0
  681. package/skills/write-paper/references/paper_types/case_report.md +237 -0
  682. package/skills/write-paper/references/paper_types/cross_national.md +328 -0
  683. package/skills/write-paper/references/paper_types/letter.md +127 -0
  684. package/skills/write-paper/references/paper_types/meta_analysis.md +181 -0
  685. package/skills/write-paper/references/paper_types/nhis_cohort.md +297 -0
  686. package/skills/write-paper/references/paper_types/original_article.md +221 -0
  687. package/skills/write-paper/references/paper_types/technical_note.md +131 -0
  688. package/skills/write-paper/references/section_guides/discussion.md +155 -0
  689. package/skills/write-paper/references/section_guides/introduction.md +108 -0
  690. package/skills/write-paper/references/section_guides/methods.md +144 -0
  691. package/skills/write-paper/references/section_guides/results.md +113 -0
  692. package/skills/write-paper/references/section_guides/step7_1_classical_qc.md +67 -0
  693. package/skills/write-paper/references/section_guides/step7_4a_audit_recovery.md +74 -0
  694. package/skills/write-paper/references/section_guides/title_abstract.md +123 -0
  695. package/skills/write-paper/references/section_templates/methods_statistical.md +147 -0
  696. package/skills/write-paper/scripts/check_placeholders.py +182 -0
  697. package/skills/write-paper/skill.yml +48 -0
  698. package/skills/write-paper/tests/test_placeholders.sh +107 -0
  699. package/skills/write-protocol/SKILL.md +243 -0
  700. package/skills/write-protocol/references/ethics_checklist.md +150 -0
  701. package/skills/write-protocol/references/protocol_template.md +304 -0
  702. package/skills/write-protocol/skill.yml +34 -0
@@ -0,0 +1,166 @@
1
+ # Critic Rubric — Data Plots
2
+
3
+ Apply this rubric when the generated figure is a data visualization (not a
4
+ flow diagram): ROC, forest, KM, calibration, Bland-Altman, confusion matrix,
5
+ box/violin, bar, heatmap. The Claude session should Read the rendered PNG
6
+ plus any available exemplars from `references/exemplar_diagrams/{type}/`,
7
+ then mark each item below as **PASS / PARTIAL / FAIL** with a one-line
8
+ justification.
9
+
10
+ After scoring, produce a list of concrete matplotlib/seaborn edits that
11
+ would resolve every FAIL or PARTIAL item. Return the scored rubric + edit
12
+ list to the user.
13
+
14
+ ---
15
+
16
+ ## A. Axes, labels, units
17
+
18
+ 1. **X-axis label** present with units where applicable.
19
+ 2. **Y-axis label** present with units where applicable.
20
+ 3. **Axis tick labels** readable (no overlap, sensible density, no scientific
21
+ notation where plain numbers fit).
22
+ 4. **Axis limits** sensible — no wasted whitespace (e.g., ROC axes should
23
+ be 0–1 exactly, forest plot x-axis should frame all CIs without
24
+ clipping).
25
+ 5. **Tick direction inward**, tick marks minor/major where needed. No
26
+ chart-spine clutter.
27
+
28
+ ## B. Legend / caption
29
+
30
+ 6. **Legend present** when ≥2 series are shown; placed where it does not
31
+ obscure data.
32
+ 7. **Legend labels** are descriptive (not "Series 1"); include N or group
33
+ size where relevant.
34
+ 8. **Legend ordering** matches visual order of series (top to bottom).
35
+ 9. **Caption-ready** — plot does not rely on external notes the caption
36
+ cannot repeat concisely.
37
+
38
+ ## C. Figure-type–specific requirements
39
+
40
+ ### ROC curve
41
+ - AUC and 95% CI displayed on plot or in legend
42
+ - Diagonal reference line (chance) shown
43
+ - Sensitivity on Y-axis (0–1), 1−Specificity on X-axis (0–1)
44
+ - Multiple models distinguished by color AND line style (grayscale-safe)
45
+
46
+ ### Forest plot
47
+ - Effect estimates aligned to a vertical reference line (null effect)
48
+ - CIs drawn as horizontal bars with appropriate caps
49
+ - Box size proportional to study weight
50
+ - Diamond summary at the bottom; pooled estimate and CI printed
51
+ - Left column: study labels; right column: effect (95% CI) numeric
52
+ - Heterogeneity statistics (I², τ², Q p-value) reported in caption or plot
53
+
54
+ ### KM curve
55
+ - Number at risk table below the plot
56
+ - Median survival and its CI shown or reported in caption
57
+ - Log-rank p-value or Cox HR reported
58
+ - Curves distinguishable in grayscale (line style + color)
59
+ - Censoring marks visible
60
+
61
+ ### Calibration plot
62
+ - Ideal diagonal line (y=x) shown
63
+ - Binned observed vs. predicted points
64
+ - Hosmer-Lemeshow p-value or Brier score reported
65
+ - Histogram of predicted probabilities overlaid or beside the plot
66
+
67
+ ### Bland-Altman
68
+ - Mean difference line
69
+ - ±1.96 SD limits of agreement
70
+ - LoA values printed
71
+ - Scatter points not clipped at plot edges
72
+
73
+ ### Confusion matrix
74
+ - Cells annotated with counts AND percentages
75
+ - Axis labels "Predicted" / "Actual" (or "Reference")
76
+ - Diagonal emphasized (darker color or heavier stroke) if useful
77
+
78
+ ## D. Typography and accessibility
79
+
80
+ 10. **Font size ≥ 8pt at final dimensions** (most journals require 6–7pt min
81
+ for axis numerics, 8pt for labels). At 300 DPI in a 3.5×3.5 inch
82
+ figure, this corresponds to roughly ≥25 px — use `critic_figure.py`
83
+ OCR min-height flag as a proxy.
84
+ 11. **Single font family** throughout (typically sans-serif). No mixed
85
+ Arial/Helvetica/Times.
86
+ 12. **Colors from Wong palette** or equivalent colorblind-safe scheme.
87
+ `critic_figure.py` flags out-of-palette fractions >15%.
88
+ 13. **Grayscale-safe** — every series is distinguishable in grayscale
89
+ conversion, either through line style, marker shape, or luminosity
90
+ differences.
91
+
92
+ ## E. Publication readiness
93
+
94
+ 14. **Vector PDF produced** in addition to PNG.
95
+ 15. **Dimensions match journal spec** — width per figure_specs.md for the
96
+ target journal (single column ≈3.5 in, double ≈7.0 in).
97
+ 16. **DPI ≥ 300 (halftone) or ≥ 600 (line art)**.
98
+ 17. **No duplicate data encoding** (e.g., color + shape + size all mapped
99
+ to the same variable adds clutter without information).
100
+ 18. **Statistical annotations** — where significance markers are used
101
+ (`*`, `**`, `***`), the caption defines thresholds. Prefer actual
102
+ p-values for publication.
103
+
104
+ ## F. Exemplar comparison (if exemplars exist for this type)
105
+
106
+ 19. **Visual density** comparable to exemplars — not significantly sparser
107
+ or more cluttered.
108
+ 20. **Annotation style** — placement of summary statistics, N labels,
109
+ p-values consistent with exemplars.
110
+
111
+ ## G. Medical AI / prediction-model checks (added v1.1.0)
112
+
113
+ Apply when the figure supports a prediction-model or medical-AI claim
114
+ (TRIPOD+AI, CLAIM 2024, STARD-AI, CONSORT-AI). Source:
115
+ `reporting_guideline_figure_map.md` "AI-specific figures most often
116
+ missing."
117
+
118
+ 21. **Calibration plot accompanies discrimination** — when the manuscript
119
+ reports AUC/c-statistic, a calibration plot is also presented (or the
120
+ figure is paired with one). TRIPOD+AI mandates calibration; AUC alone
121
+ is insufficient evidence of model fitness.
122
+ 22. **Subgroup / fairness panel** — when the deployment claim covers
123
+ multiple demographic groups, sites, or scanner vendors, performance
124
+ is shown stratified by at least one such axis. CLAIM 2024 §C and
125
+ TRIPOD+AI both require this.
126
+ 23. **Colorblind-safe + redundant encoding** — color carrying diagnostic
127
+ meaning is paired with at least one non-color cue (line style, marker
128
+ shape, or direct label) so the figure survives deuteranopia
129
+ simulation and grayscale conversion. (Crameri 2024.) Stronger than
130
+ the existing item D.13.
131
+ 24. **Dataset-flow visible** — for AI papers reporting performance on a
132
+ test set, the manuscript also includes a dataset-flow diagram with
133
+ counts at training / tuning / internal-test / external-test splits.
134
+ Required by STARD-AI, CLAIM 2024, TRIPOD+AI. If the figure under
135
+ review is not the dataset-flow itself, confirm one exists elsewhere
136
+ in the manuscript.
137
+ 25. **Decision-curve analysis (when claiming clinical utility)** — papers
138
+ that argue "this model would change clinical management" must
139
+ accompany discrimination/calibration with a decision-curve plot
140
+ (Vickers & Elkin, *Med Decis Making* 2006). Recommended by TRIPOD+AI.
141
+
142
+ ---
143
+
144
+ ## Scoring output format
145
+
146
+ ```
147
+ ## Critic report (data plot, round T)
148
+
149
+ | Item | Score | Note |
150
+ |------|-------|------|
151
+ | A.1 X-axis label | PASS | — |
152
+ | A.2 Y-axis label | FAIL | Missing units ("Sensitivity" should be unitless OK; but "Time" needs "(months)") |
153
+ | ...
154
+
155
+ ### Required edits before next render
156
+ 1. Add unit "(months)" to Y-axis label.
157
+ 2. Increase legend font from 6pt to 8pt.
158
+ 3. ...
159
+
160
+ ### Overall verdict
161
+ [ ] PASS — ready for manuscript
162
+ [ ] REFINE — items above must be fixed before next round
163
+ ```
164
+
165
+ Record `critic_pass: yes | partial | no` and `refine_rounds: N` in the
166
+ `_figure_manifest.md` for this figure after the final round.
@@ -0,0 +1,169 @@
1
+ # Critic Rubric — Flow Diagrams
2
+
3
+ Apply this rubric when the generated figure is a flow diagram: STARD,
4
+ CONSORT, PRISMA, or pipeline/methods. The Claude session should Read the
5
+ rendered PNG plus any available exemplars from
6
+ `references/exemplar_diagrams/{stard|consort|prisma|pipeline}/`, then mark
7
+ each item below as **PASS / PARTIAL / FAIL** with a one-line justification.
8
+
9
+ After scoring, produce a concrete list of source edits (D2 code changes,
10
+ node label fixes, count corrections) that would resolve every FAIL or
11
+ PARTIAL item. Return the scored rubric + edit list to the user.
12
+
13
+ ---
14
+
15
+ ## A. Structural integrity
16
+
17
+ 1. **Box overlap** — No two boxes or text labels overlap. Arrows do not cross
18
+ through node text.
19
+ 2. **Readable edges** — Every edge has a clear source and target; direction is
20
+ unambiguous; no dangling arrows.
21
+ 3. **Hierarchy preserved** — Vertical or horizontal flow reads in a single
22
+ dominant direction; upstream nodes appear before downstream ones.
23
+ 4. **Alignment** — Peer nodes at the same logical level are aligned
24
+ (baseline or center).
25
+ 5. **Whitespace** — No excessive vertical gap (>2× box height) between
26
+ sequential steps. No cramped collisions at decision points.
27
+
28
+ ## B. Required elements (per figure type)
29
+
30
+ ### STARD flow (diagnostic accuracy)
31
+ - Enrollment count (consecutive vs. random, eligible n)
32
+ - Included n (with inclusion criteria applied)
33
+ - Excluded n with itemized reasons
34
+ - Index test performed (n analyzed)
35
+ - Reference standard performed (n analyzed)
36
+ - Final analysis cohort (n with both tests)
37
+
38
+ ### CONSORT flow (RCT)
39
+ - **Enrollment** section: Assessed for eligibility (n), Excluded (n with
40
+ reasons: did not meet criteria, declined, other)
41
+ - **Allocation** section: Randomized (n), Allocated to each arm (n received /
42
+ n did not receive intervention)
43
+ - **Follow-up** section: Lost to follow-up (n, reasons), Discontinued (n,
44
+ reasons) per arm
45
+ - **Analysis** section: Analyzed (n), Excluded from analysis (n, reasons)
46
+ per arm
47
+
48
+ ### PRISMA 2020 flow (systematic review)
49
+ - Records identified from databases (n per database)
50
+ - Records identified from other sources (registers, citation search, etc.)
51
+ - Records after duplicates removed (n)
52
+ - Records screened (n) → Records excluded (n)
53
+ - Reports sought for retrieval (n) → Reports not retrieved (n)
54
+ - Reports assessed for eligibility (n) → Reports excluded with reasons (n, reason categories)
55
+ - Studies included in review (n) / Reports of included studies (n)
56
+
57
+ ### Pipeline / methods
58
+ - Input data block clearly named (modality, cohort)
59
+ - Preprocessing steps in sequence (resampling, normalization, augmentation)
60
+ - Model / algorithm block with name or architecture
61
+ - Output / task block (segmentation, classification, regression)
62
+ - Evaluation metric block where applicable
63
+
64
+ ## C. Numerical consistency
65
+
66
+ 6. **Arithmetic balance** — At each branching node, `in = out + excluded`.
67
+ Verify every subtraction explicitly. Flag any mismatch.
68
+ 7. **Column totals consistent** — For parallel arms (CONSORT), arm totals
69
+ sum to the randomized total at every stage.
70
+ 8. **No duplicate counts** — A participant should not appear in two leaf
71
+ nodes unless the diagram explicitly models this.
72
+ 9. **Manuscript consistency** — Numbers in the diagram match the
73
+ corresponding text in Methods/Results (apply the [VERIFY-CSV] rule —
74
+ every count should trace to a CSV cell or source query).
75
+
76
+ ## D. Typography and accessibility
77
+
78
+ 10. **Font size ≥ 18pt** at the compact-recipe render dimensions (main boxes
79
+ ≥ 20pt, exclusion boxes ≥ 18pt, italic notes ≥ 17pt). Check against the
80
+ `critic_figure.py` OCR min-height flag.
81
+ 11. **No truncated text** — No box shows clipped text ("Assessed for eli...").
82
+ OCR coverage check (source_word_coverage ≥ 0.95).
83
+ 12. **Consistent casing** — Sentence case everywhere, or Title Case
84
+ everywhere — not mixed.
85
+ 13. **Wong palette or neutral only** — Fill colors drawn from the Wong
86
+ colorblind-safe set plus whites/light grays. No red-green only
87
+ distinctions.
88
+ 14. **Grayscale-safe** — Conversion to grayscale preserves all distinctions
89
+ between box categories (intent vs. exclusion vs. outcome).
90
+
91
+ ## E. Publication readiness
92
+
93
+ 15. **Vector format available** — Both PNG (for DOCX embedding) and PDF
94
+ (for journal submission) were produced. If PDF missing, flag.
95
+ 16. **Dimensions match journal spec** — Width matches the target journal's
96
+ single-column or double-column specification (±0.3 in).
97
+ 17. **DPI meets spec** — ≥600 DPI for line-art submissions, ≥300 DPI for
98
+ halftone.
99
+ 18. **Policy compliance** — Tool is D2 or a permitted auto-layout engine,
100
+ not matplotlib FancyBboxPatch and not Mermaid. (Mermaid is forbidden
101
+ in papers per the project's figure-toolchain policy.)
102
+
103
+ ## F. Exemplar comparison (if exemplars exist for this type)
104
+
105
+ 19. **Hierarchy depth** matches one of the exemplars within ±1 level.
106
+ 20. **Typographic weight** — Main step labels are visually heavier
107
+ (bold/larger) than parenthetical / exclusion labels, as in the
108
+ exemplars.
109
+ 21. **Emphasis placement** — Key cohort counts (final analysis n, primary
110
+ outcome n) are visually emphasized (thicker stroke, larger font, or
111
+ fill distinction), consistent with exemplar conventions.
112
+
113
+ ## G. Communication-first checks (added v1.1.0)
114
+
115
+ These checks operationalize `references/design_principles.md` (Nature Hum
116
+ Behav 2026) and `references/flow_diagram_lessons.md`. Apply when the
117
+ diagram will be circulated to senior co-authors or submitted to a peer-
118
+ reviewed venue.
119
+
120
+ 22. **Cognitive load** — Each column has ≤7 boxes; each diagram uses ≤3
121
+ distinct shapes (e.g., rectangle / rounded rectangle / note) and ≤3
122
+ fill colors. If the count is exceeded, fold detail into supplementary
123
+ or split into a multi-panel figure.
124
+ 23. **Key-message visibility** — The analytic cohort (final n included in
125
+ primary analysis) is visually emphasized via thicker stroke
126
+ (`penwidth ≥ 1.8`), distinct fill, or larger font, so the reader's
127
+ eye lands on it within 2 seconds.
128
+ 24. **Official-template fidelity** (when applicable) — Layout matches the
129
+ canonical PRISMA 2020 / CONSORT 2010 / STARD 2015 / STROBE template
130
+ used by the corresponding statement group. Custom layouts are
131
+ acceptable for exploratory drafts but must be replaced before
132
+ circulation. (See `flow_diagram_lessons.md` Lesson 1.)
133
+ 25. **Exclusion-box geometry** — Exclusion side-boxes are rectangles (not
134
+ `shape: note` / "dog-ear" style) when the diagram aims to match
135
+ PRISMA / CONSORT canonical look. Bullets within exclusion boxes are
136
+ left-aligned (Graphviz `\l`, not `\n`).
137
+ 26. **Frozen-version sync** — The figure file path includes the manuscript
138
+ version (`figures/v{N}/figure_1.pdf`) and the value of `v{N}` matches
139
+ the current manuscript version. Edits after circulation must branch
140
+ to `v{N+1}/`, never overwrite `v{N}/`. (See `flow_diagram_lessons.md`
141
+ Lesson 5.)
142
+
143
+ ---
144
+
145
+ ## Scoring output format
146
+
147
+ ```
148
+ ## Critic report (flow diagram, round T)
149
+
150
+ | Item | Score | Note |
151
+ |------|-------|------|
152
+ | A.1 Box overlap | PASS | — |
153
+ | A.2 Readable edges | PASS | — |
154
+ | ...
155
+ | C.6 Arithmetic balance | FAIL | Enrollment 500 ≠ Included 420 + Excluded 85 (off by 5) |
156
+ | ...
157
+
158
+ ### Required edits before next render
159
+ 1. Correct Excluded count in node X from 85 to 80.
160
+ 2. Increase font-size of "Analysis" subsection header from 18 to 22.
161
+ 3. ...
162
+
163
+ ### Overall verdict
164
+ [ ] PASS — ready for manuscript
165
+ [ ] REFINE — items above must be fixed before next round
166
+ ```
167
+
168
+ Record `critic_pass: yes | partial | no` and `refine_rounds: N` in the
169
+ `_figure_manifest.md` for this figure after the final round.
@@ -0,0 +1,181 @@
1
+ # Effective Scientific Figure Design
2
+
3
+ > **Primary source**: Brunner et al., "Designing effective figures for
4
+ > scientific communication." *Nat Hum Behav* (2026).
5
+ > DOI: 10.1038/s41562-026-02466-9 — communication-context strategies.
6
+ >
7
+ > **Companion sources** (cite in figure legends / Methods when used):
8
+ > - Rougier et al., "Ten simple rules for better figures." *PLoS Comput
9
+ > Biol* 2014;10:e1003833 (PMID 25210732). General-purpose, foundational
10
+ > ten-item checklist.
11
+ > - Crameri F., "Choosing the right colors: a perceptually uniform,
12
+ > colorblind-safe approach." *Curr Protoc* 2024;4:e1126
13
+ > (DOI 10.1002/cpz1.1126). Definitive 2024 reference for `viridis`,
14
+ > `cividis`, `batlow` palettes and redundant encoding.
15
+ >
16
+ > **Triggered from**: SKILL.md Step 1 ("Specify"). Read this file **before**
17
+ > choosing a figure type — it shifts focus from "which chart fits the data" to
18
+ > "what message should the reader walk away with."
19
+
20
+ Most figure-design guidance focuses on technical execution (axis ranges,
21
+ palettes, DPI). This file complements that by adding a communication-first
22
+ layer: who reads the figure, under what time pressure, and what should they
23
+ remember 10 seconds later. Apply these strategies in Step 1 when specifying a
24
+ figure; revisit during Step 4 / 4b when reviewing.
25
+
26
+ ---
27
+
28
+ ## The 5 strategies (read in order)
29
+
30
+ ### 1. Identify the key message *(most important)*
31
+
32
+ Before opening a plotting library, write **one sentence** describing what the
33
+ figure must convey. If you cannot, the figure is premature. Examples:
34
+
35
+ - "Model A outperforms Model B at every operating threshold."
36
+ - "Adverse-event rates differ by route of administration but not by dose."
37
+ - "The proposed pipeline runs end-to-end in under 30 seconds per case."
38
+
39
+ Pin that sentence as a comment at the top of the generation script. Every
40
+ panel, color, annotation, and label exists to support that message; anything
41
+ that does not should be removed or moved to supplementary material.
42
+
43
+ ### 2. Consider time and interaction (audience-aware)
44
+
45
+ Different reading contexts allow different amounts of inspection time:
46
+
47
+ | Context | Reading time | Implication |
48
+ |---|---|---|
49
+ | Journal article (specialist) | 30–120 s per figure | Dense detail acceptable; legend lookups OK |
50
+ | Conference slide | 15–30 s, narrated | Direct labels mandatory; one message per slide |
51
+ | Visual / graphical abstract | 5–10 s, no narration | One panel; minimal text; readable thumbnail |
52
+ | Social-media share | 2–5 s | Self-contained; large fonts; high contrast |
53
+ | Public lecture / press | 10–30 s, narrated | Plain-language axis labels; analogy via icon |
54
+
55
+ Set the **reading-time budget** in Step 1, then design backwards. If the same
56
+ result will appear in a journal article *and* a conference talk, build two
57
+ distinct versions — the conference version usually drops half of what the
58
+ journal version contains.
59
+
60
+ ### 3. Choose the right graph type and use color intentionally
61
+
62
+ The graph type should match the structure of the data, not aesthetic
63
+ preference.
64
+
65
+ | Data structure | Default | Avoid |
66
+ |---|---|---|
67
+ | One continuous variable, one group | Histogram, density | Pie chart |
68
+ | Two continuous variables | Scatter (+ regression line if appropriate) | Bar chart |
69
+ | Continuous over time | Line | Stacked bar |
70
+ | Categorical proportions | Bar (sorted), waffle | 3-D pie |
71
+ | Distribution by group | Box / violin / strip | Bar with SD error |
72
+ | Diagnostic performance | ROC, PR curve | Single accuracy bar |
73
+ | Effect size with CI | Forest plot, dot-and-whisker | Bar with asterisks |
74
+ | Workflow / cohort | Flow diagram (PRISMA / CONSORT / STARD) | Free-form arrows |
75
+
76
+ Color rules (compatible with this skill's `figure_specs.md`; full
77
+ justification in Crameri 2024):
78
+
79
+ - **Categorical groups**: Wong palette (8 colorblind-safe colors).
80
+ - **Sequential magnitude**: `viridis` or `cividis` (perceptually uniform,
81
+ colorblind-safe). Avoid `jet` and `rainbow` — they introduce false
82
+ perceptual edges.
83
+ - **Diverging around zero**: `RdBu`, `PuOr`, or `vik` (Crameri).
84
+ - **Encode meaning, not decoration.** If the same conclusion holds in
85
+ grayscale, color is decorative — remove or use neutral grays.
86
+ - **Redundant encoding** when color carries diagnostic information: pair
87
+ color with line style, marker shape, or direct label so the figure
88
+ survives a deuteranopia simulation and a black-and-white print.
89
+ - **Maximum 3 colors per panel** unless the data structure genuinely demands
90
+ more (and then label each directly, not via legend).
91
+
92
+ ### 4. Reduce cognitive load
93
+
94
+ Every visual element competes for attention. The reader's working memory is
95
+ roughly 7 items; design under that ceiling.
96
+
97
+ - ≤7 distinct visual elements per panel (curves, boxes, annotations).
98
+ - ≤3 distinct shapes (e.g., square, circle, triangle).
99
+ - ≤3 colors as above.
100
+ - **Direct labels on series > legend.** Legend lookups cost ~2 seconds each.
101
+ - No 3-D, drop-shadow, gradient fill, or rotated axis labels unless they
102
+ encode data.
103
+ - Sans-serif font ≥ 9 pt at print size; ≥ 18 pt for slides; ≥ 24 pt for
104
+ posters.
105
+ - Whitespace is not wasted space — it groups related elements.
106
+
107
+ If a panel violates two or more of these, split it into multiple panels or
108
+ move detail to supplementary material.
109
+
110
+ ### 5. Ask whether a figure is really needed
111
+
112
+ Sometimes a table, a single sentence, or a caption-only number conveys the
113
+ result more clearly. Use a figure when **at least one** of the following is
114
+ true:
115
+
116
+ - The reader needs to perceive a *shape* (trend, distribution, threshold).
117
+ - The reader needs to *compare* across many groups simultaneously.
118
+ - The result depends on a *spatial* or *anatomical* relationship.
119
+ - The audience will not read the prose carefully and needs a visual hook.
120
+
121
+ Otherwise, prefer a small table or in-line text. A 3-row × 2-column results
122
+ table beats a bar chart of two values.
123
+
124
+ ---
125
+
126
+ ## Decision: figure vs table
127
+
128
+ | Use a **figure** when… | Use a **table** when… |
129
+ |---|---|
130
+ | Trend or shape matters | Exact values matter (e.g., baseline characteristics) |
131
+ | ≥4 groups / conditions | ≤3 groups *and* ≤8 metrics |
132
+ | Distribution shape conveys meaning | Categorical labels with counts |
133
+ | Comparison across many dimensions | Reader will reuse the numbers (re-analysis, replication) |
134
+ | Visual-abstract / hero panel | Supplementary detail |
135
+
136
+ When in doubt, sketch both on paper for 60 seconds and decide which the eye
137
+ finishes first.
138
+
139
+ ---
140
+
141
+ ## Cognitive load checklist (Step 4 quick scan)
142
+
143
+ - [ ] One sentence describes the key message in the script comment.
144
+ - [ ] Reading-time budget matches the deployment context.
145
+ - [ ] ≤7 visual elements per panel.
146
+ - [ ] ≤3 colors carrying meaning (not decoration).
147
+ - [ ] No 3-D / shadow / gradient unless data-driven.
148
+ - [ ] Direct labels on series; legend has ≤4 entries.
149
+ - [ ] Font size meets context minimum (9 pt print / 18 pt slide / 24 pt poster).
150
+ - [ ] Same figure works in grayscale (run a `convert -colorspace Gray` test).
151
+
152
+ If two or more boxes are unchecked, return to Step 1 before exporting.
153
+
154
+ ---
155
+
156
+ ## Anti-patterns (drawn from this skill's critic rubrics)
157
+
158
+ These compose with the more granular checks in
159
+ `critic_rubrics/data_plot.md` and `critic_rubrics/flow_diagram.md`:
160
+
161
+ - **Default-palette syndrome** — using the matplotlib `tab10` palette without
162
+ thought. Reads as a quick draft, not a finished figure.
163
+ - **Legend-dependence** — colored series without direct labels, forcing
164
+ back-and-forth between legend and data.
165
+ - **Decorative 3-D** — bars or pies in 3-D with no third data dimension.
166
+ - **Chart-of-three-values** — figure where a sentence would be clearer.
167
+ - **Caption-as-Methods** — caption explains how the data were generated
168
+ rather than what to look at; methodology belongs in the Methods section.
169
+ - **Mismatched detail** — slide-deck figure rendered at 6 pt because it was
170
+ copied from the manuscript without adjustment.
171
+
172
+ ---
173
+
174
+ ## Cross-references
175
+
176
+ - `critic_rubrics/data_plot.md` — quantitative critic checks for non-flow figures
177
+ - `critic_rubrics/flow_diagram.md` — extended checks for flow diagrams
178
+ - `figure_specs.md` — journal-specific dimensions and DPI
179
+ - `flow_diagram_lessons.md` — production lessons specific to PRISMA / CONSORT / STARD
180
+ - `reporting_guideline_figure_map.md` — which figures CONSORT-AI / TRIPOD+AI / CLAIM 2024 / STARD-AI mandate
181
+ - `pipeline_concepts_medical_ai.md` — DICOM workflow, annotation, federated learning, model architecture conventions
@@ -0,0 +1,65 @@
1
+ # Exemplar Diagrams — Quality Anchors for the Critic Loop
2
+
3
+ This directory holds a small, hand-curated set of flow-diagram and figure
4
+ examples from published papers that we consider high-quality. The Critic
5
+ Loop references these as "visual structure first" anchors when reviewing
6
+ newly generated figures.
7
+
8
+ ## Layout
9
+
10
+ ```
11
+ exemplar_diagrams/
12
+ ├── strobe/ # cohort / cross-sectional / case-control flow
13
+ ├── stard/ # diagnostic-accuracy flow diagrams
14
+ ├── consort/ # RCT participant flow
15
+ ├── prisma/ # systematic review selection flow
16
+ ├── pipeline/ # methods / algorithm flow diagrams
17
+ └── {other...}/ # future types (roc, forest, km, ...)
18
+ ```
19
+
20
+ Each category directory can hold two kinds of files:
21
+
22
+ 1. **Review anchors** (for the Critic Loop) — groups of three files per exemplar:
23
+ - `{label}.png` — rendered figure cropped from a published paper (≥300 DPI)
24
+ - `{label}.meta.yaml` — attribution metadata (source PDF, page, DOI, crop coords)
25
+ - `{label}_why.md` — 50–100 word note on why this figure is a good anchor
26
+ 2. **Generation templates** (for `generate_flow_diagram.R`) — one set per category:
27
+ - `template_input.yaml` — minimal schema example showing all supported fields
28
+ - `template_output.{pdf,png,_600.png}` — rendered reference output for the template
29
+ - Render with `Rscript ../../scripts/generate_flow_diagram.R --type <type> --config <dir>/template_input.yaml --out <dir>/template_output`
30
+
31
+ ## How to add a new exemplar
32
+
33
+ ```bash
34
+ python skills/make-figures/scripts/extract_exemplar_from_pdf.py \
35
+ --pdf "/path/to/paper.pdf" \
36
+ --page 3 \
37
+ --type stard \
38
+ --label LastnameYEAR_STARD \
39
+ --doi 10.1148/radiol.2017170371 \
40
+ --crop 0.05,0.1,0.95,0.6
41
+ ```
42
+
43
+ Then open the generated `{label}_why.md` and fill in the curator's note
44
+ (50–100 words on hierarchy, whitespace, typography, emphasis, color).
45
+
46
+ ## Curator guidelines
47
+
48
+ - **Source quality** — prefer examples from Radiology, NEJM, Lancet, JAMA,
49
+ European Radiology, BMJ, Cochrane Reviews. Lower-tier sources only when
50
+ they show a specifically good design pattern.
51
+ - **One exemplar per design principle** — do not add five near-identical
52
+ examples. Aim for 3–5 exemplars per category, each illustrating a
53
+ different design strength.
54
+ - **Crop tightly** — remove surrounding caption and whitespace so the
55
+ exemplar is purely the diagram.
56
+ - **No open-access conflict** — avoid exemplars from paywalled figures
57
+ where fair-use for internal reference review is unclear. Prefer
58
+ open-access or CC-licensed papers when possible.
59
+
60
+ ## Attribution
61
+
62
+ Exemplars are used under fair-use for internal quality review only. They
63
+ are **not redistributed as part of generated figures** — the Critic Loop
64
+ uses them read-only as anchors for feedback. The `_meta.yaml` sidecar
65
+ records DOI and source for every exemplar.
@@ -0,0 +1,15 @@
1
+ # consort Exemplars
2
+
3
+ This directory will hold 3–5 hand-curated consort flow/figure exemplars.
4
+ Use the extraction script to add one:
5
+
6
+ ```bash
7
+ python skills/make-figures/scripts/extract_exemplar_from_pdf.py \
8
+ --pdf "/path/to/paper.pdf" \
9
+ --page N \
10
+ --type consort \
11
+ --label LastnameYEAR_CONSORT \
12
+ --doi 10.xxxx/yyyy
13
+ ```
14
+
15
+ See `../README.md` for curation guidelines.
@@ -0,0 +1,37 @@
1
+ # CONSORT parallel-arm RCT flow diagram template.
2
+ # Render with:
3
+ # Rscript ../../scripts/generate_flow_diagram.R \
4
+ # --type consort --config template_input.yaml --out template_output
5
+ rankdir: TB
6
+ nodes:
7
+ - id: assessed
8
+ label: "Assessed for eligibility\n(n = 500)"
9
+ - id: excl
10
+ shape: note
11
+ fontsize: 10
12
+ label: "Excluded (n = 100):\n• Not meeting inclusion criteria: 60\n• Declined to participate: 25\n• Other reasons: 15"
13
+ rank_same_with: assessed
14
+ - id: rand
15
+ label: "Randomized\n(n = 400)"
16
+ highlight: true
17
+ - id: alloc_tx
18
+ label: "Allocated to intervention (n = 200)\n• Received intervention (n = 195)\n• Did not receive intervention (n = 5)"
19
+ - id: alloc_ctrl
20
+ label: "Allocated to control (n = 200)\n• Received control (n = 198)\n• Did not receive control (n = 2)"
21
+ - id: fu_tx
22
+ label: "Lost to follow-up (n = 8)\nDiscontinued intervention (n = 4)"
23
+ - id: fu_ctrl
24
+ label: "Lost to follow-up (n = 6)\nDiscontinued control (n = 3)"
25
+ - id: ana_tx
26
+ label: "Analyzed (n = 200)\n• Excluded from analysis (n = 0)"
27
+ - id: ana_ctrl
28
+ label: "Analyzed (n = 200)\n• Excluded from analysis (n = 0)"
29
+ edges:
30
+ - {from: assessed, to: rand}
31
+ - {from: rand, to: alloc_tx}
32
+ - {from: rand, to: alloc_ctrl}
33
+ - {from: alloc_tx, to: fu_tx}
34
+ - {from: alloc_ctrl, to: fu_ctrl}
35
+ - {from: fu_tx, to: ana_tx}
36
+ - {from: fu_ctrl, to: ana_ctrl}
37
+ - {from: assessed, to: excl, style: dashed, arrow: false, constraint: false}
@@ -0,0 +1,4 @@
1
+ # Exemplar metadata (YAML)
2
+ label: "other_02"
3
+ figure_type: "other"
4
+ dpi: 300
@@ -0,0 +1,13 @@
1
+ # Why this exemplar is good — other_02 (bubble chart landscape)
2
+
3
+ Hierarchy / structure: A landscape scatter/bubble chart with time on the X-axis (pre-2022 → 2025) and MMLU score on the Y-axis. A dashed logistic-like trajectory connects the frontier models across years, implicitly communicating the field-wide progression without a separate annotation layer.
4
+
5
+ Whitespace & balance: The pre-2022 region is nearly empty by design — the sparseness is informative, not wasted. High-performance cluster in 2024–2025 is where bubbles densely overlap, and the axis range (0–100 MMLU) leaves enough headroom above the top models to signal the 90%+ ceiling.
6
+
7
+ Typography (font size, weight, alignment): Model names are placed adjacent to their bubbles with consistent font size; no leader lines are needed because the labels sit directly on or beside each dot. The reference lines ("85% = human expert", "70% = ideal") are low-contrast gray so they guide without competing.
8
+
9
+ Emphasis (which elements are visually strongest, why): Bubble size encodes release prominence, and color encodes the parent organization — two independent visual channels that give the reader a comparative read without returning to the legend.
10
+
11
+ Color usage: Eight distinct organizational colors placed against a white field. The palette is high-saturation but the bubbles are translucent, which lets overlapping dots remain legible.
12
+
13
+ Weaknesses (if any — nothing is perfect): The legend (top) is cramped and would benefit from more horizontal space. A few labels ("DeepSeek", "Claude 3.5 Sonnet") clip against neighbors in the 2024 cluster. No explicit units or source note in the rendered crop.