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.
- package/LICENSE +50 -0
- package/README.md +602 -0
- package/README_FIRST.md +27 -0
- package/bin/medsci-skills.js +159 -0
- package/installers/install-macos.command +19 -0
- package/installers/install-windows.cmd +26 -0
- package/installers/install-windows.ps1 +17 -0
- package/installers/install.py +218 -0
- package/metadata/skills_catalog.json +452 -0
- package/package.json +48 -0
- package/skills/academic-aio/SKILL.md +408 -0
- package/skills/academic-aio/references/case_studies/kjr_mllm_2025.md +82 -0
- package/skills/academic-aio/references/checklists/AIO_GENERAL.md +354 -0
- package/skills/academic-aio/references/journal_summarybox_templates.yaml +126 -0
- package/skills/academic-aio/references/oac_funding_checklist.yaml +129 -0
- package/skills/academic-aio/references/reporting_guideline_mapping.md +39 -0
- package/skills/academic-aio/references/schema_markup_templates/CodeRepository.jsonld +32 -0
- package/skills/academic-aio/references/schema_markup_templates/Dataset.jsonld +36 -0
- package/skills/academic-aio/references/schema_markup_templates/Person.jsonld +30 -0
- package/skills/academic-aio/references/schema_markup_templates/README.md +43 -0
- package/skills/academic-aio/references/schema_markup_templates/ScholarlyArticle.jsonld +55 -0
- package/skills/academic-aio/scripts/batch_metadata_audit.py +169 -0
- package/skills/academic-aio/scripts/validate_schema.py +118 -0
- package/skills/academic-aio/skill.yml +36 -0
- package/skills/academic-aio/templates/aio_audit_checklist.md.j2 +108 -0
- package/skills/add-journal/SKILL.md +482 -0
- package/skills/add-journal/skill.yml +33 -0
- package/skills/analyze-stats/SKILL.md +598 -0
- package/skills/analyze-stats/references/analysis_guides/missing_data.md +109 -0
- package/skills/analyze-stats/references/analysis_guides/nhis_icd10_mapping.md +247 -0
- package/skills/analyze-stats/references/analysis_guides/propensity_score.md +132 -0
- package/skills/analyze-stats/references/analysis_guides/regression.md +115 -0
- package/skills/analyze-stats/references/analysis_guides/repeated_measures.md +160 -0
- package/skills/analyze-stats/references/analysis_guides/survey_weighted.md +366 -0
- package/skills/analyze-stats/references/analysis_guides/test_selection.md +86 -0
- package/skills/analyze-stats/references/style/figure_style.mplstyle +69 -0
- package/skills/analyze-stats/references/style/theme_publication.R +147 -0
- package/skills/analyze-stats/references/table-standards/journal-profiles/ajr.yaml +51 -0
- package/skills/analyze-stats/references/table-standards/journal-profiles/european_radiology.yaml +55 -0
- package/skills/analyze-stats/references/table-standards/journal-profiles/jama.yaml +66 -0
- package/skills/analyze-stats/references/table-standards/journal-profiles/lancet.yaml +57 -0
- package/skills/analyze-stats/references/table-standards/journal-profiles/nejm.yaml +51 -0
- package/skills/analyze-stats/references/table-standards/journal-profiles/radiology.yaml +66 -0
- package/skills/analyze-stats/references/table-standards/table-standards.md +287 -0
- package/skills/analyze-stats/references/table-standards/table-types/diagnostic_accuracy.md +36 -0
- package/skills/analyze-stats/references/table-standards/table-types/meta_analysis.md +58 -0
- package/skills/analyze-stats/references/table-standards/table-types/model_comparison.md +36 -0
- package/skills/analyze-stats/references/table-standards/table-types/regression_results.md +50 -0
- package/skills/analyze-stats/references/table-standards/table-types/table1_demographics.md +51 -0
- package/skills/analyze-stats/references/table-standards/tool-comparison.md +79 -0
- package/skills/analyze-stats/references/templates/agreement_analysis.py +436 -0
- package/skills/analyze-stats/references/templates/dca_plot.R +237 -0
- package/skills/analyze-stats/references/templates/diagnostic_accuracy.py +401 -0
- package/skills/analyze-stats/references/templates/dta_meta_analysis.R +384 -0
- package/skills/analyze-stats/references/templates/forest_plot.py +412 -0
- package/skills/analyze-stats/references/templates/likert_summary.py +356 -0
- package/skills/analyze-stats/references/templates/meta_analysis.R +365 -0
- package/skills/analyze-stats/references/templates/propensity_score.py +478 -0
- package/skills/analyze-stats/references/templates/regression.py +425 -0
- package/skills/analyze-stats/references/templates/repeated_measures.py +434 -0
- package/skills/analyze-stats/references/templates/sample_size.R +382 -0
- package/skills/analyze-stats/references/templates/survey_weighted_analysis.py +411 -0
- package/skills/analyze-stats/references/templates/survival_analysis.py +325 -0
- package/skills/analyze-stats/references/templates/table1_demographics.py +287 -0
- package/skills/analyze-stats/scripts/check_generated_code.py +335 -0
- package/skills/analyze-stats/skill.yml +38 -0
- package/skills/analyze-stats/tests/fixtures/gen_bad.R +16 -0
- package/skills/analyze-stats/tests/fixtures/gen_bad.py +24 -0
- package/skills/analyze-stats/tests/fixtures/gen_clean.py +21 -0
- package/skills/analyze-stats/tests/test_generated_code.sh +59 -0
- package/skills/analyze-stats/tests/test_survival_template.sh +53 -0
- package/skills/author-strategy/SKILL.md +117 -0
- package/skills/author-strategy/analyze_patterns.py +303 -0
- package/skills/author-strategy/fetch_pubmed.py +374 -0
- package/skills/author-strategy/skill.yml +34 -0
- package/skills/batch-cohort/SKILL.md +223 -0
- package/skills/batch-cohort/references/base_template_knhanes.R +210 -0
- package/skills/batch-cohort/references/batch_template_generator.R +222 -0
- package/skills/batch-cohort/references/variable_coding_registry.md +136 -0
- package/skills/batch-cohort/skill.yml +35 -0
- package/skills/calc-sample-size/SKILL.md +491 -0
- package/skills/calc-sample-size/references/formulas.md +655 -0
- package/skills/calc-sample-size/references/observational_cohort.md +49 -0
- package/skills/calc-sample-size/skill.yml +51 -0
- package/skills/check-reporting/SKILL.md +534 -0
- package/skills/check-reporting/references/LICENSES.md +41 -0
- package/skills/check-reporting/references/checklists/AMSTAR2.md +54 -0
- package/skills/check-reporting/references/checklists/ARRIVE_2.md +234 -0
- package/skills/check-reporting/references/checklists/CARE.md +102 -0
- package/skills/check-reporting/references/checklists/CLAIM_2024.md +128 -0
- package/skills/check-reporting/references/checklists/CLEAR.md +113 -0
- package/skills/check-reporting/references/checklists/CONSORT.md +86 -0
- package/skills/check-reporting/references/checklists/COSMIN_RoB.md +136 -0
- package/skills/check-reporting/references/checklists/GRRAS.md +61 -0
- package/skills/check-reporting/references/checklists/MI_CLEAR_LLM.md +167 -0
- package/skills/check-reporting/references/checklists/MOOSE.md +85 -0
- package/skills/check-reporting/references/checklists/NOS.md +88 -0
- package/skills/check-reporting/references/checklists/PRISMA_2020.md +135 -0
- package/skills/check-reporting/references/checklists/PRISMA_DTA.md +36 -0
- package/skills/check-reporting/references/checklists/PRISMA_P.md +56 -0
- package/skills/check-reporting/references/checklists/PROBAST.md +75 -0
- package/skills/check-reporting/references/checklists/PROBAST_AI.md +130 -0
- package/skills/check-reporting/references/checklists/QUADAS2.md +77 -0
- package/skills/check-reporting/references/checklists/QUADAS_C.md +131 -0
- package/skills/check-reporting/references/checklists/ROBINS_E.md +179 -0
- package/skills/check-reporting/references/checklists/ROBINS_I.md +87 -0
- package/skills/check-reporting/references/checklists/ROBIS.md +114 -0
- package/skills/check-reporting/references/checklists/ROB_ME.md +126 -0
- package/skills/check-reporting/references/checklists/RoB2.md +79 -0
- package/skills/check-reporting/references/checklists/RoB_NMA.md +96 -0
- package/skills/check-reporting/references/checklists/SPIRIT.md +112 -0
- package/skills/check-reporting/references/checklists/SQUIRE_2.md +68 -0
- package/skills/check-reporting/references/checklists/STARD.md +129 -0
- package/skills/check-reporting/references/checklists/STARD_AI.md +211 -0
- package/skills/check-reporting/references/checklists/STROBE.md +80 -0
- package/skills/check-reporting/references/checklists/SWiM.md +33 -0
- package/skills/check-reporting/references/checklists/TRIPOD.md +157 -0
- package/skills/check-reporting/references/checklists/TRIPOD_AI.md +140 -0
- package/skills/check-reporting/references/step4c_registration_timing.md +93 -0
- package/skills/check-reporting/references/step4d_prisma_figure_audit.md +137 -0
- package/skills/check-reporting/scripts/check_checklist_exists.py +183 -0
- package/skills/check-reporting/scripts/check_checklist_version.py +168 -0
- package/skills/check-reporting/scripts/check_framework_naming.py +206 -0
- package/skills/check-reporting/scripts/check_prisma_figure.py +209 -0
- package/skills/check-reporting/scripts/prisma_cascade_check.py +274 -0
- package/skills/check-reporting/skill.yml +41 -0
- package/skills/check-reporting/tests/fixtures/framework_bad.md +8 -0
- package/skills/check-reporting/tests/fixtures/framework_clean.md +7 -0
- package/skills/check-reporting/tests/test_checklist_fail_fast.sh +77 -0
- package/skills/check-reporting/tests/test_checklist_version.sh +72 -0
- package/skills/check-reporting/tests/test_framework_naming.sh +45 -0
- package/skills/check-reporting/tests/test_prisma_cascade.sh +104 -0
- package/skills/clean-data/SKILL.md +180 -0
- package/skills/clean-data/references/cleaning_patterns.md +299 -0
- package/skills/clean-data/references/profiling_template.py +304 -0
- package/skills/clean-data/scripts/check_structural_zero.py +174 -0
- package/skills/clean-data/skill.yml +35 -0
- package/skills/clean-data/tests/fixtures/smoking.csv +8 -0
- package/skills/clean-data/tests/test_structural_zero.sh +49 -0
- package/skills/cross-national/SKILL.md +264 -0
- package/skills/cross-national/skill.yml +37 -0
- package/skills/define-variables/SKILL.md +146 -0
- package/skills/define-variables/references/common_definitions.md +190 -0
- package/skills/define-variables/skill.yml +34 -0
- package/skills/define-variables/templates/variable_operationalization.md +64 -0
- package/skills/deidentify/SKILL.md +203 -0
- package/skills/deidentify/deidentify.py +1224 -0
- package/skills/deidentify/locales/_template.json +45 -0
- package/skills/deidentify/locales/au.json +43 -0
- package/skills/deidentify/locales/ca.json +44 -0
- package/skills/deidentify/locales/cn.json +47 -0
- package/skills/deidentify/locales/de.json +48 -0
- package/skills/deidentify/locales/fr.json +48 -0
- package/skills/deidentify/locales/in.json +48 -0
- package/skills/deidentify/locales/jp.json +48 -0
- package/skills/deidentify/locales/kr.json +48 -0
- package/skills/deidentify/locales/uk.json +45 -0
- package/skills/deidentify/locales/us.json +43 -0
- package/skills/deidentify/references/date_shift_guide.md +82 -0
- package/skills/deidentify/references/hipaa_18_identifiers.md +48 -0
- package/skills/deidentify/references/korean_phi_patterns.md +135 -0
- package/skills/deidentify/skill.yml +43 -0
- package/skills/deidentify/tests/README.md +26 -0
- package/skills/deidentify/tests/test_clean.csv +16 -0
- package/skills/deidentify/tests/test_edge_cases.csv +11 -0
- package/skills/deidentify/tests/test_phi_korean.csv +11 -0
- package/skills/design-ai-benchmarking/SKILL.md +214 -0
- package/skills/design-ai-benchmarking/references/benchmark_export_schema.json +69 -0
- package/skills/design-ai-benchmarking/references/elicitation_rubric_template.md +37 -0
- package/skills/design-ai-benchmarking/skill.yml +38 -0
- package/skills/design-study/SKILL.md +298 -0
- package/skills/design-study/skill.yml +33 -0
- package/skills/fill-icmje-coi/SKILL.md +216 -0
- package/skills/fill-icmje-coi/scripts/fill_icmje_coi.py +140 -0
- package/skills/fill-icmje-coi/skill.yml +35 -0
- package/skills/fill-icmje-coi/templates/icmje_coi_seed_synthetic.docx +0 -0
- package/skills/fill-protocol/SKILL.md +248 -0
- package/skills/fill-protocol/examples/example_irb_template.yaml +53 -0
- package/skills/fill-protocol/references/best_practices.md +121 -0
- package/skills/fill-protocol/scripts/doc_to_docx.py +111 -0
- package/skills/fill-protocol/scripts/fill_form.py +611 -0
- package/skills/fill-protocol/scripts/inspect_template.py +61 -0
- package/skills/fill-protocol/setup.sh +162 -0
- package/skills/fill-protocol/skill.yml +37 -0
- package/skills/find-cohort-gap/SKILL.md +309 -0
- package/skills/find-cohort-gap/references/cohort_profile_template.md +93 -0
- package/skills/find-cohort-gap/references/onepager_template.md +84 -0
- package/skills/find-cohort-gap/references/pattern_scoring_rubric.md +169 -0
- package/skills/find-cohort-gap/references/saturation_query_templates.md +143 -0
- package/skills/find-cohort-gap/skill.yml +35 -0
- package/skills/find-journal/POLICY.md +87 -0
- package/skills/find-journal/SKILL.md +340 -0
- package/skills/find-journal/references/journal_profiles/AJNR.md +29 -0
- package/skills/find-journal/references/journal_profiles/AJR.md +30 -0
- package/skills/find-journal/references/journal_profiles/Abdominal_Radiology.md +30 -0
- package/skills/find-journal/references/journal_profiles/Academic_Radiology.md +30 -0
- package/skills/find-journal/references/journal_profiles/Annals_of_Internal_Medicine.md +33 -0
- package/skills/find-journal/references/journal_profiles/Artificial_Intelligence_in_Medicine.md +28 -0
- package/skills/find-journal/references/journal_profiles/BMC_Medicine.md +31 -0
- package/skills/find-journal/references/journal_profiles/British_Journal_of_Radiology.md +39 -0
- package/skills/find-journal/references/journal_profiles/CVIR.md +30 -0
- package/skills/find-journal/references/journal_profiles/Chest.md +39 -0
- package/skills/find-journal/references/journal_profiles/Clinical_Radiology.md +30 -0
- package/skills/find-journal/references/journal_profiles/Clinical_and_Molecular_Hepatology.md +32 -0
- package/skills/find-journal/references/journal_profiles/Diabetes_Metabolism_Journal.md +36 -0
- package/skills/find-journal/references/journal_profiles/Diagnostic_and_Interventional_Radiology.md +32 -0
- package/skills/find-journal/references/journal_profiles/Endocrinology_and_Metabolism.md +37 -0
- package/skills/find-journal/references/journal_profiles/European_Journal_of_Preventive_Cardiology.md +39 -0
- package/skills/find-journal/references/journal_profiles/European_Radiology.md +29 -0
- package/skills/find-journal/references/journal_profiles/Hepatology_Communications.md +40 -0
- package/skills/find-journal/references/journal_profiles/Hepatology_International.md +37 -0
- package/skills/find-journal/references/journal_profiles/IEEE_JBHI.md +28 -0
- package/skills/find-journal/references/journal_profiles/IEEE_TMI.md +28 -0
- package/skills/find-journal/references/journal_profiles/INSI.md +29 -0
- package/skills/find-journal/references/journal_profiles/Investigative_Radiology.md +25 -0
- package/skills/find-journal/references/journal_profiles/JACC_Advances.md +41 -0
- package/skills/find-journal/references/journal_profiles/JACC_Asia.md +30 -0
- package/skills/find-journal/references/journal_profiles/JACR.md +28 -0
- package/skills/find-journal/references/journal_profiles/JAMA.md +40 -0
- package/skills/find-journal/references/journal_profiles/JAMA_Network_Open.md +30 -0
- package/skills/find-journal/references/journal_profiles/JCSM.md +39 -0
- package/skills/find-journal/references/journal_profiles/JKMS.md +32 -0
- package/skills/find-journal/references/journal_profiles/JMIR.md +29 -0
- package/skills/find-journal/references/journal_profiles/JMIR_Medical_Education.md +29 -0
- package/skills/find-journal/references/journal_profiles/JNIS.md +35 -0
- package/skills/find-journal/references/journal_profiles/JVIR.md +31 -0
- package/skills/find-journal/references/journal_profiles/Journal_of_Biomedical_Informatics.md +29 -0
- package/skills/find-journal/references/journal_profiles/Journal_of_Clinical_Endocrinology_and_Metabolism.md +40 -0
- package/skills/find-journal/references/journal_profiles/Journal_of_Magnetic_Resonance_Imaging.md +30 -0
- package/skills/find-journal/references/journal_profiles/Journal_of_Nuclear_Medicine.md +31 -0
- package/skills/find-journal/references/journal_profiles/Journal_of_Stroke.md +32 -0
- package/skills/find-journal/references/journal_profiles/KJR.md +38 -0
- package/skills/find-journal/references/journal_profiles/Korean_Circulation_Journal.md +38 -0
- package/skills/find-journal/references/journal_profiles/Korean_Journal_of_Internal_Medicine.md +36 -0
- package/skills/find-journal/references/journal_profiles/Lancet_Diabetes_and_Endocrinology.md +40 -0
- package/skills/find-journal/references/journal_profiles/Lancet_Gastroenterology_and_Hepatology.md +49 -0
- package/skills/find-journal/references/journal_profiles/Lancet_Infectious_Diseases.md +38 -0
- package/skills/find-journal/references/journal_profiles/Lancet_Neurology.md +39 -0
- package/skills/find-journal/references/journal_profiles/Lancet_Oncology.md +40 -0
- package/skills/find-journal/references/journal_profiles/Lancet_Psychiatry.md +38 -0
- package/skills/find-journal/references/journal_profiles/Lancet_Public_Health.md +30 -0
- package/skills/find-journal/references/journal_profiles/Lancet_Respiratory_Medicine.md +39 -0
- package/skills/find-journal/references/journal_profiles/Liver_International.md +33 -0
- package/skills/find-journal/references/journal_profiles/Medical_Image_Analysis.md +28 -0
- package/skills/find-journal/references/journal_profiles/NEJM.md +33 -0
- package/skills/find-journal/references/journal_profiles/Nature_Machine_Intelligence.md +31 -0
- package/skills/find-journal/references/journal_profiles/Nature_Medicine.md +39 -0
- package/skills/find-journal/references/journal_profiles/Neuroradiology.md +31 -0
- package/skills/find-journal/references/journal_profiles/Nutrition_Metabolism_and_Cardiovascular_Diseases.md +39 -0
- package/skills/find-journal/references/journal_profiles/PLOS_Medicine.md +32 -0
- package/skills/find-journal/references/journal_profiles/RYAI.md +28 -0
- package/skills/find-journal/references/journal_profiles/Radiology.md +29 -0
- package/skills/find-journal/references/journal_profiles/Skeletal_Radiology.md +31 -0
- package/skills/find-journal/references/journal_profiles/Stroke.md +37 -0
- package/skills/find-journal/references/journal_profiles/The_BMJ.md +31 -0
- package/skills/find-journal/references/journal_profiles/The_Lancet.md +31 -0
- package/skills/find-journal/references/journal_profiles/The_Lancet_Digital_Health.md +29 -0
- package/skills/find-journal/references/journal_profiles/World_Journal_of_Hepatology.md +53 -0
- package/skills/find-journal/references/journal_profiles/npj_Digital_Medicine.md +29 -0
- package/skills/find-journal/skill.yml +34 -0
- package/skills/fulltext-retrieval/SKILL.md +174 -0
- package/skills/fulltext-retrieval/fetch_oa.py +433 -0
- package/skills/fulltext-retrieval/pdf_to_md.py +160 -0
- package/skills/fulltext-retrieval/skill.yml +41 -0
- package/skills/generate-codebook/SKILL.md +155 -0
- package/skills/generate-codebook/references/codebook_schema.md +76 -0
- package/skills/generate-codebook/scripts/generate_codebook.py +278 -0
- package/skills/generate-codebook/skill.yml +35 -0
- package/skills/generate-codebook/tests/test_generate_codebook.sh +76 -0
- package/skills/grant-builder/SKILL.md +251 -0
- package/skills/grant-builder/skill.yml +34 -0
- package/skills/humanize/SKILL.md +251 -0
- package/skills/humanize/references/ai_patterns.md +571 -0
- package/skills/humanize/skill.yml +33 -0
- package/skills/intake-project/SKILL.md +264 -0
- package/skills/intake-project/skill.yml +34 -0
- package/skills/lit-sync/SKILL.md +448 -0
- package/skills/lit-sync/references/locale/ko/note_templates.md +110 -0
- package/skills/lit-sync/skill.yml +52 -0
- package/skills/lit-sync/tests/test_poll_logic.sh +92 -0
- package/skills/ma-scout/SKILL.md +640 -0
- package/skills/ma-scout/references/project_readme_template.md +95 -0
- package/skills/ma-scout/references/project_readme_template_ko.md +82 -0
- package/skills/ma-scout/skill.yml +33 -0
- package/skills/make-figures/SKILL.md +957 -0
- package/skills/make-figures/references/critic_rubrics/data_plot.md +166 -0
- package/skills/make-figures/references/critic_rubrics/flow_diagram.md +169 -0
- package/skills/make-figures/references/design_principles.md +181 -0
- package/skills/make-figures/references/exemplar_diagrams/README.md +65 -0
- package/skills/make-figures/references/exemplar_diagrams/consort/README.md +15 -0
- package/skills/make-figures/references/exemplar_diagrams/consort/template_input.yaml +37 -0
- package/skills/make-figures/references/exemplar_diagrams/consort/template_output.pdf +0 -0
- package/skills/make-figures/references/exemplar_diagrams/consort/template_output.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/consort/template_output_600.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/other/other_02.meta.yaml +4 -0
- package/skills/make-figures/references/exemplar_diagrams/other/other_02.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/other/other_02_why.md +13 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/README.md +15 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_01.meta.yaml +4 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_01.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_01_why.md +13 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_03.meta.yaml +4 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_03.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_03_why.md +13 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_04.meta.yaml +4 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_04.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_04_why.md +13 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_05.meta.yaml +4 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_05.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_05_why.md +13 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_06.meta.yaml +4 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_06.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_06_why.md +13 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_07.meta.yaml +4 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_07.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_07_why.md +13 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_08.meta.yaml +4 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_08.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_08_why.md +13 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_09.meta.yaml +4 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_09.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_09_why.md +13 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_10.meta.yaml +4 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_10.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_10_why.md +13 -0
- package/skills/make-figures/references/exemplar_diagrams/prisma/README.md +15 -0
- package/skills/make-figures/references/exemplar_diagrams/prisma/template_input.yaml +47 -0
- package/skills/make-figures/references/exemplar_diagrams/prisma/template_output.pdf +0 -0
- package/skills/make-figures/references/exemplar_diagrams/prisma/template_output.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/prisma/template_output_600.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/stard/README.md +15 -0
- package/skills/make-figures/references/exemplar_diagrams/stard/template_input.yaml +40 -0
- package/skills/make-figures/references/exemplar_diagrams/stard/template_output.pdf +0 -0
- package/skills/make-figures/references/exemplar_diagrams/stard/template_output.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/stard/template_output_600.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/strobe/template_input.yaml +43 -0
- package/skills/make-figures/references/exemplar_diagrams/strobe/template_input_pptx.yaml +43 -0
- package/skills/make-figures/references/exemplar_diagrams/strobe/template_output.pdf +0 -0
- package/skills/make-figures/references/exemplar_diagrams/strobe/template_output.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/strobe/template_output.pptx +0 -0
- package/skills/make-figures/references/exemplar_diagrams/strobe/template_output_600.png +0 -0
- package/skills/make-figures/references/figure_specs.md +291 -0
- package/skills/make-figures/references/flow_diagram_lessons.md +164 -0
- package/skills/make-figures/references/jacc_central_illustration_principles.md +91 -0
- package/skills/make-figures/references/medical_illustration_sources.md +98 -0
- package/skills/make-figures/references/pipeline_concepts_medical_ai.md +240 -0
- package/skills/make-figures/references/reporting_guideline_figure_map.md +104 -0
- package/skills/make-figures/references/visual_abstract_templates/european_radiology.pptx +0 -0
- package/skills/make-figures/references/visual_abstract_templates/jacc_central_illustration.pptx +0 -0
- package/skills/make-figures/references/visual_abstract_templates/medsci_default.pptx +0 -0
- package/skills/make-figures/references/visual_abstract_templates/template_guide.md +114 -0
- package/skills/make-figures/scripts/build_jacc_template.py +77 -0
- package/skills/make-figures/scripts/build_prisma2020_template.py +371 -0
- package/skills/make-figures/scripts/build_strobe_template.py +351 -0
- package/skills/make-figures/scripts/critic_figure.py +264 -0
- package/skills/make-figures/scripts/derive_figure_legend_counts.py +138 -0
- package/skills/make-figures/scripts/extract_exemplar_from_pdf.py +186 -0
- package/skills/make-figures/scripts/fetch_official_templates.sh +88 -0
- package/skills/make-figures/scripts/fill_prisma_template.py +142 -0
- package/skills/make-figures/scripts/generate_flow_diagram.R +133 -0
- package/skills/make-figures/scripts/generate_image.py +99 -0
- package/skills/make-figures/scripts/generate_visual_abstract.py +438 -0
- package/skills/make-figures/scripts/validate_pptx_mac_compat.py +233 -0
- package/skills/make-figures/skill.yml +52 -0
- package/skills/make-figures/templates/official/NOTES.md +62 -0
- package/skills/make-figures/templates/official/consort2010/CONSORT_2025_editable_checklist.docx +0 -0
- package/skills/make-figures/templates/official/consort2010/CONSORT_2025_flow_diagram.docx +0 -0
- package/skills/make-figures/templates/official/prisma2020/PRISMA_2020_flow_new_v1.pptx +0 -0
- package/skills/make-figures/templates/official/prisma2020/PRISMA_2020_flow_new_v2.pptx +0 -0
- package/skills/make-figures/templates/official/prisma2020/PRISMA_2020_flow_updated_v2.pptx +0 -0
- package/skills/make-figures/templates/official/spirit2013/SPIRIT_2025_editable_checklist.docx +0 -0
- package/skills/make-figures/templates/official/spirit2013/SPIRIT_2025_participant_timeline.docx +0 -0
- package/skills/make-figures/templates/official/stard2015/STARD_2015_checklist.docx +0 -0
- package/skills/make-figures/templates/official/stard2015/STARD_2015_flow_diagram.pdf +0 -0
- package/skills/make-figures/tests/fixtures/figure1_flow.yaml +8 -0
- package/skills/make-figures/tests/fixtures/manuscript_ok.md +9 -0
- package/skills/make-figures/tests/fixtures/manuscript_stale.md +4 -0
- package/skills/make-figures/tests/test_legend_reconcile.sh +36 -0
- package/skills/manage-project/SKILL.md +358 -0
- package/skills/manage-project/references/pre_submission_checklist.md +53 -0
- package/skills/manage-project/references/project_state_template.json +37 -0
- package/skills/manage-project/references/scaffold_templates.md +118 -0
- package/skills/manage-project/references/status_output_format.md +44 -0
- package/skills/manage-project/references/timeline_example.md +20 -0
- package/skills/manage-project/skill.yml +36 -0
- package/skills/manage-project/templates/SSOT.yaml.template +41 -0
- package/skills/manage-refs/LICENSE.zotero-mcp +21 -0
- package/skills/manage-refs/NOTICE.md +29 -0
- package/skills/manage-refs/SKILL.md +289 -0
- package/skills/manage-refs/citation_styles/README.md +40 -0
- package/skills/manage-refs/citation_styles/american-journal-of-roentgenology.csl +211 -0
- package/skills/manage-refs/citation_styles/cardiovascular-and-interventional-radiology.csl +19 -0
- package/skills/manage-refs/citation_styles/european-radiology.csl +19 -0
- package/skills/manage-refs/citation_styles/journal-of-cachexia-sarcopenia-and-muscle.csl +150 -0
- package/skills/manage-refs/citation_styles/journal-of-korean-medical-science-strict.csl +533 -0
- package/skills/manage-refs/citation_styles/journal-of-korean-medical-science.csl +16 -0
- package/skills/manage-refs/citation_styles/korean-journal-of-radiology.csl +155 -0
- package/skills/manage-refs/citation_styles/nature.csl +189 -0
- package/skills/manage-refs/citation_styles/nlm-citation-sequence.csl +535 -0
- package/skills/manage-refs/citation_styles/radiology.csl +228 -0
- package/skills/manage-refs/citation_styles/springer-basic-brackets.csl +187 -0
- package/skills/manage-refs/citation_styles/springer-vancouver-brackets.csl +276 -0
- package/skills/manage-refs/citation_styles/vancouver-superscript.csl +536 -0
- package/skills/manage-refs/citation_styles/vancouver.csl +535 -0
- package/skills/manage-refs/references/REFERENCE_STYLE_SPECS.md +59 -0
- package/skills/manage-refs/references/check_xref_symptoms.md +35 -0
- package/skills/manage-refs/scripts/_vendor_citation_writer.py +600 -0
- package/skills/manage-refs/scripts/check_citation_keys.py +112 -0
- package/skills/manage-refs/scripts/check_csl_render.py +102 -0
- package/skills/manage-refs/scripts/check_xref.py +633 -0
- package/skills/manage-refs/scripts/fill_journal_abbrev.py +104 -0
- package/skills/manage-refs/scripts/inject_zotero_cwyw.py +133 -0
- package/skills/manage-refs/scripts/md_marker_convert.py +193 -0
- package/skills/manage-refs/scripts/pre_submission_gate.sh +238 -0
- package/skills/manage-refs/scripts/render_pandoc.sh +88 -0
- package/skills/manage-refs/skill.yml +70 -0
- package/skills/manage-refs/tests/fixtures/pre_submission_gate/README.md +32 -0
- package/skills/manage-refs/tests/fixtures/pre_submission_gate/manuscript.md +10 -0
- package/skills/manage-refs/tests/fixtures/pre_submission_gate/refs.bib +34 -0
- package/skills/manage-refs/tests/fixtures/pre_submission_gate/run.sh +117 -0
- package/skills/manage-refs/tests/test_vN_docx_check.sh +145 -0
- package/skills/meta-analysis/SKILL.md +739 -0
- package/skills/meta-analysis/references/LICENSES.md +21 -0
- package/skills/meta-analysis/references/PROSPERO_template.md +221 -0
- package/skills/meta-analysis/references/ai_pre_screening_template.py +245 -0
- package/skills/meta-analysis/references/checklists/JBI_Case_Series.md +45 -0
- package/skills/meta-analysis/references/checklists/NOS.md +88 -0
- package/skills/meta-analysis/references/checklists/PRISMA_DTA.md +36 -0
- package/skills/meta-analysis/references/checklists/PROBAST.md +75 -0
- package/skills/meta-analysis/references/checklists/QUADAS2.md +77 -0
- package/skills/meta-analysis/references/checklists/ROBINS_I.md +87 -0
- package/skills/meta-analysis/references/checklists/RoB2.md +79 -0
- package/skills/meta-analysis/references/data_integrity_checklist.md +57 -0
- package/skills/meta-analysis/references/icmje_coi_guide.md +181 -0
- package/skills/meta-analysis/references/phase10_recovery.md +136 -0
- package/skills/meta-analysis/references/phase4_km_composite.md +58 -0
- package/skills/meta-analysis/references/phase6_statistical_synthesis.md +148 -0
- package/skills/meta-analysis/references/phase9_circulation.md +84 -0
- package/skills/meta-analysis/references/post_submission_release_ops.md +41 -0
- package/skills/meta-analysis/references/r_templates.md +132 -0
- package/skills/meta-analysis/references/review_orchestration.md +40 -0
- package/skills/meta-analysis/references/submission_package_drift.md +71 -0
- package/skills/meta-analysis/scripts/check_pool_consistency.py +201 -0
- package/skills/meta-analysis/scripts/cohort_overlap_check.py +242 -0
- package/skills/meta-analysis/scripts/dta_extraction_qc.py +137 -0
- package/skills/meta-analysis/scripts/screening_reconcile.py +160 -0
- package/skills/meta-analysis/skill.yml +47 -0
- package/skills/meta-analysis/templates/FINAL_POOL_LOCK.yaml.template +70 -0
- package/skills/meta-analysis/templates/extraction_form_v2.md +129 -0
- package/skills/meta-analysis/templates/supplementary_8file_checklist.md +94 -0
- package/skills/meta-analysis/tests/test_pool_consistency.sh +123 -0
- package/skills/orchestrate/SKILL.md +501 -0
- package/skills/orchestrate/references/dialogue_nodes.md +196 -0
- package/skills/orchestrate/references/report_template.md +109 -0
- package/skills/orchestrate/references/report_template_ko.md +88 -0
- package/skills/orchestrate/skill.yml +44 -0
- package/skills/peer-review/SKILL.md +381 -0
- package/skills/peer-review/references/aczel_2021_reviewer2_patterns.md +88 -0
- package/skills/peer-review/references/domain-probes/ai_overclaiming.md +47 -0
- package/skills/peer-review/references/domain-probes/narrative_review.md +44 -0
- package/skills/peer-review/references/domain-probes/observational_confounding.md +48 -0
- package/skills/peer-review/references/domain-probes/radiomics.md +38 -0
- package/skills/peer-review/references/domain-probes/sr_ma.md +87 -0
- package/skills/peer-review/references/domain-probes/survival_prognostic.md +68 -0
- package/skills/peer-review/references/exemplar_reviews/README.md +43 -0
- package/skills/peer-review/references/exemplar_reviews/ai_overclaiming.md +47 -0
- package/skills/peer-review/references/exemplar_reviews/calibration_missing.md +44 -0
- package/skills/peer-review/references/exemplar_reviews/data_leakage.md +48 -0
- package/skills/peer-review/references/exemplar_reviews/reference_standard_validity.md +45 -0
- package/skills/peer-review/references/narrative_review_audit.md +67 -0
- package/skills/peer-review/references/reviewer_calibration/README.md +34 -0
- package/skills/peer-review/references/reviewer_calibration/compliance_floor.md +52 -0
- package/skills/peer-review/references/reviewer_profiles/AJR.md +82 -0
- package/skills/peer-review/references/reviewer_profiles/EURE.md +64 -0
- package/skills/peer-review/references/reviewer_profiles/INSI.md +57 -0
- package/skills/peer-review/references/reviewer_profiles/KJR.md +100 -0
- package/skills/peer-review/references/reviewer_profiles/README.md +32 -0
- package/skills/peer-review/references/reviewer_profiles/RYAI.md +86 -0
- package/skills/peer-review/skill.yml +39 -0
- package/skills/present-paper/SKILL.md +675 -0
- package/skills/present-paper/references/critic_rubrics/slide.md +155 -0
- package/skills/present-paper/references/generate_pptx_templates.py +604 -0
- package/skills/present-paper/references/medical_presentation_templates.md +277 -0
- package/skills/present-paper/references/slide_design_principles.md +202 -0
- package/skills/present-paper/references/slide_visual_styles/nature_lancet.md +168 -0
- package/skills/present-paper/references/workflow-checklist.md +109 -0
- package/skills/present-paper/scripts/extract_pdf_figures.py +243 -0
- package/skills/present-paper/scripts/inject_pronunciation_notes.py +178 -0
- package/skills/present-paper/scripts/inject_speaker_notes.py +133 -0
- package/skills/present-paper/scripts/strip_notes_for_sharing.py +140 -0
- package/skills/present-paper/scripts/trim_caption.py +271 -0
- package/skills/present-paper/skill.yml +41 -0
- package/skills/present-paper/templates/build_pptx_nature_lancet.py +688 -0
- package/skills/publish-skill/SKILL.md +370 -0
- package/skills/publish-skill/references/license-compatibility-matrix.md +132 -0
- package/skills/publish-skill/references/pii-patterns.md +130 -0
- package/skills/publish-skill/scripts/audit_skill.sh +278 -0
- package/skills/publish-skill/skill.yml +35 -0
- package/skills/render-pdf-doc/SKILL.md +146 -0
- package/skills/render-pdf-doc/references/known_pitfalls.md +53 -0
- package/skills/render-pdf-doc/references/pandoc_korean_cheatsheet.md +77 -0
- package/skills/render-pdf-doc/scripts/check_deps.sh +42 -0
- package/skills/render-pdf-doc/scripts/infer_colwidths.py +164 -0
- package/skills/render-pdf-doc/scripts/render_pdf.sh +98 -0
- package/skills/render-pdf-doc/skill.yml +57 -0
- package/skills/render-pdf-doc/templates/anchor-doc.md +27 -0
- package/skills/render-pdf-doc/templates/anchor-doc_ko.md +25 -0
- package/skills/render-pdf-doc/templates/briefing-handout.md +33 -0
- package/skills/render-pdf-doc/templates/briefing-handout_ko.md +31 -0
- package/skills/render-pdf-doc/templates/proposal-cover.md +33 -0
- package/skills/render-pdf-doc/templates/proposal-cover_ko.md +31 -0
- package/skills/render-pdf-doc/templates/reference-table.md +22 -0
- package/skills/render-pdf-doc/templates/reference-table_ko.md +20 -0
- package/skills/replicate-study/SKILL.md +150 -0
- package/skills/replicate-study/references/harmonization_3country.csv +47 -0
- package/skills/replicate-study/references/harmonization_knhanes_nhanes.csv +68 -0
- package/skills/replicate-study/references/methodology_extraction_template.md +134 -0
- package/skills/replicate-study/skill.yml +37 -0
- package/skills/review-paper/SKILL.md +104 -0
- package/skills/review-paper/references/macro_skeleton.md +6 -0
- package/skills/review-paper/skill.yml +25 -0
- package/skills/revise/SKILL.md +515 -0
- package/skills/revise/references/r2r_voice.md +346 -0
- package/skills/revise/skill.yml +43 -0
- package/skills/search-lit/SKILL.md +443 -0
- package/skills/search-lit/references/parse_pubmed.py +326 -0
- package/skills/search-lit/references/pubmed_eutils.sh +111 -0
- package/skills/search-lit/skill.yml +46 -0
- package/skills/self-review/SKILL.md +1045 -0
- package/skills/self-review/references/domain-probes/ai_overclaiming.md +47 -0
- package/skills/self-review/references/domain-probes/narrative_review.md +44 -0
- package/skills/self-review/references/domain-probes/observational_confounding.md +48 -0
- package/skills/self-review/references/domain-probes/radiomics.md +38 -0
- package/skills/self-review/references/domain-probes/sr_ma.md +87 -0
- package/skills/self-review/references/domain-probes/survival_prognostic.md +68 -0
- package/skills/self-review/references/exemplar_findings/README.md +43 -0
- package/skills/self-review/references/exemplar_findings/cohort_arithmetic_mismatch.md +35 -0
- package/skills/self-review/references/exemplar_findings/estimand_drift_posthoc_primary.md +39 -0
- package/skills/self-review/references/exemplar_findings/scope_overreach_cross_sectional.md +35 -0
- package/skills/self-review/references/exemplar_findings/unadjusted_confounder.md +36 -0
- package/skills/self-review/references/panel_review_template.md +177 -0
- package/skills/self-review/scripts/check_artifact_coverage.py +301 -0
- package/skills/self-review/scripts/check_claim_artifact.py +248 -0
- package/skills/self-review/scripts/check_classical_style.py +185 -0
- package/skills/self-review/scripts/check_cohort_arithmetic.py +481 -0
- package/skills/self-review/scripts/check_confounding_completeness.py +287 -0
- package/skills/self-review/scripts/check_panel_diversity.py +336 -0
- package/skills/self-review/scripts/check_reference_adequacy.py +392 -0
- package/skills/self-review/scripts/check_reviewer_team_consistency.py +412 -0
- package/skills/self-review/scripts/check_scope_coherence.py +177 -0
- package/skills/self-review/skill.yml +47 -0
- package/skills/self-review/tests/fixtures/claim_manuscript.md +17 -0
- package/skills/self-review/tests/fixtures/claim_prereg.md +6 -0
- package/skills/self-review/tests/fixtures/cohort_bad.md +21 -0
- package/skills/self-review/tests/fixtures/cohort_clean.md +21 -0
- package/skills/self-review/tests/fixtures/cohort_partition.csv +5 -0
- package/skills/self-review/tests/fixtures/coverage_analysis/31_delong_nested_added_value.csv +3 -0
- package/skills/self-review/tests/fixtures/coverage_analysis/table1_demographics.csv +3 -0
- package/skills/self-review/tests/fixtures/coverage_clean.md +13 -0
- package/skills/self-review/tests/fixtures/coverage_manuscript.md +11 -0
- package/skills/self-review/tests/fixtures/panel_collapse.json +27 -0
- package/skills/self-review/tests/fixtures/panel_good.json +32 -0
- package/skills/self-review/tests/fixtures/panel_monoculture.json +32 -0
- package/skills/self-review/tests/fixtures/refadeq_letter.md +13 -0
- package/skills/self-review/tests/fixtures/refadeq_original_fixed.md +42 -0
- package/skills/self-review/tests/fixtures/refadeq_original_uncited.md +40 -0
- package/skills/self-review/tests/fixtures/scope_bad.md +9 -0
- package/skills/self-review/tests/fixtures/scope_clean.md +8 -0
- package/skills/self-review/tests/fixtures/scope_surrogate.md +8 -0
- package/skills/self-review/tests/fixtures/style_bad.md +13 -0
- package/skills/self-review/tests/fixtures/style_clean.md +11 -0
- package/skills/self-review/tests/fixtures/table1_by_exposure.csv +11 -0
- package/skills/self-review/tests/test_artifact_coverage.sh +44 -0
- package/skills/self-review/tests/test_claim_artifact.sh +50 -0
- package/skills/self-review/tests/test_classical_style.sh +44 -0
- package/skills/self-review/tests/test_cohort_arithmetic.sh +49 -0
- package/skills/self-review/tests/test_confounding_completeness.sh +66 -0
- package/skills/self-review/tests/test_panel_diversity.sh +55 -0
- package/skills/self-review/tests/test_panel_mode.sh +69 -0
- package/skills/self-review/tests/test_reference_adequacy.sh +68 -0
- package/skills/self-review/tests/test_reviewer_team_consistency.sh +138 -0
- package/skills/self-review/tests/test_scope_coherence.sh +46 -0
- package/skills/setup-medsci/SKILL.md +110 -0
- package/skills/setup-medsci/references/setup-checklist.md +51 -0
- package/skills/setup-medsci/skill.yml +30 -0
- package/skills/sync-submission/SKILL.md +382 -0
- package/skills/sync-submission/scripts/author_registry_example.yaml +36 -0
- package/skills/sync-submission/scripts/blind_sweep.py +203 -0
- package/skills/sync-submission/scripts/check_asset_anonymization.py +300 -0
- package/skills/sync-submission/scripts/check_cross_artifact_stale.py +211 -0
- package/skills/sync-submission/scripts/cover_letter_drift_check.py +451 -0
- package/skills/sync-submission/scripts/cross_document_n_check.py +486 -0
- package/skills/sync-submission/scripts/detect_copy_divergence.py +136 -0
- package/skills/sync-submission/scripts/preflight_gate.py +458 -0
- package/skills/sync-submission/scripts/scope_drift_check.py +362 -0
- package/skills/sync-submission/scripts/sync_submission.py +169 -0
- package/skills/sync-submission/skill.yml +43 -0
- package/skills/sync-submission/tests/fixtures/copy_ok.md +5 -0
- package/skills/sync-submission/tests/fixtures/copy_stale.md +5 -0
- package/skills/sync-submission/tests/fixtures/ssot.md +5 -0
- package/skills/sync-submission/tests/test_asset_anonymization.sh +99 -0
- package/skills/sync-submission/tests/test_copy_divergence.sh +44 -0
- package/skills/sync-submission/tests/test_cross_artifact_stale.sh +80 -0
- package/skills/sync-submission/tests/test_cross_document_n.sh +132 -0
- package/skills/sync-submission/tests/test_preflight_gate.sh +112 -0
- package/skills/sync-submission/tests/test_scope_drift.sh +122 -0
- package/skills/sync-submission/tests/test_vN_docx_assertion.sh +51 -0
- package/skills/verify-refs/SKILL.md +177 -0
- package/skills/verify-refs/references/manual_checkpoint_guide.md +100 -0
- package/skills/verify-refs/scripts/verify_cli.sh +62 -0
- package/skills/verify-refs/scripts/verify_refs.py +782 -0
- package/skills/verify-refs/skill.yml +44 -0
- package/skills/verify-refs/tests/fixtures/pagination_placeholder.bib +17 -0
- package/skills/verify-refs/tests/test_pagination_placeholder.sh +42 -0
- package/skills/version-dataset/SKILL.md +143 -0
- package/skills/version-dataset/references/manifest_schema.md +72 -0
- package/skills/version-dataset/scripts/version_dataset.py +242 -0
- package/skills/version-dataset/skill.yml +35 -0
- package/skills/version-dataset/tests/test_version_dataset.sh +52 -0
- package/skills/write-paper/SKILL.md +1148 -0
- package/skills/write-paper/references/exemplar_methods/README.md +38 -0
- package/skills/write-paper/references/exemplar_methods/ai_validation_tripod_claim.md +47 -0
- package/skills/write-paper/references/exemplar_methods/diagnostic_accuracy_stard.md +50 -0
- package/skills/write-paper/references/exemplar_methods/observational_cohort_strobe.md +43 -0
- package/skills/write-paper/references/journal_profiles/AJNR.md +185 -0
- package/skills/write-paper/references/journal_profiles/AJR.md +149 -0
- package/skills/write-paper/references/journal_profiles/Abdominal_Radiology.md +139 -0
- package/skills/write-paper/references/journal_profiles/Academic_Radiology.md +90 -0
- package/skills/write-paper/references/journal_profiles/Annals_of_Internal_Medicine.md +150 -0
- package/skills/write-paper/references/journal_profiles/Artificial_Intelligence_in_Medicine.md +82 -0
- package/skills/write-paper/references/journal_profiles/British_Journal_of_Radiology.md +161 -0
- package/skills/write-paper/references/journal_profiles/CVIR.md +157 -0
- package/skills/write-paper/references/journal_profiles/Chest.md +270 -0
- package/skills/write-paper/references/journal_profiles/Clinical_Radiology.md +160 -0
- package/skills/write-paper/references/journal_profiles/Clinical_and_Molecular_Hepatology.md +147 -0
- package/skills/write-paper/references/journal_profiles/Diabetes_Metabolism_Journal.md +163 -0
- package/skills/write-paper/references/journal_profiles/Diagnostic_and_Interventional_Radiology.md +216 -0
- package/skills/write-paper/references/journal_profiles/Endocrinology_and_Metabolism.md +167 -0
- package/skills/write-paper/references/journal_profiles/European_Journal_of_Preventive_Cardiology.md +192 -0
- package/skills/write-paper/references/journal_profiles/European_Radiology.md +159 -0
- package/skills/write-paper/references/journal_profiles/Hepatology_Communications.md +110 -0
- package/skills/write-paper/references/journal_profiles/Hepatology_International.md +106 -0
- package/skills/write-paper/references/journal_profiles/IEEE_TMI.md +180 -0
- package/skills/write-paper/references/journal_profiles/INSI.md +163 -0
- package/skills/write-paper/references/journal_profiles/Investigative_Radiology.md +86 -0
- package/skills/write-paper/references/journal_profiles/JACC_Advances.md +197 -0
- package/skills/write-paper/references/journal_profiles/JACC_Asia.md +168 -0
- package/skills/write-paper/references/journal_profiles/JACR.md +87 -0
- package/skills/write-paper/references/journal_profiles/JAMA.md +188 -0
- package/skills/write-paper/references/journal_profiles/JAMA_Network_Open.md +170 -0
- package/skills/write-paper/references/journal_profiles/JCSM.md +266 -0
- package/skills/write-paper/references/journal_profiles/JKMS.md +201 -0
- package/skills/write-paper/references/journal_profiles/JMIR.md +88 -0
- package/skills/write-paper/references/journal_profiles/JMIR_Medical_Education.md +86 -0
- package/skills/write-paper/references/journal_profiles/JNIS.md +227 -0
- package/skills/write-paper/references/journal_profiles/JVIR.md +158 -0
- package/skills/write-paper/references/journal_profiles/Journal_of_Clinical_Endocrinology_and_Metabolism.md +191 -0
- package/skills/write-paper/references/journal_profiles/Journal_of_Stroke.md +176 -0
- package/skills/write-paper/references/journal_profiles/KJR.md +185 -0
- package/skills/write-paper/references/journal_profiles/Korean_Circulation_Journal.md +184 -0
- package/skills/write-paper/references/journal_profiles/Korean_Journal_of_Internal_Medicine.md +178 -0
- package/skills/write-paper/references/journal_profiles/Lancet_Gastroenterology_and_Hepatology.md +127 -0
- package/skills/write-paper/references/journal_profiles/Liver_International.md +165 -0
- package/skills/write-paper/references/journal_profiles/Medical_Image_Analysis.md +147 -0
- package/skills/write-paper/references/journal_profiles/NEJM.md +147 -0
- package/skills/write-paper/references/journal_profiles/Nature_Medicine.md +181 -0
- package/skills/write-paper/references/journal_profiles/Neuroradiology.md +151 -0
- package/skills/write-paper/references/journal_profiles/Nutrition_Metabolism_and_Cardiovascular_Diseases.md +184 -0
- package/skills/write-paper/references/journal_profiles/PLOS_Medicine.md +166 -0
- package/skills/write-paper/references/journal_profiles/RYAI.md +124 -0
- package/skills/write-paper/references/journal_profiles/Radiology.md +173 -0
- package/skills/write-paper/references/journal_profiles/Skeletal_Radiology.md +135 -0
- package/skills/write-paper/references/journal_profiles/Stroke.md +210 -0
- package/skills/write-paper/references/journal_profiles/The_BMJ.md +121 -0
- package/skills/write-paper/references/journal_profiles/The_Lancet.md +112 -0
- package/skills/write-paper/references/journal_profiles/The_Lancet_Digital_Health.md +104 -0
- package/skills/write-paper/references/journal_profiles/World_Journal_of_Hepatology.md +106 -0
- package/skills/write-paper/references/journal_profiles/npj_Digital_Medicine.md +93 -0
- package/skills/write-paper/references/paper_types/ai_validation.md +270 -0
- package/skills/write-paper/references/paper_types/animal_study.md +194 -0
- package/skills/write-paper/references/paper_types/case_report.md +237 -0
- package/skills/write-paper/references/paper_types/cross_national.md +328 -0
- package/skills/write-paper/references/paper_types/letter.md +127 -0
- package/skills/write-paper/references/paper_types/meta_analysis.md +181 -0
- package/skills/write-paper/references/paper_types/nhis_cohort.md +297 -0
- package/skills/write-paper/references/paper_types/original_article.md +221 -0
- package/skills/write-paper/references/paper_types/technical_note.md +131 -0
- package/skills/write-paper/references/section_guides/discussion.md +155 -0
- package/skills/write-paper/references/section_guides/introduction.md +108 -0
- package/skills/write-paper/references/section_guides/methods.md +144 -0
- package/skills/write-paper/references/section_guides/results.md +113 -0
- package/skills/write-paper/references/section_guides/step7_1_classical_qc.md +67 -0
- package/skills/write-paper/references/section_guides/step7_4a_audit_recovery.md +74 -0
- package/skills/write-paper/references/section_guides/title_abstract.md +123 -0
- package/skills/write-paper/references/section_templates/methods_statistical.md +147 -0
- package/skills/write-paper/scripts/check_placeholders.py +182 -0
- package/skills/write-paper/skill.yml +48 -0
- package/skills/write-paper/tests/test_placeholders.sh +107 -0
- package/skills/write-protocol/SKILL.md +243 -0
- package/skills/write-protocol/references/ethics_checklist.md +150 -0
- package/skills/write-protocol/references/protocol_template.md +304 -0
- package/skills/write-protocol/skill.yml +34 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Flag unresolved authoring markers left in a manuscript before submission.
|
|
3
|
+
|
|
4
|
+
Drafting leaves behind placeholder/marker debris that must never reach a frozen
|
|
5
|
+
submission package. Until now these were caught only by grep instructions in
|
|
6
|
+
SKILL.md prose (write-paper Phase 0/7, self-review Phase 2.5c); this promotes the
|
|
7
|
+
grep to a deterministic gate so a single pre-flight run can halt on them.
|
|
8
|
+
|
|
9
|
+
Detected finding types:
|
|
10
|
+
new_marker (blocker) an unresolved [@NEW:topic] citation
|
|
11
|
+
placeholder — never legitimate in a final manuscript.
|
|
12
|
+
ai_disclosure_placeholder (blocker) a literal [version]/[date]/[tool]/[model]/
|
|
13
|
+
[channel] token in an AI-use disclosure (the FLAIR/
|
|
14
|
+
TRIPOD+AI tokens were never filled in).
|
|
15
|
+
generic_todo (blocker) a TODO / FIXME / TBD / XXX authoring marker
|
|
16
|
+
outside a fenced code block.
|
|
17
|
+
template_url (blocker) a template/unfilled URL — example.com,
|
|
18
|
+
doi.org/XXXX, an empty markdown link ]( ), or a
|
|
19
|
+
literal [URL]/[link] placeholder.
|
|
20
|
+
bare_numeric_cite (warn) a bare [N] or [N-N] citation marker. WARN, not
|
|
21
|
+
blocker, because Vancouver in-text citations are
|
|
22
|
+
legitimately [N]; in a pandoc [@key] draft it is an
|
|
23
|
+
unresolved placeholder, so write-paper Phase 0 /
|
|
24
|
+
self-review escalate it with --strict.
|
|
25
|
+
|
|
26
|
+
Guards against false positives: fenced code blocks (``` or ~~~) are skipped
|
|
27
|
+
entirely, and a References/Bibliography section is skipped for bare_numeric_cite
|
|
28
|
+
(numbered reference lists legitimately read "[1] Smith J ...").
|
|
29
|
+
|
|
30
|
+
INPUTS
|
|
31
|
+
--manuscript manuscript markdown/text (required).
|
|
32
|
+
--strict also exit 1 on warn-severity findings (bare_numeric_cite).
|
|
33
|
+
|
|
34
|
+
OUTPUT
|
|
35
|
+
A findings table (stdout) and, with --out, a JSON artifact:
|
|
36
|
+
{schema_version, source, summary:{blocker,warn}, findings[...], submission_safe}
|
|
37
|
+
submission_safe is true iff there are no blocker-severity findings.
|
|
38
|
+
|
|
39
|
+
Stdlib-only (json / re / argparse / pathlib). Exit codes: 0 clean (no blocker, and
|
|
40
|
+
no warn under --strict), 1 blocker found (or warn under --strict), 2 input/usage error.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
from __future__ import annotations
|
|
44
|
+
|
|
45
|
+
import argparse
|
|
46
|
+
import json
|
|
47
|
+
import re
|
|
48
|
+
import sys
|
|
49
|
+
from pathlib import Path
|
|
50
|
+
|
|
51
|
+
# --- finding patterns --------------------------------------------------------
|
|
52
|
+
# Blocker patterns: each match is an unambiguous unresolved authoring marker.
|
|
53
|
+
NEW_MARKER = re.compile(r"\[@NEW:[^\]]*\]", re.IGNORECASE)
|
|
54
|
+
AI_DISCLOSURE_PLACEHOLDER = re.compile(r"\[(?:version|date|tool|model|channel)\]", re.IGNORECASE)
|
|
55
|
+
# TODO/FIXME/TBD and XXX (3+ uppercase X) — case-sensitive so "tbd"/"fix me" inside
|
|
56
|
+
# ordinary words or Roman numerals (XXXI) do not trip it.
|
|
57
|
+
GENERIC_TODO = re.compile(r"\b(?:TODO|FIXME|TBD|X{3,})\b")
|
|
58
|
+
TEMPLATE_URL = re.compile(
|
|
59
|
+
r"https?://(?:www\.)?example\.(?:com|org|net)\S*"
|
|
60
|
+
r"|(?:https?://)?(?:dx\.)?doi\.org/(?:10\.)?X{3,}\S*"
|
|
61
|
+
r"|\]\(\s*\)"
|
|
62
|
+
r"|\[(?:URL|link)\]",
|
|
63
|
+
re.IGNORECASE,
|
|
64
|
+
)
|
|
65
|
+
# Warn pattern: bare [N] or [N-N]/[N–N] not followed by '(' (so markdown links
|
|
66
|
+
# [1](url) are excluded) and not a footnote [^1].
|
|
67
|
+
BARE_NUMERIC_CITE = re.compile(r"(?<!\w)\[\d{1,3}(?:\s*[–-]\s*\d{1,3})?\](?!\()")
|
|
68
|
+
|
|
69
|
+
BLOCKER_PATTERNS = [
|
|
70
|
+
("new_marker", NEW_MARKER),
|
|
71
|
+
("ai_disclosure_placeholder", AI_DISCLOSURE_PLACEHOLDER),
|
|
72
|
+
("generic_todo", GENERIC_TODO),
|
|
73
|
+
("template_url", TEMPLATE_URL),
|
|
74
|
+
]
|
|
75
|
+
|
|
76
|
+
HEADING_RE = re.compile(r"^#{1,6}\s+(.*\S)\s*$")
|
|
77
|
+
REFERENCES_TITLE_RE = re.compile(r"references|bibliography|works cited|reference list", re.IGNORECASE)
|
|
78
|
+
FENCE_RE = re.compile(r"^\s*(?:```|~~~)")
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def scan(text: str) -> list[dict]:
|
|
82
|
+
"""Line-by-line scan honoring code-fence and references-section guards."""
|
|
83
|
+
findings: list[dict] = []
|
|
84
|
+
in_fence = False
|
|
85
|
+
in_references = False
|
|
86
|
+
for lineno, line in enumerate(text.splitlines(), 1):
|
|
87
|
+
if FENCE_RE.match(line):
|
|
88
|
+
in_fence = not in_fence
|
|
89
|
+
continue
|
|
90
|
+
if in_fence:
|
|
91
|
+
continue
|
|
92
|
+
h = HEADING_RE.match(line.strip())
|
|
93
|
+
if h:
|
|
94
|
+
# entering / leaving a References-style section
|
|
95
|
+
in_references = bool(REFERENCES_TITLE_RE.search(h.group(1).lower()))
|
|
96
|
+
for type_name, pat in BLOCKER_PATTERNS:
|
|
97
|
+
for m in pat.finditer(line):
|
|
98
|
+
findings.append({
|
|
99
|
+
"type": type_name,
|
|
100
|
+
"line": lineno,
|
|
101
|
+
"text": m.group(0).strip()[:120],
|
|
102
|
+
"severity": "blocker",
|
|
103
|
+
})
|
|
104
|
+
if not in_references:
|
|
105
|
+
for m in BARE_NUMERIC_CITE.finditer(line):
|
|
106
|
+
findings.append({
|
|
107
|
+
"type": "bare_numeric_cite",
|
|
108
|
+
"line": lineno,
|
|
109
|
+
"text": m.group(0).strip()[:120],
|
|
110
|
+
"severity": "warn",
|
|
111
|
+
})
|
|
112
|
+
return findings
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def analyze(manuscript: str) -> dict:
|
|
116
|
+
p = Path(manuscript)
|
|
117
|
+
if not p.is_file():
|
|
118
|
+
sys.stderr.write(f"ERROR: manuscript not found: {manuscript}\n")
|
|
119
|
+
sys.exit(2)
|
|
120
|
+
findings = scan(p.read_text(encoding="utf-8"))
|
|
121
|
+
n_blocker = sum(1 for f in findings if f["severity"] == "blocker")
|
|
122
|
+
n_warn = len(findings) - n_blocker
|
|
123
|
+
return {
|
|
124
|
+
"schema_version": 1,
|
|
125
|
+
"source": str(p),
|
|
126
|
+
"summary": {"blocker": n_blocker, "warn": n_warn},
|
|
127
|
+
"findings": findings,
|
|
128
|
+
"submission_safe": n_blocker == 0,
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def render(result: dict) -> str:
|
|
133
|
+
lines = ["| Line | Type | Severity | Match |", "|---|---|---|---|"]
|
|
134
|
+
for f in result["findings"]:
|
|
135
|
+
lines.append(f"| {f['line']} | {f['type']} | {f['severity']} | `{f['text']}` |")
|
|
136
|
+
if len(lines) == 2:
|
|
137
|
+
lines.append("| — | (none) | — | no unresolved markers |")
|
|
138
|
+
return "\n".join(lines)
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
def main() -> int:
|
|
142
|
+
ap = argparse.ArgumentParser(
|
|
143
|
+
description="Flag unresolved authoring markers (placeholders) before submission.")
|
|
144
|
+
ap.add_argument("--manuscript", required=True, help="manuscript markdown/text")
|
|
145
|
+
ap.add_argument("--out", help="write JSON artifact to this path")
|
|
146
|
+
ap.add_argument("--strict", action="store_true",
|
|
147
|
+
help="exit 1 on warn-severity findings too (bare [N] citations)")
|
|
148
|
+
ap.add_argument("--quiet", action="store_true", help="suppress stdout table")
|
|
149
|
+
args = ap.parse_args()
|
|
150
|
+
|
|
151
|
+
result = analyze(args.manuscript)
|
|
152
|
+
s = result["summary"]
|
|
153
|
+
|
|
154
|
+
if not args.quiet:
|
|
155
|
+
print("=" * 41)
|
|
156
|
+
print(" Placeholder / Marker Gate")
|
|
157
|
+
print("=" * 41)
|
|
158
|
+
print(render(result))
|
|
159
|
+
print()
|
|
160
|
+
if s["blocker"]:
|
|
161
|
+
print(f"BLOCKER: {s['blocker']} unresolved marker(s) must be removed before submission.")
|
|
162
|
+
elif s["warn"]:
|
|
163
|
+
print(f"WARN: {s['warn']} bare [N] citation(s) — confirm Vancouver style or resolve "
|
|
164
|
+
f"(escalates to blocker under --strict).")
|
|
165
|
+
else:
|
|
166
|
+
print("OK: no unresolved authoring markers.")
|
|
167
|
+
|
|
168
|
+
if args.out:
|
|
169
|
+
Path(args.out).parent.mkdir(parents=True, exist_ok=True)
|
|
170
|
+
Path(args.out).write_text(json.dumps(result, indent=2), encoding="utf-8")
|
|
171
|
+
if not args.quiet:
|
|
172
|
+
print(f"\nwrote {args.out}")
|
|
173
|
+
|
|
174
|
+
if s["blocker"]:
|
|
175
|
+
return 1
|
|
176
|
+
if args.strict and s["warn"]:
|
|
177
|
+
return 1
|
|
178
|
+
return 0
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
if __name__ == "__main__":
|
|
182
|
+
sys.exit(main())
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
schema_version: 2
|
|
2
|
+
name: write-paper
|
|
3
|
+
layer: C
|
|
4
|
+
owner_domain: manuscript_drafting
|
|
5
|
+
when_to_use:
|
|
6
|
+
- Drafting an original medical/scientific manuscript from outline (8-phase IMRAD workflow)
|
|
7
|
+
- Original article, case report, meta-analysis report, AI validation study, animal study, or technical note
|
|
8
|
+
- Step 7.3a numerical claim audit before submission
|
|
9
|
+
- Step 7.6 reference handoff to /manage-refs for journal CSL render
|
|
10
|
+
when_NOT_to_use:
|
|
11
|
+
- Self-criticism on the user's own draft (use /self-review — explicitly different routing)
|
|
12
|
+
- Reviewer-response writing (use /revise)
|
|
13
|
+
- Reviewing external manuscripts (use /peer-review)
|
|
14
|
+
- Generating references from memory (forbidden — use /search-lit + /verify-refs)
|
|
15
|
+
- Silently editing a frozen submission docx (forbidden — branch to v_(N+1))
|
|
16
|
+
inputs:
|
|
17
|
+
- project.yaml
|
|
18
|
+
- analysis/_analysis_outputs.md
|
|
19
|
+
- analysis/figures/_figure_manifest.md
|
|
20
|
+
outputs:
|
|
21
|
+
- manuscript/manuscript.md
|
|
22
|
+
- manuscript/title_page.md
|
|
23
|
+
- qc/_pipeline_log.md
|
|
24
|
+
deterministic_scripts:
|
|
25
|
+
- none_required
|
|
26
|
+
side_effects:
|
|
27
|
+
- writes_project_artifacts
|
|
28
|
+
downstream_consumers:
|
|
29
|
+
- self-review
|
|
30
|
+
- verify-refs
|
|
31
|
+
- sync-submission
|
|
32
|
+
forbidden_actions:
|
|
33
|
+
- generate_references_from_memory
|
|
34
|
+
- silently_edit_frozen_submission
|
|
35
|
+
|
|
36
|
+
# v2.1 quality card
|
|
37
|
+
purpose: "Draft a submission-ready IMRAD manuscript or section from approved project inputs (8-phase workflow)."
|
|
38
|
+
safety_boundaries:
|
|
39
|
+
- "Never generates references from memory; citations come from search-lit and are checked by verify-refs."
|
|
40
|
+
- "Never silently edits a frozen submission; branches to v_(N+1) instead."
|
|
41
|
+
- "Numerical claims are audited against approved tables before submission (Step 7.3a)."
|
|
42
|
+
known_limitations:
|
|
43
|
+
- "Reference integrity depends on verify-refs (PubMed/CrossRef); offline runs degrade to manual checking."
|
|
44
|
+
- "Drafts the user's own manuscript only; not for self-critique (self-review), reviewer response (revise), or external review (peer-review)."
|
|
45
|
+
validation_commands:
|
|
46
|
+
- "/verify-refs --strict"
|
|
47
|
+
- "/self-review"
|
|
48
|
+
evidence_surface: demo
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Test scripts/check_placeholders.py — the A5 placeholder/marker gate.
|
|
3
|
+
# Synthetic, PII-free fixtures: a manuscript with one of each marker type, a clean
|
|
4
|
+
# manuscript that exercises the code-fence and References-section guards, a warn-only
|
|
5
|
+
# manuscript (bare [N] outside references), and a missing file. Stdlib-only.
|
|
6
|
+
set -u
|
|
7
|
+
|
|
8
|
+
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
+
SCRIPT="$HERE/../scripts/check_placeholders.py"
|
|
10
|
+
PASS=0
|
|
11
|
+
FAIL=0
|
|
12
|
+
ok() { echo " PASS: $1"; PASS=$((PASS+1)); }
|
|
13
|
+
bad() { echo " FAIL: $1"; FAIL=$((FAIL+1)); }
|
|
14
|
+
|
|
15
|
+
WORK="$(mktemp -d)"
|
|
16
|
+
trap 'rm -rf "$WORK"' EXIT
|
|
17
|
+
|
|
18
|
+
# --- fixtures ---
|
|
19
|
+
# dirty: one of each blocker type + bare numeric cites in the body
|
|
20
|
+
cat > "$WORK/dirty.md" <<'EOF'
|
|
21
|
+
# Introduction
|
|
22
|
+
|
|
23
|
+
Our method follows prior work [@NEW:competing-risk-model].
|
|
24
|
+
|
|
25
|
+
We used [version] of the model via the [channel] interface.
|
|
26
|
+
|
|
27
|
+
TODO: rewrite this. See FIXME below; values still XXX.
|
|
28
|
+
|
|
29
|
+
Data are at https://example.com/data and doi.org/XXXX, link here [URL].
|
|
30
|
+
|
|
31
|
+
This cites a source [4] in Vancouver style [5-7].
|
|
32
|
+
|
|
33
|
+
## References
|
|
34
|
+
|
|
35
|
+
[1] Smith J, et al. A real paper. 2020.
|
|
36
|
+
[2] Doe A. Another paper. 2021.
|
|
37
|
+
EOF
|
|
38
|
+
|
|
39
|
+
# clean: code-fence guard + legit DOI + numbered reference list (no body markers)
|
|
40
|
+
cat > "$WORK/clean.md" <<'EOF'
|
|
41
|
+
# Methods
|
|
42
|
+
|
|
43
|
+
We analyzed the cohort using a competing-risk model.
|
|
44
|
+
|
|
45
|
+
```python
|
|
46
|
+
# TODO: inside a code fence, must be ignored
|
|
47
|
+
url = "https://example.com/ignored"
|
|
48
|
+
ref = [1] # ignored
|
|
49
|
+
EOF
|
|
50
|
+
printf '```\n' >> "$WORK/clean.md"
|
|
51
|
+
cat >> "$WORK/clean.md" <<'EOF'
|
|
52
|
+
|
|
53
|
+
Full data are at https://doi.org/10.1038/s41591-024-00001-2.
|
|
54
|
+
|
|
55
|
+
## References
|
|
56
|
+
|
|
57
|
+
[1] Smith J, et al. A real paper. N Engl J Med. 2020.
|
|
58
|
+
[2] Doe A. Another paper. Lancet. 2021.
|
|
59
|
+
EOF
|
|
60
|
+
|
|
61
|
+
# warn-only: a bare [N] in the body, no blockers
|
|
62
|
+
cat > "$WORK/warn.md" <<'EOF'
|
|
63
|
+
# Body
|
|
64
|
+
This cites a source [3] in Vancouver style.
|
|
65
|
+
EOF
|
|
66
|
+
|
|
67
|
+
run() { python3 "$SCRIPT" "$@" 2>/dev/null; }
|
|
68
|
+
|
|
69
|
+
# 1. dirty manuscript fails with exit 1
|
|
70
|
+
run --manuscript "$WORK/dirty.md" --quiet
|
|
71
|
+
[ $? -eq 1 ] && ok "dirty manuscript fails (exit 1)" || bad "dirty manuscript should fail"
|
|
72
|
+
|
|
73
|
+
# 2. JSON reports all five finding types and submission_safe=false
|
|
74
|
+
run --manuscript "$WORK/dirty.md" --out "$WORK/dirty.json" --quiet
|
|
75
|
+
python3 -c "
|
|
76
|
+
import json,sys
|
|
77
|
+
d=json.load(open('$WORK/dirty.json'))
|
|
78
|
+
types={f['type'] for f in d['findings']}
|
|
79
|
+
need={'new_marker','ai_disclosure_placeholder','generic_todo','template_url','bare_numeric_cite'}
|
|
80
|
+
sys.exit(0 if need <= types and d['submission_safe'] is False and d['summary']['blocker']>=5 else 1)
|
|
81
|
+
" && ok "JSON: all five finding types + submission_safe false" || bad "JSON findings incomplete"
|
|
82
|
+
|
|
83
|
+
# 3. clean manuscript passes (code-fence + references guards work)
|
|
84
|
+
run --manuscript "$WORK/clean.md" --quiet
|
|
85
|
+
[ $? -eq 0 ] && ok "clean manuscript passes (guards work)" || bad "clean manuscript should pass"
|
|
86
|
+
|
|
87
|
+
# 3b. clean manuscript has zero findings (no leakage from code fence / refs)
|
|
88
|
+
run --manuscript "$WORK/clean.md" --out "$WORK/clean.json" --quiet
|
|
89
|
+
python3 -c "
|
|
90
|
+
import json,sys
|
|
91
|
+
d=json.load(open('$WORK/clean.json'))
|
|
92
|
+
sys.exit(0 if not d['findings'] and d['submission_safe'] is True else 1)
|
|
93
|
+
" && ok "clean manuscript: zero findings" || bad "clean manuscript should have no findings"
|
|
94
|
+
|
|
95
|
+
# 4. warn-only: passes by default, fails under --strict
|
|
96
|
+
run --manuscript "$WORK/warn.md" --quiet
|
|
97
|
+
[ $? -eq 0 ] && ok "warn-only passes by default" || bad "warn-only should pass by default"
|
|
98
|
+
run --manuscript "$WORK/warn.md" --strict --quiet
|
|
99
|
+
[ $? -eq 1 ] && ok "warn-only fails under --strict" || bad "warn-only should fail under --strict"
|
|
100
|
+
|
|
101
|
+
# 5. missing file -> exit 2
|
|
102
|
+
run --manuscript "$WORK/nope.md" --quiet
|
|
103
|
+
[ $? -eq 2 ] && ok "missing file exits 2" || bad "missing file should exit 2"
|
|
104
|
+
|
|
105
|
+
echo ""
|
|
106
|
+
echo "test_placeholders: $PASS passed, $FAIL failed"
|
|
107
|
+
[ "$FAIL" -eq 0 ]
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: write-protocol
|
|
3
|
+
description: >
|
|
4
|
+
IRB/ethics committee research protocol generator. Produces 4 core sections (Background,
|
|
5
|
+
Study Design, Sample Size, Statistical Plan) with full prose, plus 6 skeleton sections
|
|
6
|
+
with TODO markers for institution-specific content. Integrates outputs from design-study,
|
|
7
|
+
calc-sample-size, and search-lit.
|
|
8
|
+
triggers: write protocol, IRB protocol, ethics protocol, research protocol, IRB submission, ethics submission, protocol draft
|
|
9
|
+
tools: Read, Write, Edit, Bash, Grep, Glob
|
|
10
|
+
model: inherit
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Write-Protocol Skill
|
|
14
|
+
|
|
15
|
+
You are helping a medical researcher draft a research protocol for IRB/ethics committee
|
|
16
|
+
submission. This skill generates the scientific core of the protocol while providing
|
|
17
|
+
structured skeletons for institution-specific sections.
|
|
18
|
+
|
|
19
|
+
## Scope
|
|
20
|
+
|
|
21
|
+
This skill generates **4 core sections** with full prose:
|
|
22
|
+
1. Background and Rationale
|
|
23
|
+
2. Study Design and Eligibility Criteria
|
|
24
|
+
3. Sample Size Justification
|
|
25
|
+
4. Statistical Analysis Plan
|
|
26
|
+
|
|
27
|
+
The remaining **6 sections** are provided as structured skeletons with `[TODO]` markers,
|
|
28
|
+
because they vary significantly across institutions, countries, and regulatory frameworks.
|
|
29
|
+
|
|
30
|
+
**Important**: This protocol is a STARTING POINT. Every institution has its own IRB
|
|
31
|
+
submission form and requirements. The generated protocol must be adapted to your
|
|
32
|
+
institution's specific format before submission.
|
|
33
|
+
|
|
34
|
+
## Reference Files
|
|
35
|
+
|
|
36
|
+
- **Protocol template**: `${CLAUDE_SKILL_DIR}/references/protocol_template.md` -- complete 10-section structure with formatting guidance
|
|
37
|
+
- **Ethics checklist**: `${CLAUDE_SKILL_DIR}/references/ethics_checklist.md` -- jurisdiction-specific ethical requirements
|
|
38
|
+
|
|
39
|
+
Read both reference files before generating a protocol draft.
|
|
40
|
+
|
|
41
|
+
## Cross-Skill Integration
|
|
42
|
+
|
|
43
|
+
- **Input from design-study**: Study design recommendations, analysis unit, comparator design, validation strategy
|
|
44
|
+
- **Input from calc-sample-size**: `protocol/sample_size_justification.md` (canonical IRB-ready prose) + `protocol/sample_size_calc.{R,py}` (reproducible code). Embed `sample_size_justification.md` VERBATIM into Methods §Sample Size — do not rephrase numbers (per `~/.claude/rules/numerical-safety.md`).
|
|
45
|
+
- **Input from search-lit**: Background references with verified citations
|
|
46
|
+
- **Input from define-variables**: `variable_operationalization.md` — literature-grounded definitions, cutoffs, DB-variable mappings for the Methods section. **Precondition**: if the study is observational and no operationalization artifact exists, call `/define-variables` before drafting Methods. Do not invent phenotype/cutoff definitions from the data dictionary inside this skill.
|
|
47
|
+
- **Pipeline position**: search-lit -> design-study -> calc-sample-size -> define-variables -> **write-protocol** -> manage-project
|
|
48
|
+
|
|
49
|
+
When prior skill outputs are available, incorporate them directly. When they are not,
|
|
50
|
+
prompt the user or call the relevant skill.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Communication Rules
|
|
55
|
+
|
|
56
|
+
- Communicate with the user in their preferred language.
|
|
57
|
+
- Use English for all protocol content, statistical terminology, and medical terminology.
|
|
58
|
+
- Be explicit about what is generated versus what requires institutional input.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Required Inputs
|
|
63
|
+
|
|
64
|
+
Collect all required inputs before generating. Ask one question at a time if information is missing.
|
|
65
|
+
|
|
66
|
+
1. **Research question / hypothesis** -- specific, testable
|
|
67
|
+
2. **Study type** -- retrospective cohort, prospective cohort, cross-sectional, RCT, diagnostic accuracy, case-control, case series
|
|
68
|
+
3. **Target population** -- who, where, when
|
|
69
|
+
4. **Primary outcome** -- what you are measuring
|
|
70
|
+
5. **Secondary outcomes** (if any)
|
|
71
|
+
|
|
72
|
+
## Optional Inputs (enhance quality if available)
|
|
73
|
+
|
|
74
|
+
6. **design-study output** -- if `/design-study` was already run, load its recommendations
|
|
75
|
+
7. **calc-sample-size output** -- if `/calc-sample-size` was already run, load its results and IRB text
|
|
76
|
+
8. **Key references** -- DOIs or search terms for background section
|
|
77
|
+
9. **Institution name** -- for header and ethics section guidance
|
|
78
|
+
10. **Regulatory context** -- Korea (PIPA), US (HIPAA/Common Rule), EU (GDPR), other
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Protocol Structure -- 10 Sections
|
|
83
|
+
|
|
84
|
+
### Core Sections (Fully Generated)
|
|
85
|
+
|
|
86
|
+
#### Section 1: Background and Rationale (400-600 words)
|
|
87
|
+
|
|
88
|
+
Generate full prose covering:
|
|
89
|
+
- **Clinical context**: disease burden, current practice, knowledge gap
|
|
90
|
+
- **Literature support**: call `/search-lit` if key references are not provided; every citation must have a verified DOI or PMID
|
|
91
|
+
- **Rationale**: why this study is needed, what it adds to existing evidence
|
|
92
|
+
- **Research question**: clear statement of the hypothesis or research question
|
|
93
|
+
|
|
94
|
+
Do not use bullet points in the output. Write in full paragraphs with logical flow from
|
|
95
|
+
clinical context through knowledge gap to research question.
|
|
96
|
+
|
|
97
|
+
#### Section 2: Study Design and Eligibility Criteria (300-500 words)
|
|
98
|
+
|
|
99
|
+
Generate full prose plus structured criteria lists:
|
|
100
|
+
- **Study design** with justification (why this design answers this question)
|
|
101
|
+
- **Setting**: single-center vs multi-center, institution description
|
|
102
|
+
- **Study period**: start and end dates or planned duration
|
|
103
|
+
- **Inclusion criteria** (numbered list)
|
|
104
|
+
- **Exclusion criteria** (numbered list)
|
|
105
|
+
|
|
106
|
+
If design-study output is available, incorporate its recommendations on:
|
|
107
|
+
- Analysis unit (patient vs lesion vs exam)
|
|
108
|
+
- Comparator design
|
|
109
|
+
- Validation strategy
|
|
110
|
+
- Potential leakage risks and mitigations
|
|
111
|
+
|
|
112
|
+
#### Section 3: Sample Size Justification (150-300 words)
|
|
113
|
+
|
|
114
|
+
- If `protocol/sample_size_justification.md` exists (calc-sample-size output): embed VERBATIM. Do not rephrase numbers.
|
|
115
|
+
- If not available: prompt the user to run `/calc-sample-size` first; only fall back to a basic justification if the user explicitly declines.
|
|
116
|
+
- Must include: test type, expected effect size (with literature source), alpha level, power, attrition adjustment
|
|
117
|
+
- Final statement: "We plan to enroll N participants."
|
|
118
|
+
|
|
119
|
+
#### Section 4: Statistical Analysis Plan (300-500 words)
|
|
120
|
+
|
|
121
|
+
Generate full prose covering:
|
|
122
|
+
- **Descriptive statistics**: continuous variables as mean (SD) or median (IQR); categorical variables as count (%)
|
|
123
|
+
- **Primary analysis**: statistical test, assumptions, handling of violations
|
|
124
|
+
- **Secondary analyses**: pre-specified
|
|
125
|
+
- **Subgroup analyses**: pre-specified, with interaction tests
|
|
126
|
+
- **Missing data**: handling strategy (complete case, multiple imputation, sensitivity analysis)
|
|
127
|
+
- **Software**: name and version (e.g., R 4.4.0, Python 3.12, SAS 9.4)
|
|
128
|
+
- **Significance level**: two-sided alpha = 0.05 unless otherwise justified
|
|
129
|
+
|
|
130
|
+
### Skeleton Sections (TODO Markers)
|
|
131
|
+
|
|
132
|
+
#### Section 5: Study Title and Registration
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
[TODO: Full study title]
|
|
136
|
+
[TODO: Short title / acronym]
|
|
137
|
+
[TODO: Clinical trial registry number if applicable (e.g., ClinicalTrials.gov, CRIS)]
|
|
138
|
+
[TODO: Protocol version number and date]
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
#### Section 6: Data Collection and Management
|
|
142
|
+
|
|
143
|
+
```
|
|
144
|
+
[TODO: List variables to be collected -- use your institution's case report form (CRF) template]
|
|
145
|
+
[TODO: Data collection method (chart review / prospective forms / electronic extraction)]
|
|
146
|
+
[TODO: Data storage and security measures (encrypted database, access controls)]
|
|
147
|
+
[TODO: Quality assurance procedures (double data entry, range checks)]
|
|
148
|
+
[TODO: Data retention period per institutional policy]
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
#### Section 7: Ethical Considerations
|
|
152
|
+
|
|
153
|
+
```
|
|
154
|
+
[TODO: IRB/Ethics committee name and expected submission date]
|
|
155
|
+
[TODO: Informed consent process -- or justification for waiver]
|
|
156
|
+
[TODO: Patient privacy and data protection measures]
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
Include regulatory guidance by jurisdiction:
|
|
160
|
+
- **Korea**: Personal Information Protection Act (PIPA), Bioethics and Safety Act
|
|
161
|
+
- **United States**: HIPAA Privacy Rule, Common Rule (45 CFR 46)
|
|
162
|
+
- **European Union**: GDPR Article 9 (health data), Clinical Trials Regulation (EU 536/2014)
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
[TODO: Confirm applicable regulations with your IRB office]
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Refer to `${CLAUDE_SKILL_DIR}/references/ethics_checklist.md` for the full checklist.
|
|
169
|
+
|
|
170
|
+
#### Section 8: Timeline and Milestones
|
|
171
|
+
|
|
172
|
+
```
|
|
173
|
+
[TODO: Adapt to your project schedule]
|
|
174
|
+
|
|
175
|
+
| Phase | Activity | Duration | Target Date |
|
|
176
|
+
|-------|---------------------------------------|-------------|-------------|
|
|
177
|
+
| 1 | IRB approval | [X] weeks | [TODO] |
|
|
178
|
+
| 2 | Data collection / Patient enrollment | [X] months | [TODO] |
|
|
179
|
+
| 3 | Data cleaning and analysis | [X] months | [TODO] |
|
|
180
|
+
| 4 | Manuscript preparation | [X] months | [TODO] |
|
|
181
|
+
| 5 | Submission | -- | [TODO] |
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
#### Section 9: Budget
|
|
185
|
+
|
|
186
|
+
```
|
|
187
|
+
[TODO: Use your institution's budget template]
|
|
188
|
+
[TODO: Common cost categories below -- delete or add as needed]
|
|
189
|
+
- Personnel (research coordinator, statistician)
|
|
190
|
+
- Equipment and supplies
|
|
191
|
+
- Software licenses
|
|
192
|
+
- Statistical consultation
|
|
193
|
+
- Publication fees (open access APC)
|
|
194
|
+
- Patient compensation (if applicable)
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
#### Section 10: References
|
|
198
|
+
|
|
199
|
+
Generate a numbered reference list from:
|
|
200
|
+
- Citations used in Section 1 (Background and Rationale)
|
|
201
|
+
- Effect size sources from Section 3 (Sample Size Justification)
|
|
202
|
+
- Any additional references from calc-sample-size output
|
|
203
|
+
|
|
204
|
+
All references must have verified DOIs or PMIDs. Mark any unverified references
|
|
205
|
+
as `[UNVERIFIED - NEEDS MANUAL CHECK]`.
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Output Format
|
|
210
|
+
|
|
211
|
+
Generate a single markdown file: `protocol_draft.md`
|
|
212
|
+
|
|
213
|
+
Requirements:
|
|
214
|
+
- All 10 sections with clear numbering (1. through 10.)
|
|
215
|
+
- Core sections (1-4) in full prose, no bullet points in body text
|
|
216
|
+
- Skeleton sections (5-9) with `[TODO]` markers clearly visible
|
|
217
|
+
- Word count targets noted in comments at the start of each core section
|
|
218
|
+
- Institution name in the header if provided
|
|
219
|
+
|
|
220
|
+
After generating, inform the user:
|
|
221
|
+
1. Which sections are complete and ready for review
|
|
222
|
+
2. Which `[TODO]` items require their input
|
|
223
|
+
3. Recommended next steps (e.g., "Fill in Section 5 title and registration, then adapt Section 7 to your IRB form")
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## Quality Checks
|
|
228
|
+
|
|
229
|
+
Before delivering the protocol:
|
|
230
|
+
|
|
231
|
+
1. **Citation integrity**: Every reference has a DOI or PMID, or is marked `[UNVERIFIED]`
|
|
232
|
+
2. **Internal consistency**: Sample size in Section 3 matches the analysis plan in Section 4
|
|
233
|
+
3. **Design alignment**: Study type in Section 2 matches the statistical approach in Section 4
|
|
234
|
+
4. **TODO completeness**: All institution-specific items have `[TODO]` markers
|
|
235
|
+
5. **Word counts**: Core sections fall within target ranges
|
|
236
|
+
6. **No AI patterns**: Avoid phrases like "it is worth noting", "comprehensive", "plays a crucial role"
|
|
237
|
+
|
|
238
|
+
## Anti-Hallucination
|
|
239
|
+
|
|
240
|
+
- **Never fabricate references.** All citations must be verified via `/search-lit` with confirmed DOI or PMID. Mark unverified references as `[UNVERIFIED - NEEDS MANUAL CHECK]`.
|
|
241
|
+
- **Never invent clinical definitions, diagnostic criteria, or guideline recommendations.** If uncertain, flag with `[VERIFY]` and ask the user.
|
|
242
|
+
- **Never fabricate numerical results** — compliance percentages, scores, effect sizes, or sample sizes must come from actual data or analysis output.
|
|
243
|
+
- If a reporting guideline item, journal policy, or clinical standard is uncertain, state the uncertainty rather than guessing.
|