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
+ # Results
2
+
3
+ ## Incidence
4
+
5
+ During follow-up there were 120 events over 50,000 person-years, an incidence
6
+ rate of 2.4 per 1,000 person-years.
7
+
8
+ ## Study population
9
+
10
+ Of 4,252 participants, 583 had missing data, leaving 3,669 in the analytic cohort.
11
+
12
+ ## Risk by tier
13
+
14
+ The cohort was partitioned into three mutually exclusive risk tiers.
15
+
16
+ | Risk tier | n | events |
17
+ | --- | --- | --- |
18
+ | Low | 5,000 | 30 |
19
+ | Medium | 4,000 | 50 |
20
+ | High | 3,019 | 35 |
21
+ | Total | 12,019 | 115 |
@@ -0,0 +1,5 @@
1
+ stratum,n,events
2
+ Low,5000,30
3
+ Medium,4000,50
4
+ High,3498,45
5
+ Total,12019,115
@@ -0,0 +1,3 @@
1
+ model,auc,delta_auc,p
2
+ base,0.71,,
3
+ added,0.72,0.01,0.44
@@ -0,0 +1,13 @@
1
+ # Methods
2
+
3
+ ## Statistical Analysis
4
+
5
+ Missing covariate data were handled with multiple imputation (m = 20). A
6
+ sensitivity analysis excluding events in the first year was pre-specified.
7
+
8
+ # Results
9
+
10
+ Baseline demographics are shown in Table 1. After multiple imputation the
11
+ estimates were unchanged, and the sensitivity analysis excluding early events did
12
+ not alter the conclusions. The DeLong test of the nested added-value model showed
13
+ no incremental discrimination.
@@ -0,0 +1,11 @@
1
+ # Methods
2
+
3
+ ## Statistical Analysis
4
+
5
+ Missing covariate data were handled with multiple imputation (m = 20). A
6
+ sensitivity analysis excluding events in the first year was pre-specified.
7
+
8
+ # Results
9
+
10
+ Baseline demographics are shown in Table 1. The sensitivity analysis excluding
11
+ early events did not change the conclusions.
@@ -0,0 +1,27 @@
1
+ [
2
+ {
3
+ "reviewer_id": "R1",
4
+ "expertise_area": "Methodology (search/screening/PRISMA)",
5
+ "major": [
6
+ {"heading": "Search strategy thin", "comment": "The search strategy omits two major databases and grey literature.", "location": "Methods"},
7
+ {"heading": "Heterogeneity not pooled correctly", "comment": "Random-effects pooling is applied despite I2 above 95%.", "location": "Results"}
8
+ ],
9
+ "minor": []
10
+ },
11
+ {
12
+ "reviewer_id": "R2",
13
+ "expertise_area": "Clinical",
14
+ "major": [
15
+ {"heading": "Clinical overclaim", "comment": "Clinical actionability is asserted beyond the evidence.", "location": "Discussion"}
16
+ ],
17
+ "minor": []
18
+ },
19
+ {
20
+ "reviewer_id": "R3",
21
+ "expertise_area": "Statistics (pooling/heterogeneity)",
22
+ "major": [
23
+ {"heading": "Heterogeneity echo", "comment": "I2 heterogeneity is high and pooling is questionable.", "location": "Results"}
24
+ ],
25
+ "minor": []
26
+ }
27
+ ]
@@ -0,0 +1,32 @@
1
+ {
2
+ "research_type": "sr_ma",
3
+ "reviewers": [
4
+ {
5
+ "reviewer_id": "R1",
6
+ "expertise_area": "Methodology (search/screening/PRISMA)",
7
+ "major": [
8
+ {"heading": "Search strategy not reproducible", "comment": "The search strategy is described in one line with no database-specific syntax; eligibility criteria are prose rather than a numbered list.", "location": "Methods, Search"},
9
+ {"heading": "Duplicate record handling unclear", "comment": "Screening counts in the PRISMA flow do not reconcile with the records identified.", "location": "Figure 1"}
10
+ ],
11
+ "minor": []
12
+ },
13
+ {
14
+ "reviewer_id": "R2",
15
+ "expertise_area": "Clinical",
16
+ "major": [
17
+ {"heading": "Overreaching clinical recommendation", "comment": "Clinical actionability is asserted but generalizability to community settings is not supported.", "location": "Discussion"},
18
+ {"heading": "Applicability to the target population", "comment": "The included studies are tertiary-center only; clinical relevance to primary care is overstated.", "location": "Discussion"}
19
+ ],
20
+ "minor": []
21
+ },
22
+ {
23
+ "reviewer_id": "R3",
24
+ "expertise_area": "Statistics (pooling/heterogeneity)",
25
+ "major": [
26
+ {"heading": "Heterogeneity not addressed", "comment": "I2 exceeds 90% yet a fixed pooling is reported without justification.", "location": "Results"},
27
+ {"heading": "Pooling model mis-specified", "comment": "Random-effects model assumptions and the confidence interval method are not stated.", "location": "Methods, Synthesis"}
28
+ ],
29
+ "minor": []
30
+ }
31
+ ]
32
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "research_type": "sr_ma",
3
+ "reviewers": [
4
+ {
5
+ "reviewer_id": "R1",
6
+ "expertise_area": "Methodology (search/screening/PRISMA)",
7
+ "major": [
8
+ {"heading": "Calibration absent", "comment": "No calibration plot or Brier score is reported.", "location": "Results"},
9
+ {"heading": "Discrimination overstated", "comment": "AUC discrimination is reported without a confidence interval.", "location": "Results"},
10
+ {"heading": "Heterogeneity ignored", "comment": "I2 heterogeneity is high but not explored.", "location": "Results"}
11
+ ],
12
+ "minor": []
13
+ },
14
+ {
15
+ "reviewer_id": "R2",
16
+ "expertise_area": "Clinical",
17
+ "major": [
18
+ {"heading": "Confidence intervals missing", "comment": "Pooled estimates lack a confidence interval.", "location": "Table 2"},
19
+ {"heading": "Multiplicity uncorrected", "comment": "Multiplicity across many outcomes is not corrected.", "location": "Methods"}
20
+ ],
21
+ "minor": []
22
+ },
23
+ {
24
+ "reviewer_id": "R3",
25
+ "expertise_area": "Statistics (pooling/heterogeneity)",
26
+ "major": [
27
+ {"heading": "Missing data handling", "comment": "Missing data and imputation are not described.", "location": "Methods"}
28
+ ],
29
+ "minor": []
30
+ }
31
+ ]
32
+ }
@@ -0,0 +1,13 @@
1
+ # Synthetic letter to the editor
2
+
3
+ We read with interest the recent analysis of the index biomarker [@smith2019]
4
+ and offer three observations. First, the reported effect direction is
5
+ consistent with two prior cohorts [@jones2020; @lee2021], strengthening the
6
+ external plausibility of the finding. Second, the authors' interpretation of the
7
+ subgroup pattern echoes an earlier commentary [@kim2018] but appears to
8
+ understate the confidence-interval width reported in the original registry
9
+ [@park2022]. Third, the clinical implication should be read against the
10
+ guideline statement [@choi2017], which cautions against acting on a single
11
+ cross-sectional measurement [@brown2015]. We commend the authors for releasing
12
+ their analytic code [@white2016], which permits the kind of scrutiny that
13
+ strengthens the literature.
@@ -0,0 +1,42 @@
1
+ # Synthetic original-research draft (Methods named methods now cited)
2
+
3
+ ## Introduction
4
+
5
+ Chronic disease burden continues to rise worldwide [@smith2019]. Risk
6
+ stratification tools have proliferated over the last decade [@jones2020], yet
7
+ external validation remains uneven [@lee2021]. Prior cohorts established the
8
+ prognostic value of the index biomarker [@kim2018], and registry analyses
9
+ extended this to older adults [@park2022]. The evidence base nonetheless lacks
10
+ competing-risk-aware modeling [@choi2017].
11
+
12
+ ## Methods
13
+
14
+ ### Study population
15
+
16
+ We assembled a retrospective single-center cohort of adults meeting the
17
+ eligibility criteria below. The analytic dataset was frozen before any modeling.
18
+
19
+ ### Statistical analysis
20
+
21
+ We fitted a Fine-Gray subdistribution hazard model for the competing risk of
22
+ non-event mortality [@finegray1999]. Missing covariate data were addressed with
23
+ multiple imputation (MICE) under the fully conditional specification
24
+ [@white2011]. The robustness of the primary association to unmeasured
25
+ confounding was quantified with the E-value [@vanderweele2017]. Estimated
26
+ glomerular filtration rate was computed with the CKD-EPI 2021 equation
27
+ [@inker2021]. Discrimination was summarized with the concordance statistic
28
+ [@harrell1996].
29
+
30
+ ## Results
31
+
32
+ The cohort comprised consecutive patients over the study window. The primary
33
+ model reproduced the previously reported direction of effect [@smith2019].
34
+
35
+ ## Discussion
36
+
37
+ Our findings align with earlier prognostic work [@brown2015] and extend it to a
38
+ competing-risk framework [@white2016]. The magnitude is consistent with two
39
+ external cohorts [@green2018; @black2019]. Mechanistically, the association is
40
+ plausible [@gray2020], although residual confounding cannot be excluded
41
+ [@adams2021]. Generalizability is limited by the single-center design
42
+ [@baker2014].
@@ -0,0 +1,40 @@
1
+ # Synthetic original-research draft (Methods names methods with zero citations)
2
+
3
+ ## Introduction
4
+
5
+ Chronic disease burden continues to rise worldwide [@smith2019]. Risk
6
+ stratification tools have proliferated over the last decade [@jones2020], yet
7
+ external validation remains uneven [@lee2021]. Prior cohorts established the
8
+ prognostic value of the index biomarker [@kim2018], and registry analyses
9
+ extended this to older adults [@park2022]. The evidence base nonetheless lacks
10
+ competing-risk-aware modeling [@choi2017].
11
+
12
+ ## Methods
13
+
14
+ ### Study population
15
+
16
+ We assembled a retrospective single-center cohort of adults meeting the
17
+ eligibility criteria below. The analytic dataset was frozen before any modeling.
18
+
19
+ ### Statistical analysis
20
+
21
+ We fitted a Fine-Gray subdistribution hazard model for the competing risk of
22
+ non-event mortality. Missing covariate data were addressed with multiple
23
+ imputation (MICE), generating twenty imputed datasets. The robustness of the
24
+ primary association to unmeasured confounding was quantified with the E-value.
25
+ Estimated glomerular filtration rate was computed with the CKD-EPI 2021
26
+ equation. Discrimination was summarized with the concordance statistic.
27
+
28
+ ## Results
29
+
30
+ The cohort comprised consecutive patients over the study window. The primary
31
+ model reproduced the previously reported direction of effect [@smith2019].
32
+
33
+ ## Discussion
34
+
35
+ Our findings align with earlier prognostic work [@brown2015] and extend it to a
36
+ competing-risk framework [@white2016]. The magnitude is consistent with two
37
+ external cohorts [@green2018; @black2019]. Mechanistically, the association is
38
+ plausible [@gray2020], although residual confounding cannot be excluded
39
+ [@adams2021]. Generalizability is limited by the single-center design
40
+ [@baker2014].
@@ -0,0 +1,9 @@
1
+ # Methods
2
+
3
+ This was a cross-sectional study of health-screening participants assessed at a
4
+ single visit.
5
+
6
+ # Conclusion
7
+
8
+ Individuals with a negative scan may safely extend their screening interval, and
9
+ routine surveillance can be deferred.
@@ -0,0 +1,8 @@
1
+ # Methods
2
+
3
+ This was a longitudinal cohort followed prospectively for ten years.
4
+
5
+ # Conclusion
6
+
7
+ Higher coronary calcium scores were associated with incident cardiovascular
8
+ events over the follow-up period.
@@ -0,0 +1,8 @@
1
+ # Methods
2
+
3
+ The primary endpoint was a longitudinal cohort outcome over ten years.
4
+
5
+ # Conclusion
6
+
7
+ Because coronary calcium was categorized as present versus absent, a binary
8
+ surrogate, statin therapy can be deferred in calcium-negative individuals.
@@ -0,0 +1,13 @@
1
+ # **METHODS**
2
+
3
+ Studies were eligible if they reported a diagnostic accuracy estimate and enrolled
4
+ adult participants with the target condition.
5
+
6
+ Outcome definitions are given in Methods §2.
7
+
8
+ The adjusted odds ratio was 1.25 and the hazard ratio was 2.305.
9
+
10
+ # **DISCUSSION**
11
+
12
+ During the preparation of this manuscript, the authors used a generative AI tool to
13
+ assist with language editing. Generative AI was not used to create any figures.
@@ -0,0 +1,11 @@
1
+ # **METHODS**
2
+
3
+ Studies were eligible if they met the following criteria: (1) reported a diagnostic
4
+ accuracy estimate; (2) enrolled adult participants; (3) used an acceptable reference
5
+ standard.
6
+
7
+ The adjusted odds ratio was 1.25 and the hazard ratio was 2.30.
8
+
9
+ # **DISCUSSION**
10
+
11
+ These findings extend prior work on the target condition and support further study.
@@ -0,0 +1,11 @@
1
+ covariate,exposed,unexposed,p_value
2
+ Age (years),54.2,53.8,0.21
3
+ "Sex, male (%)",61.0,59.4,0.34
4
+ BMI (kg/m2),25.1,24.8,0.08
5
+ Hypertension (%),30.0,28.0,0.12
6
+ Diabetes (%),12.0,11.0,0.40
7
+ Uric acid (mg/dL),6.1,5.4,0.0007
8
+ "Smoking, pack-years",18.0,9.0,0.001
9
+ HDL (mg/dL),48.0,55.0,<0.001
10
+ Total cholesterol (mg/dL),195,188,0.010
11
+ HbA1c (%),5.9,5.6,0.0009
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env bash
2
+ # Regression test for the artifact-coverage gate (self-review Phase 2.5f).
3
+ # Synthetic, PII-free fixtures reproduce: (a) a Methods-promised multiple-
4
+ # imputation analysis that never reaches Results (FORWARD), (b) an analysis-bearing
5
+ # output CSV (a DeLong nested added-value table) present on disk but unmentioned in
6
+ # the manuscript (REVERSE). The clean manuscript reports both and mentions the disk
7
+ # outputs, so it reconciles.
8
+ # Stdlib-only (python3).
9
+ set -u
10
+
11
+ HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
12
+ SCRIPT="$HERE/../scripts/check_artifact_coverage.py"
13
+ BAD="$HERE/fixtures/coverage_manuscript.md"
14
+ CLEAN="$HERE/fixtures/coverage_clean.md"
15
+ ADIR="$HERE/fixtures/coverage_analysis"
16
+ OUT="$(mktemp -t cov_XXXX).json"
17
+ trap 'rm -f "$OUT"' EXIT
18
+
19
+ fail=0
20
+ check() { local label="$1"; shift
21
+ if "$@" >/dev/null 2>&1; then printf ' PASS %s\n' "$label"
22
+ else printf ' FAIL %s\n' "$label"; fail=$((fail+1)); fi
23
+ }
24
+ has_verdict() { python3 -c "
25
+ import json,sys
26
+ d=json.load(open('$OUT'))
27
+ assert any(c['verdict']=='$1' for c in d['claims']), '$1 not found'
28
+ "; }
29
+
30
+ [[ -f "$SCRIPT" ]] || { echo "ENV-ERR: script missing" >&2; exit 2; }
31
+
32
+ # (1) bad manuscript + analysis dir: promised-absent + disk-unreported, Major -> exit 1
33
+ python3 "$SCRIPT" --manuscript "$BAD" --analysis-dir "$ADIR" --out "$OUT" --strict --quiet >/dev/null 2>&1
34
+ check "exit 1 under --strict (Major present)" test "$?" -eq 1
35
+ check "JSON artifact written" test -s "$OUT"
36
+ check "PROMISED_ABSENT detected (MI promised, absent from Results)" has_verdict PROMISED_ABSENT
37
+ check "DISK_UNREPORTED detected (delong nested CSV unmentioned)" has_verdict DISK_UNREPORTED
38
+
39
+ # (2) clean manuscript: reports MI + sensitivity, mentions disk outputs -> exit 0
40
+ python3 "$SCRIPT" --manuscript "$CLEAN" --analysis-dir "$ADIR" --strict --quiet >/dev/null 2>&1
41
+ check "exit 0 on clean manuscript (all reconciled)" test "$?" -eq 0
42
+
43
+ echo "fail=$fail"; [[ "$fail" -eq 0 ]] && echo "ALL PASS" || echo "FAILURES: $fail"
44
+ exit "$fail"
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env bash
2
+ # Regression test for the claim-vs-artifact cross-check (self-review Phase 2.5f).
3
+ # Synthetic fixture reproduces: (a) a primary re-designated at manuscript stage,
4
+ # (b) an E-value (2.79) that does not recompute from its stated primary HR 1.34,
5
+ # (c) a correctly-arithmetic E-value attached to a non-primary (cancer) estimate.
6
+ # Stdlib-only (python3).
7
+ set -u
8
+
9
+ HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
+ SCRIPT="$HERE/../scripts/check_claim_artifact.py"
11
+ MAN="$HERE/fixtures/claim_manuscript.md"
12
+ PRE="$HERE/fixtures/claim_prereg.md"
13
+ OUT="$(mktemp -t ca_XXXX).json"
14
+ trap 'rm -f "$OUT"' EXIT
15
+
16
+ fail=0
17
+ check() { local label="$1"; shift
18
+ if "$@" >/dev/null 2>&1; then printf ' PASS %s\n' "$label"
19
+ else printf ' FAIL %s\n' "$label"; fail=$((fail+1)); fi
20
+ }
21
+ has_verdict() { python3 -c "
22
+ import json,sys
23
+ d=json.load(open('$OUT'))
24
+ assert any(c['verdict']=='$1' for c in d['claims']), '$1 not found'
25
+ "; }
26
+
27
+ [[ -f "$SCRIPT" ]] || { echo "ENV-ERR: script missing" >&2; exit 2; }
28
+
29
+ python3 "$SCRIPT" --manuscript "$MAN" --prereg "$PRE" --out "$OUT" --strict >/dev/null 2>&1
30
+ check "exit 1 under --strict (Major present)" test "$?" -eq 1
31
+ check "JSON artifact written" test -s "$OUT"
32
+ check "PRIMARY_REASSIGNED detected" has_verdict PRIMARY_REASSIGNED
33
+ check "EVALUE_ARITHMETIC detected (2.79 vs HR 1.34)" has_verdict EVALUE_ARITHMETIC
34
+ check "EVALUE_NON_PRIMARY detected (cancer sHR)" has_verdict EVALUE_NON_PRIMARY
35
+
36
+ # Clean case: primary matches prereg, correct primary E-value, no reassignment.
37
+ CLEAN="$(mktemp -t ca_clean_XXXX).md"
38
+ trap 'rm -f "$OUT" "$CLEAN"' EXIT
39
+ cat > "$CLEAN" <<'EOF'
40
+ ## Methods
41
+ The primary analysis was the association between emphysema and all-cause mortality
42
+ in the complete-case multivariable Cox model.
43
+ ## Results
44
+ The E-value for the primary association (HR 1.34) was 2.02.
45
+ EOF
46
+ python3 "$SCRIPT" --manuscript "$CLEAN" --prereg "$PRE" --strict >/dev/null 2>&1
47
+ check "exit 0 on clean manuscript (matching primary, correct E-value)" test "$?" -eq 0
48
+
49
+ echo "fail=$fail"; [[ "$fail" -eq 0 ]] && echo "ALL PASS" || echo "FAILURES: $fail"
50
+ exit "$fail"
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env bash
2
+ # Regression test for the classical-style body lint (self-review §J).
3
+ # Synthetic, PII-free fixtures reproduce: a § symbol self-reference + an in-body
4
+ # AI-disclosure paragraph (both Major), eligibility prose, and mixed OR/HR decimals
5
+ # (Minor). The clean fixture uses a numbered eligibility list, consistent decimals,
6
+ # no § symbol, and no in-body disclosure.
7
+ # Stdlib-only (python3).
8
+ set -u
9
+
10
+ HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
+ SCRIPT="$HERE/../scripts/check_classical_style.py"
12
+ BAD="$HERE/fixtures/style_bad.md"
13
+ CLEAN="$HERE/fixtures/style_clean.md"
14
+ OUT="$(mktemp -t style_XXXX).json"
15
+ trap 'rm -f "$OUT"' EXIT
16
+
17
+ fail=0
18
+ check() { local label="$1"; shift
19
+ if "$@" >/dev/null 2>&1; then printf ' PASS %s\n' "$label"
20
+ else printf ' FAIL %s\n' "$label"; fail=$((fail+1)); fi
21
+ }
22
+ has_verdict() { python3 -c "
23
+ import json,sys
24
+ d=json.load(open('$OUT'))
25
+ assert any(c['verdict']=='$1' for c in d['claims']), '$1 not found'
26
+ "; }
27
+
28
+ [[ -f "$SCRIPT" ]] || { echo "ENV-ERR: script missing" >&2; exit 2; }
29
+
30
+ # (1) bad manuscript: Major (§ + in-body disclosure) -> exit 1
31
+ python3 "$SCRIPT" --manuscript "$BAD" --out "$OUT" --strict --quiet >/dev/null 2>&1
32
+ check "exit 1 under --strict (Major present)" test "$?" -eq 1
33
+ check "JSON artifact written" test -s "$OUT"
34
+ check "SECTION_SYMBOL detected" has_verdict SECTION_SYMBOL
35
+ check "INBODY_AI_DISCLOSURE detected" has_verdict INBODY_AI_DISCLOSURE
36
+ check "ELIGIBILITY_PROSE detected" has_verdict ELIGIBILITY_PROSE
37
+ check "DECIMAL_INCONSISTENCY detected" has_verdict DECIMAL_INCONSISTENCY
38
+
39
+ # (2) clean manuscript: numbered eligibility, consistent decimals, no §/disclosure -> exit 0
40
+ python3 "$SCRIPT" --manuscript "$CLEAN" --strict --quiet >/dev/null 2>&1
41
+ check "exit 0 on clean manuscript" test "$?" -eq 0
42
+
43
+ echo "fail=$fail"; [[ "$fail" -eq 0 ]] && echo "ALL PASS" || echo "FAILURES: $fail"
44
+ exit "$fail"
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env bash
2
+ # Regression test for the cohort-arithmetic gate (self-review Phase 2.5 / 2.5b).
3
+ # Synthetic, PII-free fixtures reproduce: (a) an incidence rate that does not
4
+ # recompute from its events/person-years, (b) a complete-case footnote that does
5
+ # not balance (total - missing != complete), (c) an ordinal tier partition whose
6
+ # stratum denominators and events sum above the stated total.
7
+ # Stdlib-only (python3).
8
+ set -u
9
+
10
+ HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
+ SCRIPT="$HERE/../scripts/check_cohort_arithmetic.py"
12
+ BAD="$HERE/fixtures/cohort_bad.md"
13
+ CLEAN="$HERE/fixtures/cohort_clean.md"
14
+ PART="$HERE/fixtures/cohort_partition.csv"
15
+ OUT="$(mktemp -t coh_XXXX).json"
16
+ trap 'rm -f "$OUT"' EXIT
17
+
18
+ fail=0
19
+ check() { local label="$1"; shift
20
+ if "$@" >/dev/null 2>&1; then printf ' PASS %s\n' "$label"
21
+ else printf ' FAIL %s\n' "$label"; fail=$((fail+1)); fi
22
+ }
23
+ has_verdict() { python3 -c "
24
+ import json,sys
25
+ d=json.load(open('$OUT'))
26
+ assert any(c['verdict']=='$1' for c in d['claims']), '$1 not found'
27
+ "; }
28
+
29
+ [[ -f "$SCRIPT" ]] || { echo "ENV-ERR: script missing" >&2; exit 2; }
30
+
31
+ # (1) bad manuscript: all three discrepancies, Major present -> exit 1 under --strict
32
+ python3 "$SCRIPT" --manuscript "$BAD" --out "$OUT" --strict --quiet >/dev/null 2>&1
33
+ check "exit 1 under --strict (Major present)" test "$?" -eq 1
34
+ check "JSON artifact written" test -s "$OUT"
35
+ check "RATE_BACKCALC detected (5.0 vs 120/50000*1000=2.4)" has_verdict RATE_BACKCALC
36
+ check "CASCADE_SUM detected (4252-583=3669 != 3667)" has_verdict CASCADE_SUM
37
+ check "PARTITION_OVERLAP detected (sum 12498 != 12019)" has_verdict PARTITION_OVERLAP
38
+
39
+ # (2) clean manuscript: everything balances -> exit 0
40
+ python3 "$SCRIPT" --manuscript "$CLEAN" --strict --quiet >/dev/null 2>&1
41
+ check "exit 0 on clean manuscript (all arithmetic balances)" test "$?" -eq 0
42
+
43
+ # (3) --data CSV partition: stratum n sum above total -> PARTITION_OVERLAP, exit 1
44
+ python3 "$SCRIPT" --manuscript "$CLEAN" --data "$PART" --out "$OUT" --strict --quiet >/dev/null 2>&1
45
+ check "exit 1 with overlapping --data partition CSV" test "$?" -eq 1
46
+ check "PARTITION_OVERLAP from --data CSV" has_verdict PARTITION_OVERLAP
47
+
48
+ echo "fail=$fail"; [[ "$fail" -eq 0 ]] && echo "ALL PASS" || echo "FAILURES: $fail"
49
+ exit "$fail"
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/env bash
2
+ # Regression test for the confounding-completeness gate (self-review Phase 2.5e).
3
+ # Synthetic, PII-free fixture mirroring the canonical failure pattern: five
4
+ # measured covariates imbalanced by exposure (uric acid, pack-years, HDL, total
5
+ # cholesterol, HbA1c) that are absent from an age/sex/BMI/HTN/DM adjustment set.
6
+ # Stdlib-only (python3); no pandas/statsmodels.
7
+ set -u
8
+
9
+ HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
+ SCRIPT="$HERE/../scripts/check_confounding_completeness.py"
11
+ FIXTURE="$HERE/fixtures/table1_by_exposure.csv"
12
+ OUT="$(mktemp -t cc_XXXX).json"
13
+ trap 'rm -f "$OUT"' EXIT
14
+
15
+ fail=0
16
+ check() { # check "label" expr...
17
+ local label="$1"; shift
18
+ if "$@" >/dev/null 2>&1; then printf ' PASS %s\n' "$label"
19
+ else printf ' FAIL %s\n' "$label"; fail=$((fail+1)); fi
20
+ }
21
+
22
+ [[ -f "$SCRIPT" ]] || { echo "ENV-ERR: script missing" >&2; exit 2; }
23
+ [[ -f "$FIXTURE" ]] || { echo "ENV-ERR: fixture missing" >&2; exit 2; }
24
+
25
+ # 1. Runs and writes JSON.
26
+ python3 "$SCRIPT" --table1 "$FIXTURE" \
27
+ --adjusted-list "age, sex, BMI, hypertension, diabetes" \
28
+ --out "$OUT" --strict >/dev/null 2>&1
29
+ rc=$?
30
+ check "exit 1 under --strict (unadjusted-imbalanced present)" test "$rc" -eq 1
31
+ check "JSON artifact written" test -s "$OUT"
32
+
33
+ # 2. Exactly five unadjusted-imbalanced covariates.
34
+ n=$(python3 -c "import json,sys; print(json.load(open('$OUT'))['n_unadjusted_imbalanced'])" 2>/dev/null)
35
+ check "n_unadjusted_imbalanced == 5" test "$n" = "5"
36
+
37
+ # 3. Each expected offender flagged; adjusted/balanced ones not.
38
+ for cov in "Uric acid" "Smoking, pack-years" "HDL" "Total cholesterol" "HbA1c"; do
39
+ check "flagged: $cov" python3 -c "
40
+ import json
41
+ d=json.load(open('$OUT'))
42
+ assert any('$cov'.lower() in f['covariate'].lower() and f['verdict']=='UNADJUSTED_IMBALANCED' for f in d['findings'])
43
+ "
44
+ done
45
+ for cov in "Age" "BMI"; do
46
+ check "not flagged: $cov" python3 -c "
47
+ import json
48
+ d=json.load(open('$OUT'))
49
+ assert not any('$cov'.lower() in f['covariate'].lower() and f['verdict']=='UNADJUSTED_IMBALANCED' for f in d['findings'])
50
+ "
51
+ done
52
+
53
+ # 4. '<0.001' p-value cell parsed as imbalanced (HDL row uses '<0.001').
54
+ check "verdict MAJOR_CANDIDATE" python3 -c "
55
+ import json; assert json.load(open('$OUT'))['verdict']=='MAJOR_CANDIDATE'
56
+ "
57
+
58
+ # 5. Clean case: adjusting for everything yields exit 0.
59
+ python3 "$SCRIPT" --table1 "$FIXTURE" \
60
+ --adjusted-list "age, sex, BMI, hypertension, diabetes, uric acid, smoking, HDL, total cholesterol, HbA1c" \
61
+ --strict >/dev/null 2>&1
62
+ check "exit 0 when all imbalanced covariates adjusted" test "$?" -eq 0
63
+
64
+ echo "ran=$(( ${fail} + 0 )) fail=$fail"
65
+ [[ "$fail" -eq 0 ]] && echo "ALL PASS" || echo "FAILURES: $fail"
66
+ exit "$fail"
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env bash
2
+ # Regression test for the panel lens-diversity gate (self-review Phase 2.6).
3
+ # Synthetic, PII-free reviewer-output fixtures reproduce: (a) a healthy panel
4
+ # spanning three distinct axes (clean), (b) a monoculture where every major
5
+ # falls in one family AND two expected axes are uncovered (UNCOVERED_AXIS +
6
+ # FAMILY_MONOCULTURE), (c) a fully-redundant reviewer lens (LENS_COLLAPSE).
7
+ # Stdlib-only (python3).
8
+ set -u
9
+
10
+ HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
+ SCRIPT="$HERE/../scripts/check_panel_diversity.py"
12
+ GOOD="$HERE/fixtures/panel_good.json"
13
+ MONO="$HERE/fixtures/panel_monoculture.json"
14
+ COLLAPSE="$HERE/fixtures/panel_collapse.json"
15
+ OUT="$(mktemp -t paneldiv_XXXX).json"
16
+ trap 'rm -f "$OUT"' EXIT
17
+
18
+ fail=0
19
+ check() { local label="$1"; shift
20
+ if "$@" >/dev/null 2>&1; then printf ' PASS %s\n' "$label"
21
+ else printf ' FAIL %s\n' "$label"; fail=$((fail+1)); fi
22
+ }
23
+ has_verdict() { python3 -c "
24
+ import json,sys
25
+ d=json.load(open('$OUT'))
26
+ assert any(c['verdict']=='$1' for c in d['claims']), '$1 not found'
27
+ "; }
28
+ no_verdict() { python3 -c "
29
+ import json,sys
30
+ d=json.load(open('$OUT'))
31
+ assert all(c['verdict']!='$1' for c in d['claims']), '$1 unexpectedly found'
32
+ "; }
33
+
34
+ [[ -f "$SCRIPT" ]] || { echo "ENV-ERR: script missing" >&2; exit 2; }
35
+
36
+ # (1) healthy diverse panel (sr_ma) -> exit 0, no Major claims
37
+ python3 "$SCRIPT" --panel "$GOOD" --out "$OUT" --strict --quiet >/dev/null 2>&1
38
+ check "exit 0 (diverse panel)" test "$?" -eq 0
39
+ check "no UNCOVERED_AXIS on clean panel" no_verdict UNCOVERED_AXIS
40
+ check "no FAMILY_MONOCULTURE on clean panel" no_verdict FAMILY_MONOCULTURE
41
+
42
+ # (2) monoculture + uncovered axes -> exit 1 with both Major verdicts
43
+ python3 "$SCRIPT" --panel "$MONO" --out "$OUT" --strict --quiet >/dev/null 2>&1
44
+ check "exit 1 (monoculture)" test "$?" -eq 1
45
+ check "UNCOVERED_AXIS detected" has_verdict UNCOVERED_AXIS
46
+ check "FAMILY_MONOCULTURE detected" has_verdict FAMILY_MONOCULTURE
47
+
48
+ # (3) fully-redundant reviewer (no research type) -> LENS_COLLAPSE flag, exit 0
49
+ python3 "$SCRIPT" --panel "$COLLAPSE" --out "$OUT" --strict --quiet >/dev/null 2>&1
50
+ check "exit 0 (collapse is flag-only)" test "$?" -eq 0
51
+ check "LENS_COLLAPSE detected" has_verdict LENS_COLLAPSE
52
+ check "no UNCOVERED_AXIS without research type" no_verdict UNCOVERED_AXIS
53
+
54
+ echo "fail=$fail"; [[ "$fail" -eq 0 ]] && echo "ALL PASS" || echo "FAILURES: $fail"
55
+ exit "$fail"