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,21 @@
1
+ # Checklist Licenses
2
+
3
+ Attribution for bundled reporting guideline checklists.
4
+
5
+ | File | Guideline | Reference | License |
6
+ |------|-----------|-----------|---------|
7
+ | STROBE.md | STROBE 2007 | von Elm E et al. PLoS Med 2007 | CC BY |
8
+ | STARD.md | STARD 2015 | Bossuyt PM et al. BMJ 2015 | CC BY 4.0 |
9
+ | TRIPOD_AI.md | TRIPOD+AI 2024 | Collins GS et al. BMJ 2024 | CC BY 4.0 |
10
+ | PRISMA_2020.md | PRISMA 2020 | Page MJ et al. BMJ 2021 | CC BY |
11
+ | ARRIVE_2.md | ARRIVE 2.0 | Percie du Sert N et al. PLoS Biol 2020 | CC0 |
12
+ | PRISMA_DTA.md | PRISMA-DTA 2018 | McInnes MDF et al. JAMA 2018 | CC BY |
13
+ | QUADAS2.md | QUADAS-2 | Whiting PF et al. Ann Intern Med 2011 | CC BY |
14
+ | RoB2.md | RoB 2 | Sterne JAC et al. BMJ 2019 | CC BY |
15
+ | ROBINS_I.md | ROBINS-I | Sterne JAC et al. BMJ 2016 | CC BY |
16
+ | PROBAST.md | PROBAST | Wolff RF et al. Ann Intern Med 2019 | CC BY |
17
+ | NOS.md | Newcastle-Ottawa Scale | Wells GA et al. Ottawa Hospital Research Institute | Public Domain |
18
+
19
+ These files are educational summaries of published assessment tools. The original
20
+ checklist documents should be cited in any manuscript that uses them. All files are
21
+ compatible with the MIT license of this repository.
@@ -0,0 +1,221 @@
1
+ # PROSPERO Registration Template
2
+
3
+ ## Overview
4
+
5
+ PROSPERO (International Prospective Register of Systematic Reviews) requires completion of
6
+ a structured web form. This template provides field-by-field guidance with word limits and
7
+ common pitfalls from real registration experience.
8
+
9
+ **Key constraint**: Initial registrations are NOT allowed after data extraction is completed.
10
+ Searching and screening may be completed.
11
+
12
+ ---
13
+
14
+ ## Form Fields Reference
15
+
16
+ ### REVIEW TITLE AND BASIC DETAILS
17
+
18
+ #### 1. Review title (max 50 words)
19
+ Include: study design (systematic review, meta-analysis, pooled analysis), condition,
20
+ intervention, population qualifier if relevant.
21
+
22
+ #### 2. Review question (max 250 words)
23
+ Structure around PICO/PIRD. State both primary and secondary objectives clearly.
24
+ For pooled analysis designs, distinguish between pooled proportion and comparative questions.
25
+
26
+ #### 3. Condition/domain being studied (max 200 words)
27
+ Define the condition. Explain why it matters. Note the clinical gap.
28
+
29
+ #### 4. Keywords
30
+ Semicolon-separated. Include MeSH-equivalent terms.
31
+
32
+ ---
33
+
34
+ ### ELIGIBILITY CRITERIA
35
+
36
+ #### 5. Population (max 200 words)
37
+ State included and excluded populations. Include age, disease status, anatomical specifics.
38
+
39
+ #### 6. Intervention/exposure (max 200 words)
40
+ Define all eligible interventions with specifics (technique, device, imaging guidance).
41
+ State minimum reporting requirement ("must report at least one clinical outcome").
42
+
43
+ #### 7. Comparator/control (max 200 words)
44
+ If both comparative and single-arm studies are included, state this explicitly:
45
+ "For the comparative analysis, [comparator description]. For the pooled proportion analysis,
46
+ single-arm studies without a comparator are also included."
47
+
48
+ #### 8. Type of study to be included (max 150 words)
49
+ List included and excluded study designs separately. Be specific about minimum sample size
50
+ (e.g., "case reports with fewer than 5 patients excluded").
51
+
52
+ ---
53
+
54
+ ### SEARCHING AND SCREENING
55
+
56
+ #### 9. Searches (max 300 words)
57
+ Name databases, date range, language restrictions. Reference supplementary search strategies.
58
+
59
+ #### 10. Search strategy (max 300 words)
60
+ Show actual search blocks with Boolean structure. No need for full line-by-line syntax here
61
+ (reference supplementary materials for that).
62
+
63
+ #### Sub-fields in the web form:
64
+ - **Search for unpublished studies**: Yes/No (select based on protocol)
65
+ - **Main databases**: Select from checklist (PubMed, Embase.com vs Embase via Ovid — distinguish!)
66
+ - **Language restrictions**: State explicitly
67
+ - **Date restrictions**: State explicitly
68
+ - **Other methods**: Check ONLY what was actually done:
69
+ - reference list checking (backward citation)
70
+ - contacting authors
71
+ - conference proceedings
72
+ - trial registers
73
+ - forward citation searching (snowballing)
74
+ - **WARNING**: Do not check methods you did not perform — reviewers may ask for results
75
+ - **Link to search strategy**: Reference protocol or supplementary materials
76
+ - **Selection process**: "Two reviewers independently..." with disagreement resolution
77
+ - **Other info about screening**: PRISMA flow diagram reference (optional)
78
+
79
+ ---
80
+
81
+ ### DATA COLLECTION PROCESS
82
+
83
+ #### 11. Data extraction (max 300 words)
84
+ List extracted variables by category: study characteristics, population, intervention,
85
+ outcomes. State unit of analysis policy (patient vs tumor level). If Kaplan-Meier
86
+ reconstruction is used, cite methods (Tierney 2007, Guyot 2012).
87
+
88
+ #### Sub-fields:
89
+ - **Extraction method**: Select "independently by at least two people"
90
+ - **Author contact**: Yes/No
91
+ - **IPD**: Usually No for standard MA
92
+
93
+ #### 12. Risk of bias/Quality assessment (max 200 words)
94
+ Name tool(s) per study design. If using tools not in the PROSPERO checklist (e.g., JBI),
95
+ select "Other" and describe in text.
96
+
97
+ Common tool mapping:
98
+ | Study design | Tool |
99
+ |---|---|
100
+ | RCT | Cochrane RoB 2 |
101
+ | Non-randomized comparative | Newcastle-Ottawa Scale (NOS) or ROBINS-I |
102
+ | Single-arm / case series | JBI Critical Appraisal Checklist (select "Other") |
103
+ | DTA | QUADAS-2 |
104
+ | Prediction model | PROBAST |
105
+
106
+ State number of assessors and disagreement resolution.
107
+
108
+ #### 13. Reporting bias assessment
109
+ For pooled proportion (k>=10): funnel plot + Egger's regression test.
110
+ For comparative (k<10): funnel plot visual inspection only.
111
+ Do NOT promise trim-and-fill or contour-enhanced funnel unless actually planned.
112
+
113
+ #### 14. Certainty assessment
114
+ Select "No" unless GRADE or equivalent is explicitly planned in the protocol.
115
+ If "Yes": requires Summary of Findings table — significant additional work.
116
+
117
+ ---
118
+
119
+ ### OUTCOMES TO BE ANALYSED
120
+
121
+ #### 15. Primary outcomes (max 300 words)
122
+ Define each outcome precisely: what it measures, how it is defined, at what time points.
123
+ State the effect measure (proportion, OR, HR, etc.).
124
+
125
+ #### 16. Secondary outcomes (max 300 words)
126
+ List all secondary outcomes. Include exploratory outcomes that will be "extracted if reported."
127
+
128
+ ---
129
+
130
+ ### PLANNED DATA SYNTHESIS
131
+
132
+ #### 17. Strategy for data synthesis (max 400 words)
133
+ Structure as:
134
+ 1. **Primary analysis**: model, estimator, transformation
135
+ 2. **Secondary analysis**: model, estimator, CI adjustment
136
+ 3. **Heterogeneity**: I-squared, Q test, interpretation thresholds
137
+ 4. **Publication bias**: methods (reference field 13)
138
+ 5. **Software**: R packages with versions
139
+
140
+ #### 18. Subgroups/subsets (max 250 words)
141
+ Number and list all pre-specified subgroup analyses.
142
+ Number and list all pre-specified sensitivity analyses.
143
+ State interaction test method.
144
+ Mention leave-one-out if planned.
145
+
146
+ ---
147
+
148
+ ### CURRENT REVIEW STAGE
149
+
150
+ #### 19. Review stage checklist
151
+ | Stage | Allowed at registration |
152
+ |---|---|
153
+ | Pilot work | Started or Completed OK |
154
+ | Formal searching | Started or Completed OK |
155
+ | Screening | Started or Completed OK |
156
+ | **Data extraction** | **Not started or Started ONLY** |
157
+ | Risk of bias | Not started |
158
+ | Data synthesis | Not started |
159
+
160
+ **CRITICAL**: If data extraction is "Completed", registration will be REJECTED.
161
+ If protocol restructuring invalidates prior extraction → defensible to mark "Not started."
162
+
163
+ #### 20. Review status
164
+ Usually: "The review is planned or ongoing"
165
+
166
+ ---
167
+
168
+ ### REVIEW AFFILIATION, FUNDING AND PEER REVIEW
169
+
170
+ #### 21. Review team members
171
+ All authors with ORCID and affiliation. One must be Guarantor + Named Contact.
172
+ Guarantor = typically first or corresponding author.
173
+
174
+ #### 22. Funding
175
+ - If no funding: "This review received no specific funding from any agency in the public,
176
+ commercial, or not-for-profit sectors."
177
+ - Do NOT write "supported by academic institutions" unless there is actual institutional funding.
178
+
179
+ #### 23. Peer review
180
+ Usually "Not peer reviewed" for initial registration.
181
+
182
+ ---
183
+
184
+ ### ADDITIONAL INFORMATION
185
+
186
+ #### 24. Additional info (max 250 words)
187
+ Standard text: "Any important protocol amendments will be documented in the PROSPERO record
188
+ and clearly reported in the final publication."
189
+
190
+ #### 25. MeSH terms
191
+ Auto-generated but editable. Review and add missing terms (e.g., Microwaves for MWA studies).
192
+
193
+ ---
194
+
195
+ ## Common Pitfalls Checklist
196
+
197
+ Before submitting, verify:
198
+
199
+ - [ ] **HTML entities**: Preview PDF and check all `>=`, `<`, `&` symbols display correctly
200
+ (common breakage: `&gt;`, `&lt;`, `&amp;` appearing literally)
201
+ - [ ] **Word limits**: Each field within stated maximum
202
+ - [ ] **Database names**: Embase.com vs Embase via Ovid (different options in form)
203
+ - [ ] **Other methods**: Only checked items actually performed
204
+ - [ ] **RoB tool**: JBI requires "Other" selection (not in standard list)
205
+ - [ ] **Certainty/GRADE**: "No" unless explicitly planned with SoF table
206
+ - [ ] **Funding text**: Matches actual funding status
207
+ - [ ] **Data extraction stage**: Not marked as "Completed"
208
+ - [ ] **Similar records**: All reviewed and confirmed "not similar"
209
+ - [ ] **All authors**: Listed with correct ORCID and affiliation
210
+ - [ ] **End date**: In the future (update if past)
211
+ - [ ] **Comparator field**: Addresses both comparative and single-arm inclusion if applicable
212
+
213
+ ---
214
+
215
+ ## Output Format
216
+
217
+ When generating PROSPERO content for the user:
218
+ 1. Produce a single Markdown file with all fields, word counts per field
219
+ 2. Convert to DOCX via pandoc for copy-paste convenience
220
+ 3. Flag any fields requiring user decision (e.g., author contact, unpublished search)
221
+ 4. Include the Common Pitfalls Checklist at the end
@@ -0,0 +1,245 @@
1
+ """AI-Assisted Pre-Screening Template for R3 Adjudication.
2
+
3
+ PURPOSE
4
+ -------
5
+ For systematic review screening, the methodologically sound workflow requires
6
+ TWO independent human reviewers with Cohen's kappa, followed by adjudication
7
+ of disagreements (R3) by the first reviewer. R3 commonly involves 100+ records
8
+ and is the bottleneck.
9
+
10
+ This template generates AI-assisted *suggestions* (NOT decisions). The first
11
+ reviewer must still confirm or overturn each suggestion. This preserves
12
+ methodological integrity while compressing R3 from 2-3 hours x 2-3 days to
13
+ ~30-60 minutes.
14
+
15
+ NOT a replacement for human reviewer. Methods boilerplate is provided below.
16
+
17
+ INPUT
18
+ -----
19
+ TSV with at minimum these columns:
20
+ uid, title, abstract_preview, journal, doi, round2_tag, round2_reason
21
+
22
+ `round2_tag` values expected:
23
+ INCLUDE -> AI default = CONFIRM-INCLUDE; flag review/conf abstract patterns
24
+ MAYBE -> AI requires per-uid manual decisions (UNCERTAIN if not pre-coded)
25
+ EXCLUDE -> typically not in R3 sheet; if present, AI default = CONFIRM-EXCLUDE
26
+
27
+ OUTPUT
28
+ ------
29
+ Same TSV plus columns:
30
+ ai_suggestion : INCLUDE / EXCLUDE / UNCERTAIN / CONFIRM-INCLUDE / CONFIRM-EXCLUDE
31
+ ai_reason : one-sentence justification
32
+
33
+ USAGE
34
+ -----
35
+ 1. Copy this file to your project's `1_Code/` directory.
36
+ 2. Customize:
37
+ - `PROJECT_PECOS` (eligibility criteria summary)
38
+ - `MAYBE_DECISIONS` (per-uid manual judgments after reading each abstract)
39
+ - `EXCLUDE_PATTERNS` (project-specific keyword patterns)
40
+ 3. Run; review priority-sorted output (use companion `make_review_priority_view.py`).
41
+
42
+ METHODS BOILERPLATE
43
+ -------------------
44
+ "Round 3 adjudication of records flagged as 'maybe' by either reviewer was
45
+ performed by the first reviewer (initials) with AI-assisted pre-screening
46
+ (model name and version). The AI model was prompted with the prespecified
47
+ PECOS criteria and produced a suggestion plus brief justification for each
48
+ record; the first reviewer independently confirmed or overturned every
49
+ suggestion against the title, abstract, and (when needed) full text. AI
50
+ suggestions were not used as final inclusion decisions."
51
+
52
+ CITATION
53
+ --------
54
+ Inspired by emerging AI-assisted screening practice (e.g., Khalil et al.,
55
+ Syst Rev 2022). Document model and version in the manuscript.
56
+ """
57
+ from __future__ import annotations
58
+ import csv
59
+ from pathlib import Path
60
+
61
+ # ============================================================================
62
+ # 1. PROJECT CONFIGURATION — customize per project
63
+ # ============================================================================
64
+
65
+ PROJECT_PECOS = """
66
+ Replace this string with a one-paragraph summary of your PECOS criteria.
67
+ Used as documentation only; the AI logic below must be coded explicitly.
68
+ """
69
+
70
+ # Per-uid MAYBE decisions. Fill after reading each MAYBE abstract.
71
+ # Format: uid -> (suggestion, one-sentence reason)
72
+ # Suggestion values: INCLUDE / EXCLUDE / UNCERTAIN
73
+ MAYBE_DECISIONS: dict[str, tuple[str, str]] = {
74
+ # "study_0042": ("INCLUDE", "Title confirms target population + intervention; design = RCT."),
75
+ # "study_0099": ("EXCLUDE", "Conference abstract without full publication."),
76
+ # "study_0123": ("UNCERTAIN", "Abstract truncated; full text needed to confirm intervention arm."),
77
+ }
78
+
79
+ # ============================================================================
80
+ # 2. INCLUDE-row heuristic classifier — common patterns; tune for your project
81
+ # ============================================================================
82
+
83
+ # Hard EXCLUDE keyword patterns (title or first 300 chars of abstract)
84
+ REVIEW_KEYWORDS = [
85
+ "systematic review", "meta-analysis", "narrative review",
86
+ " review of ", "scoping review", "review article",
87
+ "editorial", "commentary", "letter to the editor",
88
+ ]
89
+
90
+ # Conference abstract / supplement detection
91
+ CONF_JOURNAL_KEYWORDS = ["abstracts", "supplement"]
92
+ # Common DOI markers for supplements (tune to your field)
93
+ CONF_DOI_PATTERNS = ["suppl_", "/circ.144.suppl", "/circ.146.suppl",
94
+ ".abstract.", "-snis.", "-esmint."]
95
+
96
+ # Single case report markers
97
+ CASE_KEYWORDS = ["case report", "case series"]
98
+
99
+
100
+ def classify_include_row(uid: str, title: str, abstract: str, journal: str,
101
+ doi: str, reason: str,
102
+ topic_keywords: list[str] | None = None) -> tuple[str, str]:
103
+ """Heuristic AI suggestion for INCLUDE-tagged rows.
104
+
105
+ Default = CONFIRM-INCLUDE. Returns EXCLUDE for clear review/conference/
106
+ case-report patterns, or when no topic keyword appears in title or abstract.
107
+
108
+ Args:
109
+ topic_keywords: list of lowercase keywords; if NONE found in title or
110
+ abstract, suggest EXCLUDE. Pass project topic terms (e.g., for an
111
+ aneurysm SR: ["aneurysm", "intracranial", "cerebral", "vasc"]).
112
+ """
113
+ t = title.lower()
114
+ a = abstract.lower()
115
+ j = journal.lower()
116
+ d = doi.lower()
117
+
118
+ # Review / editorial filter
119
+ if (any(k in t for k in REVIEW_KEYWORDS) or
120
+ any(k in a[:300] for k in REVIEW_KEYWORDS)):
121
+ if "primary" not in a[:500] and "we developed" not in a[:500]:
122
+ return ("EXCLUDE", "Likely review/editorial based on title/abstract keywords.")
123
+
124
+ # Conference abstract filter
125
+ if (any(k in j for k in CONF_JOURNAL_KEYWORDS) or
126
+ any(k in d for k in CONF_DOI_PATTERNS)):
127
+ return ("EXCLUDE",
128
+ "Conference abstract / supplement; likely no full peer-reviewed publication.")
129
+
130
+ # Single case report
131
+ if any(k in t for k in CASE_KEYWORDS):
132
+ if "single" in t or "single case" in a[:300]:
133
+ return ("EXCLUDE", "Single case report -- excluded by study design criterion.")
134
+
135
+ # Off-topic check
136
+ if topic_keywords:
137
+ if (not any(k in t for k in topic_keywords) and
138
+ not any(k in a[:500] for k in topic_keywords)):
139
+ return ("EXCLUDE", "No topic keyword in title or abstract.")
140
+
141
+ return ("CONFIRM-INCLUDE",
142
+ "Title/abstract consistent with PECOS; default include, verify at full-text extraction.")
143
+
144
+
145
+ # ============================================================================
146
+ # 3. Main pipeline
147
+ # ============================================================================
148
+
149
+ def run_pre_screening(src_tsv: Path, dst_tsv: Path,
150
+ topic_keywords: list[str] | None = None) -> None:
151
+ """Read screening TSV, add ai_suggestion/ai_reason columns, write output."""
152
+ rows = list(csv.DictReader(src_tsv.open(encoding="utf-8"), delimiter="\t"))
153
+ if not rows:
154
+ raise SystemExit(f"No rows in {src_tsv}")
155
+
156
+ in_fields = list(rows[0].keys())
157
+ extra = [c for c in ("ai_suggestion", "ai_reason") if c not in in_fields]
158
+ out_fields = ["uid", "ai_suggestion", "ai_reason"] + [
159
+ c for c in in_fields if c not in ("uid", "ai_suggestion", "ai_reason")
160
+ ]
161
+
162
+ counts: dict[str, int] = {}
163
+ with dst_tsv.open("w", encoding="utf-8", newline="") as f:
164
+ w = csv.DictWriter(f, fieldnames=out_fields, delimiter="\t",
165
+ quoting=csv.QUOTE_MINIMAL)
166
+ w.writeheader()
167
+
168
+ for r in rows:
169
+ uid = r["uid"]
170
+ tag = r.get("round2_tag", "").upper()
171
+
172
+ if tag == "MAYBE":
173
+ if uid in MAYBE_DECISIONS:
174
+ sug, why = MAYBE_DECISIONS[uid]
175
+ else:
176
+ sug, why = ("UNCERTAIN",
177
+ "MAYBE row without pre-coded decision; full review needed.")
178
+ elif tag == "INCLUDE":
179
+ sug, why = classify_include_row(
180
+ uid,
181
+ r.get("title", ""),
182
+ r.get("abstract_preview", ""),
183
+ r.get("journal", ""),
184
+ r.get("doi", ""),
185
+ r.get("round2_reason", ""),
186
+ topic_keywords=topic_keywords,
187
+ )
188
+ elif tag == "EXCLUDE":
189
+ sug, why = ("CONFIRM-EXCLUDE",
190
+ "Round 2 EXCLUDE; reviewer to confirm with brief check.")
191
+ else:
192
+ sug, why = ("UNCERTAIN", f"Unexpected round2_tag={tag!r}")
193
+
194
+ counts[sug] = counts.get(sug, 0) + 1
195
+ r["ai_suggestion"] = sug
196
+ r["ai_reason"] = why
197
+ w.writerow({k: r.get(k, "") for k in out_fields})
198
+
199
+ print(f"Wrote {dst_tsv} ({len(rows)} rows)")
200
+ print("AI suggestion distribution:")
201
+ for k in sorted(counts):
202
+ print(f" {k}: {counts[k]}")
203
+
204
+
205
+ # ============================================================================
206
+ # 4. Companion: priority-sorted view
207
+ # ============================================================================
208
+
209
+ PRIORITY_ORDER = {
210
+ "UNCERTAIN": 0,
211
+ "EXCLUDE": 1,
212
+ "INCLUDE": 2,
213
+ "CONFIRM-EXCLUDE": 3,
214
+ "CONFIRM-INCLUDE": 4,
215
+ }
216
+
217
+
218
+ def write_priority_view(src_tsv: Path, dst_tsv: Path) -> None:
219
+ """Sort AI-pre-screened TSV by review priority."""
220
+ rows = list(csv.DictReader(src_tsv.open(encoding="utf-8"), delimiter="\t"))
221
+ rows.sort(key=lambda r: (PRIORITY_ORDER.get(r["ai_suggestion"], 9), r["uid"]))
222
+ fields = list(rows[0].keys())
223
+ with dst_tsv.open("w", encoding="utf-8", newline="") as f:
224
+ w = csv.DictWriter(f, fieldnames=fields, delimiter="\t",
225
+ quoting=csv.QUOTE_MINIMAL)
226
+ w.writeheader()
227
+ w.writerows(rows)
228
+ print(f"Wrote priority view: {dst_tsv}")
229
+
230
+
231
+ # ============================================================================
232
+ # 5. Example invocation
233
+ # ============================================================================
234
+
235
+ if __name__ == "__main__":
236
+ # Customize these paths and topic keywords for your project.
237
+ PROJECT_ROOT = Path(__file__).resolve().parent
238
+ SRC = PROJECT_ROOT / "round3_adjudication_TEMPLATE.tsv"
239
+ AI = PROJECT_ROOT / "round3_adjudication_AI_TEMPLATE.tsv"
240
+ PRIORITY = PROJECT_ROOT / "round3_priority_TEMPLATE.tsv"
241
+
242
+ TOPIC_KEYWORDS = ["TOPIC1", "TOPIC2"] # e.g., ["aneurysm", "intracranial"]
243
+
244
+ run_pre_screening(SRC, AI, topic_keywords=TOPIC_KEYWORDS)
245
+ write_priority_view(AI, PRIORITY)
@@ -0,0 +1,45 @@
1
+ # JBI Critical Appraisal Checklist for Case Series
2
+
3
+ Reference: Munn Z, Barker TH, Moola S, et al. Methodological quality of case series
4
+ studies: an introduction to the JBI critical appraisal tool. JBI Evid Synth. 2020;18(10):2127-2133.
5
+
6
+ ## 10 Signalling Questions
7
+
8
+ | # | Question | Y/N/U/NA |
9
+ |---|----------|----------|
10
+ | Q1 | Were there clear criteria for inclusion in the case series? | |
11
+ | Q2 | Was the condition measured in a standard, reliable way for all participants included in the case series? | |
12
+ | Q3 | Were valid methods used for identification of the condition for all participants included in the case series? | |
13
+ | Q4 | Did the case series have consecutive inclusion of participants? | |
14
+ | Q5 | Did the case series have complete inclusion of participants? | |
15
+ | Q6 | Was there clear reporting of the demographics of the participants in the study? | |
16
+ | Q7 | Was there clear reporting of clinical information of the participants? | |
17
+ | Q8 | Were the outcomes or follow-up results of cases clearly reported? | |
18
+ | Q9 | Was there clear reporting of the presenting site(s)/clinic(s) demographic information? | |
19
+ | Q10 | Was statistical analysis appropriate? | |
20
+
21
+ ## Scoring
22
+
23
+ - **Y** = Yes (criterion met)
24
+ - **N** = No (criterion not met)
25
+ - **U** = Unclear
26
+ - **NA** = Not applicable
27
+
28
+ ## Overall Appraisal
29
+
30
+ | Rating | Criterion |
31
+ |--------|-----------|
32
+ | **Include** | ≥7 "Yes" responses |
33
+ | **Exclude** | <7 "Yes" responses (or critical methodological concerns) |
34
+ | **Seek further info** | Insufficient information to judge key items |
35
+
36
+ ## Notes
37
+
38
+ - Q4 and Q5 distinguish consecutive vs complete inclusion:
39
+ - Q4 (consecutive): Were participants enrolled sequentially without selection bias?
40
+ - Q5 (complete): Were all eligible participants during the study period included?
41
+ - Q9 applies to multi-site studies; for single-site studies, mark as NA if site demographics
42
+ are adequately covered by Q6.
43
+ - When used alongside NOS for mixed comparative + single-arm meta-analyses, map NOS to
44
+ comparative studies and JBI to case series. In PROSPERO, select "Other" for RoB tool
45
+ and specify both.
@@ -0,0 +1,88 @@
1
+ # Newcastle-Ottawa Scale (NOS) Assessment Guide
2
+
3
+ Quality assessment tool for non-randomised studies in meta-analyses.
4
+ Reference: Wells GA et al. Ottawa Hospital Research Institute.
5
+
6
+ ## Structure
7
+
8
+ NOS uses a "star system" (maximum 9 stars) across 3 categories.
9
+ Higher stars = higher quality.
10
+
11
+ ## Cohort Studies (max 9 stars)
12
+
13
+ ### Selection (max 4 stars)
14
+ 1. **Representativeness of the exposed cohort** (1 star)
15
+ - a) Truly representative of the average [describe] in the community *
16
+ - b) Somewhat representative *
17
+ - c) Selected group of users
18
+ - d) No description
19
+
20
+ 2. **Selection of the non-exposed cohort** (1 star)
21
+ - a) Drawn from the same community as the exposed *
22
+ - b) Drawn from a different source
23
+ - c) No description
24
+
25
+ 3. **Ascertainment of exposure** (1 star)
26
+ - a) Secure record (e.g., surgical records) *
27
+ - b) Structured interview *
28
+ - c) Written self-report
29
+ - d) No description
30
+
31
+ 4. **Demonstration that outcome was not present at start** (1 star)
32
+ - a) Yes *
33
+ - b) No
34
+
35
+ ### Comparability (max 2 stars)
36
+ 5. **Comparability of cohorts on the basis of design or analysis** (up to 2 stars)
37
+ - a) Study controls for [most important factor] *
38
+ - b) Study controls for any additional factor *
39
+
40
+ ### Outcome (max 3 stars)
41
+ 6. **Assessment of outcome** (1 star)
42
+ - a) Independent blind assessment *
43
+ - b) Record linkage *
44
+ - c) Self-report
45
+ - d) No description
46
+
47
+ 7. **Was follow-up long enough for outcomes to occur?** (1 star)
48
+ - a) Yes (select adequate follow-up period) *
49
+ - b) No
50
+
51
+ 8. **Adequacy of follow-up of cohorts** (1 star)
52
+ - a) Complete follow-up (all subjects accounted for) *
53
+ - b) Subjects lost to follow-up unlikely to introduce bias (<=20% lost, or description provided) *
54
+ - c) Follow-up rate <80% and no description of those lost
55
+ - d) No statement
56
+
57
+ ## Case-Control Studies (max 9 stars)
58
+
59
+ ### Selection (max 4 stars)
60
+ 1. Is the case definition adequate?
61
+ 2. Representativeness of the cases
62
+ 3. Selection of controls
63
+ 4. Definition of controls
64
+
65
+ ### Comparability (max 2 stars)
66
+ 5. Comparability of cases and controls (same 2-star system)
67
+
68
+ ### Exposure (max 3 stars)
69
+ 6. Ascertainment of exposure
70
+ 7. Same method of ascertainment for cases and controls
71
+ 8. Non-response rate
72
+
73
+ ## Interpretation
74
+
75
+ | Stars | Quality |
76
+ |-------|---------|
77
+ | 7-9 | Good (high quality) |
78
+ | 4-6 | Fair (moderate quality) |
79
+ | 0-3 | Poor (low quality) |
80
+
81
+ Alternative thresholds may be pre-specified in the protocol.
82
+
83
+ ## When to Use
84
+
85
+ - Observational cohort studies in intervention or exposure meta-analyses
86
+ - Case-control studies
87
+ - Simpler alternative to ROBINS-I when full domain-level assessment is not needed
88
+ - Note: NOS does not provide domain-level judgments -- only an aggregate score
@@ -0,0 +1,36 @@
1
+ # PRISMA-DTA Checklist
2
+
3
+ Preferred Reporting Items for Systematic Reviews and Meta-Analyses of Diagnostic Test Accuracy Studies.
4
+ Reference: McInnes MDF et al. JAMA 2018;319(4):388-396.
5
+
6
+ ## Checklist Items
7
+
8
+ | # | Section | Item |
9
+ |---|---------|------|
10
+ | 1 | Title | Identify the report as a systematic review (+/- meta-analysis) of diagnostic test accuracy studies |
11
+ | 2 | Abstract - Structured | Provide structured summary including objectives, data sources, study eligibility, participants, interventions, study appraisal and synthesis methods, results, limitations, conclusions, registration number |
12
+ | 3 | Introduction - Rationale | Describe the rationale for the review in the context of what is already known |
13
+ | 4 | Introduction - Objectives | State precise objectives, including PIRD elements |
14
+ | 5 | Methods - Protocol | Indicate if a review protocol exists, where it can be accessed, and registration information |
15
+ | 6 | Methods - Eligibility | Specify study characteristics and reporting characteristics used as criteria for eligibility |
16
+ | 7 | Methods - Information sources | Describe all information sources in the search and date last searched |
17
+ | 8 | Methods - Search | Present full electronic search strategy for at least one database |
18
+ | 9 | Methods - Study selection | State the process for selecting studies |
19
+ | 10 | Methods - Data collection | Describe method of data extraction from primary DTA studies and any processes for obtaining and confirming data from investigators |
20
+ | 11 | Methods - Data items | List and define all variables for which data were sought and any assumptions/simplifications made |
21
+ | 12 | Methods - Risk of bias | Describe methods used for assessing risk of bias of individual studies and how this information is used in data synthesis |
22
+ | 13 | Methods - Diagnostic accuracy measures | State the principal diagnostic accuracy measures and how they were calculated |
23
+ | 14 | Methods - Synthesis | Describe methods of handling data and combining results of studies including measures of statistical consistency |
24
+ | 15 | Methods - Risk of bias across studies | Specify any assessment of risk of bias that may affect the cumulative evidence |
25
+ | 16 | Methods - Additional analyses | Describe methods of additional analyses if done (e.g., sensitivity or subgroup analyses, meta-regression) |
26
+ | 17 | Results - Study selection | Give numbers of studies screened, assessed for eligibility, and included with reasons for exclusions at each stage; consider a flow diagram |
27
+ | 18 | Results - Study characteristics | For each study, present characteristics for which data were extracted and provide the citations |
28
+ | 19 | Results - Risk of bias within studies | Present risk of bias assessments for each included study |
29
+ | 20 | Results - Individual study results | For each analysis in each study, report 2x2 data with confidence intervals |
30
+ | 21 | Results - Synthesis of results | Describe test performance and present key results including confidence intervals for the meta-analysis |
31
+ | 22 | Results - Risk of bias across studies | Present results of any assessment of risk of bias across studies |
32
+ | 23 | Results - Additional analyses | Give results of additional analyses (subgroup, sensitivity, meta-regression) |
33
+ | 24 | Discussion - Summary | Summarize the main findings including strength of evidence |
34
+ | 25 | Discussion - Limitations | Discuss limitations at study and outcome level and at review level |
35
+ | 26 | Discussion - Conclusions | Provide a general interpretation of the results in the context of other evidence and implications for future research |
36
+ | 27 | Funding | Describe sources of funding for the systematic review and other support; role of funders |