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,166 @@
|
|
|
1
|
+
# Critic Rubric — Data Plots
|
|
2
|
+
|
|
3
|
+
Apply this rubric when the generated figure is a data visualization (not a
|
|
4
|
+
flow diagram): ROC, forest, KM, calibration, Bland-Altman, confusion matrix,
|
|
5
|
+
box/violin, bar, heatmap. The Claude session should Read the rendered PNG
|
|
6
|
+
plus any available exemplars from `references/exemplar_diagrams/{type}/`,
|
|
7
|
+
then mark each item below as **PASS / PARTIAL / FAIL** with a one-line
|
|
8
|
+
justification.
|
|
9
|
+
|
|
10
|
+
After scoring, produce a list of concrete matplotlib/seaborn edits that
|
|
11
|
+
would resolve every FAIL or PARTIAL item. Return the scored rubric + edit
|
|
12
|
+
list to the user.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## A. Axes, labels, units
|
|
17
|
+
|
|
18
|
+
1. **X-axis label** present with units where applicable.
|
|
19
|
+
2. **Y-axis label** present with units where applicable.
|
|
20
|
+
3. **Axis tick labels** readable (no overlap, sensible density, no scientific
|
|
21
|
+
notation where plain numbers fit).
|
|
22
|
+
4. **Axis limits** sensible — no wasted whitespace (e.g., ROC axes should
|
|
23
|
+
be 0–1 exactly, forest plot x-axis should frame all CIs without
|
|
24
|
+
clipping).
|
|
25
|
+
5. **Tick direction inward**, tick marks minor/major where needed. No
|
|
26
|
+
chart-spine clutter.
|
|
27
|
+
|
|
28
|
+
## B. Legend / caption
|
|
29
|
+
|
|
30
|
+
6. **Legend present** when ≥2 series are shown; placed where it does not
|
|
31
|
+
obscure data.
|
|
32
|
+
7. **Legend labels** are descriptive (not "Series 1"); include N or group
|
|
33
|
+
size where relevant.
|
|
34
|
+
8. **Legend ordering** matches visual order of series (top to bottom).
|
|
35
|
+
9. **Caption-ready** — plot does not rely on external notes the caption
|
|
36
|
+
cannot repeat concisely.
|
|
37
|
+
|
|
38
|
+
## C. Figure-type–specific requirements
|
|
39
|
+
|
|
40
|
+
### ROC curve
|
|
41
|
+
- AUC and 95% CI displayed on plot or in legend
|
|
42
|
+
- Diagonal reference line (chance) shown
|
|
43
|
+
- Sensitivity on Y-axis (0–1), 1−Specificity on X-axis (0–1)
|
|
44
|
+
- Multiple models distinguished by color AND line style (grayscale-safe)
|
|
45
|
+
|
|
46
|
+
### Forest plot
|
|
47
|
+
- Effect estimates aligned to a vertical reference line (null effect)
|
|
48
|
+
- CIs drawn as horizontal bars with appropriate caps
|
|
49
|
+
- Box size proportional to study weight
|
|
50
|
+
- Diamond summary at the bottom; pooled estimate and CI printed
|
|
51
|
+
- Left column: study labels; right column: effect (95% CI) numeric
|
|
52
|
+
- Heterogeneity statistics (I², τ², Q p-value) reported in caption or plot
|
|
53
|
+
|
|
54
|
+
### KM curve
|
|
55
|
+
- Number at risk table below the plot
|
|
56
|
+
- Median survival and its CI shown or reported in caption
|
|
57
|
+
- Log-rank p-value or Cox HR reported
|
|
58
|
+
- Curves distinguishable in grayscale (line style + color)
|
|
59
|
+
- Censoring marks visible
|
|
60
|
+
|
|
61
|
+
### Calibration plot
|
|
62
|
+
- Ideal diagonal line (y=x) shown
|
|
63
|
+
- Binned observed vs. predicted points
|
|
64
|
+
- Hosmer-Lemeshow p-value or Brier score reported
|
|
65
|
+
- Histogram of predicted probabilities overlaid or beside the plot
|
|
66
|
+
|
|
67
|
+
### Bland-Altman
|
|
68
|
+
- Mean difference line
|
|
69
|
+
- ±1.96 SD limits of agreement
|
|
70
|
+
- LoA values printed
|
|
71
|
+
- Scatter points not clipped at plot edges
|
|
72
|
+
|
|
73
|
+
### Confusion matrix
|
|
74
|
+
- Cells annotated with counts AND percentages
|
|
75
|
+
- Axis labels "Predicted" / "Actual" (or "Reference")
|
|
76
|
+
- Diagonal emphasized (darker color or heavier stroke) if useful
|
|
77
|
+
|
|
78
|
+
## D. Typography and accessibility
|
|
79
|
+
|
|
80
|
+
10. **Font size ≥ 8pt at final dimensions** (most journals require 6–7pt min
|
|
81
|
+
for axis numerics, 8pt for labels). At 300 DPI in a 3.5×3.5 inch
|
|
82
|
+
figure, this corresponds to roughly ≥25 px — use `critic_figure.py`
|
|
83
|
+
OCR min-height flag as a proxy.
|
|
84
|
+
11. **Single font family** throughout (typically sans-serif). No mixed
|
|
85
|
+
Arial/Helvetica/Times.
|
|
86
|
+
12. **Colors from Wong palette** or equivalent colorblind-safe scheme.
|
|
87
|
+
`critic_figure.py` flags out-of-palette fractions >15%.
|
|
88
|
+
13. **Grayscale-safe** — every series is distinguishable in grayscale
|
|
89
|
+
conversion, either through line style, marker shape, or luminosity
|
|
90
|
+
differences.
|
|
91
|
+
|
|
92
|
+
## E. Publication readiness
|
|
93
|
+
|
|
94
|
+
14. **Vector PDF produced** in addition to PNG.
|
|
95
|
+
15. **Dimensions match journal spec** — width per figure_specs.md for the
|
|
96
|
+
target journal (single column ≈3.5 in, double ≈7.0 in).
|
|
97
|
+
16. **DPI ≥ 300 (halftone) or ≥ 600 (line art)**.
|
|
98
|
+
17. **No duplicate data encoding** (e.g., color + shape + size all mapped
|
|
99
|
+
to the same variable adds clutter without information).
|
|
100
|
+
18. **Statistical annotations** — where significance markers are used
|
|
101
|
+
(`*`, `**`, `***`), the caption defines thresholds. Prefer actual
|
|
102
|
+
p-values for publication.
|
|
103
|
+
|
|
104
|
+
## F. Exemplar comparison (if exemplars exist for this type)
|
|
105
|
+
|
|
106
|
+
19. **Visual density** comparable to exemplars — not significantly sparser
|
|
107
|
+
or more cluttered.
|
|
108
|
+
20. **Annotation style** — placement of summary statistics, N labels,
|
|
109
|
+
p-values consistent with exemplars.
|
|
110
|
+
|
|
111
|
+
## G. Medical AI / prediction-model checks (added v1.1.0)
|
|
112
|
+
|
|
113
|
+
Apply when the figure supports a prediction-model or medical-AI claim
|
|
114
|
+
(TRIPOD+AI, CLAIM 2024, STARD-AI, CONSORT-AI). Source:
|
|
115
|
+
`reporting_guideline_figure_map.md` "AI-specific figures most often
|
|
116
|
+
missing."
|
|
117
|
+
|
|
118
|
+
21. **Calibration plot accompanies discrimination** — when the manuscript
|
|
119
|
+
reports AUC/c-statistic, a calibration plot is also presented (or the
|
|
120
|
+
figure is paired with one). TRIPOD+AI mandates calibration; AUC alone
|
|
121
|
+
is insufficient evidence of model fitness.
|
|
122
|
+
22. **Subgroup / fairness panel** — when the deployment claim covers
|
|
123
|
+
multiple demographic groups, sites, or scanner vendors, performance
|
|
124
|
+
is shown stratified by at least one such axis. CLAIM 2024 §C and
|
|
125
|
+
TRIPOD+AI both require this.
|
|
126
|
+
23. **Colorblind-safe + redundant encoding** — color carrying diagnostic
|
|
127
|
+
meaning is paired with at least one non-color cue (line style, marker
|
|
128
|
+
shape, or direct label) so the figure survives deuteranopia
|
|
129
|
+
simulation and grayscale conversion. (Crameri 2024.) Stronger than
|
|
130
|
+
the existing item D.13.
|
|
131
|
+
24. **Dataset-flow visible** — for AI papers reporting performance on a
|
|
132
|
+
test set, the manuscript also includes a dataset-flow diagram with
|
|
133
|
+
counts at training / tuning / internal-test / external-test splits.
|
|
134
|
+
Required by STARD-AI, CLAIM 2024, TRIPOD+AI. If the figure under
|
|
135
|
+
review is not the dataset-flow itself, confirm one exists elsewhere
|
|
136
|
+
in the manuscript.
|
|
137
|
+
25. **Decision-curve analysis (when claiming clinical utility)** — papers
|
|
138
|
+
that argue "this model would change clinical management" must
|
|
139
|
+
accompany discrimination/calibration with a decision-curve plot
|
|
140
|
+
(Vickers & Elkin, *Med Decis Making* 2006). Recommended by TRIPOD+AI.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Scoring output format
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
## Critic report (data plot, round T)
|
|
148
|
+
|
|
149
|
+
| Item | Score | Note |
|
|
150
|
+
|------|-------|------|
|
|
151
|
+
| A.1 X-axis label | PASS | — |
|
|
152
|
+
| A.2 Y-axis label | FAIL | Missing units ("Sensitivity" should be unitless OK; but "Time" needs "(months)") |
|
|
153
|
+
| ...
|
|
154
|
+
|
|
155
|
+
### Required edits before next render
|
|
156
|
+
1. Add unit "(months)" to Y-axis label.
|
|
157
|
+
2. Increase legend font from 6pt to 8pt.
|
|
158
|
+
3. ...
|
|
159
|
+
|
|
160
|
+
### Overall verdict
|
|
161
|
+
[ ] PASS — ready for manuscript
|
|
162
|
+
[ ] REFINE — items above must be fixed before next round
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Record `critic_pass: yes | partial | no` and `refine_rounds: N` in the
|
|
166
|
+
`_figure_manifest.md` for this figure after the final round.
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# Critic Rubric — Flow Diagrams
|
|
2
|
+
|
|
3
|
+
Apply this rubric when the generated figure is a flow diagram: STARD,
|
|
4
|
+
CONSORT, PRISMA, or pipeline/methods. The Claude session should Read the
|
|
5
|
+
rendered PNG plus any available exemplars from
|
|
6
|
+
`references/exemplar_diagrams/{stard|consort|prisma|pipeline}/`, then mark
|
|
7
|
+
each item below as **PASS / PARTIAL / FAIL** with a one-line justification.
|
|
8
|
+
|
|
9
|
+
After scoring, produce a concrete list of source edits (D2 code changes,
|
|
10
|
+
node label fixes, count corrections) that would resolve every FAIL or
|
|
11
|
+
PARTIAL item. Return the scored rubric + edit list to the user.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## A. Structural integrity
|
|
16
|
+
|
|
17
|
+
1. **Box overlap** — No two boxes or text labels overlap. Arrows do not cross
|
|
18
|
+
through node text.
|
|
19
|
+
2. **Readable edges** — Every edge has a clear source and target; direction is
|
|
20
|
+
unambiguous; no dangling arrows.
|
|
21
|
+
3. **Hierarchy preserved** — Vertical or horizontal flow reads in a single
|
|
22
|
+
dominant direction; upstream nodes appear before downstream ones.
|
|
23
|
+
4. **Alignment** — Peer nodes at the same logical level are aligned
|
|
24
|
+
(baseline or center).
|
|
25
|
+
5. **Whitespace** — No excessive vertical gap (>2× box height) between
|
|
26
|
+
sequential steps. No cramped collisions at decision points.
|
|
27
|
+
|
|
28
|
+
## B. Required elements (per figure type)
|
|
29
|
+
|
|
30
|
+
### STARD flow (diagnostic accuracy)
|
|
31
|
+
- Enrollment count (consecutive vs. random, eligible n)
|
|
32
|
+
- Included n (with inclusion criteria applied)
|
|
33
|
+
- Excluded n with itemized reasons
|
|
34
|
+
- Index test performed (n analyzed)
|
|
35
|
+
- Reference standard performed (n analyzed)
|
|
36
|
+
- Final analysis cohort (n with both tests)
|
|
37
|
+
|
|
38
|
+
### CONSORT flow (RCT)
|
|
39
|
+
- **Enrollment** section: Assessed for eligibility (n), Excluded (n with
|
|
40
|
+
reasons: did not meet criteria, declined, other)
|
|
41
|
+
- **Allocation** section: Randomized (n), Allocated to each arm (n received /
|
|
42
|
+
n did not receive intervention)
|
|
43
|
+
- **Follow-up** section: Lost to follow-up (n, reasons), Discontinued (n,
|
|
44
|
+
reasons) per arm
|
|
45
|
+
- **Analysis** section: Analyzed (n), Excluded from analysis (n, reasons)
|
|
46
|
+
per arm
|
|
47
|
+
|
|
48
|
+
### PRISMA 2020 flow (systematic review)
|
|
49
|
+
- Records identified from databases (n per database)
|
|
50
|
+
- Records identified from other sources (registers, citation search, etc.)
|
|
51
|
+
- Records after duplicates removed (n)
|
|
52
|
+
- Records screened (n) → Records excluded (n)
|
|
53
|
+
- Reports sought for retrieval (n) → Reports not retrieved (n)
|
|
54
|
+
- Reports assessed for eligibility (n) → Reports excluded with reasons (n, reason categories)
|
|
55
|
+
- Studies included in review (n) / Reports of included studies (n)
|
|
56
|
+
|
|
57
|
+
### Pipeline / methods
|
|
58
|
+
- Input data block clearly named (modality, cohort)
|
|
59
|
+
- Preprocessing steps in sequence (resampling, normalization, augmentation)
|
|
60
|
+
- Model / algorithm block with name or architecture
|
|
61
|
+
- Output / task block (segmentation, classification, regression)
|
|
62
|
+
- Evaluation metric block where applicable
|
|
63
|
+
|
|
64
|
+
## C. Numerical consistency
|
|
65
|
+
|
|
66
|
+
6. **Arithmetic balance** — At each branching node, `in = out + excluded`.
|
|
67
|
+
Verify every subtraction explicitly. Flag any mismatch.
|
|
68
|
+
7. **Column totals consistent** — For parallel arms (CONSORT), arm totals
|
|
69
|
+
sum to the randomized total at every stage.
|
|
70
|
+
8. **No duplicate counts** — A participant should not appear in two leaf
|
|
71
|
+
nodes unless the diagram explicitly models this.
|
|
72
|
+
9. **Manuscript consistency** — Numbers in the diagram match the
|
|
73
|
+
corresponding text in Methods/Results (apply the [VERIFY-CSV] rule —
|
|
74
|
+
every count should trace to a CSV cell or source query).
|
|
75
|
+
|
|
76
|
+
## D. Typography and accessibility
|
|
77
|
+
|
|
78
|
+
10. **Font size ≥ 18pt** at the compact-recipe render dimensions (main boxes
|
|
79
|
+
≥ 20pt, exclusion boxes ≥ 18pt, italic notes ≥ 17pt). Check against the
|
|
80
|
+
`critic_figure.py` OCR min-height flag.
|
|
81
|
+
11. **No truncated text** — No box shows clipped text ("Assessed for eli...").
|
|
82
|
+
OCR coverage check (source_word_coverage ≥ 0.95).
|
|
83
|
+
12. **Consistent casing** — Sentence case everywhere, or Title Case
|
|
84
|
+
everywhere — not mixed.
|
|
85
|
+
13. **Wong palette or neutral only** — Fill colors drawn from the Wong
|
|
86
|
+
colorblind-safe set plus whites/light grays. No red-green only
|
|
87
|
+
distinctions.
|
|
88
|
+
14. **Grayscale-safe** — Conversion to grayscale preserves all distinctions
|
|
89
|
+
between box categories (intent vs. exclusion vs. outcome).
|
|
90
|
+
|
|
91
|
+
## E. Publication readiness
|
|
92
|
+
|
|
93
|
+
15. **Vector format available** — Both PNG (for DOCX embedding) and PDF
|
|
94
|
+
(for journal submission) were produced. If PDF missing, flag.
|
|
95
|
+
16. **Dimensions match journal spec** — Width matches the target journal's
|
|
96
|
+
single-column or double-column specification (±0.3 in).
|
|
97
|
+
17. **DPI meets spec** — ≥600 DPI for line-art submissions, ≥300 DPI for
|
|
98
|
+
halftone.
|
|
99
|
+
18. **Policy compliance** — Tool is D2 or a permitted auto-layout engine,
|
|
100
|
+
not matplotlib FancyBboxPatch and not Mermaid. (Mermaid is forbidden
|
|
101
|
+
in papers per the project's figure-toolchain policy.)
|
|
102
|
+
|
|
103
|
+
## F. Exemplar comparison (if exemplars exist for this type)
|
|
104
|
+
|
|
105
|
+
19. **Hierarchy depth** matches one of the exemplars within ±1 level.
|
|
106
|
+
20. **Typographic weight** — Main step labels are visually heavier
|
|
107
|
+
(bold/larger) than parenthetical / exclusion labels, as in the
|
|
108
|
+
exemplars.
|
|
109
|
+
21. **Emphasis placement** — Key cohort counts (final analysis n, primary
|
|
110
|
+
outcome n) are visually emphasized (thicker stroke, larger font, or
|
|
111
|
+
fill distinction), consistent with exemplar conventions.
|
|
112
|
+
|
|
113
|
+
## G. Communication-first checks (added v1.1.0)
|
|
114
|
+
|
|
115
|
+
These checks operationalize `references/design_principles.md` (Nature Hum
|
|
116
|
+
Behav 2026) and `references/flow_diagram_lessons.md`. Apply when the
|
|
117
|
+
diagram will be circulated to senior co-authors or submitted to a peer-
|
|
118
|
+
reviewed venue.
|
|
119
|
+
|
|
120
|
+
22. **Cognitive load** — Each column has ≤7 boxes; each diagram uses ≤3
|
|
121
|
+
distinct shapes (e.g., rectangle / rounded rectangle / note) and ≤3
|
|
122
|
+
fill colors. If the count is exceeded, fold detail into supplementary
|
|
123
|
+
or split into a multi-panel figure.
|
|
124
|
+
23. **Key-message visibility** — The analytic cohort (final n included in
|
|
125
|
+
primary analysis) is visually emphasized via thicker stroke
|
|
126
|
+
(`penwidth ≥ 1.8`), distinct fill, or larger font, so the reader's
|
|
127
|
+
eye lands on it within 2 seconds.
|
|
128
|
+
24. **Official-template fidelity** (when applicable) — Layout matches the
|
|
129
|
+
canonical PRISMA 2020 / CONSORT 2010 / STARD 2015 / STROBE template
|
|
130
|
+
used by the corresponding statement group. Custom layouts are
|
|
131
|
+
acceptable for exploratory drafts but must be replaced before
|
|
132
|
+
circulation. (See `flow_diagram_lessons.md` Lesson 1.)
|
|
133
|
+
25. **Exclusion-box geometry** — Exclusion side-boxes are rectangles (not
|
|
134
|
+
`shape: note` / "dog-ear" style) when the diagram aims to match
|
|
135
|
+
PRISMA / CONSORT canonical look. Bullets within exclusion boxes are
|
|
136
|
+
left-aligned (Graphviz `\l`, not `\n`).
|
|
137
|
+
26. **Frozen-version sync** — The figure file path includes the manuscript
|
|
138
|
+
version (`figures/v{N}/figure_1.pdf`) and the value of `v{N}` matches
|
|
139
|
+
the current manuscript version. Edits after circulation must branch
|
|
140
|
+
to `v{N+1}/`, never overwrite `v{N}/`. (See `flow_diagram_lessons.md`
|
|
141
|
+
Lesson 5.)
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Scoring output format
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
## Critic report (flow diagram, round T)
|
|
149
|
+
|
|
150
|
+
| Item | Score | Note |
|
|
151
|
+
|------|-------|------|
|
|
152
|
+
| A.1 Box overlap | PASS | — |
|
|
153
|
+
| A.2 Readable edges | PASS | — |
|
|
154
|
+
| ...
|
|
155
|
+
| C.6 Arithmetic balance | FAIL | Enrollment 500 ≠ Included 420 + Excluded 85 (off by 5) |
|
|
156
|
+
| ...
|
|
157
|
+
|
|
158
|
+
### Required edits before next render
|
|
159
|
+
1. Correct Excluded count in node X from 85 to 80.
|
|
160
|
+
2. Increase font-size of "Analysis" subsection header from 18 to 22.
|
|
161
|
+
3. ...
|
|
162
|
+
|
|
163
|
+
### Overall verdict
|
|
164
|
+
[ ] PASS — ready for manuscript
|
|
165
|
+
[ ] REFINE — items above must be fixed before next round
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Record `critic_pass: yes | partial | no` and `refine_rounds: N` in the
|
|
169
|
+
`_figure_manifest.md` for this figure after the final round.
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# Effective Scientific Figure Design
|
|
2
|
+
|
|
3
|
+
> **Primary source**: Brunner et al., "Designing effective figures for
|
|
4
|
+
> scientific communication." *Nat Hum Behav* (2026).
|
|
5
|
+
> DOI: 10.1038/s41562-026-02466-9 — communication-context strategies.
|
|
6
|
+
>
|
|
7
|
+
> **Companion sources** (cite in figure legends / Methods when used):
|
|
8
|
+
> - Rougier et al., "Ten simple rules for better figures." *PLoS Comput
|
|
9
|
+
> Biol* 2014;10:e1003833 (PMID 25210732). General-purpose, foundational
|
|
10
|
+
> ten-item checklist.
|
|
11
|
+
> - Crameri F., "Choosing the right colors: a perceptually uniform,
|
|
12
|
+
> colorblind-safe approach." *Curr Protoc* 2024;4:e1126
|
|
13
|
+
> (DOI 10.1002/cpz1.1126). Definitive 2024 reference for `viridis`,
|
|
14
|
+
> `cividis`, `batlow` palettes and redundant encoding.
|
|
15
|
+
>
|
|
16
|
+
> **Triggered from**: SKILL.md Step 1 ("Specify"). Read this file **before**
|
|
17
|
+
> choosing a figure type — it shifts focus from "which chart fits the data" to
|
|
18
|
+
> "what message should the reader walk away with."
|
|
19
|
+
|
|
20
|
+
Most figure-design guidance focuses on technical execution (axis ranges,
|
|
21
|
+
palettes, DPI). This file complements that by adding a communication-first
|
|
22
|
+
layer: who reads the figure, under what time pressure, and what should they
|
|
23
|
+
remember 10 seconds later. Apply these strategies in Step 1 when specifying a
|
|
24
|
+
figure; revisit during Step 4 / 4b when reviewing.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## The 5 strategies (read in order)
|
|
29
|
+
|
|
30
|
+
### 1. Identify the key message *(most important)*
|
|
31
|
+
|
|
32
|
+
Before opening a plotting library, write **one sentence** describing what the
|
|
33
|
+
figure must convey. If you cannot, the figure is premature. Examples:
|
|
34
|
+
|
|
35
|
+
- "Model A outperforms Model B at every operating threshold."
|
|
36
|
+
- "Adverse-event rates differ by route of administration but not by dose."
|
|
37
|
+
- "The proposed pipeline runs end-to-end in under 30 seconds per case."
|
|
38
|
+
|
|
39
|
+
Pin that sentence as a comment at the top of the generation script. Every
|
|
40
|
+
panel, color, annotation, and label exists to support that message; anything
|
|
41
|
+
that does not should be removed or moved to supplementary material.
|
|
42
|
+
|
|
43
|
+
### 2. Consider time and interaction (audience-aware)
|
|
44
|
+
|
|
45
|
+
Different reading contexts allow different amounts of inspection time:
|
|
46
|
+
|
|
47
|
+
| Context | Reading time | Implication |
|
|
48
|
+
|---|---|---|
|
|
49
|
+
| Journal article (specialist) | 30–120 s per figure | Dense detail acceptable; legend lookups OK |
|
|
50
|
+
| Conference slide | 15–30 s, narrated | Direct labels mandatory; one message per slide |
|
|
51
|
+
| Visual / graphical abstract | 5–10 s, no narration | One panel; minimal text; readable thumbnail |
|
|
52
|
+
| Social-media share | 2–5 s | Self-contained; large fonts; high contrast |
|
|
53
|
+
| Public lecture / press | 10–30 s, narrated | Plain-language axis labels; analogy via icon |
|
|
54
|
+
|
|
55
|
+
Set the **reading-time budget** in Step 1, then design backwards. If the same
|
|
56
|
+
result will appear in a journal article *and* a conference talk, build two
|
|
57
|
+
distinct versions — the conference version usually drops half of what the
|
|
58
|
+
journal version contains.
|
|
59
|
+
|
|
60
|
+
### 3. Choose the right graph type and use color intentionally
|
|
61
|
+
|
|
62
|
+
The graph type should match the structure of the data, not aesthetic
|
|
63
|
+
preference.
|
|
64
|
+
|
|
65
|
+
| Data structure | Default | Avoid |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| One continuous variable, one group | Histogram, density | Pie chart |
|
|
68
|
+
| Two continuous variables | Scatter (+ regression line if appropriate) | Bar chart |
|
|
69
|
+
| Continuous over time | Line | Stacked bar |
|
|
70
|
+
| Categorical proportions | Bar (sorted), waffle | 3-D pie |
|
|
71
|
+
| Distribution by group | Box / violin / strip | Bar with SD error |
|
|
72
|
+
| Diagnostic performance | ROC, PR curve | Single accuracy bar |
|
|
73
|
+
| Effect size with CI | Forest plot, dot-and-whisker | Bar with asterisks |
|
|
74
|
+
| Workflow / cohort | Flow diagram (PRISMA / CONSORT / STARD) | Free-form arrows |
|
|
75
|
+
|
|
76
|
+
Color rules (compatible with this skill's `figure_specs.md`; full
|
|
77
|
+
justification in Crameri 2024):
|
|
78
|
+
|
|
79
|
+
- **Categorical groups**: Wong palette (8 colorblind-safe colors).
|
|
80
|
+
- **Sequential magnitude**: `viridis` or `cividis` (perceptually uniform,
|
|
81
|
+
colorblind-safe). Avoid `jet` and `rainbow` — they introduce false
|
|
82
|
+
perceptual edges.
|
|
83
|
+
- **Diverging around zero**: `RdBu`, `PuOr`, or `vik` (Crameri).
|
|
84
|
+
- **Encode meaning, not decoration.** If the same conclusion holds in
|
|
85
|
+
grayscale, color is decorative — remove or use neutral grays.
|
|
86
|
+
- **Redundant encoding** when color carries diagnostic information: pair
|
|
87
|
+
color with line style, marker shape, or direct label so the figure
|
|
88
|
+
survives a deuteranopia simulation and a black-and-white print.
|
|
89
|
+
- **Maximum 3 colors per panel** unless the data structure genuinely demands
|
|
90
|
+
more (and then label each directly, not via legend).
|
|
91
|
+
|
|
92
|
+
### 4. Reduce cognitive load
|
|
93
|
+
|
|
94
|
+
Every visual element competes for attention. The reader's working memory is
|
|
95
|
+
roughly 7 items; design under that ceiling.
|
|
96
|
+
|
|
97
|
+
- ≤7 distinct visual elements per panel (curves, boxes, annotations).
|
|
98
|
+
- ≤3 distinct shapes (e.g., square, circle, triangle).
|
|
99
|
+
- ≤3 colors as above.
|
|
100
|
+
- **Direct labels on series > legend.** Legend lookups cost ~2 seconds each.
|
|
101
|
+
- No 3-D, drop-shadow, gradient fill, or rotated axis labels unless they
|
|
102
|
+
encode data.
|
|
103
|
+
- Sans-serif font ≥ 9 pt at print size; ≥ 18 pt for slides; ≥ 24 pt for
|
|
104
|
+
posters.
|
|
105
|
+
- Whitespace is not wasted space — it groups related elements.
|
|
106
|
+
|
|
107
|
+
If a panel violates two or more of these, split it into multiple panels or
|
|
108
|
+
move detail to supplementary material.
|
|
109
|
+
|
|
110
|
+
### 5. Ask whether a figure is really needed
|
|
111
|
+
|
|
112
|
+
Sometimes a table, a single sentence, or a caption-only number conveys the
|
|
113
|
+
result more clearly. Use a figure when **at least one** of the following is
|
|
114
|
+
true:
|
|
115
|
+
|
|
116
|
+
- The reader needs to perceive a *shape* (trend, distribution, threshold).
|
|
117
|
+
- The reader needs to *compare* across many groups simultaneously.
|
|
118
|
+
- The result depends on a *spatial* or *anatomical* relationship.
|
|
119
|
+
- The audience will not read the prose carefully and needs a visual hook.
|
|
120
|
+
|
|
121
|
+
Otherwise, prefer a small table or in-line text. A 3-row × 2-column results
|
|
122
|
+
table beats a bar chart of two values.
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Decision: figure vs table
|
|
127
|
+
|
|
128
|
+
| Use a **figure** when… | Use a **table** when… |
|
|
129
|
+
|---|---|
|
|
130
|
+
| Trend or shape matters | Exact values matter (e.g., baseline characteristics) |
|
|
131
|
+
| ≥4 groups / conditions | ≤3 groups *and* ≤8 metrics |
|
|
132
|
+
| Distribution shape conveys meaning | Categorical labels with counts |
|
|
133
|
+
| Comparison across many dimensions | Reader will reuse the numbers (re-analysis, replication) |
|
|
134
|
+
| Visual-abstract / hero panel | Supplementary detail |
|
|
135
|
+
|
|
136
|
+
When in doubt, sketch both on paper for 60 seconds and decide which the eye
|
|
137
|
+
finishes first.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## Cognitive load checklist (Step 4 quick scan)
|
|
142
|
+
|
|
143
|
+
- [ ] One sentence describes the key message in the script comment.
|
|
144
|
+
- [ ] Reading-time budget matches the deployment context.
|
|
145
|
+
- [ ] ≤7 visual elements per panel.
|
|
146
|
+
- [ ] ≤3 colors carrying meaning (not decoration).
|
|
147
|
+
- [ ] No 3-D / shadow / gradient unless data-driven.
|
|
148
|
+
- [ ] Direct labels on series; legend has ≤4 entries.
|
|
149
|
+
- [ ] Font size meets context minimum (9 pt print / 18 pt slide / 24 pt poster).
|
|
150
|
+
- [ ] Same figure works in grayscale (run a `convert -colorspace Gray` test).
|
|
151
|
+
|
|
152
|
+
If two or more boxes are unchecked, return to Step 1 before exporting.
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## Anti-patterns (drawn from this skill's critic rubrics)
|
|
157
|
+
|
|
158
|
+
These compose with the more granular checks in
|
|
159
|
+
`critic_rubrics/data_plot.md` and `critic_rubrics/flow_diagram.md`:
|
|
160
|
+
|
|
161
|
+
- **Default-palette syndrome** — using the matplotlib `tab10` palette without
|
|
162
|
+
thought. Reads as a quick draft, not a finished figure.
|
|
163
|
+
- **Legend-dependence** — colored series without direct labels, forcing
|
|
164
|
+
back-and-forth between legend and data.
|
|
165
|
+
- **Decorative 3-D** — bars or pies in 3-D with no third data dimension.
|
|
166
|
+
- **Chart-of-three-values** — figure where a sentence would be clearer.
|
|
167
|
+
- **Caption-as-Methods** — caption explains how the data were generated
|
|
168
|
+
rather than what to look at; methodology belongs in the Methods section.
|
|
169
|
+
- **Mismatched detail** — slide-deck figure rendered at 6 pt because it was
|
|
170
|
+
copied from the manuscript without adjustment.
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## Cross-references
|
|
175
|
+
|
|
176
|
+
- `critic_rubrics/data_plot.md` — quantitative critic checks for non-flow figures
|
|
177
|
+
- `critic_rubrics/flow_diagram.md` — extended checks for flow diagrams
|
|
178
|
+
- `figure_specs.md` — journal-specific dimensions and DPI
|
|
179
|
+
- `flow_diagram_lessons.md` — production lessons specific to PRISMA / CONSORT / STARD
|
|
180
|
+
- `reporting_guideline_figure_map.md` — which figures CONSORT-AI / TRIPOD+AI / CLAIM 2024 / STARD-AI mandate
|
|
181
|
+
- `pipeline_concepts_medical_ai.md` — DICOM workflow, annotation, federated learning, model architecture conventions
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Exemplar Diagrams — Quality Anchors for the Critic Loop
|
|
2
|
+
|
|
3
|
+
This directory holds a small, hand-curated set of flow-diagram and figure
|
|
4
|
+
examples from published papers that we consider high-quality. The Critic
|
|
5
|
+
Loop references these as "visual structure first" anchors when reviewing
|
|
6
|
+
newly generated figures.
|
|
7
|
+
|
|
8
|
+
## Layout
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
exemplar_diagrams/
|
|
12
|
+
├── strobe/ # cohort / cross-sectional / case-control flow
|
|
13
|
+
├── stard/ # diagnostic-accuracy flow diagrams
|
|
14
|
+
├── consort/ # RCT participant flow
|
|
15
|
+
├── prisma/ # systematic review selection flow
|
|
16
|
+
├── pipeline/ # methods / algorithm flow diagrams
|
|
17
|
+
└── {other...}/ # future types (roc, forest, km, ...)
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Each category directory can hold two kinds of files:
|
|
21
|
+
|
|
22
|
+
1. **Review anchors** (for the Critic Loop) — groups of three files per exemplar:
|
|
23
|
+
- `{label}.png` — rendered figure cropped from a published paper (≥300 DPI)
|
|
24
|
+
- `{label}.meta.yaml` — attribution metadata (source PDF, page, DOI, crop coords)
|
|
25
|
+
- `{label}_why.md` — 50–100 word note on why this figure is a good anchor
|
|
26
|
+
2. **Generation templates** (for `generate_flow_diagram.R`) — one set per category:
|
|
27
|
+
- `template_input.yaml` — minimal schema example showing all supported fields
|
|
28
|
+
- `template_output.{pdf,png,_600.png}` — rendered reference output for the template
|
|
29
|
+
- Render with `Rscript ../../scripts/generate_flow_diagram.R --type <type> --config <dir>/template_input.yaml --out <dir>/template_output`
|
|
30
|
+
|
|
31
|
+
## How to add a new exemplar
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
python skills/make-figures/scripts/extract_exemplar_from_pdf.py \
|
|
35
|
+
--pdf "/path/to/paper.pdf" \
|
|
36
|
+
--page 3 \
|
|
37
|
+
--type stard \
|
|
38
|
+
--label LastnameYEAR_STARD \
|
|
39
|
+
--doi 10.1148/radiol.2017170371 \
|
|
40
|
+
--crop 0.05,0.1,0.95,0.6
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Then open the generated `{label}_why.md` and fill in the curator's note
|
|
44
|
+
(50–100 words on hierarchy, whitespace, typography, emphasis, color).
|
|
45
|
+
|
|
46
|
+
## Curator guidelines
|
|
47
|
+
|
|
48
|
+
- **Source quality** — prefer examples from Radiology, NEJM, Lancet, JAMA,
|
|
49
|
+
European Radiology, BMJ, Cochrane Reviews. Lower-tier sources only when
|
|
50
|
+
they show a specifically good design pattern.
|
|
51
|
+
- **One exemplar per design principle** — do not add five near-identical
|
|
52
|
+
examples. Aim for 3–5 exemplars per category, each illustrating a
|
|
53
|
+
different design strength.
|
|
54
|
+
- **Crop tightly** — remove surrounding caption and whitespace so the
|
|
55
|
+
exemplar is purely the diagram.
|
|
56
|
+
- **No open-access conflict** — avoid exemplars from paywalled figures
|
|
57
|
+
where fair-use for internal reference review is unclear. Prefer
|
|
58
|
+
open-access or CC-licensed papers when possible.
|
|
59
|
+
|
|
60
|
+
## Attribution
|
|
61
|
+
|
|
62
|
+
Exemplars are used under fair-use for internal quality review only. They
|
|
63
|
+
are **not redistributed as part of generated figures** — the Critic Loop
|
|
64
|
+
uses them read-only as anchors for feedback. The `_meta.yaml` sidecar
|
|
65
|
+
records DOI and source for every exemplar.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# consort Exemplars
|
|
2
|
+
|
|
3
|
+
This directory will hold 3–5 hand-curated consort flow/figure exemplars.
|
|
4
|
+
Use the extraction script to add one:
|
|
5
|
+
|
|
6
|
+
```bash
|
|
7
|
+
python skills/make-figures/scripts/extract_exemplar_from_pdf.py \
|
|
8
|
+
--pdf "/path/to/paper.pdf" \
|
|
9
|
+
--page N \
|
|
10
|
+
--type consort \
|
|
11
|
+
--label LastnameYEAR_CONSORT \
|
|
12
|
+
--doi 10.xxxx/yyyy
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
See `../README.md` for curation guidelines.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# CONSORT parallel-arm RCT flow diagram template.
|
|
2
|
+
# Render with:
|
|
3
|
+
# Rscript ../../scripts/generate_flow_diagram.R \
|
|
4
|
+
# --type consort --config template_input.yaml --out template_output
|
|
5
|
+
rankdir: TB
|
|
6
|
+
nodes:
|
|
7
|
+
- id: assessed
|
|
8
|
+
label: "Assessed for eligibility\n(n = 500)"
|
|
9
|
+
- id: excl
|
|
10
|
+
shape: note
|
|
11
|
+
fontsize: 10
|
|
12
|
+
label: "Excluded (n = 100):\n• Not meeting inclusion criteria: 60\n• Declined to participate: 25\n• Other reasons: 15"
|
|
13
|
+
rank_same_with: assessed
|
|
14
|
+
- id: rand
|
|
15
|
+
label: "Randomized\n(n = 400)"
|
|
16
|
+
highlight: true
|
|
17
|
+
- id: alloc_tx
|
|
18
|
+
label: "Allocated to intervention (n = 200)\n• Received intervention (n = 195)\n• Did not receive intervention (n = 5)"
|
|
19
|
+
- id: alloc_ctrl
|
|
20
|
+
label: "Allocated to control (n = 200)\n• Received control (n = 198)\n• Did not receive control (n = 2)"
|
|
21
|
+
- id: fu_tx
|
|
22
|
+
label: "Lost to follow-up (n = 8)\nDiscontinued intervention (n = 4)"
|
|
23
|
+
- id: fu_ctrl
|
|
24
|
+
label: "Lost to follow-up (n = 6)\nDiscontinued control (n = 3)"
|
|
25
|
+
- id: ana_tx
|
|
26
|
+
label: "Analyzed (n = 200)\n• Excluded from analysis (n = 0)"
|
|
27
|
+
- id: ana_ctrl
|
|
28
|
+
label: "Analyzed (n = 200)\n• Excluded from analysis (n = 0)"
|
|
29
|
+
edges:
|
|
30
|
+
- {from: assessed, to: rand}
|
|
31
|
+
- {from: rand, to: alloc_tx}
|
|
32
|
+
- {from: rand, to: alloc_ctrl}
|
|
33
|
+
- {from: alloc_tx, to: fu_tx}
|
|
34
|
+
- {from: alloc_ctrl, to: fu_ctrl}
|
|
35
|
+
- {from: fu_tx, to: ana_tx}
|
|
36
|
+
- {from: fu_ctrl, to: ana_ctrl}
|
|
37
|
+
- {from: assessed, to: excl, style: dashed, arrow: false, constraint: false}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Why this exemplar is good — other_02 (bubble chart landscape)
|
|
2
|
+
|
|
3
|
+
Hierarchy / structure: A landscape scatter/bubble chart with time on the X-axis (pre-2022 → 2025) and MMLU score on the Y-axis. A dashed logistic-like trajectory connects the frontier models across years, implicitly communicating the field-wide progression without a separate annotation layer.
|
|
4
|
+
|
|
5
|
+
Whitespace & balance: The pre-2022 region is nearly empty by design — the sparseness is informative, not wasted. High-performance cluster in 2024–2025 is where bubbles densely overlap, and the axis range (0–100 MMLU) leaves enough headroom above the top models to signal the 90%+ ceiling.
|
|
6
|
+
|
|
7
|
+
Typography (font size, weight, alignment): Model names are placed adjacent to their bubbles with consistent font size; no leader lines are needed because the labels sit directly on or beside each dot. The reference lines ("85% = human expert", "70% = ideal") are low-contrast gray so they guide without competing.
|
|
8
|
+
|
|
9
|
+
Emphasis (which elements are visually strongest, why): Bubble size encodes release prominence, and color encodes the parent organization — two independent visual channels that give the reader a comparative read without returning to the legend.
|
|
10
|
+
|
|
11
|
+
Color usage: Eight distinct organizational colors placed against a white field. The palette is high-saturation but the bubbles are translucent, which lets overlapping dots remain legible.
|
|
12
|
+
|
|
13
|
+
Weaknesses (if any — nothing is perfect): The legend (top) is cramped and would benefit from more horizontal space. A few labels ("DeepSeek", "Claude 3.5 Sonnet") clip against neighbors in the 2024 cluster. No explicit units or source note in the rendered crop.
|