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,1045 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: self-review
|
|
3
|
+
description: Pre-submission self-review for the user's own manuscripts, applying a reviewer perspective. Systematic check across 10 categories with research-type branching. Outputs Anticipated Major/Minor Comments with severity framing and optional R0 numbering for /revise pipeline integration.
|
|
4
|
+
triggers: self-review, pre-submission check, check my paper, reviewer perspective, manuscript self-check
|
|
5
|
+
tools: Read, Write, Edit, Grep, Glob
|
|
6
|
+
model: inherit
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Self-Review Skill
|
|
10
|
+
|
|
11
|
+
You are helping a medical researcher check their own manuscript before journal submission.
|
|
12
|
+
The goal is to anticipate reviewer comments by applying the same critical lens used in
|
|
13
|
+
peer review across medical journals.
|
|
14
|
+
|
|
15
|
+
This is NOT about writing a review. It's about producing an actionable list of
|
|
16
|
+
anticipated reviewer comments with specific fix suggestions, so the manuscript can be
|
|
17
|
+
strengthened before reviewers ever see it.
|
|
18
|
+
|
|
19
|
+
## Optional Flags
|
|
20
|
+
|
|
21
|
+
- `--fix`: After generating the review report, automatically apply fixes for all issues where `fixable_by_ai` is true. Edits the manuscript in place, then reports a diff summary. Does NOT fix issues marked `fixable_by_ai: false` (e.g., missing data, design flaws). Maximum 2 fix-and-re-review iterations.
|
|
22
|
+
- `--json`: Output the structured JSON block (see Phase 3c below) in addition to the markdown report. Default when called from `/write-paper` Phase 7.
|
|
23
|
+
- `--panel`: Run the multi-agent panel review (Phase 2.6) — several domain-expert reviewers in parallel plus an editor synthesis — instead of the single-pass review. Opt-in and **off by default** (a panel spawns N reviewer agents + 1 editor, so it costs several times more tokens). Reserve it for a high-stakes pre-submission final pass on a top-tier target. Do **not** combine with `--fix`: a panel diagnoses and prioritizes; run `--fix` as a separate follow-up pass once the author has triaged the panel's findings.
|
|
24
|
+
|
|
25
|
+
## Severity Framing
|
|
26
|
+
|
|
27
|
+
When flagging issues, classify severity:
|
|
28
|
+
- **Fatal**: Fundamental design flaw that cannot be fixed with existing data (e.g., data leakage
|
|
29
|
+
that invalidates all results, absence of any reference standard, label-feature circularity).
|
|
30
|
+
The manuscript likely needs redesign. Submission would likely result in Reject.
|
|
31
|
+
- **Fixable**: Significant but addressable with existing data (e.g., missing calibration analysis,
|
|
32
|
+
unclear exclusion criteria, absent CIs, incomplete reporting). These are the most actionable findings.
|
|
33
|
+
|
|
34
|
+
Most issues are Fixable. Reserve Fatal for true design-level problems.
|
|
35
|
+
|
|
36
|
+
## Workflow
|
|
37
|
+
|
|
38
|
+
### Phase 1: Intake
|
|
39
|
+
|
|
40
|
+
1. Get the manuscript -- PDF, Word doc, or pasted text.
|
|
41
|
+
2. Ask the user:
|
|
42
|
+
- Target journal? (affects reporting standards and scope expectations)
|
|
43
|
+
- Manuscript type? (original research / review / technical note / letter / meta-analysis / case report)
|
|
44
|
+
- Anything they're already worried about?
|
|
45
|
+
- **Review depth?** The default is a single-pass review. For a high-stakes pre-submission final pass, a multi-agent **panel** (`--panel`, Phase 2.6) is available — several domain-expert reviewers run independently, then an editor consolidates them (more thorough, but it spawns several agents so it costs several times more tokens). On an interactive run, surface this option **once** in one line and offer it; then proceed with the single-pass review unless the user opts in. Do **not** surface or auto-apply the panel when invoked with `--json` or from `/write-paper` — those stay single-pass.
|
|
46
|
+
3. Read the full manuscript.
|
|
47
|
+
4. **SSOT gate — confirm there is one manuscript, not several.** Self-review reads a single
|
|
48
|
+
input file, so a divergence between a legacy working copy and the live submission copy is
|
|
49
|
+
structurally invisible to it. Before a `--panel` run (or any pre-submission pass), check for
|
|
50
|
+
multiple copies and reconcile first:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
find . \( -path '*manuscript*' -o -path '*main_document*' \) -name '*.md' | grep -v node_modules
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
If more than one manuscript-like file exists, confirm which is the SSOT and run
|
|
57
|
+
`/sync-submission`'s divergence gate before reviewing — a `STALE_COPY` (an SSOT numeric claim
|
|
58
|
+
or heading that did not propagate to the other copy) is a P0 that must clear first:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
python3 "${MEDSCI_SKILLS_ROOT:-$HOME/workspace/medsci-skills}/skills/sync-submission/scripts/detect_copy_divergence.py" \
|
|
62
|
+
--ssot <ssot>.md --copy <other-copy>.md
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Review the SSOT copy; do not review a stale copy and pass it.
|
|
66
|
+
|
|
67
|
+
### Phase 2: Systematic Check
|
|
68
|
+
|
|
69
|
+
Run the manuscript through each applicable category below. For each item, assess whether
|
|
70
|
+
a reviewer would raise it as a Major or Minor comment.
|
|
71
|
+
|
|
72
|
+
Use the Research-Type Adaptation table (below) to determine which categories apply fully,
|
|
73
|
+
partially, or not at all for the given manuscript type.
|
|
74
|
+
|
|
75
|
+
#### A. Study Design & Data Integrity
|
|
76
|
+
|
|
77
|
+
| Check | What to look for |
|
|
78
|
+
|-------|-----------------|
|
|
79
|
+
| Patient-level splitting | Are train/val/test splits at the patient level? Is this explicitly stated? |
|
|
80
|
+
| Leakage risk | Any postoperative variable used in a preoperative model? Cohort-wide preprocessing before split? |
|
|
81
|
+
| Input-text contamination | For NLP/LLM extraction tasks, does any supplied report text (clinical history, indication, impression, prior diagnosis, referral text) already contain the target label? If yes, mark as Major unless the input was masked or a no-leaky-field sensitivity analysis is reported. |
|
|
82
|
+
| Temporal independence | Random split within same institution = no temporal independence. Acknowledged? |
|
|
83
|
+
| Analysis unit clarity | Patient vs exam vs lesion vs image -- is the unit consistent throughout? |
|
|
84
|
+
| Sample size per class | For the test set specifically -- are there enough cases per class for stable metrics? |
|
|
85
|
+
|
|
86
|
+
#### B. Reference Standard & Ground Truth
|
|
87
|
+
|
|
88
|
+
| Check | What to look for |
|
|
89
|
+
|-------|-----------------|
|
|
90
|
+
| Definition specificity | Is the reference standard precisely defined? (e.g., "pathological T stage" vs vague "staging") |
|
|
91
|
+
| Timing | Interval between index test and reference standard reported? |
|
|
92
|
+
| Independence | Were ground truth annotators independent from the comparator readers? |
|
|
93
|
+
| Annotation protocol | Number of readers, consensus method, blinding, inter-reader agreement reported? |
|
|
94
|
+
|
|
95
|
+
#### C. Validation & Statistical Reporting
|
|
96
|
+
|
|
97
|
+
| Check | What to look for |
|
|
98
|
+
|-------|-----------------|
|
|
99
|
+
| Confidence intervals | All primary metrics have 95% CIs? |
|
|
100
|
+
| Calibration **[CRITICAL]** | Prediction models: calibration plot + Brier score or slope/intercept MUST be present. AUC alone is insufficient -- mark as Major if absent |
|
|
101
|
+
| Clinical comparator | Is there a clinical-only baseline to show incremental value? |
|
|
102
|
+
| DCA / net benefit | For clinical decision tools: decision curve analysis present? |
|
|
103
|
+
| Fine-tuning baseline | For LLM/NLP fine-tuning, LoRA, prompt-engineering, or multi-agent claims, is there a same-backbone zero-shot or few-shot comparator on the same input, schema, and test split? |
|
|
104
|
+
| Multiple comparisons | If many tests: acknowledged as exploratory, or correction applied? |
|
|
105
|
+
| Paired statistics | If same patients compared across modalities: paired tests used (McNemar, DeLong)? |
|
|
106
|
+
| Effect-size meaningfulness | Scored separately from significance: is each primary effect (OR, HR, beta, Cohen's d, correlation) translated to a real-world unit shift and compared to a minimal clinically important difference? Is significance driven by magnitude rather than sample size? |
|
|
107
|
+
| Power-aware null interpretation | Scored separately from significance, for any **non-significant primary result** (p > 0.05, 95% CI crossing the null): is the analysis powered to *exclude* a clinically meaningful effect? An underpowered null is "not yet established," not "no effect" -- if the upper CI bound still includes a meaningful effect size, a flat "X was not associated with Y" claim overreads the data. Look for reported observed power or a minimum detectable effect that justifies a negative conclusion, and watch for **bilateral over-correction** (a prior "independently associated" overclaim swinging to an equally unsupported "not associated" claim during revision). Undocumented null = Minor; a null that drives a clinical recommendation or a headline negative conclusion without power/CI-compatibility justification = Major. |
|
|
108
|
+
| Equivalence-margin discipline | A claim that two groups/methods are "equivalent," "non-inferior," "indistinguishable," or show "no difference" requires a **pre-stated margin** — a TOST procedure, or the CI compared against a declared MCID. Grep `indistinguishable\|equivalent\|non-inferior\|no difference` and check for an adjacent `margin\|TOST\|MCID\|non-inferiority`; a margin-free equivalence claim is a Major (it converts a failure to reject into positive evidence of no effect). |
|
|
109
|
+
| Interaction-anchor discipline | When synergy / interaction / effect-modification **is** the research question, the null must be anchored to the **interaction parameter** (a likelihood-ratio test of the interaction term, or the interaction OR/HR on one consistent scale), not to a main-effect OR whose upper CI is then read as "no synergy." Grep `synergy\|interaction\|joint effect\|effect modification`; if present, confirm Results carries an `OR_int\|β_int\|LRT\|p_interaction` term. A synergy conclusion resting on a main-effect estimate is a model mis-specification (Major), even when each main effect is individually correct. |
|
|
110
|
+
|
|
111
|
+
#### D. Clinical Framing & Importance
|
|
112
|
+
|
|
113
|
+
| Check | What to look for |
|
|
114
|
+
|-------|-----------------|
|
|
115
|
+
| Intended use | Is the clinical decision point clearly stated? (triage vs diagnosis vs prognosis vs monitoring) |
|
|
116
|
+
| Overclaiming | Does language match evidence? ("will improve" -> "may potentially"; "superior" with overlapping CIs?) |
|
|
117
|
+
| Terminology precision | Key terms defined? (e.g., "perioperative" = when exactly?) |
|
|
118
|
+
| Title-content alignment | Does the title accurately reflect what was actually done? |
|
|
119
|
+
| Novelty statement | What does this study add beyond existing literature? Is this explicitly stated? |
|
|
120
|
+
| Substantive novelty differentiation | For AI/LLM extraction papers, does the Introduction name 2-3 close prior papers/systems and state the concrete delta (new task, dataset, workflow, method, validation, or clinical decision point), rather than merely saying the method is novel? |
|
|
121
|
+
| Clinical importance | Would the findings change clinical practice or research direction? Is this articulated? |
|
|
122
|
+
| Decision impact | Does the manuscript state what decision, workflow step, or downstream action would change if the model is correct? A text-only phenotype that does not alter triage, treatment, surveillance, enrichment, or research operations has weak clinical utility even if accuracy is high. |
|
|
123
|
+
| Added value / actionability | Scored separately from novelty: does the finding add value over a measure already in routine use, or is it "real but redundant" (restates a standard test)? At the typical effect size, would a clinician act on it for an individual? |
|
|
124
|
+
| Endpoint↔conclusion scope **[CRITICAL]** | Does the conclusion's *action* exceed what the design or endpoint supports? A cross-sectional / single-visit study cannot license a prognostic or surveillance claim (rescreen interval, disease progression); a binary surrogate endpoint (present/absent, >0) is risk stratification, not a care directive (defer/withhold/initiate therapy). Both are documented anti-patterns. |
|
|
125
|
+
|
|
126
|
+
Run the deterministic scope gate:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
python3 "${CLAUDE_SKILL_DIR}/scripts/check_scope_coherence.py" \
|
|
130
|
+
--manuscript manuscript.md --out qc/scope_coherence.json --strict
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
`CROSS_SECTIONAL_PROGNOSTIC` and `SURROGATE_CARE_DIRECTIVE` are Anticipated Major Comments (category: D. Clinical Framing). The gate is conservative — it fires only when a design/endpoint signal and a conclusion-region action verb co-occur.
|
|
134
|
+
|
|
135
|
+
#### E. Reproducibility
|
|
136
|
+
|
|
137
|
+
| Check | What to look for |
|
|
138
|
+
|-------|-----------------|
|
|
139
|
+
| Preprocessing details | All steps listed in order? Normalization, augmentation, resampling specified? |
|
|
140
|
+
| Model details | Architecture, optimizer, LR, batch size, epochs, early stopping reported? |
|
|
141
|
+
| Segmentation protocol | ROI definition, reader experience, blinding, tool used? |
|
|
142
|
+
| Hardware/software | Inference environment, software versions, code availability? |
|
|
143
|
+
| Scanner/protocol info | For imaging studies: scanner model, sequence parameters, contrast protocol? |
|
|
144
|
+
| Data/code availability | Is a data availability statement included? Code shared or reason for not sharing stated? |
|
|
145
|
+
|
|
146
|
+
#### F. Reporting Completeness
|
|
147
|
+
|
|
148
|
+
| Check | What to look for |
|
|
149
|
+
|-------|-----------------|
|
|
150
|
+
| Abstract-body consistency | Numbers in Abstract match Tables/Results? |
|
|
151
|
+
| Table/Figure accuracy | Cross-check key values between tables, figures, and text |
|
|
152
|
+
| Follow-up duration | For survival/prognosis: median follow-up with IQR reported? |
|
|
153
|
+
| Ethics | All participating institutions' IRB approval documented? Patient consent described? |
|
|
154
|
+
| Missing data | Handling of incomplete cases described? |
|
|
155
|
+
| CONSORT/STARD/TRIPOD flow | Appropriate flow diagram present with patient counts at each step? |
|
|
156
|
+
| Funding & COI | Funding sources and competing interests disclosed? |
|
|
157
|
+
|
|
158
|
+
#### G. Reporting Guideline Compliance
|
|
159
|
+
|
|
160
|
+
Match the manuscript type to the appropriate checklist and verify key items:
|
|
161
|
+
|
|
162
|
+
| Manuscript type | Checklist | Critical items to verify |
|
|
163
|
+
|----------------|-----------|------------------------|
|
|
164
|
+
| Diagnostic accuracy | STARD / STARD-AI | Flow diagram, reference standard, spectrum |
|
|
165
|
+
| Prediction model (non-AI) | TRIPOD 2015 | Model development vs validation, calibration, missing data |
|
|
166
|
+
| Prediction model (AI/ML) | TRIPOD+AI 2024 | Model development vs validation, calibration, leakage, fairness |
|
|
167
|
+
| AI / Radiomics | CLAIM 2024 / CLEAR | Feature selection transparency, external validation |
|
|
168
|
+
| RCT | CONSORT / CONSORT-AI | Randomization, blinding, ITT |
|
|
169
|
+
| Systematic review (interventions) | PRISMA 2020 | Search strategy, screening, risk of bias |
|
|
170
|
+
| Meta-analysis (observational) | MOOSE + PRISMA 2020 | Confounding assessment, heterogeneity, publication bias |
|
|
171
|
+
| Observational | STROBE | Confounding, selection bias, missing data |
|
|
172
|
+
| Reliability / agreement | GRRAS | ICC model/type, rater description, measurement protocol |
|
|
173
|
+
| Educational | SQUIRE 2.0 | Intervention description, outcome measures, context |
|
|
174
|
+
| Case report | CARE | Timeline, diagnostic reasoning, informed consent |
|
|
175
|
+
| Surgical | STROBE-Surgery | Surgeon experience, technique details, complications |
|
|
176
|
+
|
|
177
|
+
For a full item-by-item audit, run `/check-reporting` on this manuscript. If it has already
|
|
178
|
+
been run, reference its results and flag any MISSING items as Anticipated Major/Minor Comments.
|
|
179
|
+
If not yet run, flag: "Full reporting guideline compliance not yet audited -- run `/check-reporting`
|
|
180
|
+
before submission for item-level assessment."
|
|
181
|
+
|
|
182
|
+
#### H. Circularity
|
|
183
|
+
|
|
184
|
+
| Check | What to look for |
|
|
185
|
+
|-------|-----------------|
|
|
186
|
+
| Label-feature overlap | Is the prediction label derived from the same data source as any input features? (e.g., NLP-extracted label + text-derived features from same reports) |
|
|
187
|
+
| Tautological prediction | Does the model predict something that is already encoded in its inputs? |
|
|
188
|
+
| Circular validation | Is the validation set constructed using information from the training process? |
|
|
189
|
+
|
|
190
|
+
#### I. Protocol Heterogeneity
|
|
191
|
+
|
|
192
|
+
| Check | What to look for |
|
|
193
|
+
|-------|-----------------|
|
|
194
|
+
| Multi-site acquisition | If multi-site: are scanner models, protocols, and acquisition parameters reported per site? |
|
|
195
|
+
| Harmonization | For imaging or lab features: was harmonization applied (ComBat, z-scoring)? If not, acknowledged? |
|
|
196
|
+
| Temporal protocol drift | For longitudinal data: did acquisition protocols change over the study period? |
|
|
197
|
+
|
|
198
|
+
#### J. Method Transparency
|
|
199
|
+
|
|
200
|
+
| Check | What to look for |
|
|
201
|
+
|-------|-----------------|
|
|
202
|
+
| Model provenance | Is it clear where the model came from? (in-house vs vendor-provided vs open-source) |
|
|
203
|
+
| Training vs fine-tuning | If pre-trained: was the model fine-tuned on study data? If vendor-provided: any access to training data composition? |
|
|
204
|
+
| Proprietary limitations | For commercial AI or tools: are known limitations acknowledged? Can results be independently reproduced? |
|
|
205
|
+
| Classical-style body conventions | Does the body carry an AI tell or a policy violation a senior reviewer flags on sight — a `§` symbol, an in-body AI-disclosure paragraph, eligibility criteria as prose, mixed OR/HR decimal places, or em-dash overuse? |
|
|
206
|
+
|
|
207
|
+
Run the deterministic classical-style lint (these are all greps, so they belong in a gate, not eyeballing):
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
python3 "${CLAUDE_SKILL_DIR}/scripts/check_classical_style.py" \
|
|
211
|
+
--manuscript manuscript.md --out qc/classical_style.json --strict
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
`SECTION_SYMBOL` and `INBODY_AI_DISCLOSURE` are Major (the `§` count must be 0; the AI-disclosure paragraph belongs on the title page for a classical / senior-MA target, not the body). `ELIGIBILITY_PROSE`, `DECIMAL_INCONSISTENCY`, and `EM_DASH_OVERUSE` are Minor. This is the self-review-side mirror of `/write-paper` Step 7.1's classical QC (manuscript-style-classical §5/§6/§7/§8).
|
|
215
|
+
|
|
216
|
+
#### K. Reviewer-team consistency (SR/MA-only; fabrication-grade)
|
|
217
|
+
|
|
218
|
+
| Check | What to look for |
|
|
219
|
+
|-------|-----------------|
|
|
220
|
+
| DUAL vs SINGLE conjunction **[CRITICAL]** | Methods or PROSPERO claims dual independent reviewers AND Discussion/Limitations admits single primary reviewer + 20% sample (or "deferred to before submission")? Mark as **MAJOR**, fabrication-grade. |
|
|
221
|
+
| LLM-as-reviewer **[CRITICAL]** | A per-study extraction JSON whose `reviewer`/`screener`/`extractor` field is an LLM (Claude, GPT-4, Gemini, "LLM")? An LLM is a tool, not an independent reviewer — listing it as one misrepresents the team. **Fatal**, regardless of the prose. |
|
|
222
|
+
| Deferred mitigation | A future-tense mitigation promise — "a 20% sample **will be completed before submission**" — unmet at circulation? The future tense is the tell that the work is not done. **MAJOR**. |
|
|
223
|
+
|
|
224
|
+
Run the deterministic check at Phase 2 entry (pass the extraction JSON — a file or
|
|
225
|
+
a directory of per-study JSONs — so the prose↔JSON↔confession 3-way is covered):
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
python "${CLAUDE_SKILL_DIR}/scripts/check_reviewer_team_consistency.py" \
|
|
229
|
+
--manuscript manuscript.md \
|
|
230
|
+
--prospero prospero/record.md \
|
|
231
|
+
--extraction-json extraction/ \
|
|
232
|
+
--out _audit_self/reviewer_team_consistency.md
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Exit 1 = MAJOR red flag. The JSON sidecar carries `dual_hits`, `single_hits`,
|
|
236
|
+
`llm_reviewer_hits`, and `deferred_mitigation_hits`. Any of the DUAL+SINGLE
|
|
237
|
+
conjunction, an LLM reviewer field, or a deferred mitigation trips it. Either of
|
|
238
|
+
the dual/single claims alone is fine; the conjunction is read by reviewers as
|
|
239
|
+
fabrication. Resolution path:
|
|
240
|
+
1. Honest Methods/PROSPERO update (single-reviewer execution disclosed), OR
|
|
241
|
+
2. Limitations confession rewritten if dual review was actually completed.
|
|
242
|
+
|
|
243
|
+
### Research-Type Adaptation
|
|
244
|
+
|
|
245
|
+
Not all categories apply equally to every study type. Use this routing table:
|
|
246
|
+
|
|
247
|
+
| Category | AI/ML | Observational | Educational | Meta-Analysis | Case Report | Surgical |
|
|
248
|
+
|----------|:-----:|:------------:|:-----------:|:------------:|:-----------:|:--------:|
|
|
249
|
+
| A. Study Design | Full | Full | Partial | N/A | N/A | Full |
|
|
250
|
+
| B. Reference Standard | Full | Full | N/A | Per-study | Partial | Full |
|
|
251
|
+
| C. Validation & Stats | Full | Full | Full | Special* | Partial | Full |
|
|
252
|
+
| D. Clinical Framing | Full | Full | Full | Full | Full | Full |
|
|
253
|
+
| E. Reproducibility | Full | Partial | Partial | Partial | N/A | Full |
|
|
254
|
+
| F. Reporting | Full | Full | Full | Full | Full | Full |
|
|
255
|
+
| G. Guideline Compliance | Full | Full | Full | Full | Full | Full |
|
|
256
|
+
| H. Circularity | Full | Partial | N/A | N/A | N/A | Partial |
|
|
257
|
+
| I. Protocol Heterogeneity | Full | Full | N/A | Per-study | N/A | Full |
|
|
258
|
+
| J. Method Transparency | Full | Partial | Partial | N/A | N/A | Partial |
|
|
259
|
+
| K. Reviewer-team consistency | N/A | N/A | N/A | Full | N/A | N/A |
|
|
260
|
+
|
|
261
|
+
*Meta-analysis: Replace C with heterogeneity assessment (I-squared, prediction intervals),
|
|
262
|
+
publication bias (funnel plot, Egger), and sensitivity/subgroup analyses.
|
|
263
|
+
|
|
264
|
+
**Type-Specific Additional Checks:**
|
|
265
|
+
|
|
266
|
+
- **Observational studies**: Confounding assessment (DAG or adjustment strategy), selection bias, exposure measurement validity. Run **Phase 2.5e (Confounding Completeness)** and apply the O1–O6 probes in `references/domain-probes/observational_confounding.md`.
|
|
267
|
+
- **Educational studies**: Learning outcome measurement validity, Kirkpatrick level, control group adequacy, curriculum fidelity
|
|
268
|
+
- **Meta-analyses**: Search comprehensiveness (2+ databases), screening reproducibility (2 reviewers), RoB assessment per study, GRADE certainty
|
|
269
|
+
- **Case reports**: Diagnostic reasoning transparency, timeline completeness, informed consent, generalizability disclaimer
|
|
270
|
+
- **Surgical studies**: Learning curve consideration, surgeon volume/experience, complication grading (Clavien-Dindo), operative detail completeness
|
|
271
|
+
|
|
272
|
+
**Domain probe modules (load when the manuscript type matches):**
|
|
273
|
+
|
|
274
|
+
These modules carry the same domain-specific critique probes used by `/peer-review`, vendored here so self-review reaches the same depth (in particular, survival/time-to-event manuscripts now get a dedicated probe set that the routing table above does not otherwise cover).
|
|
275
|
+
|
|
276
|
+
| Manuscript type / signal | Probe module |
|
|
277
|
+
|---|---|
|
|
278
|
+
| Systematic Review / Meta-Analysis | `references/domain-probes/sr_ma.md` (P0–P10) |
|
|
279
|
+
| Time-to-event / survival / prognostic model (Cox, Fine-Gray, DeepSurv, nomogram, risk-stratification cutoff) | `references/domain-probes/survival_prognostic.md` (S1–S8) |
|
|
280
|
+
| Radiomic feature reproducibility / acquisition-parameter sweep / reliability-based feature filtering | `references/domain-probes/radiomics.md` (R1–R4) |
|
|
281
|
+
| Narrative / review article / primer / state-of-the-art | `references/domain-probes/narrative_review.md` (RV1–RV8) |
|
|
282
|
+
| AI/ML primary study with a clinical claim (generalizable / outperforms clinicians / deployment-ready / can replace a reader) | `references/domain-probes/ai_overclaiming.md` (AO0–AO4) |
|
|
283
|
+
|
|
284
|
+
When the manuscript matches a row, read `${CLAUDE_SKILL_DIR}/references/domain-probes/<module>.md` and apply each probe as an additional source of Anticipated Major / Minor Comments. The module severity words (MAJOR / MINOR) map to this skill's framing as follows: a conclusion-threatening or design-level finding becomes a **Fatal** Anticipated Major Comment, a reporting-level finding becomes a **Fixable** Anticipated Minor Comment, and each is tagged with the closest category letter (A–K). These probes **complement** categories A–K above; they do not replace them. (The modules are vendored byte-identical from `/peer-review`; do not edit one copy only — run `python3 scripts/check_domain_probe_sync.py --sync`.)
|
|
285
|
+
|
|
286
|
+
### Phase 2.5: Numerical Cross-Verification (Internal)
|
|
287
|
+
|
|
288
|
+
Before generating the report, verify internal consistency:
|
|
289
|
+
|
|
290
|
+
1. **Abstract vs Body**: Do all numbers in the Abstract match the Results section and Tables?
|
|
291
|
+
2. **Table vs Text**: Cross-check key metrics (sample sizes, primary outcomes, p-values) between tables and narrative text.
|
|
292
|
+
3. **Figure vs Text**: Do figure legends match the data described in Results?
|
|
293
|
+
4. **Percentage arithmetic**: Verify that n/N percentages are calculated correctly (e.g., 23/150 = 15.3%, not 15.0%).
|
|
294
|
+
5. **CI plausibility**: Do confidence intervals seem reasonable given sample sizes?
|
|
295
|
+
6. **Rate back-calculation**: every reported rate must invert to its own numerator/denominator — an incidence rate ≈ events / person-years × scale (±rounding). A rate that does not recompute from the stated events and person-time (or that implies more events than the cohort can supply) is a Major, not a Minor.
|
|
296
|
+
7. **Exclusion-cascade and complete-case arithmetic** (cohort/observational): the STROBE flow must balance — start N − Σ(exclusions) == final analytic N — and any complete-case statement must balance — total − missing == complete. A footnote N that does not equal the subtraction is a Major.
|
|
297
|
+
|
|
298
|
+
For cohort/observational manuscripts, run the deterministic gate instead of eyeballing it (it parses prose equations + GFM tables, and recomputes from a committed CSV when given one):
|
|
299
|
+
|
|
300
|
+
```bash
|
|
301
|
+
python3 "${CLAUDE_SKILL_DIR}/scripts/check_cohort_arithmetic.py" \
|
|
302
|
+
--manuscript manuscript.md --data analysis/strata.csv \
|
|
303
|
+
--out qc/cohort_arithmetic.json --strict
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
`RATE_BACKCALC` / `CASCADE_SUM` / `PARTITION_OVERLAP` rows are Anticipated Major Comments (category: A. Study Design & Data Integrity); the partition check is the Phase 2.5b cohort branch below. Flag any remaining internal-consistency discrepancies as Anticipated Minor Comments (category: F. Reporting Completeness).
|
|
307
|
+
|
|
308
|
+
### Phase 2.5a: Numerical Source-Fidelity Audit (External)
|
|
309
|
+
|
|
310
|
+
Internal consistency (Phase 2.5) is necessary but not sufficient. Numbers can be fully self-
|
|
311
|
+
consistent across Abstract / Table / Text and still be wrong at the source — a single
|
|
312
|
+
transcription error propagates cleanly through every downstream stage.
|
|
313
|
+
|
|
314
|
+
**Precedent failure pattern:**
|
|
315
|
+
> A revision-era comparative meta-analysis reported a safety-outcome 2x2 with the
|
|
316
|
+
> arm-level events direction-reversed relative to the primary-source Table. Internal
|
|
317
|
+
> consistency passed because Abstract, Discussion, Table, and the R script all echoed
|
|
318
|
+
> the same wrong values. The reversal was caught only by an explicit second-pass audit
|
|
319
|
+
> that randomly sampled claims and traced each back to the primary paper.
|
|
320
|
+
|
|
321
|
+
**When to run:** MA revisions, submissions, or any review where the user mentions "check
|
|
322
|
+
against the source," "verify extraction," or "random sample."
|
|
323
|
+
|
|
324
|
+
**Inputs the reviewer should expect:**
|
|
325
|
+
- `manuscript.md` (or .docx converted to .md)
|
|
326
|
+
- `extraction_final.csv` (or equivalent data-extraction spreadsheet)
|
|
327
|
+
- A directory of primary-source PDFs (or equivalent accessible text)
|
|
328
|
+
|
|
329
|
+
**Procedure:**
|
|
330
|
+
|
|
331
|
+
1. **Inventory numerical claims** in Abstract, Results, and Discussion (patterns: `\\d+/\\d+`,
|
|
332
|
+
`\\d+\\.\\d+%`, `(95% CI:`, `p\\s*=\\s*0\\.`, `I\\^2`, `n\\s*=`, etc.).
|
|
333
|
+
|
|
334
|
+
2. **Stratified random sample** — draw 5 claims across: (a) pooled estimates, (b) subgroup
|
|
335
|
+
/ sensitivity results, (c) comparative-arm specific values, (d) study-level numbers
|
|
336
|
+
(first-cited in narrative), (e) a claim introduced during revision if the draft is post-v1.
|
|
337
|
+
Comparative-arm specific values and revision-introduced numbers are the two highest-
|
|
338
|
+
yield strata — always include one of each.
|
|
339
|
+
|
|
340
|
+
3. **For each sampled claim, traverse 3 layers:**
|
|
341
|
+
- **Layer 1 (Manuscript → CSV):** Find the row / column in the extraction CSV.
|
|
342
|
+
- **Layer 2 (CSV → Primary source):** Locate the exact Table, Figure, or paragraph in the
|
|
343
|
+
original paper. Record page number.
|
|
344
|
+
- **Layer 3 (Analysis script → CSV):** If the claim came from an analysis script, read the
|
|
345
|
+
script and confirm its input value matches the CSV cell.
|
|
346
|
+
|
|
347
|
+
4. **Record results in a table** and append to the report:
|
|
348
|
+
|
|
349
|
+
| Claim (manuscript location) | CSV row/col | Primary source (paper, Table/Fig, page) | Script input | Match? |
|
|
350
|
+
|---|---|---|---|---|
|
|
351
|
+
|
|
352
|
+
5. **Any mismatch is a Major Comment (M-level), not Minor.** Mismatches that reverse a
|
|
353
|
+
direction or change a significance boundary are P0 blockers for submission.
|
|
354
|
+
|
|
355
|
+
**Revision-specific rule:** If the manuscript contains `[VERIFY-CSV]` tags, treat each as a
|
|
356
|
+
mandatory audit item regardless of the sampling size. The tag exists precisely because that
|
|
357
|
+
number was introduced after the initial extraction pass and has not yet been independently
|
|
358
|
+
checked.
|
|
359
|
+
|
|
360
|
+
**Hand-entered analysis-script inputs are a code smell.** When Layer 3 reveals a `matrix(...)`,
|
|
361
|
+
`c(1, 2, 3)`, or `data.frame(...)` line with numerical data and no CSV-coordinate comment,
|
|
362
|
+
escalate to a Major Comment even if the audited values happen to match — the next revision
|
|
363
|
+
will re-introduce the same risk.
|
|
364
|
+
|
|
365
|
+
### Phase 2.5a-2: Design & Power Statistic Provenance (computed, not extracted)
|
|
366
|
+
|
|
367
|
+
Phase 2.5a traces data-derived numbers back to a CSV and a primary source. **Design and power
|
|
368
|
+
statistics are a different class and a common blind spot**: the minimum detectable effect
|
|
369
|
+
(MDE), a-priori or post-hoc power, the required sample size for a future trial, and the
|
|
370
|
+
a-priori effect-size assumptions behind them are *computed*, not extracted, so they have no
|
|
371
|
+
CSV row or source-paper Table to trace to. They routinely escape both the internal-consistency
|
|
372
|
+
check and the source-fidelity audit above.
|
|
373
|
+
|
|
374
|
+
**Precedent failure pattern:**
|
|
375
|
+
> A pilot study reported a minimum detectable effect of d = 1.67. No standard two-sample method
|
|
376
|
+
> reproduces it (the correct value at the stated n, alpha, and power was about 1.24). It survived
|
|
377
|
+
> several review rounds because no committed script computed it — the value had been hand-entered —
|
|
378
|
+
> and one reviewer even cited the figure approvingly. In the same manuscript, a set of future-trial
|
|
379
|
+
> sample sizes was numerically correct but had been produced with an exact noncentral-t tool, while
|
|
380
|
+
> the committed script used a normal approximation and printed different numbers: right value, no
|
|
381
|
+
> reproducible provenance.
|
|
382
|
+
|
|
383
|
+
**Procedure:**
|
|
384
|
+
|
|
385
|
+
1. **Inventory design/power claims.** Search for: "minimum detectable", "detectable effect",
|
|
386
|
+
"MDE", "power" (80% / 90% / "1 − beta"), "sample size", "n = N per arm/group", "to detect",
|
|
387
|
+
"powered to", "a priori", and any a-priori planning effect size (Cohen's d / f / OR used for
|
|
388
|
+
sizing).
|
|
389
|
+
|
|
390
|
+
2. **Require a reproducible source for each.** Every such value must be produced by committed
|
|
391
|
+
code (e.g. `statsmodels` `TTestIndPower`, a G*Power-equivalent, or an explicit noncentral-t
|
|
392
|
+
computation), with the inputs stated in the manuscript: n per arm, alpha, power, allocation
|
|
393
|
+
ratio, and one- vs two-sided. A value with no committed-code source is the highest-risk case.
|
|
394
|
+
|
|
395
|
+
3. **Recompute independently** with a standard tool, then classify:
|
|
396
|
+
- **Not reproducible by any standard method** → likely a calculation error (Major; P0 if it
|
|
397
|
+
is a headline claim). This is the d = 1.67-vs-1.24 case above.
|
|
398
|
+
- **Reproducible only by a method the committed script does not implement** (e.g. the
|
|
399
|
+
manuscript value is noncentral-t but the script is a normal approximation) → provenance /
|
|
400
|
+
method drift. The number may be correct, but update the committed code so it reproduces the
|
|
401
|
+
reported value (Major: reproducibility, not correctness).
|
|
402
|
+
|
|
403
|
+
4. **Method-consistency across the manuscript.** All power, sample-size, and MDE statistics in
|
|
404
|
+
one paper should share a single method family (e.g. all noncentral-t). A mix of normal
|
|
405
|
+
approximation and exact-t within one manuscript signals that some values were computed in an
|
|
406
|
+
ad-hoc side tool.
|
|
407
|
+
|
|
408
|
+
5. **Any non-reproducible design/power value is a Major Comment;** a non-reproducible headline
|
|
409
|
+
power or MDE claim is a P0 submission blocker.
|
|
410
|
+
|
|
411
|
+
**Hand-entered design/power statistics are a code smell even when correct.** If no committed
|
|
412
|
+
function emits the value, flag it: the next revision will re-introduce the risk, and a reviewer
|
|
413
|
+
who recomputes will not match the manuscript.
|
|
414
|
+
|
|
415
|
+
### Phase 2.5b: Screening-Count Reconciliation from ID Sets (SR/MA + observational tier/stratum)
|
|
416
|
+
|
|
417
|
+
Internal consistency across Abstract/Methods/Results (Phase 2.5) + source fidelity of 2×2 and
|
|
418
|
+
effect-size numbers (Phase 2.5a) do **not** cover study-count arithmetic. The latter is a
|
|
419
|
+
separate failure mode: a prior-draft prose total ("30 → 32 after FLAG consensus") can survive
|
|
420
|
+
every downstream pass because Abstract, Methods, Results, Discussion, Figure 1 caption, and
|
|
421
|
+
even the supplementary consensus file all cite the same wrong number back to each other.
|
|
422
|
+
|
|
423
|
+
**Precedent failure pattern (a PRISMA-DTA meta-analysis revision):**
|
|
424
|
+
> A late-revision manuscript reported study counts of k_qualitative = 32, k_narrative-only = 10,
|
|
425
|
+
> k_FT-excluded = 46. An ID-level recount against the screening TSV and consensus sheet (with
|
|
426
|
+
> FLAG additions reconciled) yielded k_qualitative = 24 with only 2 narrative-only studies
|
|
427
|
+
> (k_FT-excluded = 54). The original 32/10/46 figures came from an early-draft assumption that
|
|
428
|
+
> was never reconciled against the ID-level artifacts; downstream files (consensus markdown,
|
|
429
|
+
> supplementary tables, edit plans) propagated the same wrong total. Caught only by an explicit
|
|
430
|
+
> ID-set recount against the screening TSV and consensus spreadsheet, verified independently
|
|
431
|
+
> by an adversarial audit.
|
|
432
|
+
|
|
433
|
+
**When to run:** any SR/MA manuscript revision, regardless of stage. Run before Phase 3.
|
|
434
|
+
|
|
435
|
+
**Inputs:**
|
|
436
|
+
- Screening TSV with one row per full-text-reviewed record and an include/exclude column
|
|
437
|
+
- Consensus spreadsheet (Excel/CSV) with one row per record requiring adjudication and a
|
|
438
|
+
`Consensus` column (typical values: `Exclude`, `Include-qualitative`, `Include-bivariate`)
|
|
439
|
+
- Any FLAG-adjudicated inclusion log documenting records added to the qualitative pool
|
|
440
|
+
outside the primary screening TSV
|
|
441
|
+
- The manuscript's Table 1 (or equivalent): the definitive list of studies contributing to
|
|
442
|
+
the primary quantitative synthesis
|
|
443
|
+
|
|
444
|
+
**Procedure:**
|
|
445
|
+
|
|
446
|
+
1. **Enumerate the ID sets:**
|
|
447
|
+
- A = set of IDs marked INCLUDE in the screening TSV
|
|
448
|
+
- B = set of IDs marked Exclude in the consensus spreadsheet
|
|
449
|
+
- C = set of IDs marked Include-qualitative in the consensus spreadsheet
|
|
450
|
+
- T = set of IDs represented in Table 1 (via author/year cross-match)
|
|
451
|
+
|
|
452
|
+
2. **Derive canonical totals:**
|
|
453
|
+
- k_qualitative = |A \ B| + |C|
|
|
454
|
+
- k_bivariate = |T|
|
|
455
|
+
- k_narrative-only = k_qualitative − k_bivariate = |(A ∪ C) \ B \ T|
|
|
456
|
+
- k_FT-excluded = |screening TSV rows| − |A| + |B ∩ A| + |(B \ A) encountered at FT stage|
|
|
457
|
+
|
|
458
|
+
3. **List the narrative-only IDs explicitly** — this is the highest-yield cross-check. A
|
|
459
|
+
manuscript claiming "10 narrative-only studies" while the (A ∪ C) \ B \ T set contains
|
|
460
|
+
only 2 IDs is an immediate P0 finding.
|
|
461
|
+
|
|
462
|
+
4. **Compare each derived total against the manuscript's prose claim** in Abstract, Methods
|
|
463
|
+
§Study Selection, Results §Study Selection, Figure 1 caption, Discussion §Limitations,
|
|
464
|
+
and any References §Narrative-Only heading. Any mismatch between derived total and
|
|
465
|
+
manuscript prose = P0 Major Comment, blocking submission.
|
|
466
|
+
|
|
467
|
+
5. **Record results in a short reconciliation block** and append to the report:
|
|
468
|
+
|
|
469
|
+
```
|
|
470
|
+
| Quantity | Manuscript claim | ID-derived value | Status |
|
|
471
|
+
|---|---|---|---|
|
|
472
|
+
| k_full-text | 78 | 78 | ✓ |
|
|
473
|
+
| k_qualitative | 32 | 24 | ✗ P0 |
|
|
474
|
+
| k_bivariate | 22 | 22 | ✓ |
|
|
475
|
+
| k_narrative-only | 10 | 2 (IDs 120, 474) | ✗ P0 |
|
|
476
|
+
| k_FT-excluded | 46 | 54 | ✗ P0 |
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
**Any "N → M" transition claim in a consensus summary (e.g., "30 → 32 after FLAG
|
|
480
|
+
consensus") that is not backed by an enumerable ID addition/subtraction set is itself a
|
|
481
|
+
Major Comment**, because the transition is unverifiable by downstream audit. Require
|
|
482
|
+
conversion of every such claim to explicit ID lists before closing the report.
|
|
483
|
+
|
|
484
|
+
**Observational tier/stratum branch.** The same set-recount logic applies when a cohort
|
|
485
|
+
manuscript presents an ordinal tier or mutually-exclusive stratum split. A partition that
|
|
486
|
+
is claimed to be disjoint must satisfy `Σ(stratum N) == unique total` and
|
|
487
|
+
`Σ(stratum events) == total events`; denominators that sum *above* the unique cohort
|
|
488
|
+
double-count subjects, and a table where every stratum n equals the grand total is a
|
|
489
|
+
stratum-total mis-entry rather than a partition. Run `check_cohort_arithmetic.py`
|
|
490
|
+
(Phase 2.5 above) with the stratum CSV — its `PARTITION_OVERLAP` verdict is the cohort
|
|
491
|
+
analogue of an ID-set mismatch and is a P0 Major:
|
|
492
|
+
|
|
493
|
+
```bash
|
|
494
|
+
python3 "${CLAUDE_SKILL_DIR}/scripts/check_cohort_arithmetic.py" \
|
|
495
|
+
--manuscript manuscript.md --data analysis/strata.csv --strict
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
Also confirm the reference (baseline) row of any stratified hazard/odds table is present
|
|
499
|
+
and labelled; a missing reference category makes the other strata uninterpretable.
|
|
500
|
+
|
|
501
|
+
### Phase 2.5c: Reference Hallucination Scan
|
|
502
|
+
|
|
503
|
+
Numerical audits (2.5/2.5a/2.5b) cover in-text numbers; they do **not** cover reference-list integrity. LLM-drafted or co-author-handed-in bibliographies frequently contain fabricated DOIs, wrong author/year combinations for a real DOI, or plausible-looking references that never existed. These slip past human proofreading because the surface form looks canonical.
|
|
504
|
+
|
|
505
|
+
**When to run:** every manuscript at self-review, regardless of stage. Mandatory before submission and before any revision circulation to co-authors or the editor.
|
|
506
|
+
|
|
507
|
+
**Procedure:**
|
|
508
|
+
|
|
509
|
+
1. **Locate the bibliography.** From `SSOT.yaml` → `truth.refs_bib` (fallback `manuscript/_src/refs.bib` for legacy projects). If `SSOT.yaml` is absent, scan `references/library.bib` as a last resort.
|
|
510
|
+
|
|
511
|
+
2. **Invoke `/verify-refs`** on the resolved bib. The skill writes `qc/reference_audit.json` with a per-entry verdict (`VERIFIED` / `FABRICATED` / `UNVERIFIED`) and a top-level `submission_safe` boolean.
|
|
512
|
+
|
|
513
|
+
```bash
|
|
514
|
+
# equivalent CLI form (same result as invoking the skill).
|
|
515
|
+
# verify_refs.py takes a positional input (the .bib path) and writes its audit
|
|
516
|
+
# to <project-root>/qc/reference_audit.json (path derived from --project-root).
|
|
517
|
+
BIB="$(python3 -c "import yaml; print(yaml.safe_load(open('SSOT.yaml'))['truth']['refs_bib'])")"
|
|
518
|
+
python3 skills/verify-refs/scripts/verify_refs.py "$BIB" --project-root . --strict
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
When both reference QC and cross-reference QC are needed in one pass, prefer
|
|
522
|
+
the master orchestration entry point in `/manage-refs` — it chains
|
|
523
|
+
`check_citation_keys.py` → `verify_refs.py --strict` → `render_pandoc.sh`
|
|
524
|
+
(optional) → `check_xref.py --strict` and writes
|
|
525
|
+
`qc/pre_submission_gate.json` as the single submission-readiness artifact:
|
|
526
|
+
|
|
527
|
+
```bash
|
|
528
|
+
bash "${MEDSCI_SKILLS_ROOT:-$HOME/workspace/medsci-skills}/skills/manage-refs/scripts/pre_submission_gate.sh" \
|
|
529
|
+
--md manuscript/manuscript.md \
|
|
530
|
+
--bib manuscript/_src/refs.bib \
|
|
531
|
+
--docx submission/<journal>/manuscript.docx \
|
|
532
|
+
--allow-separate-attachments # see Phase 2.5d for when this is appropriate
|
|
533
|
+
```
|
|
534
|
+
|
|
535
|
+
3. **Read `qc/reference_audit.json`.** For each entry not marked `VERIFIED`, add a row to the reconciliation block below. `FABRICATED` entries are P0 Major Comments (block submission). `UNVERIFIED` entries are Minor Comments unless the manuscript is at a circulation/submission gate, in which case they escalate to Major. For each `duplicate_findings[]` entry (category `duplicate_pmid` / `duplicate_doi`), add a Major Comment row noting the duplicated `ref_ids` pair and recommend cite renumbering — duplicates block submission (P0 Major) regardless of per-record `VERIFIED` status.
|
|
536
|
+
|
|
537
|
+
4. **Cross-check placeholder + pagination drift.** Run, on every round:
|
|
538
|
+
|
|
539
|
+
```bash
|
|
540
|
+
grep -nE '\[@NEW:|\[N\]|\[N–N\]|e0{3}.{0,5}e0{3}|in[ .]?press|\bTBD\b|forthcoming' manuscript/
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
Two failure classes:
|
|
544
|
+
- **Citation-queue placeholders** (`[@NEW:topic]`, `[N]`, `[N–N]`): a citation slot that was never resolved. Any remaining at self-review is a P0.
|
|
545
|
+
- **Pagination placeholders** (`e000–e000`, `in press`, `TBD`, `forthcoming`): `/verify-refs` (Phase 2.5c step 2) marks these `UNVERIFIED` with `note = "pagination_placeholder"` but cannot judge centrality from the .bib alone. **Here, with the manuscript in hand, decide centrality:** if the unresolved reference supports a method choice or a headline claim (grep the citekey/marker against the Abstract, the Statistical Analysis subsection, and the first Results paragraph), escalate it to a **P0 Major** rather than a generic Minor. A method-load-bearing citation that is still "in press / e000" at submission is a blocker. Include each in the reconciliation block.
|
|
546
|
+
|
|
547
|
+
5. **Record results in a short reconciliation block** and append to the Phase 3 report:
|
|
548
|
+
|
|
549
|
+
```
|
|
550
|
+
| Citekey | Verdict | Source check | Status |
|
|
551
|
+
|---|---|---|---|
|
|
552
|
+
| Kim_2024_Validation | VERIFIED | DOI + PubMed match | ✓ |
|
|
553
|
+
| Park_2023_Radiomics | FABRICATED | DOI resolves to unrelated paper | ✗ P0 |
|
|
554
|
+
| Lee_2022_DeepLearning | UNVERIFIED | No DOI/PMID, title not found | △ Major before submission |
|
|
555
|
+
| [@NEW:segmentation_review] | PLACEHOLDER | unresolved citation queue | ✗ P0 |
|
|
556
|
+
```
|
|
557
|
+
|
|
558
|
+
**Short-circuit rule:** if `qc/reference_audit.json` already exists with a bib-hash match within 60s (P9 cache TTL, pending), the scan MAY reuse it; otherwise re-run. Never consume a stale audit from a prior manuscript revision.
|
|
559
|
+
|
|
560
|
+
**Do NOT fabricate replacement references** if any entry fails. Fix-forward belongs to `/search-lit` and `/lit-sync`, not to this skill. Self-review only reports the failure and blocks submission.
|
|
561
|
+
|
|
562
|
+
### Phase 2.5c-2: Reference Adequacy Scan
|
|
563
|
+
|
|
564
|
+
Phase 2.5c covers reference **integrity** — are the cited references real (fabricated / unverified / duplicate / placeholder)? It does **not** ask whether there are *enough* references, in the right sections, grounding every named method. That is reference **adequacy**, and it is the failure mode behind a draft with thirteen references where the Statistical Analysis subsection names a competing-risk model, multiple imputation, the E-value, and an eGFR equation with zero citations. Keep the two strictly separate: an integrity failure blocks because a citation is *wrong*; an adequacy failure flags because a citation is *missing*.
|
|
565
|
+
|
|
566
|
+
**When to run:** every manuscript at self-review, after the integrity scan. The two share the manuscript and the resolved bib path.
|
|
567
|
+
|
|
568
|
+
**Procedure:**
|
|
569
|
+
|
|
570
|
+
1. **Run the deterministic checker.** Resolve the article type from `project.yaml` (passed verbatim; the script's alias map handles repo paper-type names) and the journal cap from the target journal profile when known:
|
|
571
|
+
|
|
572
|
+
```bash
|
|
573
|
+
python3 "${MEDSCI_SKILLS_ROOT:-$HOME/workspace/medsci-skills}/skills/self-review/scripts/check_reference_adequacy.py" \
|
|
574
|
+
--manuscript manuscript/manuscript.md --bib "$BIB" \
|
|
575
|
+
--article-type "$TYPE" ${CAP:+--journal-cap "$CAP"} \
|
|
576
|
+
--out qc/reference_adequacy.json --strict
|
|
577
|
+
```
|
|
578
|
+
|
|
579
|
+
It reports the cited-reference count vs the article-type target, the section distribution (Introduction / Methods / Results / Discussion), every named method found in the Methods/Statistical-Analysis block, which of them lack a citation in their paragraph, and a `methods_zero_citations` flag.
|
|
580
|
+
|
|
581
|
+
2. **Fold `findings[]` into the review.** Each finding becomes a standard `issues[]` entry (so `/revise` and downstream consumers ingest adequacy and other comments uniformly), **additively** carrying the machine-readable `issue_type` + `subtype` alongside the usual fields, under `category: "F" / category_name: "Reporting Completeness"`:
|
|
582
|
+
|
|
583
|
+
```json
|
|
584
|
+
{"id":"M2","severity":"major","category":"F","category_name":"Reporting Completeness",
|
|
585
|
+
"issue_type":"reference_adequacy","subtype":"methods_named_method_uncited",
|
|
586
|
+
"location":"Methods - Statistical Analysis",
|
|
587
|
+
"description":"Fine-Gray competing-risk model is named without a canonical citation.",
|
|
588
|
+
"fixable_by_ai":false,
|
|
589
|
+
"suggested_fix":"Run /search-lit for the canonical Fine-Gray competing-risk source, sync via /lit-sync, then rerun /verify-refs --strict."}
|
|
590
|
+
```
|
|
591
|
+
|
|
592
|
+
**Severity:** `methods_zero_citations` (original / AI-validation / meta-analysis) and each uncited statistical method → **Major** (a P0 candidate before submission when the method is central to the primary or a sensitivity analysis); each uncited reporting/diagnostic standard → **Minor**; a total count below the article-type target → **Major** when far below (under half the floor), otherwise **Minor**, scaled also by stage (escalate at a submission/circulation gate).
|
|
593
|
+
|
|
594
|
+
3. **Fix-forward, not fabricate.** As in Phase 2.5c, this skill never writes replacement references. Every adequacy finding carries `fixable_by_ai: false`; the remedy is `/search-lit` (Manuscript Paper Reference Pool mode) → `/lit-sync` → `/verify-refs --strict`, which the author runs.
|
|
595
|
+
|
|
596
|
+
### Phase 2.5d: Cross-Reference QC (Manuscript ↔ rendered DOCX)
|
|
597
|
+
|
|
598
|
+
Reference-list integrity (Phase 2.5c) does **not** cover Table/Figure
|
|
599
|
+
cross-references. This is a separate failure mode where in-text citations
|
|
600
|
+
("Supplementary Table S4 reports a sensitivity analysis") resolve to a different
|
|
601
|
+
caption in the rendered DOCX ("Supp Table S4 = a diagnostics table") because the
|
|
602
|
+
build script carries its own legacy SSOT. Internal consistency (Phase 2.5)
|
|
603
|
+
cannot detect it — both the prose and the build artifact echo their own
|
|
604
|
+
divergent truths cleanly.
|
|
605
|
+
|
|
606
|
+
**Precedent failure pattern (an STROBE cohort manuscript revision):**
|
|
607
|
+
> Body prose cited Supp Table S4 as a sensitivity analysis; the rendered DOCX
|
|
608
|
+
> S4 instead contained a diagnostics table. S1, S6, S7 also mismatched. S8 and S9
|
|
609
|
+
> were cited in the manuscript but absent from the rendered DOCX entirely.
|
|
610
|
+
> Caught only on co-author circulation review.
|
|
611
|
+
|
|
612
|
+
**When to run:** every manuscript at self-review when a rendered DOCX exists
|
|
613
|
+
(e.g., circulation drafts, post-build pre-submission checks). Skip only if no
|
|
614
|
+
DOCX build has occurred yet (early drafts).
|
|
615
|
+
|
|
616
|
+
**Procedure:**
|
|
617
|
+
|
|
618
|
+
1. **Locate inputs.** `manuscript/manuscript.md` (or the SSOT `truth.manuscript_md`)
|
|
619
|
+
and the rendered DOCX (typically `manuscript/manuscript_final.docx` or the
|
|
620
|
+
most recent circulation `.docx`).
|
|
621
|
+
|
|
622
|
+
2. **Invoke the shared script** (lives in `/manage-refs`):
|
|
623
|
+
|
|
624
|
+
```bash
|
|
625
|
+
python3 "${MEDSCI_SKILLS_ROOT:-$HOME/workspace/medsci-skills}/skills/manage-refs/scripts/check_xref.py" \
|
|
626
|
+
--md manuscript/manuscript.md \
|
|
627
|
+
--docx manuscript/manuscript_final.docx \
|
|
628
|
+
--out qc/xref_audit.json \
|
|
629
|
+
[--allow-separate-attachments]
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
The script writes `qc/xref_audit.json` with per-label rows tagged
|
|
633
|
+
`OK | MISSING_DOCX | MISSING_BODY | MISMATCH | UNCITED | NOT_CITED_NO_BODY`,
|
|
634
|
+
a top-level `submission_safe` boolean, and a `policy.allow_separate_attachments`
|
|
635
|
+
field that records which severity policy applied.
|
|
636
|
+
|
|
637
|
+
3. **Translate findings to anticipated comments.** Severity mapping depends on
|
|
638
|
+
the journal's figure/table submission policy. Many radiology and medical
|
|
639
|
+
journals (e.g., European Radiology, Radiology, AJR) accept figures and tables
|
|
640
|
+
as separate attachment files rather than inline in the manuscript DOCX; for
|
|
641
|
+
those workflows pass `--allow-separate-attachments` so MISSING_DOCX is not
|
|
642
|
+
treated as a P0 blocker. `MISSING_BODY` and `MISMATCH` remain P0 regardless,
|
|
643
|
+
because they indicate SSOT drift between body markdown and rendered DOCX
|
|
644
|
+
rather than a legitimate attachment style.
|
|
645
|
+
|
|
646
|
+
| Status | Default policy | With `--allow-separate-attachments` |
|
|
647
|
+
|---|---|---|
|
|
648
|
+
| `MISSING_DOCX` | **Major (P0)** — cited Table/Figure absent from rendered output | **Minor** — figure/table is separately attached per journal policy |
|
|
649
|
+
| `MISSING_BODY` | **Major (P0)** — build SSOT drift; rendered caption has no body definition | **Major (P0)** (no change) |
|
|
650
|
+
| `MISMATCH` | **Major (P0)** — caption text disagrees between body and rendered DOCX | **Major (P0)** (no change) |
|
|
651
|
+
| `UNCITED` | Minor — orphan caption that should be cited or removed | Minor (no change) |
|
|
652
|
+
|
|
653
|
+
4. **Append a reconciliation block to the Phase 3 report:**
|
|
654
|
+
|
|
655
|
+
```
|
|
656
|
+
| Label | Status | Body caption | DOCX caption | Verdict |
|
|
657
|
+
|---|---|---|---|---|
|
|
658
|
+
| Supplementary Table S4 | MISMATCH | Sensitivity analysis | Diagnostics table | ✗ P0 |
|
|
659
|
+
| Supplementary Table S8 | MISSING_DOCX | (defined in body) | — | ✗ P0 |
|
|
660
|
+
| Figure 2 | UNCITED | Forest plot of subgroups | Forest plot of subgroups | △ Minor |
|
|
661
|
+
```
|
|
662
|
+
|
|
663
|
+
5. **Emit each P0 row as a separate `M`-numbered Major Comment** with
|
|
664
|
+
`category: "F"` (Reporting Completeness) and `fixable_by_ai: false`
|
|
665
|
+
(build script changes are out of scope for the auto-fix loop — they
|
|
666
|
+
require pipeline-side fixes per `/write-paper` Step 7.6a routing).
|
|
667
|
+
|
|
668
|
+
**Do NOT auto-fix cross-reference defects in `--fix` mode.** Caption rewrites
|
|
669
|
+
in the body without re-running the DOCX build will simply move the mismatch.
|
|
670
|
+
Surface as Major Comments and let the user route to `/write-paper` Step 7.6a.
|
|
671
|
+
|
|
672
|
+
### Phase 2.5e: Confounding Completeness (observational only)
|
|
673
|
+
|
|
674
|
+
For an observational study, the highest-yield reviewer finding is also the most
|
|
675
|
+
mechanical, and a prose pass misses it because the manuscript text is internally
|
|
676
|
+
consistent: a covariate that was **measured**, is **imbalanced across exposure
|
|
677
|
+
groups** in the baseline table, and is **absent from the adjustment set** is
|
|
678
|
+
residual confounding by a measured variable. Only a join of the exposure-
|
|
679
|
+
stratified Table 1 against the Methods adjustment set exposes it. This is probe
|
|
680
|
+
O1 of `references/domain-probes/observational_confounding.md`, run here as a
|
|
681
|
+
deterministic gate so the finding lands without the `--panel` cost.
|
|
682
|
+
|
|
683
|
+
**When to run:** manuscript type is observational (cohort, case-control,
|
|
684
|
+
cross-sectional, health-screening registry) and the central claim is an
|
|
685
|
+
adjusted exposure–outcome association. Skip for RCTs and descriptive studies.
|
|
686
|
+
|
|
687
|
+
**Precedent failure pattern:**
|
|
688
|
+
> A cross-sectional screening-cohort manuscript reported an adjusted association
|
|
689
|
+
> while Table 1 showed uric acid, smoking pack-years, HDL, total cholesterol, and
|
|
690
|
+
> HbA1c all significantly imbalanced across the exposure groups — none of which
|
|
691
|
+
> were in the age/sex/BMI/hypertension/diabetes adjustment set. The single-pass
|
|
692
|
+
> review passed it; only an epidemiology panel reviewer who read the Table 1 CSV
|
|
693
|
+
> against the Methods caught the gap. After refitting with extended adjustment the
|
|
694
|
+
> primary estimate held, but the manuscript had claimed robustness it had not shown.
|
|
695
|
+
|
|
696
|
+
**Procedure:**
|
|
697
|
+
|
|
698
|
+
1. **Locate the exposure-stratified baseline table** as a CSV (e.g.
|
|
699
|
+
`table1_by_<exposure>.csv` from `/analyze-stats`) and the Methods adjustment
|
|
700
|
+
set (the variables after "adjusted for ...").
|
|
701
|
+
|
|
702
|
+
2. **Run the deterministic gate:**
|
|
703
|
+
|
|
704
|
+
```bash
|
|
705
|
+
python3 "${CLAUDE_SKILL_DIR}/scripts/check_confounding_completeness.py" \
|
|
706
|
+
--table1 table1_by_<exposure>.csv \
|
|
707
|
+
--adjusted-list "age, sex, BMI, hypertension, diabetes" \
|
|
708
|
+
--out qc/confounding_completeness.json --strict
|
|
709
|
+
```
|
|
710
|
+
|
|
711
|
+
It emits a reconciliation table (covariate | imbalance p | SMD | in adjustment
|
|
712
|
+
set? | verdict) and flags each **measured-but-unadjusted imbalanced** covariate
|
|
713
|
+
as an `UNADJUSTED_IMBALANCED` Major candidate. When the CSV is unavailable,
|
|
714
|
+
apply probe O1 by hand from the published Table 1.
|
|
715
|
+
|
|
716
|
+
3. **Each `UNADJUSTED_IMBALANCED` covariate is an Anticipated Major Comment**
|
|
717
|
+
(category: A. Study Design & Data Integrity), with the suggested fix: report an
|
|
718
|
+
**extended-adjustment sensitivity model** that adds the omitted covariates and
|
|
719
|
+
states whether the primary estimate is materially unchanged; the original model
|
|
720
|
+
stays primary only if the extended model agrees.
|
|
721
|
+
|
|
722
|
+
4. **Then apply the rest of the observational probe set** (O2 adjustment-set
|
|
723
|
+
provenance, O3 selection/collider bias, O4 exposure measurement validity, O5
|
|
724
|
+
missing-data mechanism & complete-case collapse, O6 residual-confounding
|
|
725
|
+
E-value) from `references/domain-probes/observational_confounding.md` — these
|
|
726
|
+
are prose probes, not data-checkable, and complement the generic Phase 2
|
|
727
|
+
categories rather than replacing them.
|
|
728
|
+
|
|
729
|
+
**Adjustment-set matching is fuzzy** (a table row "Smoking, pack-years" vs an
|
|
730
|
+
adjustment token "smoking"): read the reconciliation table rather than trusting
|
|
731
|
+
the count, and confirm each flagged covariate is a plausible cause of the outcome
|
|
732
|
+
(not a mediator or collider, which O2 covers) before raising it.
|
|
733
|
+
|
|
734
|
+
### Phase 2.5f: Claim-vs-Artifact Cross-Check
|
|
735
|
+
|
|
736
|
+
Phases 2.5–2.5e check numbers and adjustment sets. This phase checks **claims
|
|
737
|
+
against the external artifacts they should trace to** — the pre-registration, the
|
|
738
|
+
protocol, the analysis outputs. These are the errors that survive a single-pass
|
|
739
|
+
review because the manuscript prose is internally consistent yet disagrees with
|
|
740
|
+
the registration or the analysis it reports. The first scope is the two highest-
|
|
741
|
+
value, deterministic instances; figure/flow-count reconciliation, Methods-promised-
|
|
742
|
+
analysis completeness, and imputation-input integrity are separate subchecks (run
|
|
743
|
+
`/make-figures` legend reconciliation and `/write-paper`'s Methods-promised gate).
|
|
744
|
+
|
|
745
|
+
**Precedent failure pattern:**
|
|
746
|
+
> A manuscript reported a null primary association from a multiple-imputation model
|
|
747
|
+
> and described it as "pre-specified," while the registered primary had been the
|
|
748
|
+
> complete-case model that was significant — the primary had been re-designated after
|
|
749
|
+
> the results were known. In the same paper an E-value of 2.79 was attached to the
|
|
750
|
+
> primary HR of 1.34, but 2.79 does not recompute from 1.34 (it came from a different,
|
|
751
|
+
> non-primary estimate), and a second E-value bounded an exploratory cancer-specific
|
|
752
|
+
> hazard, not the headline contrast. None of these tripped the internal-consistency
|
|
753
|
+
> checks; all three are deterministic against the registration and the arithmetic.
|
|
754
|
+
|
|
755
|
+
**Procedure:**
|
|
756
|
+
|
|
757
|
+
1. **Run the cross-check** with the manuscript and (if available) the pre-registration
|
|
758
|
+
/ protocol / `project.yaml`:
|
|
759
|
+
|
|
760
|
+
```bash
|
|
761
|
+
python3 "${CLAUDE_SKILL_DIR}/scripts/check_claim_artifact.py" \
|
|
762
|
+
--manuscript manuscript.md --prereg prereg.md \
|
|
763
|
+
--out qc/claim_artifact.json --strict
|
|
764
|
+
```
|
|
765
|
+
|
|
766
|
+
2. **Estimand provenance.** The script flags `PRIMARY_REASSIGNED` when the manuscript
|
|
767
|
+
admits re-designating the primary after results were known, and `ESTIMAND_DRIFT`
|
|
768
|
+
when the manuscript's primary statement does not match the registered one. Both are
|
|
769
|
+
**Anticipated Major Comments** (category: A. Study Design & Data Integrity); a primary
|
|
770
|
+
re-designated post-hoc is a P0 issue. The fix is to report the pre-specified and the
|
|
771
|
+
revised models **coequally** and disclose the change in the Abstract and Limitations,
|
|
772
|
+
not to silently lead with the more favourable estimate.
|
|
773
|
+
|
|
774
|
+
3. **E-value.** `EVALUE_ARITHMETIC` means the reported E-value does not recompute from
|
|
775
|
+
its adjacent effect estimate (the value was likely produced for a different estimate);
|
|
776
|
+
`EVALUE_NON_PRIMARY` means the E-value is attached to a secondary/exploratory estimate
|
|
777
|
+
but presented as if it bounded the headline claim. Both warrant a Major/Minor comment —
|
|
778
|
+
recompute the E-value for the **declared primary** estimate and its near-null confidence
|
|
779
|
+
limit, and quote it there.
|
|
780
|
+
|
|
781
|
+
4. **Primary-change guard.** Independently of the script, if the manuscript reports two
|
|
782
|
+
models for the same contrast where one is significant and the other null and the
|
|
783
|
+
significant one is foregrounded, confirm which was pre-specified; an outcome-dependent
|
|
784
|
+
choice of primary model is a Major comment even when each model is individually correct.
|
|
785
|
+
|
|
786
|
+
5. **Headline vs own-sensitivity direction.** Read the sensitivity series (S1 etc.) the
|
|
787
|
+
manuscript itself reports. If the headline causal/association claim points the *opposite*
|
|
788
|
+
way from the authors' own adjusted or sensitivity estimate — a positive lead sentence over
|
|
789
|
+
a sensitivity model that attenuates to the null, or vice versa — that is a Major: the paper
|
|
790
|
+
is contradicting its own robustness check. This is a prose judgement, not a script verdict.
|
|
791
|
+
|
|
792
|
+
6. **Methods ↔ Results ↔ disk coverage.** Run the deterministic coverage gate:
|
|
793
|
+
|
|
794
|
+
```bash
|
|
795
|
+
python3 "${CLAUDE_SKILL_DIR}/scripts/check_artifact_coverage.py" \
|
|
796
|
+
--manuscript manuscript.md --analysis-dir output/analysis \
|
|
797
|
+
--out qc/artifact_coverage.json --strict
|
|
798
|
+
```
|
|
799
|
+
|
|
800
|
+
`PROMISED_ABSENT` (an analysis named in Methods that never reaches Results) and
|
|
801
|
+
`DISK_UNREPORTED` (an analysis output on disk — an added-value DeLong CSV, a calibration
|
|
802
|
+
table — never mentioned in the manuscript) are Anticipated Major Comments. The reverse
|
|
803
|
+
direction matters because a run-but-unreported result can be the one that undercuts the
|
|
804
|
+
headline. When an `_analysis_outputs.md` manifest exists the gate uses it as the source of
|
|
805
|
+
truth; otherwise it globs `--analysis-dir` and only escalates analysis-bearing file names.
|
|
806
|
+
|
|
807
|
+
The script is deterministic but its provenance match is fuzzy (token overlap): read the
|
|
808
|
+
reconciliation in `qc/claim_artifact.json` and confirm against the actual registration
|
|
809
|
+
before raising `ESTIMAND_DRIFT`. For time-to-event manuscripts, also apply probe **S8
|
|
810
|
+
(estimand provenance)** of `references/domain-probes/survival_prognostic.md`.
|
|
811
|
+
|
|
812
|
+
### Phase 2.6: Multi-Agent Panel Review (--panel, opt-in)
|
|
813
|
+
|
|
814
|
+
Run this phase **only when `--panel` is passed**. The default single-pass review (Phases 2–2.5d) stays the fast path; the panel is the high-cost, high-precision option for a pre-submission final pass on a top-tier target. Run it after the numerical audits (Phases 2.5–2.5d) so the reviewers see source-verified numbers, and before the Phase 3 report, which it feeds.
|
|
815
|
+
|
|
816
|
+
The panel simulates independent peer reviewers who do not see each other's comments, then an editor who consolidates them — the same structure a journal uses. It reuses the vendored domain-probe modules so every reviewer applies the same criteria.
|
|
817
|
+
|
|
818
|
+
**Step 1 — Compose the reviewer set by research type.** Auto-detect the manuscript type (Phase 1 input + the Research-Type Adaptation table). Each reviewer loads the matching domain-probe module so the panel's criteria are single-sourced.
|
|
819
|
+
|
|
820
|
+
| Research type | Reviewer set (each is one reviewer) | Domain-probe module each loads |
|
|
821
|
+
|---|---|---|
|
|
822
|
+
| Survival / prognostic cohort | R1 Biostatistics & Study Design · R2 Clinical (domain) · R3 Imaging/Radiology (if an imaging exposure) | `references/domain-probes/survival_prognostic.md` |
|
|
823
|
+
| Systematic review / meta-analysis | R1 Methodology (search/screening/PRISMA) · R2 Clinical · R3 Statistics (pooling/heterogeneity) | `references/domain-probes/sr_ma.md` |
|
|
824
|
+
| Radiomics / feature reproducibility | R1 Imaging physics & acquisition · R2 ML / Statistics · R3 Clinical translation | `references/domain-probes/radiomics.md` |
|
|
825
|
+
| Diagnostic-accuracy / AI model | R1 Study design & leakage · R2 Statistics (DeLong, calibration) · R3 Clinical / reference standard | `references/domain-probes/sr_ma.md` (P1 DTA cells) + `references/domain-probes/ai_overclaiming.md` (AO0–AO4, for AI clinical claims) + categories A–C |
|
|
826
|
+
| Observational (STROBE) | R1 Epidemiology / confounding · R2 Clinical · R3 Statistics | `references/domain-probes/observational_confounding.md` (O1 run as the Phase 2.5e deterministic gate) + categories A–J + the effect-size / added-value axes |
|
|
827
|
+
| Narrative / review article | R1 Domain-content expert · R2 Methodology / SANRA · R3 Technical accuracy | `references/domain-probes/narrative_review.md` |
|
|
828
|
+
|
|
829
|
+
If the type is ambiguous, ask the user before composing the set.
|
|
830
|
+
|
|
831
|
+
**Step 2 — Run the reviewers (portable execution).** When the host provides a parallel subagent / Task capability (Claude Code, or any harness exposing an Agent tool), spawn the reviewer set as independent parallel subagents, each blinded to the others, then run the editor as a final synthesis agent. **Fallback (no subagent capability — e.g. a minimal Codex/Cursor harness):** a single agent role-plays each reviewer sequentially and in isolation — it completes and writes out reviewer R1's full structured review before reading the manuscript "fresh" as R2, so a later reviewer never sees an earlier reviewer's comments. The panel is defined by these instructions; it does **not** depend on the `Workflow` tool or any Claude-Code-only orchestration.
|
|
832
|
+
|
|
833
|
+
A reusable reviewer schema, a generic harsh-but-fair reviewer prompt skeleton with per-domain focus checklists, and the editor synthesis prompt skeleton live in `${CLAUDE_SKILL_DIR}/references/panel_review_template.md`.
|
|
834
|
+
|
|
835
|
+
Each reviewer returns: `reviewer_id`, `expertise_area`, an `overall_assessment` (name the single biggest threat to the conclusions), `strengths` (2–3), `major[]` (each with `heading`, `comment`, `location`, `severity`, `suggested_fix`), and `minor[]`. Map `severity` onto this skill's own scale — a conclusion-threatening / design-level finding is **Fatal**, a reporting-level finding is **Fixable** — rather than introducing a separate vocabulary.
|
|
836
|
+
|
|
837
|
+
**Step 3 — Editor synthesis.** One editor pass (a final agent, or the main agent in the fallback) consolidates the reviews:
|
|
838
|
+
1. **Dedupe** findings by theme across reviewers.
|
|
839
|
+
2. **Flag CONSENSUS** for any theme raised by ≥2 reviewers, with R1/R2/R3 attribution (e.g., `[CONSENSUS: R1+R3]`); single-reviewer findings are attributed to the one reviewer.
|
|
840
|
+
3. **Decide** an internal readiness verdict (this sets the Phase 3c `verdict` / `overall_score`; it is not printed as a journal recommendation).
|
|
841
|
+
4. **Rank** the concrete pre-submission actions the author should complete first.
|
|
842
|
+
5. State a one-line **readiness verdict** (ready for the target tier now / fix specific items first / consider a different tier).
|
|
843
|
+
|
|
844
|
+
**Step 3.5 — Lens-diversity gate (deterministic).** A panel only earns its cost if its reviewers span *distinct* axes rather than echo one theme louder. Before the editor finalizes, serialize the reviewers' structured outputs (the schema above) to a JSON file — either a top-level list or `{"reviewers": [...], "research_type": "..."}` — and run the gate:
|
|
845
|
+
|
|
846
|
+
```bash
|
|
847
|
+
python3 ${CLAUDE_SKILL_DIR}/scripts/check_panel_diversity.py \
|
|
848
|
+
--panel panel_reviews.json \
|
|
849
|
+
--research-type {survival|sr_ma|radiomics|dta|observational|narrative} --strict
|
|
850
|
+
```
|
|
851
|
+
|
|
852
|
+
It reports three diversity failures, each mapped onto a concern family aligned to the focus checklists:
|
|
853
|
+
- **`UNCOVERED_AXIS`** (Major) — an axis the research type is expected to probe (e.g. heterogeneity/pooling for an SR/MA) drew **zero** major findings. The editor re-probes it with the owning reviewer before finalizing, or records in the synthesis why the gap is acceptable.
|
|
854
|
+
- **`FAMILY_MONOCULTURE`** (Major) — the majority of majors fall in one concern family; the lenses converged rather than spanned the manuscript.
|
|
855
|
+
- **`LENS_COLLAPSE`** (Flag) — a reviewer raised only families another reviewer already covered, adding no independent axis.
|
|
856
|
+
|
|
857
|
+
Healthy CONSENSUS is preserved — agreement on *some* themes is a strength (Step 3 flags it), and the gate fires `LENS_COLLAPSE` only on a *fully* redundant reviewer and the Major checks on panel-level coverage, never on agreement per se. Do not silently ship a monoculture: resolve every Major before the synthesis verdict.
|
|
858
|
+
|
|
859
|
+
**Step 4 — Feed Phase 3.** The consolidated panel output flows into the Phase 3 report, Phase 3b R0 numbering (**preserved**, so `/revise` still consumes it), and Phase 3c JSON. CONSENSUS flags and reviewer attribution are additive annotations on the existing `M`/`m` comments (and the optional `consensus` JSON field); they do not change the report or JSON structure.
|
|
860
|
+
|
|
861
|
+
### Phase 3: Report
|
|
862
|
+
|
|
863
|
+
Before writing the Anticipated Comments, skim `references/exemplar_findings/` for the
|
|
864
|
+
finding at hand (cohort-arithmetic mismatch, unadjusted confounder, cross-sectional scope
|
|
865
|
+
overreach, post-hoc primary / estimand drift). Each models the full shape — which gate
|
|
866
|
+
fired, the comment in the reviewer's own words, Fatal/Fixable severity, the closest
|
|
867
|
+
category letter, the concrete fix, `fixable_by_ai`, and an R0-ready line for Phase 3b.
|
|
868
|
+
They are synthetic teaching models — match the structure, not the wording.
|
|
869
|
+
|
|
870
|
+
Generate a concise report with this structure:
|
|
871
|
+
|
|
872
|
+
```markdown
|
|
873
|
+
# Self-Review Report: {manuscript title}
|
|
874
|
+
|
|
875
|
+
**Target journal**: {journal}
|
|
876
|
+
**Manuscript type**: {type}
|
|
877
|
+
**Date**: {date}
|
|
878
|
+
**Overall assessment**: {1-2 sentences: key vulnerability and overall readiness}
|
|
879
|
+
|
|
880
|
+
## Anticipated Major Comments (fix before submission)
|
|
881
|
+
|
|
882
|
+
M1. **{Issue title}** [{Category letter}]
|
|
883
|
+
{1-2 sentences: what a reviewer would likely say, with specific manuscript location}
|
|
884
|
+
**Severity**: {Fatal | Fixable}
|
|
885
|
+
**Suggested fix**: {specific, actionable fix using existing data}
|
|
886
|
+
|
|
887
|
+
M2. ...
|
|
888
|
+
|
|
889
|
+
## Anticipated Minor Comments (address proactively)
|
|
890
|
+
|
|
891
|
+
m1. **{Issue}** [{Category}]: {1 sentence with location + fix}
|
|
892
|
+
m2. ...
|
|
893
|
+
|
|
894
|
+
## Strengths (emphasize in cover letter)
|
|
895
|
+
|
|
896
|
+
- {Specific strength 1}
|
|
897
|
+
- {Specific strength 2}
|
|
898
|
+
- ...
|
|
899
|
+
```
|
|
900
|
+
|
|
901
|
+
**Conciseness targets**:
|
|
902
|
+
- Anticipated Major Comments: 3-7 items, each 3-5 lines
|
|
903
|
+
- Anticipated Minor Comments: 3-6 items, each 1-2 sentences
|
|
904
|
+
- Strengths: 3-5 items, each 1 sentence
|
|
905
|
+
- Total report: 400-800 words (excluding optional R0 section)
|
|
906
|
+
|
|
907
|
+
### Phase 3b: R0 Numbering (Optional)
|
|
908
|
+
|
|
909
|
+
If the user plans to use `/revise` after receiving actual reviews, offer to append
|
|
910
|
+
R0-numbered output for pipeline compatibility:
|
|
911
|
+
|
|
912
|
+
```markdown
|
|
913
|
+
## R0 Pre-Submission Findings (for /revise cross-reference)
|
|
914
|
+
|
|
915
|
+
R0-1 [MAJ] {mapped from M1}: {issue title}
|
|
916
|
+
R0-2 [MAJ] {mapped from M2}: {issue title}
|
|
917
|
+
R0-3 [MIN] {mapped from m1}: {issue title}
|
|
918
|
+
...
|
|
919
|
+
```
|
|
920
|
+
|
|
921
|
+
When actual reviewer comments arrive as R1-N, the user can cross-reference which issues
|
|
922
|
+
were anticipated (R0) vs. novel (R1-only).
|
|
923
|
+
|
|
924
|
+
### Phase 3c: Structured JSON Output
|
|
925
|
+
|
|
926
|
+
When `--json` is passed, or when invoked by `/write-paper` Phase 7, append a machine-readable JSON block after the markdown report. Fence it with triple backticks and the `json` language tag so downstream parsers can extract it.
|
|
927
|
+
|
|
928
|
+
```json
|
|
929
|
+
{
|
|
930
|
+
"self_review_version": "1.0",
|
|
931
|
+
"manuscript_title": "...",
|
|
932
|
+
"date": "YYYY-MM-DD",
|
|
933
|
+
"overall_score": 72,
|
|
934
|
+
"verdict": "REVISE",
|
|
935
|
+
"fatal_count": 0,
|
|
936
|
+
"major_count": 3,
|
|
937
|
+
"minor_count": 4,
|
|
938
|
+
"issues": [
|
|
939
|
+
{
|
|
940
|
+
"id": "M1",
|
|
941
|
+
"severity": "major",
|
|
942
|
+
"category": "C",
|
|
943
|
+
"category_name": "Validation & Stats",
|
|
944
|
+
"location": "Methods, paragraph 5",
|
|
945
|
+
"description": "Calibration plot and Brier score absent for prediction model",
|
|
946
|
+
"fixable_by_ai": true,
|
|
947
|
+
"suggested_fix": "Add calibration analysis paragraph after discrimination results. Generate calibration plot via /make-figures."
|
|
948
|
+
},
|
|
949
|
+
{
|
|
950
|
+
"id": "m1",
|
|
951
|
+
"severity": "minor",
|
|
952
|
+
"category": "F",
|
|
953
|
+
"category_name": "Reporting Completeness",
|
|
954
|
+
"location": "Abstract, line 3",
|
|
955
|
+
"description": "Abstract reports AUC 0.91 but Table 2 shows 0.912 -- rounding inconsistency",
|
|
956
|
+
"fixable_by_ai": true,
|
|
957
|
+
"suggested_fix": "Change abstract to match table: AUC 0.91 (95% CI: 0.87-0.95)"
|
|
958
|
+
}
|
|
959
|
+
]
|
|
960
|
+
}
|
|
961
|
+
```
|
|
962
|
+
|
|
963
|
+
**Field definitions:**
|
|
964
|
+
- `overall_score`: Integer 0-100 reflecting manuscript submission readiness
|
|
965
|
+
- `verdict`: `"PASS"` (score >= 85, no fatal issues) or `"REVISE"`
|
|
966
|
+
- `severity`: `"fatal"`, `"major"`, or `"minor"`
|
|
967
|
+
- `category`: Letter code from the 10-category system (A-J)
|
|
968
|
+
- `fixable_by_ai`: `true` if the issue can be resolved by editing manuscript text with existing data; `false` if it requires new data, analyses, or human judgment (e.g., design changes, IRB decisions, missing experiments)
|
|
969
|
+
- `suggested_fix`: Specific, actionable instruction. If `fixable_by_ai` is true, this must be concrete enough for the fixer to execute without ambiguity.
|
|
970
|
+
- `consensus` *(optional, panel mode only)*: array of reviewer ids that raised the issue, e.g. `["R1","R3"]`. Additive and backwards-compatible — present only when Phase 2.6 ran; parsers that do not expect it must ignore it.
|
|
971
|
+
|
|
972
|
+
### Phase 4: Fix Support
|
|
973
|
+
|
|
974
|
+
#### Standard mode (no --fix flag)
|
|
975
|
+
|
|
976
|
+
After presenting the report, offer to help fix specific issues:
|
|
977
|
+
- Rewrite overclaiming sentences
|
|
978
|
+
- Draft missing limitation statements
|
|
979
|
+
- Suggest statistical additions (e.g., calibration analysis code via `/analyze-stats`)
|
|
980
|
+
- Draft intended use, decision-impact, or novelty-delta statements
|
|
981
|
+
- Check specific tables/figures for consistency
|
|
982
|
+
- Generate missing flow diagrams via `/make-figures`
|
|
983
|
+
|
|
984
|
+
#### Auto-fix mode (--fix flag)
|
|
985
|
+
|
|
986
|
+
When `--fix` is passed:
|
|
987
|
+
|
|
988
|
+
1. **Filter fixable issues**: Select all issues where `fixable_by_ai` is true.
|
|
989
|
+
2. **Apply fixes sequentially**: For each fixable issue, edit the manuscript file directly:
|
|
990
|
+
- Text rewrites (overclaiming, missing sentences, terminology) → Edit in place
|
|
991
|
+
- Missing reporting items (ethics statement, data availability) → Insert at suggested location
|
|
992
|
+
- Numerical inconsistencies (abstract-table mismatch) → Correct to match tables
|
|
993
|
+
- Do NOT attempt: new statistical analyses, new figures, design changes, IRB-dependent items
|
|
994
|
+
- Do NOT invoke other skills (`/make-figures`, `/analyze-stats`) during fix — text edits only
|
|
995
|
+
3. **Report changes**: After all fixes, output a summary:
|
|
996
|
+
```
|
|
997
|
+
## Auto-Fix Summary
|
|
998
|
+
- Fixed: {N} issues
|
|
999
|
+
- Skipped (requires human): {M} issues
|
|
1000
|
+
- Changes: {list of id + one-line description of what was changed}
|
|
1001
|
+
```
|
|
1002
|
+
4. **Re-review**: Run Phase 2 (systematic check) again on the modified manuscript.
|
|
1003
|
+
5. **Iterate**: If new fixable issues emerge, apply one more round (maximum 2 total fix iterations).
|
|
1004
|
+
6. **Final output**: Regenerate the Phase 3 report and Phase 3c JSON with updated scores.
|
|
1005
|
+
|
|
1006
|
+
**Iteration limit**: Maximum 2 fix-and-re-review cycles. If the score has not reached "PASS" after 2 iterations, output the final report with remaining issues and flag: "Auto-fix limit reached. Remaining issues require human review."
|
|
1007
|
+
|
|
1008
|
+
## What This Skill Does NOT Do
|
|
1009
|
+
|
|
1010
|
+
- Does not write the paper or rewrite entire sections
|
|
1011
|
+
- Does not generate fake data or fabricate results
|
|
1012
|
+
- Does not guarantee acceptance -- it reduces preventable reviewer criticism
|
|
1013
|
+
- Does not replace formal peer review by an external reviewer
|
|
1014
|
+
|
|
1015
|
+
## Tone
|
|
1016
|
+
|
|
1017
|
+
Be direct and practical. The user is the author -- they need honest feedback, not diplomatic
|
|
1018
|
+
hedging. Frame issues as what a reviewer would likely flag, helping the user see their paper
|
|
1019
|
+
through a reviewer's eyes.
|
|
1020
|
+
|
|
1021
|
+
For Fatal issues, be unambiguous: "A reviewer would likely flag this as a fundamental
|
|
1022
|
+
design concern. Submitting without addressing this risks Reject."
|
|
1023
|
+
|
|
1024
|
+
For Fixable issues, be constructive: "A reviewer would likely raise this as a Major Comment.
|
|
1025
|
+
Here is how to address it with your existing data."
|
|
1026
|
+
|
|
1027
|
+
## Anti-Hallucination
|
|
1028
|
+
|
|
1029
|
+
- **Never fabricate references.** All citations must be verified via `/search-lit` with confirmed DOI or PMID. Mark unverified references as `[UNVERIFIED - NEEDS MANUAL CHECK]`. Self-review enforces this through **Phase 2.5c: Reference Hallucination Scan** (runs `/verify-refs` against the SSOT bib); any `FABRICATED` verdict blocks submission as a P0 Major Comment.
|
|
1030
|
+
- **Never invent clinical definitions, diagnostic criteria, or guideline recommendations.** If uncertain, flag with `[VERIFY]` and ask the user.
|
|
1031
|
+
- **Never fabricate numerical results** — compliance percentages, scores, effect sizes, or sample sizes must come from actual data or analysis output.
|
|
1032
|
+
- If a reporting guideline item, journal policy, or clinical standard is uncertain, state the uncertainty rather than guessing.
|
|
1033
|
+
|
|
1034
|
+
---
|
|
1035
|
+
|
|
1036
|
+
## Gates
|
|
1037
|
+
|
|
1038
|
+
| Gate | Severity | Trigger | Action on fail |
|
|
1039
|
+
|---|---|---|---|
|
|
1040
|
+
| Phase 2.5b cross-reference QC (delegate `/manage-refs scripts/check_xref.py`) | ENFORCED | MISSING_DOCX / MISSING_BODY / MISMATCH > 0 | P0 Major Comment, blocks submission |
|
|
1041
|
+
| Phase 2.5c reference hallucination scan (delegate `/verify-refs`) | ENFORCED | `FABRICATED` in `records[]` OR nonempty `duplicate_findings[]` | P0 Major Comment, blocks submission |
|
|
1042
|
+
| Phase 2.5a-2 design/power statistic provenance | ENFORCED | a reported MDE / power / sample-size value is not reproduced by committed code, or is reproducible only by a method the committed script does not implement | Major Comment (P0 if a headline claim); recompute and either correct the value or update the committed code to reproduce it |
|
|
1043
|
+
| `--fix` auto-fix loop (max 2 iterations) | ENFORCED in `/write-paper` Phase 7.4 chain | score still below threshold after 2 iterations | Route to write-paper Phase 7.4a Audit Recovery |
|
|
1044
|
+
| R0 numbering output | OPT-IN | `--r0-numbering` flag or downstream `/revise` consumer | Emits structured Anticipated Major/Minor Comments — consumable by `/revise` |
|
|
1045
|
+
| `--json` machine-readable output | OPT-IN | `--json` flag | Emits parseable JSON block consumed by `/orchestrate` post-skill validation |
|