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,136 @@
1
+ # Phase 10 Reference — Self-Audit Recovery (v{N} → v{N+1} Sprint)
2
+
3
+ Load this reference when any Phase 10 trigger fires during `/meta-analysis`. The SKILL.md
4
+ body carries only the trigger table and summary pointer; all procedural detail lives here.
5
+
6
+ ## Goal
7
+
8
+ When an audit — internal, or triggered by an incoming co-author comment — uncovers a
9
+ structural data or protocol-application error, withdraw the current version, rebuild, and
10
+ re-circulate with a transparent audit trail. Catching the error yourself before a journal
11
+ reviewer does is the principal trust-building move in this phase.
12
+
13
+ ## Trigger Conditions (any one)
14
+
15
+ - Extraction CSV disagrees with the primary source for a cell that materially feeds a
16
+ pooled estimate, subgroup estimate, or a reported proportion.
17
+ - A study that was excluded (or included) by the pre-specified criteria is found to
18
+ violate those criteria on re-read.
19
+ - A hand-typed numerical literal in the analysis script traces to a wrong value (see the
20
+ Phase 6b precedent failure pattern).
21
+ - The PROSPERO (or equivalent) protocol and the delivered analysis disagree on a
22
+ pre-specified outcome, subgroup, or eligibility rule.
23
+ - A dual-reviewer consensus record shows a study was supposed to be excluded, but the
24
+ locked dataset still contains it (or vice versa).
25
+
26
+ ## Non-Negotiable Rule
27
+
28
+ If the trigger fires after Phase 9 circulation but before journal submission, withdraw
29
+ the current version within 24 hours. Reviewer discovery is a strictly worse failure mode
30
+ than self-withdrawal.
31
+
32
+ ## 10.1 Audit Log
33
+
34
+ Create `qc/audit_vN_to_vNplus1.md`. For each flagged item, record:
35
+ - Affected study (first author, year).
36
+ - Cell or claim (e.g., TP/FP/FN/TN, k, pooled estimate, CI, subgroup count).
37
+ - Source of the error (extraction, application of criteria, script literal, protocol
38
+ mismatch, reviewer-consensus mismatch).
39
+ - Proposed resolution (exclude study, re-extract cell, correct script literal, amend
40
+ protocol, reinstate study).
41
+
42
+ ## 10.2 CSV Re-Verification
43
+
44
+ For every flagged cell, re-verify against the primary source (paper Table/Figure, page
45
+ number). Any revision-introduced value must carry the `[VERIFY-CSV]` tag until the
46
+ Phase 6b audit clears it.
47
+
48
+ ## 10.3 Re-Run the Analysis Script
49
+
50
+ Re-execute the full synthesis pipeline with a fixed random seed. Save complete output to
51
+ `analysis/vNplus1_run.log`. Do not re-use partial v{N} output even for subsections that
52
+ "should be unchanged" — prove it with a fresh run.
53
+
54
+ ## 10.4 Manuscript Auto-Sync
55
+
56
+ Every number the manuscript reports — k, pooled estimate, 95% CI, τ², I², subgroup
57
+ counts, sensitivity-analysis rows, GRADE levels — must be pulled from the fresh output.
58
+ Grep the manuscript for old v{N} numerical values to confirm no residue survives.
59
+
60
+ ## 10.5 Supplementary Regeneration
61
+
62
+ Re-emit (do not patch):
63
+ - Extraction consensus log.
64
+ - RoB tables.
65
+ - GRADE / Summary of Findings table.
66
+ - PRISMA flow diagram (counts shift when studies are excluded/reinstated).
67
+
68
+ ## 10.6 Figure Regeneration
69
+
70
+ Regenerate forest plots, funnel plots, subgroup plots, and the PRISMA flow via
71
+ `/make-figures`. Re-embed at the original manuscript positions. Confirm figure captions
72
+ match the new values (captions often contain pooled estimates).
73
+
74
+ ## 10.7 Change Summary
75
+
76
+ Produce `v{N+1}_change_summary.md` with an explicit delta table:
77
+
78
+ | Item | v{N} | v{N+1} | Reason |
79
+ |------|------|--------|--------|
80
+ | k | | | |
81
+ | Primary pooled estimate (95% CI) | | | |
82
+ | Heterogeneity (I², τ²) | | | |
83
+ | Studies added | | | |
84
+ | Studies removed | | | |
85
+ | Subgroup re-stratification | | | |
86
+
87
+ This file is the external audit trail. It must be circulated with the v{N+1} manuscript.
88
+
89
+ ## 10.8 PROSPERO (or Equivalent) Amendment
90
+
91
+ If eligibility, analysis population, or outcome definitions changed, file an amendment
92
+ to the registered protocol in parallel with the re-build:
93
+ - Keep revision notes within the registry's word limit (often 250 words).
94
+ - Frame the amendment as application correction, not criteria change:
95
+ > "The pre-specified inclusion criteria are unchanged. The amended application excludes
96
+ > {N} study(ies) whose characteristics were confirmed on independent re-review to fall
97
+ > outside the pre-specified criteria."
98
+ - Submit the amendment before — or simultaneously with — re-circulation, so co-authors
99
+ see an amendment already in flight rather than only a draft change.
100
+
101
+ ## 10.9 Re-Circulation Framing
102
+
103
+ Use the Phase 9 thread. State the situation plainly in the first paragraph:
104
+
105
+ > "On re-review of v{N}, we identified {N} study(ies) whose data did not meet the
106
+ > pre-specified inclusion criteria. These were excluded and the analysis regenerated.
107
+ > The manuscript body, supplementary, and all figures have been re-rendered. A change
108
+ > summary is attached."
109
+
110
+ Tonal anchors worth preserving:
111
+ - "On re-review" — signals internal audit, not external pressure.
112
+ - "Pre-specified criteria" — the protocol itself is unchanged; application is corrected.
113
+ - "Change summary" — an external audit trail is available for scrutiny.
114
+
115
+ ## 10.10 Anti-Patterns (do not)
116
+
117
+ - Hide the error and submit v{N} as-is. This converts a recoverable finding into a
118
+ retraction-class incident if the reviewer catches it.
119
+ - Reframe the fix as a "minor revision" with no audit trail. Senior reviewers read audit
120
+ trails; absence of one signals concealment.
121
+ - Disclose only in the cover letter while leaving Methods silent. Methods and the cover
122
+ letter must agree.
123
+
124
+ ## 10.11 When the Trigger Fires Post-Submission
125
+
126
+ If the audit trigger is detected after the journal submission but before an editorial
127
+ decision, notify the editorial office immediately and submit a corrected manuscript
128
+ alongside the disclosure. Do not wait for the reviewer to surface it; editors prefer
129
+ author-initiated correction.
130
+
131
+ ## 10.12 Post-Recovery Loop
132
+
133
+ After v{N+1} is circulated, Phase 9 restarts. If a further audit trigger emerges during
134
+ the new review window, a second recovery sprint (v{N+1} → v{N+2}) is acceptable — but
135
+ each recovery costs co-author goodwill, so the incoming audit in Phase 6b should be
136
+ tightened each cycle rather than relying on Phase 10 as a routine catch.
@@ -0,0 +1,58 @@
1
+ # Phase 4 Reference — KM Reconstruction & Composite Exposure Disaggregation
2
+
3
+ Load this reference when `/meta-analysis` Phase 4 data extraction encounters either
4
+ of two special cases: (a) studies that report outcomes only as Kaplan-Meier curves
5
+ without raw event counts, or (b) studies whose intervention is a composite of
6
+ multiple techniques. The main Phase 4 body of SKILL.md lists the standard
7
+ extraction-form fields and the cross-verification checklist; this reference holds
8
+ the procedural detail for these two scenarios.
9
+
10
+ ---
11
+
12
+ ## 4b. KM Curve Reconstruction (when raw events not reported)
13
+
14
+ When studies report outcomes only as Kaplan-Meier curves without raw event counts:
15
+
16
+ 1. **Digitise the KM curve**: Use WebPlotDigitizer
17
+ (https://automeris.io/WebPlotDigitizer/)
18
+ - Calibrate X/Y axes carefully — verify output range matches the original axis labels.
19
+ - If coordinates come out in 0–1 range, multiply X by the actual time range
20
+ (e.g., ×30 for months).
21
+ - Clip negative Y values to 0 (digitisation artifact).
22
+ - Export as CSV: `time, cumulative_event_rate` (or survival).
23
+
24
+ 2. **Extract number-at-risk**: Record from the table below the KM plot at each time point.
25
+
26
+ 3. **Reconstruct IPD**: Use the R `IPDfromKM` package (Guyot et al. 2012 method):
27
+ ```r
28
+ library(IPDfromKM)
29
+ dat <- read.csv("digitised_curve.csv")
30
+ preproc <- preprocess(dat, trisk, nrisk, totalpts, maxy = 1)
31
+ ipd <- getIPD(preproc, armID = 1) # armID starts at 1, NOT 0
32
+ ```
33
+ - ⚠️ `preprocess()` does NOT accept a `mateflag` parameter (common error).
34
+ - ⚠️ `armID` starts at 1 (not 0).
35
+
36
+ 4. **Verify**: Generate a reconstructed KM plot and visually compare to the
37
+ original figure.
38
+
39
+ 5. **Report in Methods**: Cite Guyot et al. 2012 (doi:10.1186/1471-2288-12-9) and
40
+ state which studies required reconstruction.
41
+
42
+ **Alternative — Text-based extraction**: When no subgroup-specific KM curve exists
43
+ but the text reports "0% LTP at 12 months" or similar, extract directly from text.
44
+ Document the page number and exact quote.
45
+
46
+ ---
47
+
48
+ ## Composite Exposure Disaggregation
49
+
50
+ When a study's intervention is a composite of multiple techniques:
51
+
52
+ 1. **Subgroup-specific KM curve** → use KM reconstruction (section 4b above).
53
+ 2. **Component-specific Table/multivariate** → extract per-component data from Tables.
54
+ 3. **Text-based subgroup report** → extract from narrative (e.g., "APE arm: 0% LTP").
55
+ 4. **None available** → include as composite; flag in sensitivity analysis for exclusion.
56
+
57
+ Always pre-specify a sensitivity analysis excluding composite-exposure studies.
58
+ Document the extraction strategy in the data extraction form Notes column.
@@ -0,0 +1,148 @@
1
+ # Phase 6 Reference — Statistical Synthesis
2
+
3
+ Load this reference when `/meta-analysis` Phase 6 begins executing the pooled
4
+ analysis. It contains the R code templates for DTA and intervention meta-analysis,
5
+ the dual-approach (comparative + single-arm pooled proportion) decision table, and
6
+ the practical cautions (method.tau, HK CI, zero-cell correction, publication-bias
7
+ test power).
8
+
9
+ **Always use R** (packages: `meta`, `metafor`, `mada`). Companion templates:
10
+ `${CLAUDE_SKILL_DIR}/references/r_templates.md`.
11
+
12
+ ---
13
+
14
+ ## DTA Meta-Analysis
15
+
16
+ ```r
17
+ library(mada) # bivariate model, forest/SROC plots
18
+ library(meta) # general meta-analysis utilities
19
+ library(metafor) # advanced models
20
+
21
+ # Bivariate model (recommended for DTA)
22
+ fit <- reitsma(data, formula = cbind(tsens, tfpr) ~ 1)
23
+ summary(fit)
24
+
25
+ # SROC curve with confidence and prediction regions
26
+ plot(fit, sroclwd = 2, main = "SROC Curve")
27
+
28
+ # Forest plot (paired: sensitivity + specificity)
29
+ forest(fit, type = "sens")
30
+ forest(fit, type = "spec")
31
+ ```
32
+
33
+ ### Key outputs for DTA
34
+ - Pooled sensitivity (95% CI)
35
+ - Pooled specificity (95% CI)
36
+ - Pooled positive LR, negative LR
37
+ - Pooled DOR
38
+ - SROC curve with AUC, confidence region, prediction region
39
+ - Heterogeneity: I-squared for sensitivity and specificity separately
40
+ - Threshold effect: Spearman correlation between sensitivity and FPR
41
+
42
+ ---
43
+
44
+ ## Intervention Meta-Analysis
45
+
46
+ ```r
47
+ library(meta)
48
+ library(metafor)
49
+
50
+ res <- metagen(TE, seTE, data = dat, studlab = study,
51
+ method.tau = "REML", sm = "OR")
52
+ forest(res)
53
+ funnel(res)
54
+
55
+ summary(res) # I-squared, tau-squared, Q test
56
+ metabias(res, method.bias = "Egger")
57
+ metainf(res, pooled = "random") # leave-one-out
58
+ ```
59
+
60
+ ---
61
+
62
+ ## Dual Approach: Comparative + Single-Arm Pooled Proportion
63
+
64
+ When both comparative and single-arm studies are available, use dual analysis
65
+ (precedent: Lin 2025 PMID:41419890, Su 2026 PMID:41653198). The assignment of
66
+ PRIMARY vs SECONDARY depends on the research question and available evidence:
67
+
68
+ | Scenario | Primary | Secondary | Rationale |
69
+ |----------|---------|-----------|-----------|
70
+ | Enough comparative studies (k≥8) | Comparative OR/RR | Pooled proportion | Direct comparison answers efficacy |
71
+ | Limited comparative (k<6), many single-arm | Pooled proportion | Comparative OR/RR | Insufficient power for comparative; pooled proportion provides descriptive evidence |
72
+ | Mixed (moderate k, each) | Discuss with co-authors | — | PI/methodologist decision |
73
+
74
+ The choice should be pre-specified in the PROSPERO protocol and remain consistent
75
+ throughout the manuscript.
76
+
77
+ ```r
78
+ # Comparative MA (binary outcomes)
79
+ res_comp <- metabin(ei, ni, ec, nc, data = dat,
80
+ studlab = study, sm = "OR",
81
+ method = "Inverse", method.tau = "DL",
82
+ common = FALSE, random = TRUE,
83
+ method.random.ci = "HK", incr = 0.5)
84
+
85
+ # Single-arm pooled proportion
86
+ res_prop <- metaprop(event, n, data = dat_single,
87
+ studlab = study, sm = "PLOGIT",
88
+ method.tau = "DL", method.ci = "CP")
89
+ ```
90
+
91
+ ### Key points
92
+ - Comparative answers "is adjunct effective?"; single-arm answers "what outcomes to expect?"
93
+ - Single-arm uses `metaprop()` with logit transformation + Clopper-Pearson CI
94
+ - GRADE certainty lower for single-arm — state explicitly
95
+ - Report both in Results: label PRIMARY/SECONDARY per pre-specified assignment
96
+ - **Selection bias warning**: Single-arm case series may introduce selection bias
97
+ (experienced centres, favourable patients). When pooling with comparative arms,
98
+ report both pooled estimates separately and discuss any numerically lower event
99
+ rate in single-arm studies as a potential selection effect.
100
+
101
+ ---
102
+
103
+ ## Practical R Notes
104
+
105
+ - Use `method = "Inverse"`, not `"MH"`, to avoid a method.tau conflict.
106
+ - Use `method.tau = "DL"` (DerSimonian-Laird) — REML may not converge with sparse data.
107
+ - Use `method.random.ci = "HK"` (Hartung-Knapp) instead of the deprecated `hakn = TRUE`.
108
+ - Use `common = FALSE, random = TRUE` instead of deprecated `comb.fixed/comb.random`.
109
+ - For zero cells, apply `incr = 0.5` continuity correction.
110
+ - Egger's test is underpowered for k < 10 — note this in results.
111
+
112
+ ---
113
+
114
+ ## Subgroup / Meta-Regression
115
+
116
+ - Subgroup analysis for pre-specified covariates
117
+ - Meta-regression for continuous moderators
118
+ - Report interaction test p-value, not just within-subgroup p-values
119
+
120
+ ---
121
+
122
+ ## Publication Bias
123
+
124
+ - DTA: Deeks' funnel plot asymmetry test (standard funnel plots are inappropriate for DTA).
125
+ - Intervention: Funnel plot + Egger's or Peters' test.
126
+ - Note: tests are underpowered for <10 studies.
127
+
128
+ ---
129
+
130
+ ## Sensitivity Analysis
131
+
132
+ - Leave-one-out analysis (`metainf()`)
133
+ - Excluding high RoB studies
134
+ - Excluding overlapping populations (same institution + enrollment period)
135
+ - Including/excluding borderline studies (sensitivity to inclusion criteria)
136
+ - Alternative model specifications
137
+
138
+ ---
139
+
140
+ ## Error Handling
141
+
142
+ - If an R script fails, capture the error message, diagnose the likely cause
143
+ (missing package, data format mismatch, convergence failure), and present a fix.
144
+ Do not silently re-run.
145
+ - When reporting R output, separate statistical results (pooled estimates,
146
+ heterogeneity metrics, I-squared) from interpretation. Present numbers first in
147
+ a "Statistical Results" block, then interpretation guidance in a separate
148
+ "Interpretation Notes" block.
@@ -0,0 +1,84 @@
1
+ # Phase 9 Reference — Co-author Circulation
2
+
3
+ Load this reference when Phase 9 is entered (after Phase 8 is complete and Phase 6b
4
+ source-fidelity audit has cleared). The SKILL.md body carries only the goal + summary
5
+ pointer; all procedural detail lives here.
6
+
7
+ ## Goal
8
+
9
+ Standardized pre-submission circulation of the manuscript to co-authors and senior
10
+ methodologists / reviewers, with a bounded review window and a controlled attachment
11
+ scope.
12
+
13
+ ## Trigger
14
+
15
+ Phase 8 is complete, and the draft has cleared Phase 6b source-fidelity audit.
16
+
17
+ ## 9.1 Thread Continuity
18
+
19
+ - If a prior version (v1, v2, ...) of this manuscript was already circulated to the same
20
+ author team, reply to the same email thread. Preserve `In-Reply-To` and `References`
21
+ headers so the thread tracks v1 → v2 → v3 in one place.
22
+ - Open a new thread only for the first circulation, or when the author team / target
23
+ journal has fundamentally changed.
24
+
25
+ ## 9.2 Attachment Scope
26
+
27
+ **Include:**
28
+ - Manuscript body with figures embedded inline (single DOCX/PDF).
29
+ - Change summary — for v≥2, a delta table vs. the prior circulated version.
30
+
31
+ **Exclude (circulate separately later):**
32
+ - Graphical abstract — after the body is locked.
33
+ - Cover letter — after the target journal is confirmed.
34
+ - COI forms — after journal format is known.
35
+ - Supplementary appendices — share via a drive link, not attached.
36
+
37
+ Rationale: bundling all submission artifacts before the body is locked forces co-authors
38
+ to review multiple moving targets at once and telegraphs premature commitment to a
39
+ specific journal (especially when the GA carries journal-specific branding).
40
+
41
+ ## 9.3 Attachment Method
42
+
43
+ | Total attachment size | Method |
44
+ |---|---|
45
+ | < 5 MB | Direct email attachment |
46
+ | 5 – 25 MB | Direct attachment (within the common 25 MB mailbox limit), but verify at the draft-API level — some clients fail well below the stated message limit |
47
+ | > 25 MB or grey-list formats | Shared drive link only |
48
+
49
+ A manuscript DOCX with inline figures is typically 0.5 – 1 MB — direct attach is safe.
50
+
51
+ ## 9.4 Recipient Structure
52
+
53
+ - **TO**: Corresponding author + one senior methodologist reviewer (e.g., a protocol
54
+ assessor or statistician external to the writing team).
55
+ - **CC**: All remaining co-authors. Include every alternate email address a co-author has
56
+ used on the thread to avoid dropping them.
57
+
58
+ Ask the corresponding author explicitly for:
59
+ - target journal preference,
60
+ - 2 – 3 reviewer candidates,
61
+ - any framing adjustments to carry into the cover letter.
62
+
63
+ ## 9.5 Journal-Undetermined Framing
64
+
65
+ If the target journal is not yet confirmed, state this explicitly:
66
+
67
+ > "The manuscript is currently formatted to [placeholder journal]'s guidelines. Please
68
+ > suggest an appropriate target journal and we will re-format accordingly."
69
+
70
+ Do not include the graphical abstract in this round if it carries journal-specific
71
+ branding that would require rework on re-targeting.
72
+
73
+ ## 9.6 Deadline
74
+
75
+ - Set `(send date + 7 days)` = 5 business days + 1 weekend.
76
+ - Record the deadline in a task tracker with expected responses per recipient.
77
+ - Informal follow-up is acceptable after 4 – 5 days of silence. A formal second message
78
+ before the 7-day window closes is not appropriate unless an external submission deadline
79
+ forces it.
80
+
81
+ ## 9.7 Response Tracking
82
+
83
+ For each recipient, log: date of response, issues raised, and whether the issues trigger
84
+ Phase 10 (Self-Audit Recovery) or are minor in-place revisions.
@@ -0,0 +1,41 @@
1
+ # Post-Submission Release Operations
2
+
3
+ **When**: between the end of Phase 9 (circulation) and journal submission. Separate from Phase 10 (recovery).
4
+
5
+ **Why it's hard**: during circulation (v7~v18 coexisting), the numbers keep shifting. Mint the DOI too early and a content mismatch forces a re-issue; too late and you are scrambling on submission day.
6
+
7
+ ## Checklist
8
+
9
+ ### Gate 1 — When to issue the release
10
+
11
+ - [ ] Internal circulation closed: every reviewer (internal PI, external peer) has signed off.
12
+ - [ ] `[VERIFY-CSV]` / `TODO` / `FIXME` / `(to be regenerated)` tags fully removed from manuscript / supplement / figures / code (`rg -n` → 0 hits).
13
+ - [ ] k (number of included studies) matches across the `4_Analysis/*.csv` row count, the manuscript prose, the PRISMA flow, and every figure caption.
14
+ - [ ] Author order / ICMJE COI finalized (just before reflecting it in the Zenodo author metadata).
15
+
16
+ ### Gate 2 — GitHub repo
17
+
18
+ - [ ] Journal-target bundle regenerates successfully via `_build.sh`.
19
+ - [ ] Repo includes the raw analysis code, extraction_consensus_log.md, PROSPERO amendments tracker, and methodology.
20
+ - [ ] README has a DOI placeholder (replaced after the Zenodo DOI is issued).
21
+ - [ ] `.gitignore` confirmed to exclude raw PDFs / copyrighted material.
22
+ - [ ] LICENSE stated (CC-BY 4.0 or the journal-required license).
23
+
24
+ ### Gate 3 — Zenodo DOI
25
+
26
+ - [ ] Zenodo record metadata: author order, affiliation, ORCID, keywords, related identifiers (PROSPERO registration number).
27
+ - [ ] Add the GitHub repo release tag URL to `related_identifiers` as `isSupplementTo`.
28
+ - [ ] The submission package (.tar.gz) is uploaded to Zenodo — the journal submission bundle, not the circulation package (vN).
29
+ - [ ] After the DOI is issued, reflect it in the "data availability" section of the manuscript / cover letter / submission portal.
30
+
31
+ ### Gate 4 — Handling re-targeting after rejection
32
+
33
+ - [ ] Resubmission of identical content to another journal: **do NOT mint a new Zenodo version** (the DOI attaches to the content). Use `_build.sh --journal {new}` to create only a new SUBMISSION folder.
34
+ - [ ] Resubmission after revision: content changed → mint a new Zenodo version. The concept DOI is preserved.
35
+ - [ ] On author changes: redistribute the ICMJE COI + mint a new Zenodo version.
36
+
37
+ ## Common failures
38
+
39
+ - **F1**: Zenodo DOI minted while `k` (included study count) is still oscillating between versions → content-DOI mismatch forces re-issue. **Blocked by**: Gate 1.
40
+ - **F2**: Journal-specific folders edited by hand without a `_build.sh` → the journal copies drift from master. **Blocked by**: see `submission_package_drift.md`.
41
+ - **F3**: `TODO` / `FIXME` tag left in an R analysis script surfaces only after the repo is pushed to GitHub. **Blocked by**: Gate 1 `rg` scope including code.
@@ -0,0 +1,132 @@
1
+ # R Code Templates for Meta-Analysis
2
+
3
+ ## Required Packages
4
+
5
+ ```r
6
+ # DTA meta-analysis
7
+ library(mada) # bivariate model, forest/SROC plots
8
+ library(meta) # general meta-analysis utilities
9
+ library(metafor) # advanced models
10
+
11
+ # Intervention meta-analysis
12
+ library(meta)
13
+ library(metafor)
14
+ ```
15
+
16
+ ## DTA Meta-Analysis
17
+
18
+ ### Bivariate Model (Recommended)
19
+
20
+ ```r
21
+ # Bivariate model (Reitsma et al.)
22
+ fit <- reitsma(data, formula = cbind(tsens, tfpr) ~ 1)
23
+ summary(fit)
24
+
25
+ # SROC curve with confidence and prediction regions
26
+ plot(fit, sroclwd = 2, main = "SROC Curve")
27
+
28
+ # Forest plot (paired: sensitivity + specificity)
29
+ forest(fit, type = "sens")
30
+ forest(fit, type = "spec")
31
+ ```
32
+
33
+ ### Key Outputs for DTA
34
+
35
+ - Pooled sensitivity (95% CI)
36
+ - Pooled specificity (95% CI)
37
+ - Pooled positive LR, negative LR
38
+ - Pooled DOR
39
+ - SROC curve with AUC, confidence region, prediction region
40
+ - Heterogeneity: I-squared for sensitivity and specificity separately
41
+ - Threshold effect: Spearman correlation between sensitivity and FPR
42
+
43
+ ### Publication Bias (DTA)
44
+
45
+ - Use Deeks' funnel plot asymmetry test (standard funnel plots are inappropriate for DTA)
46
+
47
+ ## Intervention Meta-Analysis
48
+
49
+ ### Random-Effects Model
50
+
51
+ ```r
52
+ # Random-effects model
53
+ res <- metagen(TE, seTE, data = dat, studlab = study,
54
+ method.tau = "REML", sm = "OR")
55
+ forest(res)
56
+ funnel(res)
57
+
58
+ # Heterogeneity
59
+ summary(res) # I-squared, tau-squared, Q test
60
+
61
+ # Publication bias
62
+ metabias(res, method.bias = "Egger")
63
+
64
+ # Sensitivity analysis: leave-one-out
65
+ metainf(res, pooled = "random")
66
+ ```
67
+
68
+ ### Publication Bias (Intervention)
69
+
70
+ - Funnel plot + Egger's or Peters' test
71
+ - Note: Tests underpowered for <10 studies
72
+
73
+ ## Subgroup / Meta-Regression
74
+
75
+ - Subgroup analysis for pre-specified covariates
76
+ - Meta-regression for continuous moderators
77
+ - Report interaction test p-value, not just within-subgroup p-values
78
+
79
+ ## KM Curve Reconstruction (Guyot et al. 2012)
80
+
81
+ ```r
82
+ library(IPDfromKM)
83
+
84
+ # Read digitised KM curve (time, cumulative event rate)
85
+ dat <- read.csv("digitised_curve.csv")
86
+
87
+ # Number-at-risk from figure
88
+ trisk <- c(0, 6, 12, 18, 24, 30) # time points
89
+ nrisk <- c(51, 41, 30, 15, 7, 4) # at-risk counts
90
+ totalpts <- 51
91
+
92
+ # Reconstruct IPD
93
+ preproc <- preprocess(dat, trisk, nrisk, totalpts, maxy = 1)
94
+ ipd <- getIPD(preproc, armID = 1) # armID = 1 (NOT 0)
95
+
96
+ # Count events for meta-analysis input
97
+ events <- sum(ipd$status == 1)
98
+ total <- nrow(ipd)
99
+ cat(sprintf("Events: %d / %d\n", events, total))
100
+ ```
101
+
102
+ Key pitfalls:
103
+ - `preprocess()` does NOT accept a `mateflag` parameter
104
+ - `armID` starts at 1, not 0
105
+ - Verify reconstructed KM visually against original figure
106
+
107
+ ## Pooled Proportion (Single-arm or combined)
108
+
109
+ ```r
110
+ res_prop <- metaprop(event, n, data = dat,
111
+ studlab = study,
112
+ sm = "PLOGIT", # logit transformation
113
+ method.tau = "ML", # maximum likelihood
114
+ method.ci = "CP", # Clopper-Pearson for individual studies
115
+ common = FALSE,
116
+ random = TRUE)
117
+
118
+ # Forest plot
119
+ forest(res_prop, xlim = c(0, 1),
120
+ leftcols = c("studlab", "event", "n"),
121
+ leftlabs = c("Study", "Events", "Total"))
122
+
123
+ # Egger's test (k >= 10)
124
+ metabias(res_prop, method.bias = "Egger")
125
+ ```
126
+
127
+ ## Sensitivity Analysis
128
+
129
+ - Leave-one-out analysis
130
+ - Excluding high RoB studies
131
+ - Excluding outliers (identified via influence diagnostics)
132
+ - Alternative model specifications
@@ -0,0 +1,40 @@
1
+ # Peer Review Orchestration (3-tier)
2
+
3
+ **Extends**: the existing `phase9_circulation.md` (circulation email template). This document covers the full internal → external → journal three-round orchestration.
4
+
5
+ ## 3-tier structure
6
+
7
+ | Tier | Reviewer | Output | Blocking point |
8
+ |---|---|---|---|
9
+ | 1. Internal | Clinical PI (second dual rater) + methodology lead | dual-rating consensus, QUADAS-2 domain table | PI availability |
10
+ | 2. External | Adversarial GPT review + independent peer (optional) | critique memo, defensive-tone audit | — |
11
+ | 3. Journal | Editorial + peer reviewers | reject/revise/accept, Response matrix | — |
12
+
13
+ ## Core rules
14
+
15
+ ### RO-1. Dual-rating work ships as a trio: "figure + per-study table + supplementary", together
16
+ - **Problem pattern**: A QUADAS-2 traffic-light figure ships without an accompanying per-study domain table → PRISMA-DTA Item 19 remains PARTIAL. The supplementary table must be planned alongside the figure, not added one revision later.
17
+ - **Rule**: Plan dual-rating outputs such as QUADAS-2 / RoB2 / GRADE as a three-part set at the design stage. A figure alone does not complete PRISMA-DTA Item 19.
18
+
19
+ ### RO-2. Secure the "second-reviewer lead time" before sending the circulation package
20
+ - **Problem pattern**: Manuscript circulated after only first-reviewer screening → the second-reviewer dual rating then blocks the entire revision cycle for weeks, leaving PRISMA Item 9 PARTIAL.
21
+ - **Rule**: Confirm the clinical PI's second-rating availability window before writing the circulation email. Put blocking items as a bullet at the very top of the email body. Add a "PI availability window" field to the circulation template.
22
+
23
+ ### RO-3. External review specializes in "defensive tone / bias-inflation / upper-bound framing"
24
+ - **Problem pattern**: External adversarial review surfaces over-defensive Methods prose (multi-paragraph justifications for pre-specified protocol deviations) and flags that a homogeneity statistic (e.g., Sp I²=0%) is driven by universalized bias rather than true between-study agreement.
25
+ - **Rule**: Include in the external adversarial-review prompt: (a) a defensive-tone audit (check that protocol-deviation explanations in Methods are ≤3 sentences), (b) a bias-driven homogeneity interpretation check, and (c) an upper-bound/lower-bound framing check. Offload detailed rationale to the Supplement.
26
+
27
+ ### RO-4. The Response matrix tracks reviewer reply + manuscript edit + supplement together
28
+ - **Problem pattern**: During revision, a numeric value (e.g., a subgroup p-value) changes between versions with no before/after diff recorded in the Response matrix → the reviewer's re-review cannot verify the update.
29
+ - **Rule**: For each comment row in the Response matrix, record (a) the reviewer's original text, (b) a response summary, (c) the manuscript edit locator (section/line), and (d) whether a number changed, tagged `[VERIFY-CSV]`. Remove all tags on submission day.
30
+
31
+ ### RO-5. Consolidate protocol deviations into a single PROSPERO amendment
32
+ - **Problem pattern**: Analysis-framework deviation, subgroup deviation, and search-amendment notes split across three manuscript sections and three separate tracker files → the PROSPERO amendment loses provenance.
33
+ - **Rule**: One file at the project root, `protocol_deviations_tracker.md`. Bundle them under one ID when submitting the PROSPERO amendment. Use a single citation in the manuscript too.
34
+
35
+ ## Templates
36
+
37
+ - Circulation email: see the existing `phase9_circulation.md`. Per RO-2 of this document, propose adding a "PI availability window" field.
38
+ - Internal peer review memo: `internal_peer_review_MA{n}_v{N}_{date}.md`
39
+ - External GPT review memo: `external_review_gpt_MA{n}_{date}.md`
40
+ - Response matrix: the existing `/revise` skill template. Per RO-4, add a `[VERIFY-CSV]` field.