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,146 @@
1
+ ---
2
+ name: define-variables
3
+ description: >
4
+ Literature-grounded variable operationalization for observational research. Turns a data dictionary +
5
+ research question into a citation-backed table of exposure/outcome/covariate definitions, cutoffs, and
6
+ DB variable mappings. Prevents ad-hoc phenotype definitions that invite reviewer rejection. Bridges
7
+ /search-lit output into /write-protocol Methods.
8
+ triggers: variable definition, phenotype definition, operationalization, cutoff justification, inclusion criteria, case definition, grouping criteria, literature-grounded definition, canonical definition, 변수 정의, 정의 근거
9
+ tools: Read, Write, Edit, Bash, Grep, Glob
10
+ model: inherit
11
+ ---
12
+
13
+ # Define-Variables Skill
14
+
15
+ ## Purpose
16
+
17
+ Every observational study operationalizes abstract constructs (MASLD, CKD, emphysema, obesity, incidentaloma) into concrete rules against the available data dictionary. When that operationalization is invented ad-hoc from the dictionary alone, reviewers reject on construct validity regardless of downstream statistics.
18
+
19
+ This skill forces a **literature-first** pass: each variable is mapped to a canonical guideline/consensus definition, cross-checked against prior operationalizations in comparable cohorts, then mapped to available DB variables. Ad-hoc deviations are flagged explicitly and justified, not hidden.
20
+
21
+ Use it when:
22
+ - a study question is known and variables are being selected
23
+ - inclusion/exclusion criteria or phenotype definitions need citation backing
24
+ - a data dictionary has ambiguous or derived variables (eGFR formula, BMI class, liver steatosis criteria, etc.)
25
+ - a reviewer asked "why this cutoff?"
26
+ - a retrospective audit reveals drifted definitions across projects in the same cohort
27
+
28
+ Call after `/design-study`, before `/write-protocol`.
29
+
30
+ ## Communication Rules
31
+
32
+ - Communicate in the user's preferred language.
33
+ - All variable names, guideline names, cutoffs in English.
34
+ - Produce one artifact: `variable_operationalization.md` in the project root (or path the user specifies).
35
+
36
+ ## Inputs
37
+
38
+ 1. **Research question** (one sentence)
39
+ 2. **Candidate variables** — exposure, outcome, key covariates, eligibility filters
40
+ 3. **Data dictionary path** (xlsx / csv / markdown) OR explicit list of available DB columns
41
+ 4. **Cohort type** (e.g., health-screening, NHANES-like, claims, registry) — informs which prior-art cohort to compare against
42
+
43
+ Missing inputs → ask once, then proceed.
44
+
45
+ ## 4-Tier Pipeline (DB codebook + token-efficient literature)
46
+
47
+ ### Tier 0 — DB codebook lookup (mandatory for DB-backed observational studies)
48
+
49
+ **Trigger**: project has a `project.yaml::db.dictionary_path` field pointing to a machine-readable codebook (xlsx/csv/markdown), OR user supplied a dictionary path in inputs. If neither, skip to Tier 1.
50
+
51
+ For every candidate DB variable — **before** touching literature — open the dictionary and record, verbatim, the sheet name, row number, and code→meaning mapping. This prevents the single most common observational-study error: assuming a column code (`status == 0`, `grade == 4`) means what it intuitively reads like, when the codebook says otherwise.
52
+
53
+ Concrete procedure per variable:
54
+
55
+ 1. Locate the variable in the dictionary by exact column name.
56
+ 2. Copy verbatim: the sheet title, row number, and full code→meaning mapping (or unit/range statement for continuous vars).
57
+ 3. Paste into the `Dict. sheet & row` + `Dict. verbatim` columns of the operationalization table.
58
+ 4. If the variable is not found, OR the codebook is silent on a specific code value, file a question to the DB owner / data steward. Do NOT infer from cross-tabs, do NOT guess, do NOT proceed with that variable until a verbatim answer exists.
59
+
60
+ Empirical checks (value distributions, cross-tabs with related columns) are useful for sanity testing **after** the verbatim codebook meaning is recorded — never as a substitute for it.
61
+
62
+ Project-level binding (recommended): commit a `DICTIONARY_FIRST_POLICY.md` at the project root (or shared-config path) capturing the canonical dictionary path + escalation contact. Cross-project rule template: `~/.claude/rules/dictionary-first.md`.
63
+
64
+ **Exit gate**: `check_dictionary_citations.py` (or equivalent) PASS on the operationalization table before running Tier 1.
65
+
66
+ ### Tier 1 — Canonical index lookup (no API calls)
67
+
68
+ Check `references/common_definitions.md` (shipped with skill) for the variable. Covers high-frequency constructs:
69
+
70
+ - Liver: MASLD (AASLD 2023), MetALD (AASLD 2023), MAFLD (2020), NAFLD (legacy), ALD, viral hepatitis (AASLD 2022/2024 HBV, AASLD-IDSA HCV)
71
+ - Metabolic: T2DM (ADA 2024), prediabetes (ADA 2024), metabolic syndrome (IDF 2009 / NCEP ATP III / K-NCEP), obesity/BMI (WHO Asian 2004 + WHO global), HTN (ACC/AHA 2017 + JNC-8), dyslipidemia (NCEP ATP III, 2023 AHA/ACC)
72
+ - Renal: CKD (KDIGO 2024), eGFR formulas (CKD-EPI 2021 race-free, MDRD legacy), incidental renal mass (ACR 2018 white paper, Bosniak 2019)
73
+ - Pulmonary: COPD (GOLD 2024), emphysema imaging (Fleischner 2015)
74
+ - CV: CAC scoring (Agatston 1990, MESA percentiles), CAD risk (2018 ACC/AHA cholesterol, PREVENT 2023)
75
+ - Cancer: gastric cancer H. pylori (Maastricht VI 2022), thyroid nodule (ACR TI-RADS 2017), gallbladder polyp (European 2022 joint guideline)
76
+ - Imaging incidentalomas: adrenal (ACR 2023), pancreas (ACR 2017), renal (ACR 2018), thyroid (ACR 2017)
77
+
78
+ If the variable hits Tier 1, record: guideline, year, canonical cutoff, BibTeX key. Done — no `/search-lit` call.
79
+
80
+ ### Tier 2 — Targeted `/search-lit` (focused queries only)
81
+
82
+ For variables NOT in Tier 1, OR when subgroup justification is needed (Asian-specific cutoff, pediatric, young-adult, pregnancy, etc.), call `/search-lit` with **one query per variable** — not a general sweep. Query pattern:
83
+
84
+ ```
85
+ "{construct} definition {cohort type} {subgroup qualifier}"
86
+ e.g., "obstructive sleep apnea prevalence Korean health screening cohort"
87
+ ```
88
+
89
+ Cap: 5 queries per session. Stop early if first 1-2 papers converge on the same definition.
90
+
91
+ ### Tier 3 — Verification
92
+
93
+ Before finalizing, run `/verify-refs` on the accumulated BibTeX to confirm every citation exists in PubMed/CrossRef. Ad-hoc choices (no canonical source found) must be flagged `Ad-hoc: yes` and justified with 1-2 sentences — never hidden.
94
+
95
+ ## Output Template
96
+
97
+ Write to `{project_root}/variable_operationalization.md` using `templates/variable_operationalization.md`. Required structure:
98
+
99
+ 1. **Header**: research question, cohort type, date, author
100
+ 2. **Operationalization table** — one row per variable:
101
+
102
+ | Variable | Role | Dict. sheet & row | Dict. verbatim | Canonical source | Definition | Cutoff | DB vars | Implementation | Ad-hoc? |
103
+
104
+ - `Role`: exposure / outcome / covariate / eligibility
105
+ - `Dict. sheet & row`: e.g. `5-1.복부초음파 r12` — mandatory if a DB dictionary exists
106
+ - `Dict. verbatim`: full code→meaning string copied from the dictionary — mandatory same condition
107
+ - `Canonical source`: BibTeX key (e.g., `@rinella2023_aasld_masld`)
108
+ - `Definition`: one line, verbatim from guideline where possible
109
+ - `Cutoff`: numeric + units
110
+ - `DB vars`: exact dictionary column names used
111
+ - `Implementation`: SQL/pandas-style pseudocode (e.g., `bmi>=25 & (b_tg>=150 | b_hdl<40)`)
112
+ - `Ad-hoc?`: yes/no. If yes, justification below table
113
+
114
+ 3. **Ad-hoc justifications** — for each yes row
115
+ 4. **Mapping gaps** — variables in the protocol with no DB equivalent; list proxy / omit / request decisions
116
+ 5. **References** — BibTeX block
117
+
118
+ ## Non-Goals
119
+
120
+ - Statistical analysis → `/analyze-stats`
121
+ - Manuscript drafting → `/write-paper`
122
+ - Data cleaning / missingness → `/clean-data`
123
+ - Sample size → `/calc-sample-size`
124
+
125
+ ## Pipeline Position
126
+
127
+ ```
128
+ intake-project → design-study → search-lit → define-variables → write-protocol → analyze-stats → write-paper
129
+ ^^^^^^^^^^^^^^^
130
+ ```
131
+
132
+ `/orchestrate` should insert this skill between `/search-lit` and `/write-protocol` for any observational cohort or registry study.
133
+
134
+ ## Anti-Hallucination
135
+
136
+ Every variable definition, cutoff, and era anchor must be grounded in a verified source — a clinical guideline, a peer-reviewed paper with DOI, or an established registry data dictionary. Never invent a phenotype threshold from the model's prior; if the source is unknown, mark the row `Ad-hoc: yes` and require user confirmation before it propagates into `/write-protocol` or `/analyze-stats`. When citing papers to justify a cutoff, verify the citation via `/search-lit` or `/verify-refs` — do not carry references from memory alone. The output table must carry explicit `source`, `year`, and `guideline_version` columns so downstream skills can re-verify.
137
+
138
+ ## Failure Modes to Avoid
139
+
140
+ 0. **Ad-hoc DB code interpretation** (the single most costly observational-study error). Interpreting a column value (`status == 0`, `grade == 4`) by its surface reading without consulting the codebook. Tier 0 exists specifically to prevent this. Distinguish from Failure #1: Tier 0 says "once you've picked the DB column, quote the codebook verbatim before using its values." Failure #1 says "don't pick DB columns before picking definitions from literature." Both rules co-exist.
141
+ 1. **Dictionary-first framing** — starting from what columns exist, then picking a definition that matches. Always flip: definition first, then map.
142
+ 2. **Cutoff drift** — using a different cutoff than the cited guideline without justification (e.g., BMI≥23 cited as WHO Asian while text says ≥25).
143
+ 3. **Mixing eras** — 2020 MAFLD criteria with 2023 MASLD criteria in the same analysis. Pick one and note why.
144
+ 4. **Silent ad-hoc** — introducing a novel cutoff without the `Ad-hoc: yes` flag.
145
+ 5. **Sweep-style /search-lit** — running a generic lit search instead of one focused query per gap variable. Wastes tokens and buries the signal.
146
+ 6. **Dose/duration structural-missingness** — operationalizing a dose/duration covariate (pack-years, cessation-years, alcohol grams/week) anchored to a categorical exposure (smoking status, alcohol use) without specifying what the *reference level* (never-smoker, never-drinker) does to the dose. A never-smoker's pack-years is a structural zero, not a missing value; conflating the two collapses the analytic sample under complete-case modeling and lets MICE fabricate a non-zero dose for the unexposed. Operationalize it explicitly — add a row with `Role = covariate` and `Implementation = "IF status == 'never' THEN dose = 0 ELSE measured_value"` — and adjust on the categorical **status** variable, reserving the continuous **dose** for an exposed-only secondary analysis. `/clean-data` (categorical-implied-zero flag) and `/analyze-stats` ("Covariate Pitfalls") enforce this downstream.
@@ -0,0 +1,190 @@
1
+ # Canonical Definitions Index (Tier 1)
2
+
3
+ Curated index of high-frequency phenotype/variable definitions for observational research. Each entry gives the authoritative source, year, cutoff, BibTeX key stub, and DOI. **Always quote the cutoff verbatim** — do not paraphrase.
4
+
5
+ Update cadence: review annually or when a major guideline revision drops.
6
+
7
+ ---
8
+
9
+ ## Hepatology
10
+
11
+ ### MASLD (Metabolic dysfunction-associated Steatotic Liver Disease)
12
+ - **Source**: Rinella et al., AASLD multi-society Delphi consensus, *Hepatology* 2023
13
+ - **Definition**: Hepatic steatosis (imaging/histology) + ≥1 cardiometabolic risk factor, no other identifiable cause
14
+ - **Cardiometabolic criteria (≥1 of 5)**:
15
+ - BMI ≥25 kg/m² (≥23 for Asian populations) OR WC >94 cm (M) / >80 cm (F)
16
+ - FPG ≥100 mg/dL OR 2h-PG ≥140 OR HbA1c ≥5.7% OR T2DM OR T2DM treatment
17
+ - BP ≥130/85 OR antihypertensive treatment
18
+ - TG ≥150 mg/dL OR lipid-lowering treatment
19
+ - HDL ≤40 (M) / ≤50 (F) mg/dL OR lipid-lowering treatment
20
+ - **BibTeX**: `@rinella2023_aasld_masld`
21
+ - **DOI**: 10.1097/HEP.0000000000000520
22
+
23
+ ### MetALD
24
+ - **Source**: Same AASLD 2023 consensus
25
+ - **Definition**: MASLD criteria + moderate alcohol (M 140–350 g/wk, F 70–210 g/wk)
26
+ - **BibTeX**: `@rinella2023_aasld_masld`
27
+
28
+ ### ALD (Alcohol-associated Liver Disease)
29
+ - **Source**: AASLD 2023 consensus + Crabb et al., AASLD practice guidance 2020
30
+ - **Definition**: Steatosis + alcohol >350 g/wk (M) / >210 g/wk (F)
31
+ - **BibTeX**: `@crabb2020_aasld_ald`, `@rinella2023_aasld_masld`
32
+
33
+ ### MAFLD (legacy, 2020)
34
+ - **Source**: Eslam et al., international expert consensus, *J Hepatol* 2020
35
+ - **BibTeX**: `@eslam2020_mafld`
36
+ - **Note**: Superseded by MASLD (2023) — use only for backwards comparability.
37
+
38
+ ### HBV chronic infection
39
+ - **Source**: Terrault et al., AASLD 2022/2018 guidance
40
+ - **Definition**: HBsAg positive ≥6 months
41
+ - **BibTeX**: `@terrault2018_aasld_hbv`
42
+
43
+ ### HCV chronic infection
44
+ - **Source**: AASLD-IDSA HCV guidance (latest rolling update at hcvguidelines.org)
45
+ - **Definition**: Anti-HCV positive + HCV RNA detectable
46
+ - **BibTeX**: `@aasld_idsa_hcv_guidance`
47
+
48
+ ### Liver fibrosis non-invasive scores
49
+ - **FIB-4**: Sterling et al. 2006. Cutoffs <1.3 exclude advanced fibrosis (<65 y); <2.0 (≥65 y). >2.67 rule-in. `@sterling2006_fib4`
50
+ - **NFS (NAFLD fibrosis score)**: Angulo et al. 2007. `@angulo2007_nfs`
51
+
52
+ ---
53
+
54
+ ## Metabolic / Endocrine
55
+
56
+ ### Type 2 Diabetes
57
+ - **Source**: ADA Standards of Care in Diabetes — 2024, *Diabetes Care*
58
+ - **Definition (any ONE)**:
59
+ - FPG ≥126 mg/dL
60
+ - 2h-PG ≥200 mg/dL on 75g OGTT
61
+ - HbA1c ≥6.5%
62
+ - Classic hyperglycemia symptoms + random PG ≥200
63
+ - Physician diagnosis OR antidiabetic medication
64
+ - **BibTeX**: `@ada2024_standards`
65
+ - **DOI**: 10.2337/dc24-S002
66
+
67
+ ### Prediabetes
68
+ - **Source**: ADA 2024
69
+ - **Definition**: FPG 100–125 OR 2h-PG 140–199 OR HbA1c 5.7–6.4%
70
+
71
+ ### Metabolic Syndrome
72
+ - **Source**: IDF 2009 harmonized (Alberti et al., *Circulation*) — ≥3 of 5 criteria
73
+ - **Criteria**:
74
+ - WC (ethnicity-specific: Asian M ≥90, F ≥80 cm)
75
+ - TG ≥150 OR treatment
76
+ - HDL <40 (M) / <50 (F) OR treatment
77
+ - BP ≥130/85 OR antihypertensive treatment
78
+ - FPG ≥100 OR T2DM treatment
79
+ - **BibTeX**: `@alberti2009_idf_harmonized`
80
+ - **DOI**: 10.1161/CIRCULATIONAHA.109.192644
81
+
82
+ ### Obesity (BMI)
83
+ - **WHO global**: Overweight ≥25, obese ≥30 kg/m². `@who2000_obesity`
84
+ - **WHO Asian (2004, *Lancet*)**: Overweight ≥23, obese ≥25. `@who2004_asian_bmi`
85
+ - **Korean Society for the Study of Obesity (KSSO) 2022**: Same 23/25 thresholds. `@ksso2022_obesity`
86
+
87
+ ### Hypertension
88
+ - **ACC/AHA 2017**: ≥130/80 = stage 1. `@whelton2017_accaha_htn`
89
+ - **JNC-8 / ESC (legacy)**: ≥140/90. `@james2014_jnc8`
90
+ - **Pick one explicitly** — do not mix.
91
+
92
+ ### Dyslipidemia
93
+ - **Source**: 2018 AHA/ACC/multi-society cholesterol guideline; 2023 update
94
+ - **BibTeX**: `@grundy2019_aha_cholesterol`
95
+
96
+ ---
97
+
98
+ ## Renal
99
+
100
+ ### CKD
101
+ - **Source**: KDIGO 2024 CKD guideline, *Kidney Int*
102
+ - **Definition**: eGFR <60 mL/min/1.73m² OR markers of kidney damage (ACR ≥30 mg/g etc.) ≥3 months
103
+ - **Staging**: G1–G5 by eGFR; A1–A3 by albuminuria
104
+ - **BibTeX**: `@kdigo2024_ckd`
105
+
106
+ ### eGFR formulas
107
+ - **CKD-EPI 2021 (race-free)** — *NEJM* 2021, Inker et al. `@inker2021_ckdepi2021`. Current KDIGO-recommended.
108
+ - **CKD-EPI 2009** — legacy, race-based. `@levey2009_ckdepi`
109
+ - **MDRD** — obsolete for clinical use; still seen in older datasets. `@levey2006_mdrd`
110
+
111
+ ### Incidental Renal Mass
112
+ - **Source**: ACR White Paper 2018 (Herts et al., *JACR*)
113
+ - **Cutoffs**: <1 cm too small to characterize; ≥1 cm workup per size/attenuation; growth >5 mm/y concerning
114
+ - **BibTeX**: `@herts2018_acr_renal`
115
+ - **DOI**: 10.1016/j.jacr.2017.10.028
116
+
117
+ ### Bosniak Classification (cystic renal mass)
118
+ - **Source**: Silverman et al., *Radiology* 2019 update
119
+ - **BibTeX**: `@silverman2019_bosniak`
120
+
121
+ ---
122
+
123
+ ## Pulmonary
124
+
125
+ ### COPD
126
+ - **Source**: GOLD 2024 Report
127
+ - **Definition**: Post-bronchodilator FEV1/FVC <0.70 + compatible symptoms/exposure
128
+ - **Severity (GOLD 1–4)** by FEV1% predicted: ≥80 / 50–79 / 30–49 / <30
129
+ - **BibTeX**: `@gold2024`
130
+
131
+ ### Emphysema (imaging)
132
+ - **Source**: Fleischner Society 2015 statement (Lynch et al., *Radiology*)
133
+ - **CT pattern classification**: centrilobular (trace/mild/moderate/confluent/advanced destructive), paraseptal, panlobular
134
+ - **BibTeX**: `@lynch2015_fleischner_emphysema`
135
+ - **DOI**: 10.1148/radiol.2015141579
136
+
137
+ ---
138
+
139
+ ## Cardiovascular
140
+
141
+ ### CAC (Coronary Artery Calcium)
142
+ - **Agatston method**: Agatston et al., *JACC* 1990. `@agatston1990`
143
+ - **MESA percentiles** (age/sex/race): McClelland et al. 2015. `@mcclelland2015_mesa`
144
+ - **Categories**: 0 / 1–99 / 100–399 / ≥400 (widely used)
145
+
146
+ ### ASCVD risk
147
+ - **Pooled Cohort Equations**: 2013 ACC/AHA. `@goff2014_pce`
148
+ - **PREVENT (2023)**: AHA new risk calculator, Khan et al., *Circulation*. `@khan2023_prevent`
149
+
150
+ ---
151
+
152
+ ## Oncology / Imaging incidentalomas
153
+
154
+ ### Thyroid nodule
155
+ - **ACR TI-RADS 2017**: Tessler et al., *JACR*. `@tessler2017_tirads`
156
+
157
+ ### Gallbladder polyp
158
+ - **European joint guideline 2022**: Foley et al., *Eur Radiol*. `@foley2022_gb_polyp`
159
+
160
+ ### Adrenal incidentaloma
161
+ - **ACR 2023 white paper**: Mayo-Smith et al. `@mayosmith2023_acr_adrenal`
162
+ - **ESE 2023 clinical**: Fassnacht et al., *Eur J Endocrinol*. `@fassnacht2023_ese_adrenal`
163
+
164
+ ### Pancreatic cystic lesion
165
+ - **ACR 2017 white paper**: Megibow et al., *JACR*. `@megibow2017_acr_pancreas`
166
+
167
+ ### H. pylori / gastric
168
+ - **Maastricht VI / Florence Consensus 2022**: Malfertheiner et al., *Gut*. `@malfertheiner2022_maastricht6`
169
+
170
+ ---
171
+
172
+ ## Alcohol exposure
173
+
174
+ ### Standard drink (Korea)
175
+ - 1 drink ≈ 10 g ethanol (KNHANES; KCDC standard-drink definition)
176
+ - ALD cutoffs above use grams/week, not drinks/week — convert when operationalizing.
177
+
178
+ ### AUDIT-C / AUDIT
179
+ - Bush et al. 1998; Saunders et al. 1993. `@bush1998_auditc`, `@saunders1993_audit`
180
+
181
+ ---
182
+
183
+ ## How to extend this file
184
+
185
+ 1. Add a new subsection under the appropriate organ/domain.
186
+ 2. Cite the authoritative guideline/consensus (not a secondary review).
187
+ 3. Quote the cutoff exactly — include units.
188
+ 4. Provide BibTeX key stub + DOI.
189
+ 5. If multiple competing guidelines exist (e.g., HTN 130 vs 140), list both and note "pick one explicitly."
190
+ 6. Commit with message: `define-variables: add {construct} canonical definition ({guideline year})`.
@@ -0,0 +1,34 @@
1
+ schema_version: 2
2
+ name: define-variables
3
+ layer: C
4
+ owner_domain: variable_operationalization
5
+
6
+ when_to_use: "Turn a data dictionary + research question into a citation-backed table of exposure/outcome/covariate definitions, cutoffs, and DB variable mappings."
7
+ when_NOT_to_use: "Drafting Methods prose (use write-protocol/write-paper); finding literature (use search-lit)."
8
+
9
+ inputs:
10
+ - "data dictionary"
11
+ - "research question"
12
+ - "candidate literature"
13
+ outputs:
14
+ - "variable operationalization table (definitions, cutoffs, DB mappings)"
15
+ side_effects:
16
+ - writes_project_artifacts
17
+ downstream_consumers:
18
+ - write-protocol
19
+ - analyze-stats
20
+ forbidden_actions:
21
+ - define_phenotype_without_dictionary_citation
22
+ - invent_cutoff_without_literature_source
23
+
24
+ # v2.1 quality card
25
+ purpose: "Produce a literature-grounded, dictionary-cited operationalization table that prevents ad-hoc phenotype definitions."
26
+ safety_boundaries:
27
+ - "Every DB variable interpretation quotes the data dictionary verbatim (dictionary-first)."
28
+ - "Cutoffs cite a canonical literature source; unsupported definitions are flagged, not invented."
29
+ known_limitations:
30
+ - "Quality depends on a complete data dictionary; silent dictionary gaps block definitions."
31
+ - "No standalone demo; output is reviewed against the dictionary and sources."
32
+ validation_commands:
33
+ - "cross-check each row's dictionary citation against the source dictionary"
34
+ evidence_surface: manual_workflow
@@ -0,0 +1,64 @@
1
+ # Variable Operationalization — {{PROJECT_SHORT_TITLE}}
2
+
3
+ - **Research question**: {{ONE_SENTENCE_Q}}
4
+ - **Cohort**: {{COHORT_NAME_TYPE}} (e.g., Institutional Health Screening Cohort, retrospective)
5
+ - **Author**: {{AUTHOR_NAME}}
6
+ - **Last updated**: {{YYYY-MM-DD}}
7
+ - **Upstream artifacts**: `design_study.md`, `search_lit_results.md` (if present)
8
+
9
+ ## Operationalization table
10
+
11
+ | # | Variable | Role | Dict. sheet & row | Dict. verbatim | Canonical source | Definition | Cutoff | DB vars | Implementation | Ad-hoc? |
12
+ |---|----------|------|-------------------|----------------|------------------|------------|--------|---------|----------------|---------|
13
+ | 1 | {{var}} | exposure | `{{sheet}} r{{N}}` | `{{code→meaning verbatim from dictionary}}` | @bibkey | verbatim from guideline | value + units | `col_a, col_b` | `col_a>=X & col_b==Y` | no |
14
+ | 2 | {{var}} | outcome | `{{sheet}} r{{N}}` | `{{verbatim}}` | @bibkey | ... | ... | ... | ... | no |
15
+ | 3 | {{var}} | covariate | `{{sheet}} r{{N}}` | `{{verbatim}}` | @bibkey | ... | ... | ... | ... | yes |
16
+ | 4 | {{var}} | eligibility | `{{sheet}} r{{N}}` | `{{verbatim}}` | @bibkey | ... | ... | ... | ... | no |
17
+
18
+ Roles: `exposure` / `outcome` / `covariate` / `eligibility`
19
+
20
+ **Dict. sheet & row / Dict. verbatim (mandatory for DB-backed projects)**:
21
+ - Citation format example (categorical): sheet = `{{dictionary_sheet}}`, row = `r{{N}}`, verbatim = `0={{meaning}}, 1={{meaning}}, ...` (copied exactly from the codebook).
22
+ - **Mandatory** for observational studies that have a data dictionary (e.g., NHIS, KNHANES, UK Biobank, institutional EMR / health-screening registries) — it cannot be left blank. Record the project-level policy in `DICTIONARY_FIRST_POLICY.md` (or a shared config) in the repo.
23
+ - For a code value not specified in the dictionary → hold off filling that row until you have asked the DB owner / data steward and received an answer.
24
+ - Self-evident continuous variables such as BMI/SBP may be marked `dict: n/a (continuous)`. The cutoff still requires a canonical source.
25
+
26
+ ## Ad-hoc justifications
27
+
28
+ For each row flagged `Ad-hoc: yes`, document:
29
+
30
+ ### {{variable_name}}
31
+
32
+ - **Why no canonical source**: e.g., no guideline for this subgroup; novel combination of existing criteria
33
+ - **Chosen rule**: precise cutoff / logic
34
+ - **Sensitivity plan**: alternative cutoff to test in sensitivity analysis
35
+ - **Reviewer-facing justification**: 1-2 sentences that will appear in Methods
36
+
37
+ ## Mapping gaps
38
+
39
+ Variables defined in the protocol but NOT directly available in the DB:
40
+
41
+ | Protocol variable | DB status | Decision |
42
+ |-------------------|-----------|----------|
43
+ | {{name}} | not available | proxy with `...` / request from DB owner / drop |
44
+
45
+ ## References
46
+
47
+ ```bibtex
48
+ @article{rinella2023_aasld_masld,
49
+ author = {Rinella, Mary E and others},
50
+ title = {A multisociety {Delphi} consensus statement on new fatty liver disease nomenclature},
51
+ journal = {Hepatology},
52
+ year = {2023},
53
+ doi = {10.1097/HEP.0000000000000520}
54
+ }
55
+
56
+ % add one entry per cited canonical source
57
+ ```
58
+
59
+ ## Verification log
60
+
61
+ - [ ] Tier 1 lookups documented (guideline year, cutoff quoted)
62
+ - [ ] Tier 2 `/search-lit` queries logged (query string + papers retained)
63
+ - [ ] Tier 3 `/verify-refs` passed (0 unverified citations)
64
+ - [ ] No silent ad-hoc — every deviation flagged and justified
@@ -0,0 +1,203 @@
1
+ ---
2
+ name: deidentify
3
+ description: >
4
+ De-identify clinical research data before LLM-assisted analysis. Standalone Python CLI
5
+ detects PHI via regex + heuristics with 10 country locale packs (kr, us, jp, cn, de, uk,
6
+ fr, ca, au, in). Interactive terminal review. No LLM touches raw data — the script runs
7
+ locally without any network or AI calls.
8
+ triggers: deidentify, de-identify, anonymize, 비식별화, 익명화, remove PHI, remove PII, strip patient info
9
+ tools: Read, Bash, Glob
10
+ model: inherit
11
+ ---
12
+
13
+ # De-identification Skill
14
+
15
+ You are guiding a medical researcher through data de-identification. The actual
16
+ de-identification is performed by a **standalone Python script** that runs WITHOUT
17
+ any LLM. Your role is to explain, guide, and verify — not to see or process raw
18
+ PHI data.
19
+
20
+ ## Critical Safety Rules
21
+
22
+ 1. **NEVER ask the user to paste, show, or upload raw data containing PHI.**
23
+ The script processes data locally. You never need to see patient-level data.
24
+ 2. **NEVER read or display the mapping file contents.** It contains original PHI values.
25
+ 3. **You may read** the scan report (column classifications, no raw values), audit log
26
+ (SHA-256 hashes only), and de-identified output (PHI already removed).
27
+ 4. **Always communicate in the user's preferred language** about the process, but use
28
+ English for technical terms (PHI, HIPAA, Safe Harbor, etc.).
29
+
30
+ ## Reference Files
31
+
32
+ - `${CLAUDE_SKILL_DIR}/references/hipaa_18_identifiers.md` — HIPAA Safe Harbor checklist
33
+ - `${CLAUDE_SKILL_DIR}/references/korean_phi_patterns.md` — Korean-specific regex patterns
34
+ - `${CLAUDE_SKILL_DIR}/references/date_shift_guide.md` — Date shifting best practices
35
+
36
+ Read relevant references before advising the researcher.
37
+
38
+ ## Prerequisites
39
+
40
+ - Python 3.10+
41
+ - `openpyxl` (for .xlsx files): `pip install openpyxl`
42
+ - Supported formats: CSV, TSV, Excel (.xlsx)
43
+
44
+ ## Five-Phase Workflow
45
+
46
+ ### Phase 1: Assessment
47
+
48
+ Ask the researcher:
49
+ 1. What file format is the data? (CSV, Excel, etc.)
50
+ 2. What PHI do you expect in the data? (names, dates, IDs, etc.)
51
+ 3. Does your IRB require specific de-identification documentation?
52
+ 4. Do you need to re-identify later? (affects mapping file choice)
53
+
54
+ Based on answers, recommend the appropriate command:
55
+ - Full pipeline (most common): `python deidentify.py full <file> --locale <code>`
56
+ - Step-by-step (cautious): `python deidentify.py scan <file> --locale <code>` first
57
+
58
+ Available locale codes: `kr` (Korea), `us` (USA), `jp` (Japan), `cn` (China), `de` (Germany),
59
+ `uk` (United Kingdom), `fr` (France), `ca` (Canada), `au` (Australia), `in` (India).
60
+ If `--locale` is omitted, the script shows an interactive country selection menu.
61
+ Users can provide a custom locale file via `--locale-file custom.json`.
62
+
63
+ ### Phase 2: Script Execution
64
+
65
+ Guide the researcher to run the script. The script is located at:
66
+ ```
67
+ ${CLAUDE_SKILL_DIR}/deidentify.py
68
+ ```
69
+
70
+ **Full pipeline** (recommended for most users):
71
+ ```bash
72
+ python ${CLAUDE_SKILL_DIR}/deidentify.py full data.xlsx \
73
+ --locale kr \
74
+ --output-dir ./deidentified/ \
75
+ --auto-accept-safe
76
+ ```
77
+
78
+ **Step-by-step** (for careful review):
79
+ ```bash
80
+ # Step 1: Scan
81
+ python ${CLAUDE_SKILL_DIR}/deidentify.py scan data.xlsx --locale kr --output-dir ./deidentified/
82
+
83
+ # Step 2: Review (interactive)
84
+ python ${CLAUDE_SKILL_DIR}/deidentify.py review ./deidentified/scan_report.json
85
+
86
+ # Step 3: Apply
87
+ python ${CLAUDE_SKILL_DIR}/deidentify.py apply ./deidentified/reviewed_report.json
88
+ ```
89
+
90
+ **Options:**
91
+ - `--locale CODE`: Country locale for PHI patterns (kr, us, jp, cn, de, uk, fr, ca, au, in)
92
+ - `--locale-file PATH`: Custom locale JSON file (copy `locales/_template.json` to create one)
93
+ - `--auto-accept-safe`: Skip confirmation for columns classified as SAFE (faster for large datasets)
94
+ - `--hash-mapping`: Store SHA-256 hashes instead of original values in mapping file (one-way, more secure)
95
+ - `--output-dir`: Where to save de-identified file, mapping, and audit log
96
+ - `-v/--verbose`: Enable debug logging
97
+
98
+ ### Phase 3: Interactive Review Guidance
99
+
100
+ The script's terminal review has three passes:
101
+
102
+ 1. **Pass 1 — Column Classification**: Each column is shown as PHI / REVIEW_NEEDED / SAFE.
103
+ The researcher confirms or overrides each classification.
104
+ 2. **Pass 2 — Undecided Items**: Columns that weren't resolved in Pass 1 get a second look
105
+ with more sample values displayed.
106
+ 3. **Pass 3 — Final Summary**: A table of all planned actions. The researcher can edit
107
+ individual decisions before confirming.
108
+
109
+ Coach the researcher. Deliver these prompts in the researcher's preferred language:
110
+ - "Columns classified as PHI are anonymized by default. Press 'k' to keep the original value."
111
+ - "REVIEW_NEEDED are columns the script could not classify. Check the sample values and decide."
112
+ - "SAFE means no PHI detected. Press 'r' to request re-review if any column looks suspicious."
113
+
114
+ ### Phase 4: Verify and Document
115
+
116
+ After the script completes, help the researcher verify:
117
+
118
+ 1. **Read the audit log** (safe — contains only hashes):
119
+ ```bash
120
+ cat ./deidentified/audit_log.csv | head -20
121
+ ```
122
+ Verify the number of changes, affected columns, and PHI types.
123
+
124
+ 2. **Spot-check the de-identified file** (safe — PHI already removed):
125
+ Read a few rows to confirm pseudonyms (P0001, etc.), date shifts, and [REDACTED] markers
126
+ appear where expected.
127
+
128
+ 3. **Check that sensitive columns are actually removed**:
129
+ Verify no original names, phone numbers, or RRN values remain.
130
+
131
+ 4. **Mapping file security**:
132
+ - Remind the researcher: "mapping.json contains original patient identifiers — treat it as restricted."
133
+ - Recommend storing it separately from the de-identified data
134
+ - File permissions are automatically set to 0600 (owner-only)
135
+
136
+ ### Phase 5: Documentation
137
+
138
+ Generate a de-identification methods paragraph for the manuscript or IRB:
139
+
140
+ Template:
141
+ > Protected health information was removed from the dataset prior to analysis using
142
+ > a rule-based de-identification tool (deidentify.py, medsci-skills) with the [COUNTRY]
143
+ > locale pattern pack. The tool scanned column names and cell values using regex patterns
144
+ > for country-specific identifiers (e.g., national ID numbers, phone numbers), email
145
+ > addresses, dates, and addresses. Each column classification was reviewed by the
146
+ > researcher in an interactive terminal session. Names were replaced with pseudonyms
147
+ > (P0001, P0002, ...), dates were shifted by a random per-patient offset (±365 days)
148
+ > preserving relative temporal intervals, and direct identifiers (phone numbers, email
149
+ > addresses, national ID numbers) were suppressed. A total of [N] cells across [M]
150
+ > columns were de-identified. The de-identification mapping file was stored separately
151
+ > under restricted access (file permissions 0600).
152
+
153
+ Customize based on the actual audit log statistics.
154
+
155
+ ## Cross-Skill Integration
156
+
157
+ - **deidentify** sits BEFORE `clean-data` in the research pipeline
158
+ - After de-identification, hand off to `/clean-data` for data quality profiling
159
+ - `/analyze-stats` can safely process the de-identified output
160
+ - `/write-paper` Methods section should reference the de-identification process
161
+ - `/write-protocol` can use the HIPAA/PIPA reference files for protocol documentation
162
+
163
+ ## Output Files
164
+
165
+ | File | Contains PHI? | Safe for Claude? | Purpose |
166
+ |------|:------------:|:----------------:|---------|
167
+ | `*_deidentified.xlsx/csv` | No | Yes | De-identified data for analysis |
168
+ | `mapping.json` | **YES** | **No** | Original ↔ pseudonym mapping |
169
+ | `audit_log.csv` | No (hashes only) | Yes | What was changed and where |
170
+ | `scan_report.json` | No | Yes | Column classification results |
171
+ | `reviewed_report.json` | No | Yes | Researcher-reviewed classifications |
172
+
173
+ ## Scope and Limitations
174
+
175
+ **Supported (v1)**:
176
+ - Structured tabular data: CSV, TSV, Excel (.xlsx)
177
+ - 10 country locales with country-specific PHI patterns:
178
+ - Korea (kr): RRN (주민번호), phone, email, address, Hangul names, dates
179
+ - USA (us): SSN, US phone, US address, zip codes
180
+ - Japan (jp): マイナンバー, Japanese phone, 都道府県 address, Kanji names
181
+ - China (cn): 身份证号, Chinese phone, 省市区 address, Chinese names
182
+ - Germany (de): Steuer-ID, German phone, Straße address
183
+ - UK (uk): NHS Number, NI Number, UK phone, postcodes
184
+ - France (fr): NIR/INSEE, French phone, Rue address
185
+ - Canada (ca): SIN, Canadian phone, postal codes
186
+ - Australia (au): TFN, Medicare number, AU phone
187
+ - India (in): Aadhaar, PAN, Indian phone, pin codes
188
+ - Universal patterns (all locales): email, ISO dates, high-cardinality numeric IDs (MRN)
189
+ - English column names recognized across all locales
190
+ - Custom locale support via `--locale-file` with template
191
+ - Pseudonymization, date shifting, ID replacement, suppression
192
+
193
+ **NOT supported (planned for v2)**:
194
+ - DICOM image metadata (PS3.15 Annex E) — requires pydicom
195
+ - Clinical free-text NER (clinical notes, radiology reports)
196
+ - Automated k-anonymity / l-diversity assessment
197
+ - SPSS (.sav), SAS (.sas7bdat), or other statistical formats
198
+
199
+ ## Anti-Hallucination
200
+
201
+ - **Never fabricate file paths, URLs, DOIs, or package names.** Verify existence before recommending.
202
+ - **Never invent journal metadata, impact factors, or submission policies** without verification at the journal's website.
203
+ - If a tool, package, or resource does not exist or you are unsure, say so explicitly rather than guessing.