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,69 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Structural + PII regression tests for self-review --panel mode (Phase 2.6).
|
|
3
|
+
# Pure file checks — no agent invocation. Run from anywhere.
|
|
4
|
+
|
|
5
|
+
set -uo pipefail
|
|
6
|
+
|
|
7
|
+
REPO_ROOT="$(cd "$(dirname "$0")/../../.." && pwd)"
|
|
8
|
+
SKILL="$REPO_ROOT/skills/self-review/SKILL.md"
|
|
9
|
+
TEMPLATE="$REPO_ROOT/skills/self-review/references/panel_review_template.md"
|
|
10
|
+
PROBE_DIR="$REPO_ROOT/skills/self-review/references/domain-probes"
|
|
11
|
+
|
|
12
|
+
fail=0
|
|
13
|
+
ran=0
|
|
14
|
+
check() {
|
|
15
|
+
local label="$1"; shift
|
|
16
|
+
ran=$((ran + 1))
|
|
17
|
+
if "$@" >/dev/null 2>&1; then
|
|
18
|
+
printf ' PASS %s\n' "$label"
|
|
19
|
+
else
|
|
20
|
+
printf ' FAIL %s\n' "$label"
|
|
21
|
+
fail=$((fail + 1))
|
|
22
|
+
fi
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
[[ -f "$SKILL" ]] || { echo "ENV-ERR: SKILL.md missing" >&2; exit 2; }
|
|
26
|
+
|
|
27
|
+
# 1. Panel section + flag present.
|
|
28
|
+
check "Phase 2.6 panel section present" grep -qE '^### Phase 2\.6: Multi-Agent Panel Review' "$SKILL"
|
|
29
|
+
check "--panel flag documented in Optional Flags" grep -qE '^- `--panel`:' "$SKILL"
|
|
30
|
+
check "default stays single-pass (off by default)" grep -qi 'off by default' "$SKILL"
|
|
31
|
+
check "--fix x --panel guard documented" grep -qi 'Do \*\*not\*\* combine with `--fix`' "$SKILL"
|
|
32
|
+
|
|
33
|
+
# 2. Reviewer-set mapping names all six domain-probe modules.
|
|
34
|
+
for m in survival_prognostic sr_ma radiomics narrative_review observational_confounding ai_overclaiming; do
|
|
35
|
+
check "reviewer-set table references $m module" grep -qE "domain-probes/$m\.md" "$SKILL"
|
|
36
|
+
done
|
|
37
|
+
|
|
38
|
+
# 3. Template exists and carries the schema fields + skeletons.
|
|
39
|
+
check "panel_review_template.md exists" test -f "$TEMPLATE"
|
|
40
|
+
check "template references skill-dir path in SKILL.md" grep -qE 'references/panel_review_template\.md' "$SKILL"
|
|
41
|
+
check "template has reviewer schema fields" grep -qE '"severity": "Fatal \| Fixable"' "$TEMPLATE"
|
|
42
|
+
check "template has editor synthesis skeleton" grep -qi 'Editor synthesis prompt skeleton' "$TEMPLATE"
|
|
43
|
+
|
|
44
|
+
# 4. Vendored probe modules each reviewer loads exist.
|
|
45
|
+
for m in survival_prognostic sr_ma radiomics narrative_review observational_confounding ai_overclaiming; do
|
|
46
|
+
check "vendored module present: $m.md" test -f "$PROBE_DIR/$m.md"
|
|
47
|
+
done
|
|
48
|
+
|
|
49
|
+
# 5. PoC-content-leak scan on the PoC-derived template.
|
|
50
|
+
# The authoritative PII gate for names / mentors / institutions / project
|
|
51
|
+
# codes is scripts/check_precedent.py (SHA-256 hashed, run repo-wide by
|
|
52
|
+
# validate_skills.sh). Do NOT duplicate those identifiers in cleartext here —
|
|
53
|
+
# that would re-introduce the very PII as a public string (self-doxxing,
|
|
54
|
+
# oss-publication-pii-guard §5). This check is belt-and-suspenders for the
|
|
55
|
+
# non-identifying content markers of the source PoC manuscript (a personal
|
|
56
|
+
# path, the study disease term, the cohort N) that would signal the template
|
|
57
|
+
# was not fully generalized. POSIX-safe (no \b).
|
|
58
|
+
POC_MARKERS='/Users/|/home/|emphysema|41,?291'
|
|
59
|
+
ran=$((ran + 1))
|
|
60
|
+
if grep -nEi "$POC_MARKERS" "$TEMPLATE"; then
|
|
61
|
+
printf ' FAIL PoC-content-leak scan (panel_review_template.md)\n'
|
|
62
|
+
fail=$((fail + 1))
|
|
63
|
+
else
|
|
64
|
+
printf ' PASS PoC-content-leak scan (panel_review_template.md)\n'
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
echo ""
|
|
68
|
+
echo "ran=$ran fail=$fail"
|
|
69
|
+
[[ $fail -eq 0 ]]
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Regression test for the reference-adequacy gate (self-review Phase 2.5c-2 /
|
|
3
|
+
# write-paper Step 7.3c). Synthetic fixtures reproduce:
|
|
4
|
+
# 1. an original-research draft whose Statistical Analysis subsection names a
|
|
5
|
+
# competing-risk model, multiple imputation, the E-value, and an eGFR
|
|
6
|
+
# equation with ZERO citations (the highest-value failure mode);
|
|
7
|
+
# 2. the same draft with a citation added in each named-method paragraph;
|
|
8
|
+
# 3. a letter whose lower reference target must not false-fail.
|
|
9
|
+
# Stdlib-only (python3).
|
|
10
|
+
set -u
|
|
11
|
+
|
|
12
|
+
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
13
|
+
SCRIPT="$HERE/../scripts/check_reference_adequacy.py"
|
|
14
|
+
FIX="$HERE/fixtures"
|
|
15
|
+
OUT="$(mktemp -t ra_XXXX).json"
|
|
16
|
+
trap 'rm -f "$OUT"' EXIT
|
|
17
|
+
|
|
18
|
+
fail=0
|
|
19
|
+
check() { local label="$1"; shift
|
|
20
|
+
if "$@" >/dev/null 2>&1; then printf ' PASS %s\n' "$label"
|
|
21
|
+
else printf ' FAIL %s\n' "$label"; fail=$((fail+1)); fi
|
|
22
|
+
}
|
|
23
|
+
# assert a python boolean expression over the JSON at $OUT; `d` is the parsed dict.
|
|
24
|
+
# (No assertion message: the expression embeds single quotes — the check() label
|
|
25
|
+
# already names the case on FAIL.)
|
|
26
|
+
jassert() { python3 -c "
|
|
27
|
+
import json
|
|
28
|
+
d=json.load(open('$OUT'))
|
|
29
|
+
assert ($1)
|
|
30
|
+
"; }
|
|
31
|
+
|
|
32
|
+
[[ -f "$SCRIPT" ]] || { echo "ENV-ERR: script missing: $SCRIPT" >&2; exit 2; }
|
|
33
|
+
|
|
34
|
+
echo "== Fixture 1: original research, Methods names methods with 0 citations =="
|
|
35
|
+
python3 "$SCRIPT" --manuscript "$FIX/refadeq_original_uncited.md" \
|
|
36
|
+
--article-type original_article --out "$OUT" --strict >/dev/null 2>&1
|
|
37
|
+
check "exit 1 under --strict (Major present)" test "$?" -eq 1
|
|
38
|
+
check "JSON artifact written" test -s "$OUT"
|
|
39
|
+
check "methods_zero_citations is true" jassert "d['methods_zero_citations'] is True"
|
|
40
|
+
check "uncited_named_methods is non-empty" jassert "len(d['uncited_named_methods']) > 0"
|
|
41
|
+
check "Fine-Gray flagged uncited" jassert "'Fine-Gray' in d['uncited_named_methods']"
|
|
42
|
+
check "reference_count_verdict BELOW_TARGET" jassert "d['reference_count_verdict'] == 'BELOW_TARGET'"
|
|
43
|
+
check "a methods_zero_citations Major finding" jassert "any(f['subtype']=='methods_zero_citations' and f['severity']=='major' for f in d['findings'])"
|
|
44
|
+
check "all findings fixable_by_ai=false" jassert "all(f['fixable_by_ai'] is False for f in d['findings'])"
|
|
45
|
+
|
|
46
|
+
echo "== Fixture 2: same draft, each named method now cited =="
|
|
47
|
+
python3 "$SCRIPT" --manuscript "$FIX/refadeq_original_fixed.md" \
|
|
48
|
+
--article-type original_article --out "$OUT" --strict >/dev/null 2>&1
|
|
49
|
+
check "exit 0 (no Major; Methods gap cleared)" test "$?" -eq 0
|
|
50
|
+
check "methods_zero_citations is false" jassert "d['methods_zero_citations'] is False"
|
|
51
|
+
check "no methods_named_method_uncited finding" jassert "not any(f['subtype']=='methods_named_method_uncited' for f in d['findings'])"
|
|
52
|
+
check "adequacy_safe is true" jassert "d['adequacy_safe'] is True"
|
|
53
|
+
|
|
54
|
+
echo "== Fixture 3: letter (lower target must not false-fail) =="
|
|
55
|
+
python3 "$SCRIPT" --manuscript "$FIX/refadeq_letter.md" \
|
|
56
|
+
--article-type letter --out "$OUT" --strict >/dev/null 2>&1
|
|
57
|
+
check "exit 0 (letter target met)" test "$?" -eq 0
|
|
58
|
+
check "verdict ADEQUATE for letter" jassert "d['reference_count_verdict'] == 'ADEQUATE'"
|
|
59
|
+
check "no adequacy findings" jassert "len(d['findings']) == 0"
|
|
60
|
+
|
|
61
|
+
echo "== Alias map: nhis_cohort routes to original_research target =="
|
|
62
|
+
python3 "$SCRIPT" --manuscript "$FIX/refadeq_original_uncited.md" \
|
|
63
|
+
--article-type nhis_cohort --out "$OUT" --quiet >/dev/null 2>&1
|
|
64
|
+
check "nhis_cohort -> original_research bucket" jassert "d['article_bucket'] == 'original_research'"
|
|
65
|
+
check "original_research target is [25,45]" jassert "d['effective_target'] == [25,45]"
|
|
66
|
+
|
|
67
|
+
echo "fail=$fail"; [[ "$fail" -eq 0 ]] && echo "ALL PASS" || echo "FAILURES: $fail"
|
|
68
|
+
exit "$fail"
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Regression tests for self-review check_reviewer_team_consistency.py.
|
|
3
|
+
|
|
4
|
+
set -uo pipefail
|
|
5
|
+
|
|
6
|
+
REPO_ROOT="$(cd "$(dirname "$0")/../../.." && pwd)"
|
|
7
|
+
SCRIPT="$REPO_ROOT/skills/self-review/scripts/check_reviewer_team_consistency.py"
|
|
8
|
+
TMP="$(mktemp -d -t reviewer_team.XXXXXX)"
|
|
9
|
+
trap 'rm -rf "$TMP"' EXIT
|
|
10
|
+
|
|
11
|
+
[[ -f "$SCRIPT" ]] || { echo "ENV-ERR: script missing" >&2; exit 2; }
|
|
12
|
+
|
|
13
|
+
fail=0
|
|
14
|
+
ran=0
|
|
15
|
+
assert_exit() {
|
|
16
|
+
local label="$1" expected="$2" actual="$3"
|
|
17
|
+
ran=$((ran + 1))
|
|
18
|
+
if [[ "$expected" == "$actual" ]]; then
|
|
19
|
+
printf ' PASS %-50s exit=%s\n' "$label" "$actual"
|
|
20
|
+
else
|
|
21
|
+
printf ' FAIL %-50s expected=%s actual=%s\n' "$label" "$expected" "$actual"
|
|
22
|
+
fail=$((fail + 1))
|
|
23
|
+
fi
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
# --------------------------------------------------------------------------
|
|
27
|
+
# Case 1: clean — dual review claimed, no limits confession.
|
|
28
|
+
# --------------------------------------------------------------------------
|
|
29
|
+
cat > "$TMP/c1.md" <<'EOF'
|
|
30
|
+
## **METHODS**
|
|
31
|
+
Two reviewers independently screened titles and abstracts.
|
|
32
|
+
|
|
33
|
+
## **DISCUSSION**
|
|
34
|
+
The cohort overlap reduces effective sample size.
|
|
35
|
+
EOF
|
|
36
|
+
python3 "$SCRIPT" --manuscript "$TMP/c1.md" \
|
|
37
|
+
--out "$TMP/c1.md.audit" --quiet
|
|
38
|
+
assert_exit "case 1: dual claim, no limits confession" 0 $?
|
|
39
|
+
|
|
40
|
+
# --------------------------------------------------------------------------
|
|
41
|
+
# Case 2: fabrication-grade — Methods dual + Limitations single confession.
|
|
42
|
+
# --------------------------------------------------------------------------
|
|
43
|
+
cat > "$TMP/c2.md" <<'EOF'
|
|
44
|
+
## **METHODS**
|
|
45
|
+
Two reviewers independently screened titles and abstracts and extracted data.
|
|
46
|
+
|
|
47
|
+
## **DISCUSSION**
|
|
48
|
+
|
|
49
|
+
### Limitations
|
|
50
|
+
We used a single primary reviewer for data extraction; a 20% sample by an
|
|
51
|
+
additional reviewer is deferred to before submission.
|
|
52
|
+
EOF
|
|
53
|
+
python3 "$SCRIPT" --manuscript "$TMP/c2.md" \
|
|
54
|
+
--out "$TMP/c2.md.audit" --quiet
|
|
55
|
+
assert_exit "case 2: dual + single confession (FAIL)" 1 $?
|
|
56
|
+
|
|
57
|
+
# Verify the markdown report flags both claim sides.
|
|
58
|
+
grep -q "MAJOR red flag" "$TMP/c2.md.audit" || { echo " FAIL c2 markdown body"; fail=$((fail + 1)); }
|
|
59
|
+
grep -q "single primary reviewer" "$TMP/c2.md.audit" || { echo " FAIL c2 markdown body"; fail=$((fail + 1)); }
|
|
60
|
+
|
|
61
|
+
# --------------------------------------------------------------------------
|
|
62
|
+
# Case 3: PROSPERO dual + Limitations single. Also FAIL.
|
|
63
|
+
# --------------------------------------------------------------------------
|
|
64
|
+
cat > "$TMP/c3.md" <<'EOF'
|
|
65
|
+
## **METHODS**
|
|
66
|
+
Records were screened against pre-specified eligibility criteria.
|
|
67
|
+
|
|
68
|
+
## **DISCUSSION**
|
|
69
|
+
### Limitations
|
|
70
|
+
A single primary reviewer extracted data due to resource constraints.
|
|
71
|
+
EOF
|
|
72
|
+
cat > "$TMP/c3_prospero.md" <<'EOF'
|
|
73
|
+
# PROSPERO record
|
|
74
|
+
Two independent reviewers will perform full-text screening and data extraction.
|
|
75
|
+
EOF
|
|
76
|
+
python3 "$SCRIPT" --manuscript "$TMP/c3.md" --prospero "$TMP/c3_prospero.md" \
|
|
77
|
+
--out "$TMP/c3.md.audit" --quiet
|
|
78
|
+
assert_exit "case 3: PROSPERO dual + limits single (FAIL)" 1 $?
|
|
79
|
+
|
|
80
|
+
# --------------------------------------------------------------------------
|
|
81
|
+
# Case 4: single confession alone (no dual claim) => PASS.
|
|
82
|
+
# --------------------------------------------------------------------------
|
|
83
|
+
cat > "$TMP/c4.md" <<'EOF'
|
|
84
|
+
## **METHODS**
|
|
85
|
+
Data extraction was performed by the first reviewer.
|
|
86
|
+
|
|
87
|
+
## **DISCUSSION**
|
|
88
|
+
### Limitations
|
|
89
|
+
A single primary reviewer extracted data; this is a limitation of our review.
|
|
90
|
+
EOF
|
|
91
|
+
python3 "$SCRIPT" --manuscript "$TMP/c4.md" \
|
|
92
|
+
--out "$TMP/c4.md.audit" --quiet
|
|
93
|
+
assert_exit "case 4: single confession only (PASS)" 0 $?
|
|
94
|
+
|
|
95
|
+
# --------------------------------------------------------------------------
|
|
96
|
+
# Case 5: extraction JSON names an LLM as a reviewer => fatal FAIL.
|
|
97
|
+
# --------------------------------------------------------------------------
|
|
98
|
+
cat > "$TMP/c5.md" <<'EOF'
|
|
99
|
+
## **METHODS**
|
|
100
|
+
Records were screened against pre-specified eligibility criteria.
|
|
101
|
+
EOF
|
|
102
|
+
cat > "$TMP/c5_extract.json" <<'EOF'
|
|
103
|
+
{"study": "Example 2024", "reviewer_1": "Claude", "reviewer_2": "Jane Doe"}
|
|
104
|
+
EOF
|
|
105
|
+
python3 "$SCRIPT" --manuscript "$TMP/c5.md" --extraction-json "$TMP/c5_extract.json" \
|
|
106
|
+
--out "$TMP/c5.md.audit" --quiet
|
|
107
|
+
assert_exit "case 5: LLM-as-reviewer in extraction JSON (FAIL)" 1 $?
|
|
108
|
+
grep -q "LLM-AS-REVIEWER" "$TMP/c5.md.audit" || { echo " FAIL c5 markdown body"; fail=$((fail + 1)); }
|
|
109
|
+
|
|
110
|
+
# --------------------------------------------------------------------------
|
|
111
|
+
# Case 6: future-tense deferred mitigation => MAJOR FAIL.
|
|
112
|
+
# --------------------------------------------------------------------------
|
|
113
|
+
cat > "$TMP/c6.md" <<'EOF'
|
|
114
|
+
## **METHODS**
|
|
115
|
+
Records were screened by the primary reviewer.
|
|
116
|
+
|
|
117
|
+
## **DISCUSSION**
|
|
118
|
+
### Limitations
|
|
119
|
+
A duplicate-screening check will be completed before submission.
|
|
120
|
+
EOF
|
|
121
|
+
python3 "$SCRIPT" --manuscript "$TMP/c6.md" \
|
|
122
|
+
--out "$TMP/c6.md.audit" --quiet
|
|
123
|
+
assert_exit "case 6: deferred mitigation (FAIL)" 1 $?
|
|
124
|
+
grep -q "DEFERRED-MITIGATION" "$TMP/c6.md.audit" || { echo " FAIL c6 markdown body"; fail=$((fail + 1)); }
|
|
125
|
+
|
|
126
|
+
# --------------------------------------------------------------------------
|
|
127
|
+
# Case 7: clean extraction JSON (human reviewers) => PASS (backward compat).
|
|
128
|
+
# --------------------------------------------------------------------------
|
|
129
|
+
cat > "$TMP/c7_extract.json" <<'EOF'
|
|
130
|
+
{"study": "Example 2024", "reviewer_1": "Jane Doe", "reviewer_2": "John Roe"}
|
|
131
|
+
EOF
|
|
132
|
+
python3 "$SCRIPT" --manuscript "$TMP/c1.md" --extraction-json "$TMP/c7_extract.json" \
|
|
133
|
+
--out "$TMP/c7.md.audit" --quiet
|
|
134
|
+
assert_exit "case 7: human reviewers in extraction JSON (PASS)" 0 $?
|
|
135
|
+
|
|
136
|
+
echo ""
|
|
137
|
+
echo "ran=$ran fail=$fail"
|
|
138
|
+
[[ $fail -eq 0 ]]
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Regression test for the scope-coherence gate (self-review §D).
|
|
3
|
+
# Synthetic, PII-free fixtures reproduce: (a) a cross-sectional design with a
|
|
4
|
+
# prognostic/surveillance conclusion (CROSS_SECTIONAL_PROGNOSTIC), (b) a binary
|
|
5
|
+
# surrogate endpoint driving a care directive (SURROGATE_CARE_DIRECTIVE). The clean
|
|
6
|
+
# fixture is a longitudinal cohort with an association conclusion.
|
|
7
|
+
# Stdlib-only (python3).
|
|
8
|
+
set -u
|
|
9
|
+
|
|
10
|
+
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
11
|
+
SCRIPT="$HERE/../scripts/check_scope_coherence.py"
|
|
12
|
+
BAD="$HERE/fixtures/scope_bad.md"
|
|
13
|
+
SURR="$HERE/fixtures/scope_surrogate.md"
|
|
14
|
+
CLEAN="$HERE/fixtures/scope_clean.md"
|
|
15
|
+
OUT="$(mktemp -t scope_XXXX).json"
|
|
16
|
+
trap 'rm -f "$OUT"' EXIT
|
|
17
|
+
|
|
18
|
+
fail=0
|
|
19
|
+
check() { local label="$1"; shift
|
|
20
|
+
if "$@" >/dev/null 2>&1; then printf ' PASS %s\n' "$label"
|
|
21
|
+
else printf ' FAIL %s\n' "$label"; fail=$((fail+1)); fi
|
|
22
|
+
}
|
|
23
|
+
has_verdict() { python3 -c "
|
|
24
|
+
import json,sys
|
|
25
|
+
d=json.load(open('$OUT'))
|
|
26
|
+
assert any(c['verdict']=='$1' for c in d['claims']), '$1 not found'
|
|
27
|
+
"; }
|
|
28
|
+
|
|
29
|
+
[[ -f "$SCRIPT" ]] || { echo "ENV-ERR: script missing" >&2; exit 2; }
|
|
30
|
+
|
|
31
|
+
# (1) cross-sectional + prognostic conclusion -> CROSS_SECTIONAL_PROGNOSTIC, exit 1
|
|
32
|
+
python3 "$SCRIPT" --manuscript "$BAD" --out "$OUT" --strict --quiet >/dev/null 2>&1
|
|
33
|
+
check "exit 1 (cross-sectional prognostic)" test "$?" -eq 1
|
|
34
|
+
check "CROSS_SECTIONAL_PROGNOSTIC detected" has_verdict CROSS_SECTIONAL_PROGNOSTIC
|
|
35
|
+
|
|
36
|
+
# (2) binary surrogate + care directive -> SURROGATE_CARE_DIRECTIVE, exit 1
|
|
37
|
+
python3 "$SCRIPT" --manuscript "$SURR" --out "$OUT" --strict --quiet >/dev/null 2>&1
|
|
38
|
+
check "exit 1 (surrogate care directive)" test "$?" -eq 1
|
|
39
|
+
check "SURROGATE_CARE_DIRECTIVE detected" has_verdict SURROGATE_CARE_DIRECTIVE
|
|
40
|
+
|
|
41
|
+
# (3) longitudinal cohort + association conclusion -> exit 0
|
|
42
|
+
python3 "$SCRIPT" --manuscript "$CLEAN" --strict --quiet >/dev/null 2>&1
|
|
43
|
+
check "exit 0 on clean manuscript" test "$?" -eq 0
|
|
44
|
+
|
|
45
|
+
echo "fail=$fail"; [[ "$fail" -eq 0 ]] && echo "ALL PASS" || echo "FAILURES: $fail"
|
|
46
|
+
exit "$fail"
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: setup-medsci
|
|
3
|
+
description: Diagnostic checklist for the MedSci Skills runtime. Verifies Python, R, Node, Claude Code, Git, Zotero, and configured MCP servers, and prints a pass/fail table with links to the right setup doc for any missing component. Read-only — does not install anything.
|
|
4
|
+
triggers: setup, install, environment, diagnostic, check setup, why doesn't this work, missing python, missing R, MCP not connected, 환경 설정, 설치 점검
|
|
5
|
+
tools: Bash, Read
|
|
6
|
+
model: inherit
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Setup-MedSci Skill
|
|
10
|
+
|
|
11
|
+
You are helping a medical researcher verify that their environment is correctly configured to run MedSci Skills. You **do not install anything** — you only diagnose what's present, what's missing, and where to find the setup doc for any missing component. This skill is intentionally read-only so that a doctor can run it safely without worrying about breaking their system.
|
|
12
|
+
|
|
13
|
+
## Communication Rules
|
|
14
|
+
|
|
15
|
+
- Communicate with the user in their preferred language (Korean or English).
|
|
16
|
+
- The diagnostic table itself is in English so it can be pasted into GitHub issues for support.
|
|
17
|
+
- All recommended remediation links point to `docs/setup/` markdown guides in the medsci-skills repo.
|
|
18
|
+
|
|
19
|
+
## Workflow
|
|
20
|
+
|
|
21
|
+
### Phase 1: Detect OS
|
|
22
|
+
|
|
23
|
+
Run:
|
|
24
|
+
```bash
|
|
25
|
+
uname -s
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
- `Darwin` → macOS path → recommend `docs/setup/mac.md`
|
|
29
|
+
- `Linux` → Linux path (uses similar tooling to Mac) → recommend `docs/setup/mac.md`
|
|
30
|
+
- `MINGW*`, `MSYS*`, `CYGWIN*`, or detection failure on Windows → recommend `docs/setup/windows.md`
|
|
31
|
+
|
|
32
|
+
### Phase 2: Run Diagnostic Commands
|
|
33
|
+
|
|
34
|
+
For each tool, run the command and capture both the version output and the exit code:
|
|
35
|
+
|
|
36
|
+
| Tool | Command | Required version |
|
|
37
|
+
|---|---|---|
|
|
38
|
+
| Python | `python3 --version` (Mac/Linux) or `python --version` (Windows) | 3.11 or higher |
|
|
39
|
+
| R | `Rscript --version` (writes to stderr) | 4.0 or higher |
|
|
40
|
+
| Node.js | `node --version` | v20 or higher |
|
|
41
|
+
| Git | `git --version` | 2.30 or higher |
|
|
42
|
+
| Claude Code CLI | `claude --version` | any |
|
|
43
|
+
| MCP servers | `claude mcp list` | at least one of: zotero, gdrive, pubmed, filesystem |
|
|
44
|
+
|
|
45
|
+
Use `command -v <tool>` first to detect presence without running it (avoids triggering long initialization).
|
|
46
|
+
|
|
47
|
+
### Phase 3: Emit Checklist Table
|
|
48
|
+
|
|
49
|
+
Print a single Markdown table to stdout in this exact format:
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
## MedSci Skills Setup Diagnostic
|
|
53
|
+
|
|
54
|
+
OS detected: <macOS | Linux | Windows>
|
|
55
|
+
Date: <YYYY-MM-DD>
|
|
56
|
+
|
|
57
|
+
| Component | Status | Detected | Required | Action |
|
|
58
|
+
|---|:---:|---|---|---|
|
|
59
|
+
| Python 3.11+ | ✅ / ❌ | 3.11.9 | 3.11+ | OK / See docs/setup/mac.md Step 2 |
|
|
60
|
+
| R 4.x | ✅ / ❌ | 4.3.1 | 4.0+ | OK / See docs/setup/mac.md Step 3 |
|
|
61
|
+
| Node.js 20+ | ✅ / ❌ | v20.11.1 | v20+ | OK / See docs/setup/mac.md Step 4 |
|
|
62
|
+
| Git | ✅ / ❌ | 2.42.0 | 2.30+ | OK / See docs/setup/<os>.md Step 5 |
|
|
63
|
+
| Claude Code CLI | ✅ / ❌ | 1.5.x | any | OK / See docs/setup/<os>.md Step 6 |
|
|
64
|
+
| MCP: zotero | ✅ / ❌ / ⚠️ | Connected | optional | OK / See docs/setup/mcp-setup.md |
|
|
65
|
+
| MCP: gdrive | ✅ / ❌ / ⚠️ | Connected | optional | OK / See docs/setup/mcp-setup.md |
|
|
66
|
+
| MCP: filesystem | ✅ / ❌ | Connected | recommended | OK / See docs/setup/mcp-setup.md |
|
|
67
|
+
|
|
68
|
+
Summary: <X required components passed, Y missing>
|
|
69
|
+
Next step: <one-sentence action>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Status legend:
|
|
73
|
+
- ✅ Present and meets minimum version
|
|
74
|
+
- ❌ Missing or below minimum version
|
|
75
|
+
- ⚠️ Present but optional and not connected
|
|
76
|
+
|
|
77
|
+
### Phase 4: Suggest Remediation
|
|
78
|
+
|
|
79
|
+
If everything ✅: "Your environment is ready. Try Demo 1 with `cd ~/medsci-skills/demo/01_wisconsin_bc && claude '/orchestrate --e2e'`."
|
|
80
|
+
|
|
81
|
+
If anything ❌ in **required** rows: print the corresponding doc link. Do **not** offer to install — direct the user to follow the doc step. The doc tells them exactly what to copy-paste.
|
|
82
|
+
|
|
83
|
+
If only **optional MCP** rows are ❌: explain that MedSci Skills work without MCP servers but `lit-sync`, `verify-refs`, and `write-paper` are smoother with Zotero MCP. Offer the `docs/setup/mcp-setup.md` link.
|
|
84
|
+
|
|
85
|
+
## Reference Files
|
|
86
|
+
|
|
87
|
+
- `references/setup-checklist.md` — verbatim list of every check this skill runs and the corresponding documentation link
|
|
88
|
+
|
|
89
|
+
## Output Contract
|
|
90
|
+
|
|
91
|
+
| Artifact | Filename | Format |
|
|
92
|
+
|----------|----------|--------|
|
|
93
|
+
| Diagnostic report | stdout (Markdown table) | Markdown |
|
|
94
|
+
| Optional log | `~/.medsci-skills/diagnostic-YYYY-MM-DD.md` | Markdown |
|
|
95
|
+
|
|
96
|
+
If the user asks for a copyable report (e.g., for a GitHub issue), write the diagnostic to the optional log path and tell them where it is.
|
|
97
|
+
|
|
98
|
+
## What This Skill Does NOT Do
|
|
99
|
+
|
|
100
|
+
- **Does not install anything.** No `brew install`, `winget install`, `pip install`, `Rscript -e 'install.packages(...)'`, or any other state-changing command. Read-only diagnostics only.
|
|
101
|
+
- **Does not modify `~/.claude.json` or any MCP configuration.** It only reads `claude mcp list` output.
|
|
102
|
+
- **Does not check skill versions or skill content.** That is the job of `validate_skills.sh` and `manage-project status`.
|
|
103
|
+
- **Does not auto-fix anything.** If a tool is missing, the user must go to the setup doc and follow the steps themselves. This is intentional — auto-installers for system Python and R are a support nightmare for non-developer users.
|
|
104
|
+
|
|
105
|
+
## Anti-Hallucination
|
|
106
|
+
|
|
107
|
+
- **Never fabricate version numbers.** Always run the actual command and report the exact stdout. If the command fails, report the failure verbatim — do not guess what version is "probably" installed.
|
|
108
|
+
- **Never invent doc paths.** The five setup docs are: `docs/setup/README.md`, `docs/setup/mac.md`, `docs/setup/windows.md`, `docs/setup/mcp-setup.md`, `docs/setup/common-issues.md`. Do not link to a doc that does not exist in the repo.
|
|
109
|
+
- **Never claim an MCP server works without verifying via `claude mcp list`.** A configured-but-disconnected server is ⚠️, not ✅.
|
|
110
|
+
- **If `command -v` reports a tool present but the version flag fails**, mark the row ❌ and report the failure command — the install is broken, not just outdated.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Setup Diagnostic Checklist
|
|
2
|
+
|
|
3
|
+
Verbatim list of every check `setup-medsci` runs, with the exact command, the parse rule, and the documentation link to print on failure.
|
|
4
|
+
|
|
5
|
+
## Required Components
|
|
6
|
+
|
|
7
|
+
| ID | Component | Detect command | Version command | Min version | Doc link on failure |
|
|
8
|
+
|---|---|---|---|---|---|
|
|
9
|
+
| R1 | Python 3 | `command -v python3` | `python3 --version` | 3.11.0 | `docs/setup/mac.md#step-2` (Mac) / `docs/setup/windows.md#step-3` (Windows) |
|
|
10
|
+
| R2 | R | `command -v Rscript` | `Rscript --version` (stderr) | 4.0.0 | `docs/setup/mac.md#step-3` / `docs/setup/windows.md#step-4` |
|
|
11
|
+
| R3 | Node.js | `command -v node` | `node --version` | 20.0.0 | `docs/setup/mac.md#step-4` / `docs/setup/windows.md#step-5` |
|
|
12
|
+
| R4 | Git | `command -v git` | `git --version` | 2.30.0 | `docs/setup/mac.md#step-5` / `docs/setup/windows.md#step-6` |
|
|
13
|
+
| R5 | Claude Code CLI | `command -v claude` | `claude --version` | any (latest recommended) | `docs/setup/mac.md#step-6` / `docs/setup/windows.md#step-7` |
|
|
14
|
+
|
|
15
|
+
## Optional Components
|
|
16
|
+
|
|
17
|
+
| ID | Component | Detect command | Status rule | Doc link on missing |
|
|
18
|
+
|---|---|---|---|---|
|
|
19
|
+
| O1 | MCP: zotero | `claude mcp list` | ✅ if "zotero ✓ Connected", ⚠️ if listed but not connected, ❌ if absent | `docs/setup/mcp-setup.md#zotero-mcp` |
|
|
20
|
+
| O2 | MCP: gdrive | `claude mcp list` | ✅ if "gdrive ✓ Connected", ⚠️ if listed but not connected, ❌ if absent | `docs/setup/mcp-setup.md#google-drive--workspace-mcp` |
|
|
21
|
+
| O3 | MCP: pubmed | `claude mcp list` | ✅ if "pubmed ✓ Connected", ⚠️ if listed but not connected, ❌ if absent | `docs/setup/mcp-setup.md#pubmed-mcp-alternative-to-built-in-search-lit` |
|
|
22
|
+
| O4 | MCP: filesystem | `claude mcp list` | ✅ if "filesystem ✓ Connected", ⚠️ if listed but not connected, ❌ if absent | `docs/setup/mcp-setup.md#filesystem-mcp-built-in-usually-pre-configured` |
|
|
23
|
+
| O5 | Zotero desktop | `pgrep -x Zotero` (Mac) / `tasklist /FI "IMAGENAME eq zotero.exe"` (Win) | ✅ if running, ⚠️ if installed but not running, ❌ if not installed | `docs/setup/mac.md#step-7` / `docs/setup/windows.md#step-8` |
|
|
24
|
+
|
|
25
|
+
## Version Comparison Rule
|
|
26
|
+
|
|
27
|
+
For required-version checks (R1-R4), parse the major.minor version from stdout, compare against minimum. If parse fails, mark ❌ and report the parse failure verbatim.
|
|
28
|
+
|
|
29
|
+
Examples of parsing:
|
|
30
|
+
- `Python 3.11.9` → `3.11`, compare to `3.11` → pass
|
|
31
|
+
- `Python 3.10.13` → `3.10`, compare to `3.11` → fail
|
|
32
|
+
- `R scripting front-end version 4.3.1 (2023-06-16)` → `4.3`, compare to `4.0` → pass
|
|
33
|
+
- `v20.11.1` → `20.11`, compare to `20.0` → pass
|
|
34
|
+
- `git version 2.42.0` → `2.42`, compare to `2.30` → pass
|
|
35
|
+
|
|
36
|
+
## Summary Rules
|
|
37
|
+
|
|
38
|
+
After running all checks:
|
|
39
|
+
- **All required ✅**: print "Your environment is ready. Try Demo 1 with `cd ~/medsci-skills/demo/01_wisconsin_bc && claude '/orchestrate --e2e'`."
|
|
40
|
+
- **One or more required ❌**: print "Setup incomplete. Address the ❌ rows above using the linked docs, then re-run `/setup-medsci`."
|
|
41
|
+
- **All required ✅, optional MCP all ❌**: print "Core environment ready. Optional MCP servers (Zotero / Google Drive / PubMed) are not configured — see `docs/setup/mcp-setup.md` for richer integration."
|
|
42
|
+
|
|
43
|
+
## What This Skill Does NOT Check
|
|
44
|
+
|
|
45
|
+
To keep the diagnostic fast and read-only, these are explicitly out of scope:
|
|
46
|
+
- Python package installs (matplotlib, pandas, scikit-learn, etc.) — checked by individual analysis skills when invoked
|
|
47
|
+
- R package installs (metafor, survey, etc.) — checked by `analyze-stats` and `meta-analysis` when invoked
|
|
48
|
+
- Disk space — irrelevant for skill execution
|
|
49
|
+
- Anthropic API quota / rate limits — visible only at runtime
|
|
50
|
+
- Claude Code skill installation — `validate_skills.sh` covers this
|
|
51
|
+
- Zotero library content / collection structure — `lit-sync` and `verify-refs` cover this
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
schema_version: 2
|
|
2
|
+
name: setup-medsci
|
|
3
|
+
layer: A
|
|
4
|
+
owner_domain: environment_setup
|
|
5
|
+
|
|
6
|
+
when_to_use: "Set up the local environment for MedSci Skills (dependencies, tooling checks)."
|
|
7
|
+
when_NOT_to_use: "Installing the skills themselves (use installers/install.py)."
|
|
8
|
+
|
|
9
|
+
inputs:
|
|
10
|
+
- "local machine state"
|
|
11
|
+
outputs:
|
|
12
|
+
- "verified environment / dependency report"
|
|
13
|
+
side_effects:
|
|
14
|
+
- runs_setup_commands
|
|
15
|
+
downstream_consumers:
|
|
16
|
+
- none
|
|
17
|
+
forbidden_actions:
|
|
18
|
+
- install_without_user_consent_for_destructive_actions
|
|
19
|
+
|
|
20
|
+
# v2.1 quality card
|
|
21
|
+
purpose: "Check and prepare the local toolchain (Python/R/CLI deps) needed to run the skills."
|
|
22
|
+
safety_boundaries:
|
|
23
|
+
- "Confirms before destructive or system-wide changes; surfaces what is missing."
|
|
24
|
+
- "Operates locally; does not transmit machine state."
|
|
25
|
+
known_limitations:
|
|
26
|
+
- "Environment coverage is best-effort across OSes; some hosts need manual steps."
|
|
27
|
+
- "No standalone demo; an operational utility."
|
|
28
|
+
validation_commands:
|
|
29
|
+
- "re-run the setup check and confirm all dependencies report present"
|
|
30
|
+
evidence_surface: manual_workflow
|