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,41 @@
1
+ # SSOT.yaml — Single Source of Truth for medsci research project (schema v1).
2
+ # Generated by `/manage-project init --ssot`. See docs/ssot_schema_v1.md for spec.
3
+ # Edit `truth.*` paths only; `derived.*` is auto-written by pipeline.
4
+
5
+ schema_version: 1
6
+ project_id: {{PROJECT_ID}}
7
+ project_type: {{PROJECT_TYPE}}
8
+
9
+ truth:
10
+ manuscript: manuscript/index.qmd
11
+ refs_bib: manuscript/_src/refs.bib
12
+ numbers_yaml: manuscript/_src/numbers.yaml
13
+ tables_yaml: manuscript/_src/tables.yaml
14
+ figures_dir: manuscript/figures/
15
+ metadata: manuscript/_metadata.yml
16
+
17
+ reference_manager:
18
+ type: zotero
19
+ required_for: project_owner
20
+ library_type: user
21
+ library_id: null
22
+ collection_key: null
23
+ sync_method: better_bibtex_auto_export
24
+ fallback_for_collaborator: snapshot_only
25
+ citekey_policy: pinned_or_stable
26
+ refs_bib_snapshot: manuscript/_src/refs.bib
27
+
28
+ renders: {}
29
+
30
+ derived:
31
+ artifact_manifest: artifact_manifest.json
32
+ status_file: qc/status.json
33
+
34
+ policy:
35
+ ssot_only_editable: true
36
+ submission_readonly: true
37
+ back_merge_required_before: render
38
+ manuscript_citations: citekey_only
39
+ allow_new_reference_from_llm: false
40
+ missing_citekey: block
41
+ unverified_reference: block_before_submission
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ali Soroush
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,29 @@
1
+ # NOTICE — Third-party components
2
+
3
+ ## scripts/_vendor_citation_writer.py
4
+
5
+ - **Source**: alisoroushmd/zotero-mcp (https://github.com/alisoroushmd/zotero-mcp)
6
+ - **File**: `src/zotero_mcp/citation_writer.py`
7
+ - **Upstream SHA**: `ed5dfb718b78f355f300545eb375aec7a543e027` (fetched 2026-05-01)
8
+ - **License**: MIT, © 2026 Ali Soroush — full text in [`LICENSE.zotero-mcp`](./LICENSE.zotero-mcp)
9
+ - **Modifications**: None to the function bodies. The header comment was
10
+ rewritten to point at this skill's NOTICE / LICENSE files.
11
+ - **Why vendored, not depended on**: the upstream module has no PyPI release
12
+ and its repository ships an MCP server we do not need. The single file is
13
+ self-contained (only `python-docx` required) and was validated against a
14
+ 21-reference an active meta-analysis project manuscript before being relocated here.
15
+
16
+ ## CSL files (`citation_styles/*.csl`)
17
+
18
+ CSL files are author-licensed under CC BY-SA 3.0 (see individual file headers
19
+ or the README at the upstream Zotero / citation-style-language project).
20
+
21
+ ## How `inject_zotero_cwyw.py` differs from upstream
22
+
23
+ The vendored `zotero_to_csl_json` walks an `_ITEM_TYPE_MAP` that does not
24
+ include `webpage`, `report`, `presentation`, etc. — those item types fall
25
+ back to `"article"` and silently lose `URL` / `accessDate` / `publisher`. The
26
+ wrapper in `inject_zotero_cwyw.py` monkey-patches that function at import
27
+ time so it instead fetches each item's CSL-JSON from Zotero's connector API
28
+ (`http://localhost:23119/api/users/<USER_ID>/items/<KEY>?format=csljson`),
29
+ which is Zotero's own serialization and handles every item type correctly.
@@ -0,0 +1,289 @@
1
+ ---
2
+ name: manage-refs
3
+ description: >
4
+ Cross-cutting reference manager for medical manuscripts. Single entry point
5
+ for citation-key validation, journal-CSL pandoc rendering, manuscript ↔ DOCX
6
+ cross-reference QC, marker conversion (``[N]`` ↔ ``[@key]``), and native
7
+ Zotero CWYW field-code injection. Replaces the inline reference-handling
8
+ that previously lived in ``/write-paper`` Phase 7.6 and is reused by
9
+ ``/revise``, ``/peer-review``, ``/sync-submission``, and any skill that
10
+ produces a journal submission. Audit-only verification stays in
11
+ ``/verify-refs`` — this skill writes (renders, injects, converts); that
12
+ skill only reads.
13
+ triggers: manage-refs, references, citation, citation keys, pandoc citeproc, journal CSL, CSL swap, cascade rejection re-render, cross-reference QC, [@bibkey], Zotero CWYW, ADDIN ZOTERO_ITEM, marker conversion, [N] to [@key], reference manager, render manuscript, check_citation_keys, check_xref
14
+ tools: Read, Write, Edit, Bash, Grep, Glob
15
+ model: inherit
16
+ ---
17
+
18
+ # Manage-Refs Skill
19
+
20
+ You are routing reference-handling work for a medical manuscript. The user is
21
+ somewhere in the lifecycle — drafting, building a circulation DOCX, swapping
22
+ CSL after a journal rejection, fixing a cross-reference defect surfaced by
23
+ QC, or wiring up live Zotero field codes for a co-author Word workflow. Pick
24
+ the right tool from the decision table; do not invent a parallel pipeline.
25
+
26
+ ## Why This Skill Exists
27
+
28
+ Reference handling spans every late-stage skill: `/write-paper` builds the
29
+ first DOCX, `/revise` rebuilds it after each reviewer round, `/peer-review`
30
+ emits a critique that quotes references back, `/sync-submission` packages the
31
+ final tarball, `/find-journal` informs CSL swaps on rejection cascade, and
32
+ `/verify-refs` audits the bibliography. Until 2026-05-01 these scripts lived
33
+ under `skills/write-paper/scripts/`, which made `/revise` and `/sync-submission`
34
+ silently depend on a sibling skill — a layering inversion that broke when
35
+ `/write-paper` was loaded into a non-research project. Moving the
36
+ lifecycle tools here turns reference handling into a first-class concern
37
+ with one decision tree, one set of CSL files, and one provenance file
38
+ (`NOTICE.md`) for the vendored Zotero CWYW writer.
39
+
40
+ Validated 2026-05-01 against a 21-reference meta-analysis manuscript
41
+ (a meta-analysis project's submission) for both pandoc-citeproc and Zotero-CWYW paths.
42
+
43
+ ## Anti-Hallucination Guarantees
44
+
45
+ 1. **Citekey discipline (Phase 0)**: every in-text citation must be
46
+ `[@bibkey]` resolvable in `refs.bib`. `scripts/check_citation_keys.py` is
47
+ a hard gate — UNDEFINED keys exit non-zero and block the build.
48
+
49
+ **`[@NEW:topic]` placeholder convention**: while drafting, `/write-paper`
50
+ may emit `[@NEW:topic_slug]` markers for citations the author still needs
51
+ to source. `check_citation_keys.py` classifies these as `NEW_PLACEHOLDER`
52
+ (not UNDEFINED) and exits 0 — the build is allowed to proceed during
53
+ drafting. Phase 7.6 (DOCX render) is a hard gate: zero NEW_PLACEHOLDER
54
+ entries must remain. Resolve each by adding the citation to Zotero (then
55
+ `/lit-sync` refreshes refs.bib) and replacing the placeholder with the
56
+ real `[@bibkey]`. Never let a `[@NEW:...]` reach a rendered DOCX.
57
+ 2. **No hand-typed References list** — references are always rendered by
58
+ pandoc citeproc + journal CSL or by the Zotero Word plugin (CWYW). See
59
+ `~/.claude/rules/manuscript-references.md`.
60
+ 3. **Zotero metadata is never invented** — `inject_zotero_cwyw.py` fetches
61
+ item data live from `http://localhost:23119`. Any HTTP failure aborts
62
+ with a non-zero exit so partial bibliographies never reach the user.
63
+ 4. **Marker conversion is mapping-driven** — `md_marker_convert.py` will
64
+ never guess a Zotero key for a number; unmapped markers stay as `[N]`
65
+ and are reported on stderr.
66
+ 5. **Cross-reference QC is a submission gate** — `scripts/check_xref.py`
67
+ `--strict` exits 1 on any `MISSING_DOCX` / `MISSING_BODY` / `MISMATCH`,
68
+ blocking pipelines that try to ship a DOCX whose Table/Figure citations
69
+ don't match captions.
70
+ 6. **Audit boundary**: this skill writes; bibliographic correctness against
71
+ PubMed/CrossRef stays in `/verify-refs`. Always invoke `/verify-refs`
72
+ after a render before signing off — one read-only audit, one writer.
73
+
74
+ ## Decision Tree
75
+
76
+ | Situation | Tool | Why |
77
+ |---|---|---|
78
+ | Validate `[@bibkey]` ↔ `refs.bib` (UNDEFINED / UNUSED keys) | `scripts/check_citation_keys.py` | Hard build gate, runs in seconds |
79
+ | Single-author submission lockdown, frozen output | `scripts/render_pandoc.sh -j <journal>` | Reproducible, CI-friendly |
80
+ | Cascade rejection (e.g., ER → JVIR → CVIR) | `render_pandoc.sh` with new `-j` | CSL swap reformats references in seconds |
81
+ | Reviewer revision: add 1–2 refs to a Word doc with co-authors live | Zotero Word plugin (user GUI) | Minimal disruption to track-changes flow |
82
+ | Reviewer revision: bulk reference change | Edit markdown SSOT, re-run `render_pandoc.sh` | Consistency, no cherry-pick risk |
83
+ | Migrate `[N]` numeric markers → `[@key]` for pandoc | `scripts/md_marker_convert.py --to-keys` | Mapping-driven, partial conversion safe |
84
+ | Convert `[@key]` → `[N]` for round-trip / debug | `scripts/md_marker_convert.py --to-numbers` | Same map, opposite direction |
85
+ | Wire native Zotero CWYW field codes into a .docx (live Refresh in Word) | `scripts/inject_zotero_cwyw.py` | Co-author Word workflow, post-circulation editability |
86
+ | Manuscript ↔ rendered DOCX cross-reference QC | `scripts/check_xref.py --strict` | Submission gate (P0 blocker on mismatch) |
87
+ | Figures/tables submitted as separate attachments (radiology, most medical journals) | `check_xref.py --strict --allow-separate-attachments` | Downgrades `MISSING_DOCX` to WARN; `MISSING_BODY`/`MISMATCH` remain P0 |
88
+ | **v_(N+1) docx build-time regeneration check** | `check_xref.py --vN-docx-md5 <prev>.docx [--vN-md <prev>.md]` | Defense-in-depth: identity = unmodified seed copy; missing diff lines = body not regenerated |
89
+ | **Master pre-submission gate** (recommended before any submission) | `scripts/pre_submission_gate.sh` | Chains `check_citation_keys` → `verify_refs --strict` → `render_pandoc` (optional) → `check_xref --strict`; single artifact `qc/pre_submission_gate.json` |
90
+ | Bibliographic audit against PubMed / CrossRef | **delegate** to `/verify-refs` | Audit-only — keep writer/auditor separation |
91
+
92
+ ## Workflows
93
+
94
+ ### A. Pandoc citeproc (default for solo authors and final submissions)
95
+
96
+ User provides `manuscript.md` with `[@bibkey]` citations + `refs.bib`.
97
+ 1. **Gate**: `python "${CLAUDE_SKILL_DIR}/scripts/check_citation_keys.py" manuscript.md refs.bib`
98
+ — exits non-zero on UNDEFINED keys. Fix and re-run.
99
+ 2. **Render**:
100
+ ```bash
101
+ "${CLAUDE_SKILL_DIR}/scripts/render_pandoc.sh" \
102
+ -j european-radiology \
103
+ -i manuscript.md \
104
+ -b refs.bib \
105
+ -o manuscript_final.docx
106
+ ```
107
+ Bundled CSLs (in `citation_styles/`): `european-radiology`, `radiology`,
108
+ `american-journal-of-roentgenology`, `cardiovascular-and-interventional-radiology`,
109
+ `korean-journal-of-radiology`, `vancouver`, `vancouver-superscript`,
110
+ `springer-basic-brackets`, `springer-vancouver-brackets`. Use
111
+ `radiology` for RYAI; use `vancouver` for JVIR (no dedicated CSL).
112
+ 3. **QC**:
113
+ ```bash
114
+ python3 "${CLAUDE_SKILL_DIR}/scripts/check_xref.py" \
115
+ --md manuscript.md --docx manuscript_final.docx \
116
+ --out qc/xref_audit.json --strict
117
+ ```
118
+ Treat `submission_safe: false` as a halt. Route fixes by symptom — see
119
+ the table in `references/check_xref_symptoms.md`.
120
+ 4. **Audit hand-off**: invoke `/verify-refs` for the PubMed/CrossRef audit
121
+ before sign-off.
122
+
123
+ ### B. Zotero CWYW (co-author Word workflow)
124
+
125
+ User has a markdown SSOT and wants reviewers to edit citations directly in
126
+ Word. Each reference must already exist as a Zotero item; the user supplies
127
+ a `[N] → ZoteroKey` mapping.
128
+ 1. **Convert markers**:
129
+ ```bash
130
+ python3 "${CLAUDE_SKILL_DIR}/scripts/md_marker_convert.py" \
131
+ --input manuscript.md --output manuscript_keys.md \
132
+ --map ref_map.json --to-keys
133
+ ```
134
+ Optionally stage with `--active-ns 1,2,3,4,19` for a sample build first
135
+ (validated on an active meta-analysis project: 5-ref sample reduces Word Refresh blast radius
136
+ when debugging).
137
+ 2. **Render to .docx** with pandoc (workflow A) so the body has plain text
138
+ `[@key]` markers, OR pre-build a .docx some other way that still contains
139
+ plain `[@key]` text.
140
+ 3. **Inject CWYW**:
141
+ ```bash
142
+ python3 "${CLAUDE_SKILL_DIR}/scripts/inject_zotero_cwyw.py" \
143
+ --input manuscript_keys.docx --output manuscript_cwyw.docx \
144
+ --user-id 16613550 --keys-from keys.txt
145
+ ```
146
+ The script fetches Zotero metadata via the local connector (port 23119);
147
+ any HTTP failure aborts with non-zero exit.
148
+ 4. **First-build instruction** (REQUIRED — see Known Limitation #1): open
149
+ the output in Word → Zotero tab → **Add/Edit Bibliography** once. After
150
+ that, **Refresh** keeps citations and bibliography in sync as authors
151
+ edit.
152
+ 5. **Surgical patches are unsafe**: for ref additions in later rounds, edit
153
+ the markdown SSOT and rebuild the whole .docx instead of regex-patching
154
+ the post-CWYW file. Zotero's rendered `[N]` superscripts can collide
155
+ with plain `[N]` markers and corrupt the field codes.
156
+
157
+ ### C. Cascade rejection re-render (find-journal hand-off)
158
+
159
+ User got rejected from journal A and `/find-journal` recommended journal B.
160
+ 1. Confirm the new CSL exists in `citation_styles/` (or fetch from
161
+ https://citationstyles.org/styles and drop in).
162
+ 2. Re-run `render_pandoc.sh -j <new-csl>` against the same `manuscript.md` +
163
+ `refs.bib`.
164
+ 3. Re-run `check_xref.py --strict`.
165
+ 4. Re-run `/verify-refs` if any new references were added during the
166
+ inter-journal revision.
167
+
168
+ ### D. Cross-reference QC only
169
+
170
+ User shipped a manuscript and a reviewer flagged a Table/Figure mismatch.
171
+ 1. Run `check_xref.py --strict` on the current `manuscript.md` + `.docx`.
172
+ 2. Inspect `qc/xref_audit.json`. Body caption is the SSOT — fix `manuscript.md`
173
+ and rebuild, never patch the .docx by hand.
174
+ 3. See `references/check_xref_symptoms.md` for the
175
+ `MISSING_BODY` / `MISSING_DOCX` / `MISMATCH` triage table.
176
+ 4. For journals that accept figures and tables as **separate attachment files**
177
+ (the default in European Radiology, Radiology, AJR, JVIR, KJR, and most
178
+ medical journals), pass `--allow-separate-attachments`. `MISSING_DOCX` rows
179
+ are then recorded as WARN rather than FAIL; `MISSING_BODY` and `MISMATCH`
180
+ remain P0 because they indicate SSOT drift, not attachment policy.
181
+
182
+ ### D'. v_(N+1) docx regeneration check (build-time companion)
183
+
184
+ When building v_(N+1) from a frozen v_N, the v_(N+1) docx MUST differ
185
+ from v_N docx by content — a byte-identical copy is a silent seed-copy
186
+ that will revert markdown edits at peer review. `check_xref.py` carries
187
+ two flags for the build-time companion to the submission-time gate
188
+ in `scripts/verify_package_integrity.py --assert-vN-docx-changed`:
189
+
190
+ ```bash
191
+ python3 "${CLAUDE_SKILL_DIR}/scripts/check_xref.py" \
192
+ --md manuscript_v2.md \
193
+ --docx manuscript_v2.docx \
194
+ --vN-docx-md5 manuscript_v1.docx \
195
+ --vN-md manuscript_v1.md \
196
+ --strict
197
+ ```
198
+
199
+ - `--vN-docx-md5` alone: MD5 identity check. Identical bytes = FAIL.
200
+ - `--vN-docx-md5 + --vN-md`: additionally extracts the markdown-only diff
201
+ between v_N and v_(N+1) and verifies each ≥40-char diff line appears
202
+ verbatim (whitespace-normalized, case-insensitive) in the new docx
203
+ body XML. Missing diff lines = body did not pick up the markdown edits.
204
+
205
+ Output records the result under `vN_docx_check` in `qc/xref_audit.json`.
206
+ Either failure mode causes a non-zero exit even without `--strict`.
207
+
208
+ ### E. Master pre-submission gate (recommended end-to-end chain)
209
+
210
+ The single entry point that combines workflows A and D plus `/verify-refs`
211
+ into one aborting chain. Use this immediately before submission or before
212
+ circulating a v_N package to senior co-authors.
213
+
214
+ ```bash
215
+ bash "${CLAUDE_SKILL_DIR}/scripts/pre_submission_gate.sh" \
216
+ --md manuscript/manuscript.md \
217
+ --bib manuscript/_src/refs.bib \
218
+ --docx submission/<journal>/manuscript.docx \
219
+ --allow-separate-attachments # omit if the journal accepts inline figures/tables
220
+ ```
221
+
222
+ Stage order (first failure aborts):
223
+ 1. `check_citation_keys.py manuscript.md refs.bib` — UNDEFINED / UNUSED keys
224
+ 2. `verify_refs.py refs.bib --strict` — PubMed / CrossRef per-entry verification
225
+ 3. `render_pandoc.sh -j <csl> -i ... -b ... -o ...` — invoked only when `--docx` is omitted
226
+ 4. `check_xref.py --md ... --docx ... --strict [--allow-separate-attachments]`
227
+
228
+ On success the chain writes `qc/pre_submission_gate.json` (plus the
229
+ per-stage artifacts `qc/reference_audit.json` and `qc/xref_audit.json`)
230
+ with `submission_safe: true`. On any failure the JSON records the failing
231
+ stage and exit code, and the script exits non-zero — do not submit until
232
+ the failing stage passes.
233
+
234
+ Critical: the gate does **not** reimplement any check. It calls the existing
235
+ scripts as subprocesses. If you find yourself wanting to add a check, add it
236
+ to the underlying script (the gate then picks it up automatically).
237
+
238
+ ## Quality Gates
239
+
240
+ This skill defines **three submission gates** and **one user approval gate**:
241
+
242
+ - **Gate 1 (citekey integrity)**: `check_citation_keys.py` exits non-zero on
243
+ UNDEFINED keys. The pipeline halts; the user reviews and fixes.
244
+ - **Gate 2 (cross-reference integrity)**: `check_xref.py --strict` exits 1 on
245
+ any `MISSING_DOCX` / `MISSING_BODY` / `MISMATCH` row. The user reviews
246
+ `qc/xref_audit.json` and resolves before proceeding.
247
+ - **Gate 3 (audit hand-off)**: before sign-off, the user must run
248
+ `/verify-refs` and confirm `submission_safe: true` in
249
+ `qc/reference_audit.json`. This skill never marks the bibliography
250
+ audited on its own.
251
+ - **User approval gate (CWYW first build)**: the user must perform Word →
252
+ Zotero → Add/Edit Bibliography manually after the first
253
+ `inject_zotero_cwyw.py` build. The skill cannot automate this and warns
254
+ on stderr that it is required.
255
+
256
+ ## Provenance
257
+
258
+ `scripts/_vendor_citation_writer.py` is vendored from
259
+ `alisoroushmd/zotero-mcp` @ `ed5dfb71`, MIT licensed. See
260
+ [`NOTICE.md`](./NOTICE.md) and [`LICENSE.zotero-mcp`](./LICENSE.zotero-mcp).
261
+
262
+ ## Related
263
+
264
+ - `~/.claude/rules/manuscript-references.md` — global rule (decision tree
265
+ this skill implements)
266
+ - `~/.claude/rules/agent-skill-routing.md` — skill router (this skill is the
267
+ reference-handling row)
268
+ - `~/.claude/rules/zotero-workflow.md` — BBT auto-export, MCP setup
269
+ - `/verify-refs` — read-only audit (PubMed / CrossRef + first-author
270
+ cross-check)
271
+ - `/lit-sync` — Zotero ↔ Obsidian sync, `refs.bib` provider
272
+ - `/write-paper` Phase 7.6 — calls this skill (one-line delegation)
273
+ - `/revise`, `/sync-submission`, `/find-journal` — call this skill on
274
+ rebuild / re-render / cascade
275
+
276
+ ## Known Limitations
277
+
278
+ 1. **First-build empty BIBL field (CWYW)**: `inject_zotero_cwyw.py` writes a
279
+ stub `ADDIN ZOTERO_BIBL` field; Word's Zotero Refresh treats an empty
280
+ stub as user-customized and refuses to populate it. User must run
281
+ Add/Edit Bibliography once. Subsequent Refresh works as expected.
282
+ Validated on Word for Mac, an active meta-analysis project.
283
+ 2. **Webpage / non-journal item types**: handled by the patched
284
+ `zotero_to_csl_json` that fetches Zotero's native CSL-JSON; do not bypass
285
+ this patch.
286
+ 3. **Surgical post-build regex patches are unsafe** — see Workflow B step 5.
287
+ 4. **Local Zotero required for CWYW** — port 23119 must be reachable; no
288
+ web-API fallback yet (would need `ZOTERO_API_KEY`). On failure the script
289
+ aborts with non-zero exit so partial builds never ship.
@@ -0,0 +1,40 @@
1
+ # Citation Styles (CSL)
2
+
3
+ Journal-specific Citation Style Language files for pandoc citeproc rendering.
4
+ Source: https://github.com/citation-style-language/styles (zotero/styles).
5
+
6
+ ## Bundled CSLs
7
+
8
+ | File | Use for | Notes |
9
+ |------|---------|-------|
10
+ | `european-radiology.csl` | European Radiology, EURE | Dependent on `springer-basic-brackets.csl` (must be in same dir) |
11
+ | `cardiovascular-and-interventional-radiology.csl` | CVIR | Dependent on `springer-vancouver-brackets.csl` |
12
+ | `radiology.csl` | Radiology (RSNA) | Independent. Also acceptable fallback for Radiology: AI when no dedicated CSL exists |
13
+ | `american-journal-of-roentgenology.csl` | AJR | Independent |
14
+ | `korean-journal-of-radiology.csl` | KJR | Vancouver-superscript variant |
15
+ | `vancouver.csl` | Generic Vancouver (brackets) | Fallback when journal CSL unavailable (e.g., JVIR, Radiology: AI) |
16
+ | `vancouver-superscript.csl` | Generic Vancouver (superscript) | Alternative fallback |
17
+ | `springer-basic-brackets.csl` | Parent of European Radiology | Do not use directly — keep co-located |
18
+ | `springer-vancouver-brackets.csl` | Parent of CVIR | Do not use directly — keep co-located |
19
+
20
+ ## Missing — use fallback
21
+
22
+ - **Radiology: Artificial Intelligence (RYAI)**: no dedicated CSL on zotero/styles as of 2026-04. Use `radiology.csl` (parent journal, identical RSNA house style).
23
+ - **Journal of Vascular and Interventional Radiology (JVIR)**: no dedicated CSL. Use `vancouver.csl` and verify against latest author guidelines before submission.
24
+
25
+ ## Updating
26
+
27
+ ```bash
28
+ cd "$(dirname "$0")"
29
+ for s in european-radiology radiology american-journal-of-roentgenology \
30
+ cardiovascular-and-interventional-radiology korean-journal-of-radiology \
31
+ vancouver vancouver-superscript \
32
+ springer-basic-brackets springer-vancouver-brackets; do
33
+ curl -fsSL -o "${s}.csl" "https://www.zotero.org/styles/${s}"
34
+ done
35
+ ```
36
+
37
+ Verify dependent-parent links if Springer reorganizes:
38
+ ```bash
39
+ grep -H independent-parent *.csl
40
+ ```
@@ -0,0 +1,211 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <style xmlns="http://purl.org/net/xbiblio/csl" class="in-text" version="1.0" demote-non-dropping-particle="sort-only" default-locale="en-US">
3
+ <info>
4
+ <title>American Journal of Roentgenology</title>
5
+ <title-short>AJR</title-short>
6
+ <id>http://www.zotero.org/styles/american-journal-of-roentgenology</id>
7
+ <link href="http://www.zotero.org/styles/american-journal-of-roentgenology" rel="self"/>
8
+ <link href="http://www.zotero.org/styles/nlm-citation-sequence-brackets" rel="template"/>
9
+ <link href="https://www.ajronline.org/authorguidelines" rel="documentation"/>
10
+ <author>
11
+ <name>Francis Deng</name>
12
+ <email>francis.deng@gmail.com</email>
13
+ </author>
14
+ <contributor>
15
+ <name>Patrick O'Brien</name>
16
+ </contributor>
17
+ <category citation-format="numeric"/>
18
+ <category field="medicine"/>
19
+ <issn>0361-803X</issn>
20
+ <eissn>1546-3141</eissn>
21
+ <summary>AJR style based on Vancouver but with brackets</summary>
22
+ <updated>2026-01-25T22:16:24+00:00</updated>
23
+ <rights license="http://creativecommons.org/licenses/by-sa/3.0/">This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License</rights>
24
+ </info>
25
+ <locale xml:lang="en">
26
+ <terms>
27
+ <term name="printing">published</term>
28
+ </terms>
29
+ </locale>
30
+ <macro name="author">
31
+ <names variable="author" suffix=". ">
32
+ <name delimiter-precedes-last="always" et-al-min="7" et-al-use-first="3" initialize-with="" name-as-sort-order="all" sort-separator=" "/>
33
+ <label form="short" strip-periods="true" prefix=", "/>
34
+ <substitute>
35
+ <names variable="editor"/>
36
+ </substitute>
37
+ </names>
38
+ </macro>
39
+ <macro name="editor">
40
+ <names variable="editor">
41
+ <name sort-separator=" " initialize-with="" name-as-sort-order="all" delimiter=", " delimiter-precedes-last="always"/>
42
+ <label form="short" strip-periods="true" prefix=", "/>
43
+ </names>
44
+ </macro>
45
+ <macro name="date">
46
+ <choose>
47
+ <if type="article-newspaper report webpage post post-weblog" match="any">
48
+ <date variable="issued" form="text"/>
49
+ </if>
50
+ <else>
51
+ <date variable="issued" form="text" date-parts="year"/>
52
+ </else>
53
+ </choose>
54
+ </macro>
55
+ <macro name="publisher">
56
+ <group delimiter=", ">
57
+ <group delimiter=" ">
58
+ <text variable="genre" text-case="title"/>
59
+ <text variable="number"/>
60
+ </group>
61
+ <group delimiter=": ">
62
+ <choose>
63
+ <if type="thesis" match="none">
64
+ <text variable="publisher-place"/>
65
+ </if>
66
+ </choose>
67
+ <text variable="publisher"/>
68
+ </group>
69
+ <choose>
70
+ <if variable="URL" match="none">
71
+ <text macro="date"/>
72
+ </if>
73
+ </choose>
74
+ </group>
75
+ </macro>
76
+ <macro name="access">
77
+ <choose>
78
+ <if variable="page" match="none">
79
+ <choose>
80
+ <if variable="DOI" match="any">
81
+ <group prefix=". " delimiter=". ">
82
+ <date variable="issued" form="text" prefix="Epub ahead of print "/>
83
+ <text variable="DOI" prefix="DOI: "/>
84
+ </group>
85
+ </if>
86
+ <else>
87
+ <group delimiter=". " prefix=". ">
88
+ <text variable="URL"/>
89
+ <text macro="accessed-date"/>
90
+ </group>
91
+ </else>
92
+ </choose>
93
+ </if>
94
+ </choose>
95
+ </macro>
96
+ <macro name="accessed-date">
97
+ <choose>
98
+ <if variable="URL">
99
+ <group delimiter=". ">
100
+ <group delimiter=" ">
101
+ <text term="printing" text-case="capitalize-first"/>
102
+ <text macro="date"/>
103
+ </group>
104
+ <group delimiter=" ">
105
+ <text term="accessed" text-case="capitalize-first"/>
106
+ <date variable="accessed" form="text"/>
107
+ </group>
108
+ </group>
109
+ </if>
110
+ </choose>
111
+ </macro>
112
+ <macro name="container-title">
113
+ <choose>
114
+ <if type="article-journal" match="any">
115
+ <text variable="container-title" form="short" strip-periods="true" font-style="italic"/>
116
+ </if>
117
+ <else>
118
+ <text variable="container-title" font-style="italic"/>
119
+ </else>
120
+ </choose>
121
+ </macro>
122
+ <macro name="title">
123
+ <choose>
124
+ <if type="book patent report thesis" match="any">
125
+ <text variable="title" font-style="italic"/>
126
+ </if>
127
+ <else>
128
+ <text variable="title"/>
129
+ </else>
130
+ </choose>
131
+ </macro>
132
+ <macro name="page">
133
+ <group delimiter=" ">
134
+ <label variable="page" form="short"/>
135
+ <text variable="page"/>
136
+ </group>
137
+ </macro>
138
+ <macro name="edition">
139
+ <choose>
140
+ <if is-numeric="edition">
141
+ <group delimiter=" ">
142
+ <number variable="edition" form="ordinal"/>
143
+ <text term="edition" form="short"/>
144
+ </group>
145
+ </if>
146
+ <else>
147
+ <text variable="edition" suffix="."/>
148
+ </else>
149
+ </choose>
150
+ </macro>
151
+ <citation collapse="citation-number">
152
+ <sort>
153
+ <key variable="citation-number"/>
154
+ </sort>
155
+ <layout delimiter=", " prefix="[" suffix="]">
156
+ <text variable="citation-number"/>
157
+ </layout>
158
+ </citation>
159
+ <bibliography et-al-min="7" et-al-use-first="3" second-field-align="flush">
160
+ <layout>
161
+ <text variable="citation-number" suffix="."/>
162
+ <text macro="author"/>
163
+ <text macro="title"/>
164
+ <choose>
165
+ <if type="bill book graphic legal_case legislation motion_picture patent report song thesis" match="any">
166
+ <group delimiter=". " prefix=". ">
167
+ <text macro="edition"/>
168
+ <text macro="publisher"/>
169
+ </group>
170
+ </if>
171
+ <else-if type="chapter paper-conference" match="any">
172
+ <group delimiter=", " prefix=". ">
173
+ <group delimiter=". ">
174
+ <group delimiter=" ">
175
+ <text term="in" suffix=":" text-case="capitalize-first"/>
176
+ <text macro="editor"/>
177
+ <text variable="container-title" font-style="italic"/>
178
+ </group>
179
+ <text macro="publisher"/>
180
+ </group>
181
+ <text macro="page"/>
182
+ </group>
183
+ </else-if>
184
+ <else-if type="article-newspaper article-magazine" match="any">
185
+ <group delimiter=", " prefix=". ">
186
+ <text macro="container-title"/>
187
+ <text macro="date"/>
188
+ <text macro="page"/>
189
+ </group>
190
+ </else-if>
191
+ <else>
192
+ <group delimiter="; " prefix=". ">
193
+ <group delimiter=" ">
194
+ <text macro="container-title"/>
195
+ <choose>
196
+ <if variable="page" match="any">
197
+ <text macro="date"/>
198
+ </if>
199
+ </choose>
200
+ </group>
201
+ <group delimiter=":">
202
+ <text variable="volume"/>
203
+ <text variable="page"/>
204
+ </group>
205
+ </group>
206
+ </else>
207
+ </choose>
208
+ <text macro="access"/>
209
+ </layout>
210
+ </bibliography>
211
+ </style>
@@ -0,0 +1,19 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <style xmlns="http://purl.org/net/xbiblio/csl" version="1.0" default-locale="en-US">
3
+ <!-- Generated with https://github.com/citation-style-language/utilities/tree/master/generate_dependent_styles/data/springer -->
4
+ <info>
5
+ <title>CardioVascular and Interventional Radiology</title>
6
+ <title-short>Cardiovasc Intervent Radiol</title-short>
7
+ <id>http://www.zotero.org/styles/cardiovascular-and-interventional-radiology</id>
8
+ <link href="http://www.zotero.org/styles/cardiovascular-and-interventional-radiology" rel="self"/>
9
+ <link href="http://www.zotero.org/styles/springer-vancouver-brackets" rel="independent-parent"/>
10
+ <link href="http://www.springer.com/cda/content/document/cda_downloaddocument/Key_Style_Points_1.0.pdf" rel="documentation"/>
11
+ <link href="http://www.springer.com/cda/content/document/cda_downloaddocument/manuscript-guidelines-1.0.pdf" rel="documentation"/>
12
+ <category citation-format="numeric"/>
13
+ <category field="science"/>
14
+ <issn>0174-1551</issn>
15
+ <eissn>1432-086X</eissn>
16
+ <updated>2016-02-14T10:21:15+00:00</updated>
17
+ <rights license="http://creativecommons.org/licenses/by-sa/3.0/">This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License</rights>
18
+ </info>
19
+ </style>