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