bioflowkit 0.2.0__tar.gz → 0.2.1__tar.gz

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.
Files changed (426) hide show
  1. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/.github/workflows/candidate-smoke-test.yml +5 -0
  2. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/.github/workflows/ci.yml +17 -13
  3. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/.github/workflows/docs.yml +5 -0
  4. bioflowkit-0.2.1/.github/workflows/nfcore-concordance.yml +75 -0
  5. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/.github/workflows/nightly-smoke.yml +5 -0
  6. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/.github/workflows/release.yml +5 -0
  7. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/CHANGELOG.md +183 -0
  8. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/PKG-INFO +31 -16
  9. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/README.md +30 -15
  10. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/__init__.py +1 -1
  11. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/cli/__init__.py +2 -0
  12. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/cli/db.py +25 -5
  13. bioflowkit-0.2.1/bioflow/cli/provenance.py +82 -0
  14. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/cli/recipe.py +22 -0
  15. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/cli/update.py +7 -6
  16. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/core/db.py +117 -0
  17. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/core/doctor.py +35 -17
  18. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/core/ncbi.py +10 -3
  19. bioflowkit-0.2.1/bioflow/core/provenance.py +422 -0
  20. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/core/runner.py +61 -5
  21. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/io.py +1 -1
  22. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/llm/__init__.py +3 -2
  23. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/__init__.py +1 -0
  24. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/epigenomics/atac_seq.py +3 -3
  25. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/epigenomics/chip_seq.py +3 -3
  26. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/genome_assembly/eukaryote_assembly.py +2 -2
  27. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/metagenomics/metagenome_assembly.py +1 -1
  28. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/metagenomics/metagenomics_profile.py +1 -1
  29. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/methylation/bismark_wgbs.py +1 -1
  30. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/proteomics/proteomics_dda.py +2 -2
  31. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/rnaseq_deg/rnaseq_deg.py +51 -6
  32. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/single_cell/scrna_seq.py +1 -1
  33. bioflowkit-0.2.1/bioflow/recipes/variant_calling/joint_genotyping.py +236 -0
  34. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/sdk/_stage.py +22 -1
  35. bioflowkit-0.2.1/conda-recipe/meta.yaml +86 -0
  36. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/docs/MAINTAINER.md +42 -1
  37. bioflowkit-0.2.1/docs/benchmarks/nfcore-concordance.md +90 -0
  38. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/docs/index.md +3 -2
  39. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/docs/install.md +6 -0
  40. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/mkdocs.yml +2 -0
  41. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/pyproject.toml +1 -1
  42. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/alignment/bedtools.yaml +3 -2
  43. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/alignment/bowtie2.yaml +2 -1
  44. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/alignment/bwa_mem2.yaml +3 -2
  45. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/alignment/minimap2.yaml +3 -2
  46. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/alignment/samtools.yaml +3 -2
  47. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly/abyss.yaml +4 -3
  48. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly/canu.yaml +3 -2
  49. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly/flye.yaml +4 -3
  50. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly/hifiasm.yaml +3 -2
  51. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly/masurca.yaml +4 -3
  52. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly/medaka.yaml +4 -3
  53. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly/megahit.yaml +3 -2
  54. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly/nextdenovo.yaml +4 -3
  55. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly/nextpolish.yaml +4 -3
  56. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly/pilon.yaml +3 -2
  57. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly/racon.yaml +3 -2
  58. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly/raven.yaml +4 -3
  59. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly/shasta.yaml +4 -3
  60. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly/unicycler.yaml +4 -3
  61. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly/verkko.yaml +3 -2
  62. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly_qc/busco.yaml +3 -2
  63. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly_qc/checkm2.yaml +3 -2
  64. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly_qc/compleasm.yaml +3 -2
  65. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly_qc/gfastats.yaml +4 -3
  66. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly_qc/merqury.yaml +3 -2
  67. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/comparative_genomics/abricate.yaml +1 -0
  68. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/comparative_genomics/cafe5.yaml +1 -0
  69. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/comparative_genomics/diamond.yaml +3 -2
  70. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/comparative_genomics/fastani.yaml +1 -0
  71. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/comparative_genomics/iqtree.yaml +1 -0
  72. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/comparative_genomics/mafft.yaml +3 -2
  73. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/comparative_genomics/mash.yaml +4 -3
  74. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/comparative_genomics/panaroo.yaml +3 -2
  75. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/comparative_genomics/roary.yaml +1 -0
  76. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/comparative_genomics/scoary.yaml +3 -2
  77. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/comparative_genomics/skani.yaml +4 -3
  78. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/deg/deseq2.yaml +4 -3
  79. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/deg/edger.yaml +4 -3
  80. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/deg/limma_voom.yaml +4 -3
  81. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/enrichment/clusterprofiler.yaml +4 -3
  82. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/enrichment/enrichr.yaml +4 -3
  83. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/enrichment/gseapy.yaml +4 -3
  84. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/enrichment/topgo.yaml +4 -3
  85. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/epigenomics/bismark.yaml +1 -0
  86. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/epigenomics/deeptools.yaml +1 -0
  87. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/epigenomics/homer.yaml +2 -1
  88. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/epigenomics/macs3.yaml +2 -1
  89. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/epigenomics/methylkit.yaml +2 -1
  90. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/epigenomics/methylpy.yaml +4 -3
  91. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/epigenomics/picard.yaml +3 -2
  92. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/epigenomics/tobias.yaml +2 -1
  93. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/func_annot/antismash.yaml +3 -2
  94. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/func_annot/dbcan.yaml +3 -2
  95. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/func_annot/eggnog_mapper.yaml +3 -2
  96. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/func_annot/gtdbtk.yaml +3 -2
  97. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/func_annot/interproscan.yaml +4 -3
  98. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/metagenomics/bracken.yaml +2 -1
  99. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/metagenomics/humann3.yaml +2 -1
  100. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/metagenomics/kneaddata.yaml +1 -0
  101. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/metagenomics/kraken2.yaml +1 -0
  102. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/metagenomics/lefse.yaml +1 -0
  103. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/metagenomics/maxbin2.yaml +4 -3
  104. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/metagenomics/metabat2.yaml +4 -3
  105. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/metagenomics/metaphlan4.yaml +1 -0
  106. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/proteomics/comet.yaml +4 -3
  107. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/proteomics/maxquant.yaml +10 -1
  108. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/proteomics/msconvert.yaml +1 -0
  109. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/proteomics/openms.yaml +4 -3
  110. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/proteomics/percolator.yaml +2 -1
  111. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/proteomics/xtandem.yaml +3 -2
  112. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/qc/cutadapt.yaml +4 -3
  113. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/qc/fastqc.yaml +3 -2
  114. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/qc/filtlong.yaml +4 -3
  115. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/qc/multiqc.yaml +3 -2
  116. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/qc/nanoplot.yaml +3 -2
  117. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/qc/seqkit.yaml +3 -2
  118. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/qc/trimgalore.yaml +1 -0
  119. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/repeat/earlgrey.yaml +4 -3
  120. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/repeat/repeatmasker.yaml +3 -2
  121. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/repeat/repeatmodeler.yaml +3 -2
  122. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/rnaseq_align/hisat2.yaml +3 -2
  123. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/rnaseq_align/kallisto.yaml +4 -3
  124. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/rnaseq_align/rsem.yaml +4 -3
  125. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/rnaseq_align/salmon.yaml +4 -3
  126. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/rnaseq_align/star.yaml +3 -2
  127. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/rnaseq_align/stringtie.yaml +4 -3
  128. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/rnaseq_align/subread.yaml +3 -2
  129. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/single_cell/bustools.yaml +4 -3
  130. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/single_cell/cellranger.yaml +2 -1
  131. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/single_cell/harmony.yaml +4 -3
  132. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/single_cell/monocle3.yaml +2 -1
  133. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/single_cell/scanpy.yaml +2 -1
  134. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/single_cell/scrublet.yaml +4 -3
  135. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/single_cell/seurat.yaml +2 -1
  136. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/single_cell/starsolo.yaml +1 -0
  137. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/struct_annot/augustus.yaml +4 -3
  138. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/struct_annot/bakta.yaml +3 -2
  139. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/struct_annot/braker3.yaml +3 -2
  140. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/struct_annot/liftoff.yaml +3 -2
  141. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/variant_calling/bcftools.yaml +3 -2
  142. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/variant_calling/freebayes.yaml +4 -3
  143. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/variant_calling/gatk4.yaml +3 -2
  144. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/variant_calling/snpeff.yaml +3 -2
  145. bioflowkit-0.2.1/scripts/compare_nfcore.py +234 -0
  146. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/scripts/pin_digests.py +12 -2
  147. bioflowkit-0.2.1/scripts/refresh_tags.py +199 -0
  148. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/integration/test_recipe_smoke_matrix.py +31 -1
  149. bioflowkit-0.2.1/tests/unit/test_compare_nfcore.py +170 -0
  150. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_db.py +45 -0
  151. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_failure_report.py +2 -1
  152. bioflowkit-0.2.1/tests/unit/test_gpu_podman.py +203 -0
  153. bioflowkit-0.2.1/tests/unit/test_provenance.py +232 -0
  154. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_recipes_per_pipeline.py +5 -4
  155. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_recipes_per_pipeline_e2e.py +19 -0
  156. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_run_resume.py +1 -0
  157. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/.gitignore +0 -0
  158. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/CODE_OF_CONDUCT.md +0 -0
  159. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/CONTRIBUTING.md +0 -0
  160. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/LICENSE +0 -0
  161. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/SECURITY.md +0 -0
  162. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/README.md +0 -0
  163. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_ananatis_019464615_1.card.tsv +0 -0
  164. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_ananatis_019464615_1.plasmidfinder.tsv +0 -0
  165. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_ananatis_019464615_1.vfdb.tsv +0 -0
  166. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_aquatica_900095885_1.card.tsv +0 -0
  167. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_aquatica_900095885_1.plasmidfinder.tsv +0 -0
  168. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_aquatica_900095885_1.vfdb.tsv +0 -0
  169. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_chrysanthemi_000023565_1.card.tsv +0 -0
  170. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_chrysanthemi_000023565_1.plasmidfinder.tsv +0 -0
  171. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_chrysanthemi_000023565_1.vfdb.tsv +0 -0
  172. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_dadantii_003049785_1.card.tsv +0 -0
  173. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_dadantii_003049785_1.plasmidfinder.tsv +0 -0
  174. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_dadantii_003049785_1.vfdb.tsv +0 -0
  175. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_dianthicola_003403135_1.card.tsv +0 -0
  176. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_dianthicola_003403135_1.plasmidfinder.tsv +0 -0
  177. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_dianthicola_003403135_1.vfdb.tsv +0 -0
  178. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_fangzhongdai_002812485_1.card.tsv +0 -0
  179. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_fangzhongdai_002812485_1.plasmidfinder.tsv +0 -0
  180. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_fangzhongdai_002812485_1.vfdb.tsv +0 -0
  181. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_lacustris_003934295_1.card.tsv +0 -0
  182. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_lacustris_003934295_1.plasmidfinder.tsv +0 -0
  183. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_lacustris_003934295_1.vfdb.tsv +0 -0
  184. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_oryzae_020406815_2.card.tsv +0 -0
  185. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_oryzae_020406815_2.plasmidfinder.tsv +0 -0
  186. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_oryzae_020406815_2.vfdb.tsv +0 -0
  187. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_parazeae_000025065_1.card.tsv +0 -0
  188. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_parazeae_000025065_1.plasmidfinder.tsv +0 -0
  189. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_parazeae_000025065_1.vfdb.tsv +0 -0
  190. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_poaceiphila_007858975_2.card.tsv +0 -0
  191. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_poaceiphila_007858975_2.plasmidfinder.tsv +0 -0
  192. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_poaceiphila_007858975_2.vfdb.tsv +0 -0
  193. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_solani_001644705_1.card.tsv +0 -0
  194. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_solani_001644705_1.plasmidfinder.tsv +0 -0
  195. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_solani_001644705_1.vfdb.tsv +0 -0
  196. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_undicola_000784735_1.card.tsv +0 -0
  197. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_undicola_000784735_1.plasmidfinder.tsv +0 -0
  198. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_undicola_000784735_1.vfdb.tsv +0 -0
  199. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_zeae_002887555_1.card.tsv +0 -0
  200. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_zeae_002887555_1.plasmidfinder.tsv +0 -0
  201. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/D_zeae_002887555_1.vfdb.tsv +0 -0
  202. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/_summary_card.tsv +0 -0
  203. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/_summary_plasmidfinder.tsv +0 -0
  204. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/abricate/_summary_vfdb.tsv +0 -0
  205. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/cafe/results/Base_clade_results.txt +0 -0
  206. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/cafe/results/Base_family_likelihoods.txt +0 -0
  207. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/cafe/results/Base_family_results.txt +0 -0
  208. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/cafe/results/Base_results.txt +0 -0
  209. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/cafe/vfdb_counts.tsv +0 -0
  210. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/eggnog/cog_counts_by_bucket.tsv +0 -0
  211. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/eggnog/cog_fractions_by_bucket.tsv +0 -0
  212. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/abricate_card.png +0 -0
  213. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/abricate_full_boxplot.png +0 -0
  214. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/abricate_full_card.png +0 -0
  215. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/abricate_full_plasmidfinder.png +0 -0
  216. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/abricate_full_vfdb.png +0 -0
  217. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/abricate_plasmidfinder.png +0 -0
  218. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/abricate_vfdb.png +0 -0
  219. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/ani_full_heatmap.png +0 -0
  220. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/ani_heatmap.png +0 -0
  221. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/cafe_hcp_detail.png +0 -0
  222. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/cafe_vfdb_tree.png +0 -0
  223. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/cog_delta.png +0 -0
  224. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/cog_stacked.png +0 -0
  225. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/pangenome_curve.png +0 -0
  226. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/pangenome_full_curve.png +0 -0
  227. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/pangenome_full_pie.png +0 -0
  228. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/pangenome_pie.png +0 -0
  229. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/scoary_full_is_dianthicola.png +0 -0
  230. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/scoary_full_is_solani.png +0 -0
  231. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/scoary_full_soft_rot.png +0 -0
  232. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/scoary_full_vascular_wilt.png +0 -0
  233. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/scoary_soft_rot.png +0 -0
  234. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/scoary_vascular_wilt.png +0 -0
  235. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/solani_island_gc.png +0 -0
  236. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/solani_island_synteny.png +0 -0
  237. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/tree_ani_nj.png +0 -0
  238. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/tree_full_with_vfdb.png +0 -0
  239. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/figures/tree_ml_iqtree.png +0 -0
  240. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/phylogeny/ani_nj.nwk +0 -0
  241. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/phylogeny/iqtree.treefile +0 -0
  242. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/phylogeny_full/iqtree_full.treefile +0 -0
  243. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/scoary/top25_soft_rot.tsv +0 -0
  244. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/scoary/top25_vascular_wilt.tsv +0 -0
  245. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/scoary/traits.csv +0 -0
  246. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/scoary_full/top30_is_dianthicola.tsv +0 -0
  247. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/scoary_full/top30_is_solani.tsv +0 -0
  248. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/scoary_full/top30_soft_rot.tsv +0 -0
  249. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/scoary_full/top30_vascular_wilt.tsv +0 -0
  250. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/scoary_full/traits.csv +0 -0
  251. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/analysis/dickeya/summary.html +0 -0
  252. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/cli/__main__.py +0 -0
  253. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/cli/_app.py +0 -0
  254. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/cli/doctor.py +0 -0
  255. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/cli/hw.py +0 -0
  256. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/cli/llm.py +0 -0
  257. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/cli/ncbi.py +0 -0
  258. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/cli/pipelines.py +0 -0
  259. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/cli/setup.py +0 -0
  260. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/core/__init__.py +0 -0
  261. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/core/approve.py +0 -0
  262. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/core/checkpoint.py +0 -0
  263. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/core/compatibility.py +0 -0
  264. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/core/dag.py +0 -0
  265. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/core/hardware.py +0 -0
  266. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/core/logger.py +0 -0
  267. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/core/planner.py +0 -0
  268. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/core/registry.py +0 -0
  269. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/core/report.py +0 -0
  270. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/llm/audit.py +0 -0
  271. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/pipelines/__init__.py +0 -0
  272. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/pipelines/atac_seq.py +0 -0
  273. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/pipelines/chip_seq.py +0 -0
  274. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/pipelines/genome_assembly.py +0 -0
  275. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/pipelines/metagenomics.py +0 -0
  276. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/pipelines/methylation.py +0 -0
  277. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/pipelines/proteomics.py +0 -0
  278. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/pipelines/rnaseq_deg.py +0 -0
  279. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/pipelines/scrna_seq.py +0 -0
  280. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/pipelines/variant_calling.py +0 -0
  281. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/comparative_genomics/__init__.py +0 -0
  282. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/comparative_genomics/amr_vf_catalogue.py +0 -0
  283. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/comparative_genomics/ani_matrix.py +0 -0
  284. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/comparative_genomics/cafe_evolution.py +0 -0
  285. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/comparative_genomics/cog_enrichment.py +0 -0
  286. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/comparative_genomics/download_taxon.py +0 -0
  287. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/comparative_genomics/gwas.py +0 -0
  288. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/comparative_genomics/pangenome.py +0 -0
  289. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/comparative_genomics/phylogeny.py +0 -0
  290. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/epigenomics/__init__.py +0 -0
  291. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/genome_assembly/__init__.py +0 -0
  292. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/genome_assembly/prokaryote_assembly.py +0 -0
  293. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/metagenomics/__init__.py +0 -0
  294. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/methylation/__init__.py +0 -0
  295. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/proteomics/__init__.py +0 -0
  296. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/rnaseq_deg/__init__.py +0 -0
  297. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/single_cell/__init__.py +0 -0
  298. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/variant_calling/__init__.py +0 -0
  299. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/recipes/variant_calling/germline_variants.py +0 -0
  300. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/report.py +0 -0
  301. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/sdk/__init__.py +0 -0
  302. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/sdk/_cache.py +0 -0
  303. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/sdk/_hashing.py +0 -0
  304. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/sdk/_parallel.py +0 -0
  305. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/sdk/_paths.py +0 -0
  306. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/sdk/_pipeline.py +0 -0
  307. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/sdk/_result.py +0 -0
  308. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/bioflow/sdk/_runtime.py +0 -0
  309. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/data/test/ecoli_small/R1.fastq.gz +0 -0
  310. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/data/test/ecoli_small/R2.fastq.gz +0 -0
  311. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/data/test/ecoli_small/real_R1.fastq.gz +0 -0
  312. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/data/test/ecoli_small/real_R2.fastq.gz +0 -0
  313. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/data/test/ecoli_small/reference.fa +0 -0
  314. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/data/test/rnaseq_toy/R1.fastq.gz +0 -0
  315. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/data/test/rnaseq_toy/genome.fa +0 -0
  316. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/data/test/rnaseq_toy/genome.gtf +0 -0
  317. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/data/test/rnaseq_toy/samples.csv +0 -0
  318. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/docker/core/Dockerfile +0 -0
  319. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/docker/docker-compose.yml +0 -0
  320. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/docs/DESIGN.md +0 -0
  321. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/docs/architecture.md +0 -0
  322. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/docs/maintainer/UPDATE_CADENCES.md +0 -0
  323. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/docs/maintainer/cowork_schedule_prompt.md +0 -0
  324. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/docs/maintainer/quarterly_audit_prompt.md +0 -0
  325. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/docs/maintainer/research_prompt.md +0 -0
  326. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/docs/quickstart.md +0 -0
  327. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/docs/reference/recipes.md +0 -0
  328. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/docs/reference/tools.md +0 -0
  329. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/examples/cache_demo.py +0 -0
  330. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/examples/config_atac_seq.yaml +0 -0
  331. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/examples/config_chip_seq.yaml +0 -0
  332. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/examples/config_custom.yaml +0 -0
  333. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/examples/config_eukaryote_hifi.yaml +0 -0
  334. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/examples/config_metagenomics.yaml +0 -0
  335. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/examples/config_methylation.yaml +0 -0
  336. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/examples/config_prokaryote_short.yaml +0 -0
  337. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/examples/config_proteomics.yaml +0 -0
  338. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/examples/config_recommend.yaml +0 -0
  339. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/examples/config_rnaseq.yaml +0 -0
  340. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/examples/config_scrna_seq.yaml +0 -0
  341. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/examples/parallel_demo.py +0 -0
  342. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/examples/pectobacterium_demo.py +0 -0
  343. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/examples/pipeline_demo.py +0 -0
  344. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/examples/recipes_quickstart.py +0 -0
  345. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/examples/stage_demo.py +0 -0
  346. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/presets/README.md +0 -0
  347. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/presets/atac_seq_standard.yaml +0 -0
  348. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/presets/chip_seq_standard.yaml +0 -0
  349. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/presets/eukaryote_denovo_hifi.yaml +0 -0
  350. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/presets/eukaryote_denovo_hybrid.yaml +0 -0
  351. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/presets/eukaryote_resequencing.yaml +0 -0
  352. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/presets/metagenomics_kraken2_standard.yaml +0 -0
  353. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/presets/metagenomics_metaphlan4_standard.yaml +0 -0
  354. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/presets/methylation_bismark_wgbs.yaml +0 -0
  355. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/presets/prokaryote_denovo_hybrid.yaml +0 -0
  356. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/presets/prokaryote_denovo_short.yaml +0 -0
  357. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/presets/proteomics_msfragger_dda.yaml +0 -0
  358. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/presets/rnaseq_deseq2_standard.yaml +0 -0
  359. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/presets/scrna_seq_10x_scanpy.yaml +0 -0
  360. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/presets/scrna_seq_10x_seurat.yaml +0 -0
  361. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/schema.yaml +0 -0
  362. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/alignment/bwa.yaml +0 -0
  363. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly/spades.yaml +0 -0
  364. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/assembly_qc/quast.yaml +0 -0
  365. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/proteomics/fragpipe.yaml +0 -0
  366. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/proteomics/msfragger.yaml +0 -0
  367. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/qc/fastp.yaml +0 -0
  368. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/registry/tools/struct_annot/prokka.yaml +0 -0
  369. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/scripts/gen_docs.py +0 -0
  370. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/scripts/install-schedule-cron-daily.sh +0 -0
  371. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/scripts/install-schedule-cron-weekly.sh +0 -0
  372. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/scripts/install-schedule-cron.sh +0 -0
  373. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/scripts/install-schedule-daily.ps1 +0 -0
  374. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/scripts/install-schedule-weekly.ps1 +0 -0
  375. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/scripts/install-schedule-windows.ps1 +0 -0
  376. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/__init__.py +0 -0
  377. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/e2e/__init__.py +0 -0
  378. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/e2e/test_prokaryote_short.py +0 -0
  379. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/e2e/test_rnaseq.py +0 -0
  380. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/fixtures/hypo_assembler.yaml +0 -0
  381. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/integration/__init__.py +0 -0
  382. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/integration/test_docker_backend.py +0 -0
  383. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/integration/test_recipe_real_data.py +0 -0
  384. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/integration/test_sdk_real_docker.py +0 -0
  385. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_approve.py +0 -0
  386. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_benchmark.py +0 -0
  387. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_bugfixes.py +0 -0
  388. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_crossplatform.py +0 -0
  389. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_dag.py +0 -0
  390. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_digest_pinning.py +0 -0
  391. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_doctor.py +0 -0
  392. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_freshness_check.py +0 -0
  393. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_interactive.py +0 -0
  394. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_io.py +0 -0
  395. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_llm.py +0 -0
  396. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_llm_audit.py +0 -0
  397. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_llm_diagnose.py +0 -0
  398. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_llm_setup.py +0 -0
  399. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_ncbi.py +0 -0
  400. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_planner.py +0 -0
  401. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_planner_eukaryote.py +0 -0
  402. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_planner_rnaseq.py +0 -0
  403. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_recipe_cli_args.py +0 -0
  404. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_recipe_registry_alignment.py +0 -0
  405. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_recipes.py +0 -0
  406. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_recipes_cookbook.py +0 -0
  407. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_recommend.py +0 -0
  408. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_registry_resolver.py +0 -0
  409. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_registry_sanity.py +0 -0
  410. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_release_watch.py +0 -0
  411. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_report.py +0 -0
  412. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_report_builder.py +0 -0
  413. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_runner.py +0 -0
  414. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_sdk_cache.py +0 -0
  415. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_sdk_external_mounts.py +0 -0
  416. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_sdk_parallel.py +0 -0
  417. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_sdk_pipeline.py +0 -0
  418. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_sdk_retry.py +0 -0
  419. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_sdk_stage.py +0 -0
  420. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_sdk_streaming.py +0 -0
  421. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_skeleton.py +0 -0
  422. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/tests/unit/test_update_auto.py +0 -0
  423. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/update/REGISTRY_CHANGELOG.md +0 -0
  424. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/update/benchmark.py +0 -0
  425. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/update/freshness_check.py +0 -0
  426. {bioflowkit-0.2.0 → bioflowkit-0.2.1}/update/release_watch.py +0 -0
@@ -17,6 +17,11 @@ permissions:
17
17
  contents: read
18
18
  pull-requests: write # for the summary comment
19
19
 
20
+ # Opt into the Node 24 runtime ahead of the 2026-06-16 forced switch so
21
+ # the v4/v5 actions stop emitting Node 20 deprecation warnings.
22
+ env:
23
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
24
+
20
25
  jobs:
21
26
  smoke:
22
27
  name: Validate + smoke-test changed candidates
@@ -6,6 +6,11 @@ on:
6
6
  pull_request:
7
7
  branches: [main]
8
8
 
9
+ # Opt into the Node 24 runtime ahead of the 2026-06-16 forced switch so
10
+ # the v4/v5 actions stop emitting Node 20 deprecation warnings.
11
+ env:
12
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
13
+
9
14
  jobs:
10
15
  unit-tests:
11
16
  name: Unit tests (Python ${{ matrix.python-version }})
@@ -47,12 +52,11 @@ jobs:
47
52
  run: ruff check .
48
53
 
49
54
  typecheck:
50
- # Advisory only mypy issues do not block merging. Provides
51
- # visibility while we gradually add type annotations. Will be
52
- # upgraded to a blocking check when the error count reaches 0.
53
- name: Type check (mypy, advisory)
55
+ # Blocking: the bioflow package type-checks clean under mypy
56
+ # (--ignore-missing-imports for the un-stubbed docker / anthropic /
57
+ # openai SDKs). Keep it that way a new type error fails CI.
58
+ name: Type check (mypy)
54
59
  runs-on: ubuntu-latest
55
- continue-on-error: true
56
60
 
57
61
  steps:
58
62
  - uses: actions/checkout@v4
@@ -66,7 +70,7 @@ jobs:
66
70
  run: pip install -e ".[dev]" && pip install types-PyYAML types-requests
67
71
 
68
72
  - name: Run mypy
69
- run: mypy bioflow --ignore-missing-imports || true
73
+ run: mypy bioflow --ignore-missing-imports
70
74
 
71
75
  registry-schema:
72
76
  name: Validate registry YAMLs
@@ -108,12 +112,12 @@ jobs:
108
112
  EOF
109
113
 
110
114
  digest-audit:
111
- # Advisory until enough tools are pinned prints the missing-digest
112
- # count and lists the first ~30 unpinned tools. Upgrade to a blocking
113
- # check (drop `|| true`) once the bulk of the registry is pinned.
114
- name: Container digest pin audit (advisory)
115
+ # Now blocking: every *active* tool must carry an image_digest
116
+ # (deprecated tools are skipped their upstream images are gone by
117
+ # definition). This keeps the registry fully content-addressed so a
118
+ # silently-retagged or GC'd upstream image can never change results.
119
+ name: Container digest pin audit
115
120
  runs-on: ubuntu-latest
116
- continue-on-error: true
117
121
 
118
122
  steps:
119
123
  - uses: actions/checkout@v4
@@ -126,5 +130,5 @@ jobs:
126
130
  - name: Install dependencies
127
131
  run: pip install pyyaml
128
132
 
129
- - name: Count missing image_digest entries
130
- run: python scripts/pin_digests.py --audit || true
133
+ - name: Require every active tool to be digest-pinned
134
+ run: python scripts/pin_digests.py --audit
@@ -26,6 +26,11 @@ concurrency:
26
26
  group: pages
27
27
  cancel-in-progress: true
28
28
 
29
+ # Opt into the Node 24 runtime ahead of the 2026-06-16 forced switch so
30
+ # the v3/v4/v5 actions stop emitting Node 20 deprecation warnings.
31
+ env:
32
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
33
+
29
34
  jobs:
30
35
  build:
31
36
  runs-on: ubuntu-latest
@@ -0,0 +1,75 @@
1
+ name: nf-core concordance
2
+
3
+ # Manually-dispatched concordance benchmark: run bioflow and the matching
4
+ # nf-core pipeline on a golden dataset, then score their agreement with
5
+ # scripts/compare_nfcore.py.
6
+ #
7
+ # This is NOT a per-PR gate. A real run needs tens of GB of references
8
+ # and hours of compute, so it expects a runner that already has them
9
+ # staged (a self-hosted runner, or a large GitHub runner the maintainer
10
+ # provisions). It is run deliberately before a release and its JSON
11
+ # output is published with the release notes.
12
+ #
13
+ # See docs/benchmarks/nfcore-concordance.md for the datasets, method, and
14
+ # acceptance thresholds.
15
+
16
+ on:
17
+ workflow_dispatch:
18
+ inputs:
19
+ comparison:
20
+ description: "Which comparison to run"
21
+ type: choice
22
+ options: [vcf, counts]
23
+ default: vcf
24
+ bioflow_output:
25
+ description: "Path to the bioflow output (VCF or counts TSV) on the runner"
26
+ required: true
27
+ reference_output:
28
+ description: "Path to the nf-core output on the runner"
29
+ required: true
30
+ threshold:
31
+ description: "Min Jaccard (vcf) or Spearman rho (counts) to pass"
32
+ required: false
33
+ default: "0.90"
34
+
35
+ # Opt into the Node 24 runtime ahead of the 2026-06-16 forced switch.
36
+ env:
37
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
38
+
39
+ jobs:
40
+ score:
41
+ name: Score concordance
42
+ # The default GitHub runner cannot hold iGenomes references; point this
43
+ # at a self-hosted runner that has them staged. Left as ubuntu-latest
44
+ # so the workflow is valid and the *scoring* step is exercisable on
45
+ # pre-staged outputs.
46
+ runs-on: ubuntu-latest
47
+ steps:
48
+ - uses: actions/checkout@v4
49
+
50
+ - uses: actions/setup-python@v5
51
+ with:
52
+ python-version: "3.12"
53
+
54
+ - name: Score bioflow vs nf-core
55
+ run: |
56
+ if [ "${{ inputs.comparison }}" = "vcf" ]; then
57
+ python scripts/compare_nfcore.py vcf \
58
+ --bioflow "${{ inputs.bioflow_output }}" \
59
+ --reference "${{ inputs.reference_output }}" \
60
+ --out concordance.json \
61
+ --min-jaccard "${{ inputs.threshold }}"
62
+ else
63
+ python scripts/compare_nfcore.py counts \
64
+ --bioflow "${{ inputs.bioflow_output }}" \
65
+ --reference "${{ inputs.reference_output }}" \
66
+ --out concordance.json \
67
+ --min-rho "${{ inputs.threshold }}"
68
+ fi
69
+
70
+ - name: Upload concordance report
71
+ if: always()
72
+ uses: actions/upload-artifact@v4
73
+ with:
74
+ name: nfcore-concordance
75
+ path: concordance.json
@@ -10,6 +10,11 @@ on:
10
10
  - cron: "0 3 * * *"
11
11
  workflow_dispatch:
12
12
 
13
+ # Opt into the Node 24 runtime ahead of the 2026-06-16 forced switch so
14
+ # the v4/v5 actions stop emitting Node 20 deprecation warnings.
15
+ env:
16
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
17
+
13
18
  jobs:
14
19
  smoke-matrix:
15
20
  name: Recipe smoke matrix
@@ -22,6 +22,11 @@ on:
22
22
  permissions:
23
23
  contents: read
24
24
 
25
+ # Opt into the Node 24 runtime ahead of the 2026-06-16 forced switch so
26
+ # the v4/v5 actions stop emitting Node 20 deprecation warnings.
27
+ env:
28
+ FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
29
+
25
30
  jobs:
26
31
  build:
27
32
  name: Build sdist + wheel
@@ -12,6 +12,189 @@ ship bug fixes only. Breaking changes to the documented public API
12
12
 
13
13
  ---
14
14
 
15
+ ## [0.2.1] — 2026-06-12
16
+
17
+ > **Why upgrade from 0.2.0**: the `v0.2.0` tag predated the registry
18
+ > freshness fix, so the 0.2.0 wheel bundled a registry whose
19
+ > `quay.io/biocontainers/*` tags had been garbage-collected from Quay —
20
+ > `rnaseq_deg`, `chip_seq`, `atac_seq`, `eukaryote_assembly`,
21
+ > `metagenome_assembly`, and others would fail at run time with "image
22
+ > not found". **0.2.1 ships the repaired, 107/107-pinned registry**, so
23
+ > recipes actually pull their containers. Everything below landed after
24
+ > the 0.2.0 cut and is new to PyPI users here.
25
+
26
+ ### Changed — nightly smoke matrix expanded (3 → 5 recipes)
27
+ - Added real-container smoke cases for **chip_seq** (TrimGalore — a
28
+ container family shared by chip/atac/methylation, previously
29
+ unexercised) and **germline_variants** (validates the variant recipe's
30
+ fastp wiring). All five pass against real BioContainers locally
31
+ (~90 s) — more of the "522 mostly-mock tests" critique closed with
32
+ genuine end-to-end coverage.
33
+
34
+ ### Changed — mypy type-checking is now blocking
35
+ - Fixed all 33 mypy errors across 7 modules (Rich `TaskID` optionals in
36
+ the progress bars, `dict[str, Any]` run kwargs, anthropic/openai/docker
37
+ SDK union + missing-stub noise, a loop-variable shadow in
38
+ `cli/update.py`). `mypy bioflow --ignore-missing-imports` now reports
39
+ **0 errors**.
40
+ - CI's `typecheck` job drops `continue-on-error` — a new type error now
41
+ fails the build, closing the "advisory only" gap.
42
+
43
+ ### Added — nf-core concordance benchmark (harness + methodology)
44
+ - `scripts/compare_nfcore.py` (new, stdlib-only): scores agreement
45
+ between a bioflow output and the matching nf-core output —
46
+ **Jaccard + genotype concordance** on normalised VCF sites
47
+ (vs nf-core/sarek), and **Spearman ρ** of per-gene counts
48
+ (vs nf-core/rnaseq). Optional `--min-jaccard` / `--min-rho` gate for
49
+ CI.
50
+ - `docs/benchmarks/nfcore-concordance.md`: golden datasets
51
+ (GIAB HG002 chr20; nf-core/rnaseq chr22), method, and initial
52
+ acceptance thresholds.
53
+ - `.github/workflows/nfcore-concordance.yml`: manually-dispatched job
54
+ (not a per-PR gate — a full run needs staged references).
55
+ - Honesty note: bioflow ships the *scoring* half (committed + tested);
56
+ the *production* half (running both pipelines on a machine with the
57
+ references) is operator-run and documented.
58
+ - Tests: +13 (`tests/unit/test_compare_nfcore.py`).
59
+
60
+ ### Added — GPU passthrough + Podman runtime
61
+ - `@stage(..., gpu=True)` (and a tool YAML's `resources.gpu`) now attach
62
+ all host GPUs to that stage's container via a Docker `DeviceRequest`
63
+ (the API equivalent of `--gpus all`); needs the NVIDIA Container
64
+ Toolkit, and degrades to a warning on CPU-only hosts rather than
65
+ failing. Threaded through `Stage`, the `@stage` decorator, and the
66
+ preset `run_plan` path.
67
+ - `DockerBackend` works with **Podman**: it honours `BIOFLOW_DOCKER_HOST`
68
+ / `DOCKER_HOST` (point it at the Podman API socket) and an optional
69
+ `base_url`, and reads `BIOFLOW_CONTAINER_RUNTIME`.
70
+ - `bioflow doctor` recognises Podman as a Docker alternative — the
71
+ `docker_cli` / `docker_daemon` checks fall back to `podman` and report
72
+ which runtime they found.
73
+ - Tests: +10 (`tests/unit/test_gpu_podman.py`). Backend `run()` gains a
74
+ `gpu` kwarg (the `ContainerBackend` protocol + MockBackend updated).
75
+
76
+ ### Added — reference-DB catalog expansion + refgenie manifest
77
+ - `bioflow/core/db.py` catalog gains the references real recipes need:
78
+ GATK known-sites `dbsnp_grch38` + `mills_indels_grch38` (BQSR/VQSR),
79
+ `encode_blacklist_grch38` (ChIP/ATAC peak filtering), and
80
+ `gencode_grch38` (STAR/Salmon/featureCounts annotation).
81
+ - Catalog entries now carry `genome` + `asset` tags, and a new
82
+ `refgenie_manifest()` / `bioflow db manifest` emits a
83
+ [refgenie](https://refgenie.databio.org/)-compatible JSON mapping
84
+ `<genome>/<asset>` → catalogued DB, so labs already standardised on
85
+ refgenie can see which existing assets satisfy a bioflow requirement.
86
+ - Tests: +5 (`tests/unit/test_db.py`).
87
+
88
+ ### Added — rnaseq_deg depth: GO enrichment + MultiQC
89
+ - `rnaseq_deg` extended from 4 → 6 stages:
90
+ - **`enrich_go`** — GO enrichment on the significant DEGs via gseapy's
91
+ Enrichr query. Symbol-based, so no organism-specific OrgDb package
92
+ is needed; an awk numeric-regex guard on the `padj` column avoids the
93
+ classic "NA-treated-as-0" false positive.
94
+ - **`multiqc_report`** — aggregates every per-sample fastp + Salmon
95
+ report into a single MultiQC HTML.
96
+ - DAG-shape test updated; recipe still runs end-to-end under MockBackend.
97
+
98
+ ### Added — `joint_genotyping` recipe (GATK cohort best practice)
99
+ - New 7-stage recipe (`bioflow/recipes/variant_calling/joint_genotyping.py`)
100
+ implementing the canonical GATK **joint-genotyping** workflow for
101
+ cohorts, where `germline_variants` only does single-sample direct
102
+ calling:
103
+ - **per sample (fan-out)**: fastp → BWA-MEM → MarkDuplicates →
104
+ HaplotypeCaller `-ERC GVCF`
105
+ - **cohort (converge)**: CombineGVCFs → GenotypeGVCFs →
106
+ best-practice hard filtering (separate SNP / INDEL filters) → SnpEff
107
+ - Takes a `sample_id,fastq_r1,fastq_r2` sample sheet and uses `.starmap`
108
+ to run the per-sample stages in parallel before converging on the
109
+ joint steps — the production pattern reviewers expect for population
110
+ and family studies, and a worked example of bioflow's fan-out.
111
+ - Recipe count 19 → 20 (12 per-pipeline). Tests: +3 (registration, DAG
112
+ shape, MockBackend e2e).
113
+
114
+ ### Added — run provenance (RO-Crate + PROV-style JSON)
115
+ - `bioflow/core/provenance.py` (new): every recipe run records, per
116
+ stage, the container **image + content digest**, the exact
117
+ **command**, every **input file's SHA-256 + size**, **start/end**
118
+ timestamps, exit code, and the bioflow version.
119
+ - At the end of a run the workspace gains two self-describing files:
120
+ - `provenance.json` — flat, human-readable run record
121
+ - `ro-crate-metadata.json` — an [RO-Crate 1.1](https://www.researchobject.org/ro-crate/)
122
+ research object (the de-facto packaging standard for computational
123
+ workflow runs), so the output directory is consumable by reviewers
124
+ and downstream tools directly.
125
+ - Wired into `bioflow recipe run` (on by default; `--no-provenance` to
126
+ skip). Opt-in and **zero-cost when off** — the SDK hot path pays
127
+ nothing unless a recorder is installed, and provenance errors degrade
128
+ to warnings rather than aborting the science.
129
+ - New `bioflow provenance show <workspace>` command (+ `--json`) renders
130
+ the recorded run: per-stage image, pinned digest, exit status, and
131
+ input hashes. Builds directly on the digest-pinning work — pinned
132
+ tools show their `sha256:…` in the provenance.
133
+ - Tests: +14 (`tests/unit/test_provenance.py`); verified end-to-end
134
+ against real Docker (digest resolved from the local image, RO-Crate
135
+ validates structurally).
136
+
137
+ ### Fixed — registry freshness (stale BioContainer tags)
138
+ - **Discovery**: an audit during digest-pinning found that ~half the
139
+ registry's `quay.io/biocontainers/*` image tags had 404'd. Quay
140
+ rotates each package's `--<buildhash>_<n>` build suffix and garbage-
141
+ collects the old ones, so dozens of recipes (chip_seq, atac_seq,
142
+ eukaryote_assembly, metagenome_assembly, rnaseq_deg's Salmon stage,
143
+ …) would have failed at run time with "image not found" — unrelated
144
+ to the user's data.
145
+ - `scripts/refresh_tags.py` (new): audits every Quay BioContainer
146
+ reference, and with `--apply` rewrites any dead tag to the newest
147
+ *same-version* build (never changing the upstream software version).
148
+ Non-Quay images and versions that have left Quay entirely are
149
+ reported for manual review.
150
+ - Applied: **34 registry tool YAMLs** + **7 recipe-hardcoded images**
151
+ (bowtie2, bracken, flye, macs3, medaka, metabat2, tobias) re-pointed
152
+ to live tags. Salmon's `1.10.3--hb950928_0` → `1.10.3--h45fbf2d_5`
153
+ fixed separately (it broke the rnaseq_deg quant stage).
154
+ - Verified: the bumped images pull + run (e.g. `bowtie2 2.5.4`), and
155
+ the nightly smoke matrix is green.
156
+
157
+ ### Added — full digest pinning (registry now 100% content-addressed)
158
+ - Digest coverage raised from 5/110 → **107/107 active tools** in two
159
+ passes. The second pass resolved the 17 hold-outs:
160
+ - **Version bumps** to the newest BioContainer of the same tool where
161
+ the pinned version had left Quay: DESeq2 1.44→1.50.2, edgeR
162
+ 4.2→4.8.2, limma 3.60→3.66, clusterProfiler 4.12→4.18.4, topGO
163
+ 2.56→2.62, HOMER 4.11.1→5.1, Scanpy 1.10.1→1.7.2 (1.10 was never on
164
+ Quay biocontainers), Comet 2024020→2026011, Percolator 3.06.1→3.7.1,
165
+ InterProScan 5.67→5.59.
166
+ - **Image-source switches**: methylKit and monocle3 moved off the
167
+ multi-GB `bioconductor/bioconductor_full:RELEASE_3_18` (gone) to the
168
+ dedicated `bioconductor-methylkit` / `r-monocle3` BioContainers;
169
+ Cell Ranger tag `7.2.0`→`v7.2.0`; Seurat `5.0.1`→`5.0.0`.
170
+ - **Deprecations**: MaxQuant joins MSFragger + FragPipe as
171
+ `deprecated: true` — proprietary tools whose images are gone and
172
+ which the `proteomics_dda` recipe does not use (it runs the
173
+ open-source msconvert → Comet → Percolator stack). The audit now
174
+ skips deprecated tools.
175
+ - **CI `digest-audit` is now blocking** (was advisory): every active
176
+ tool must carry an `image_digest`, so the registry can never silently
177
+ rot again.
178
+ - `scripts/refresh_tags.py` also reports `version_gone` and non-Quay
179
+ images for these manual cases.
180
+
181
+ ### Added — Bioconda recipe (prep)
182
+ - `conda-recipe/meta.yaml`: noarch-python Bioconda recipe (only
183
+ bioflow's pure-Python stack is a conda dep; tools run as Docker
184
+ containers). Submission walkthrough in `docs/MAINTAINER.md` Part 7.
185
+ Gated on the real-PyPI publish (the recipe sources the PyPI sdist).
186
+
187
+ ### Changed — CI
188
+ - All workflows opt into the Node 24 runtime
189
+ (`FORCE_JAVASCRIPT_ACTIONS_TO_NODE24`) ahead of the 2026-06-16 forced
190
+ switch, silencing the Node 20 deprecation warnings.
191
+
192
+ ### Fixed — nightly smoke
193
+ - `rnaseq_deg.qc_one` smoke assertion matched the stage's real output
194
+ names (`<sample_id>_R1.clean.fq.gz`), fixing a false CI failure.
195
+
196
+ ---
197
+
15
198
  ## [0.2.0] — 2026-06-05
16
199
 
17
200
  First PyPI release. Three months of 0.1.x work consolidated into a
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bioflowkit
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: bioflow: one-line comparative-genomics recipes + Tier-A SDK, orchestrated over per-tool Docker BioContainers.
5
5
  Project-URL: Homepage, https://github.com/hope9901/bioflow
6
6
  Project-URL: Repository, https://github.com/hope9901/bioflow
@@ -35,7 +35,7 @@ Description-Content-Type: text/markdown
35
35
  [![PyPI](https://img.shields.io/pypi/v/bioflowkit.svg)](https://pypi.org/project/bioflowkit/)
36
36
  [![Downloads](https://img.shields.io/pypi/dm/bioflowkit.svg)](https://pypi.org/project/bioflowkit/)
37
37
  [![python](https://img.shields.io/pypi/pyversions/bioflowkit.svg)](https://pypi.org/project/bioflowkit/)
38
- [![tests](https://img.shields.io/badge/tests-565%20passed-brightgreen)](tests/)
38
+ [![tests](https://img.shields.io/badge/tests-609%20passed-brightgreen)](tests/)
39
39
  [![nightly smoke](https://github.com/hope9901/bioflow/actions/workflows/nightly-smoke.yml/badge.svg)](https://github.com/hope9901/bioflow/actions/workflows/nightly-smoke.yml)
40
40
  [![license](https://img.shields.io/badge/license-MIT-lightgrey)](LICENSE)
41
41
  [![docs](https://img.shields.io/badge/docs-mkdocs-blue)](https://hope9901.github.io/bioflow/)
@@ -51,14 +51,14 @@ and a privacy-first LLM companion is available when you want it.
51
51
 
52
52
  ## What you get
53
53
 
54
- - **19 cookbook recipes** invokable as one-liners:
54
+ - **20 cookbook recipes** invokable as one-liners:
55
55
  - *Comparative genomics (8)*: pangenome, ANI, phylogeny, GWAS,
56
56
  gene-family evolution, AMR/VF catalogue, COG enrichment, NCBI
57
57
  download.
58
- - *Per-pipeline (11)*: prokaryote_assembly, eukaryote_assembly,
58
+ - *Per-pipeline (12)*: prokaryote_assembly, eukaryote_assembly,
59
59
  rnaseq_deg, metagenomics_profile, metagenome_assembly, scrna_seq,
60
60
  chip_seq, atac_seq, methylation_wgbs, proteomics_dda,
61
- germline_variants.
61
+ germline_variants, joint_genotyping (GATK cohort best practice).
62
62
  - **110 tools** registered across 16 categories, all pulled as
63
63
  BioContainer images at run time — nothing to install on the host
64
64
  beyond Docker + Python.
@@ -66,6 +66,10 @@ and a privacy-first LLM companion is available when you want it.
66
66
  `runnable_slow` / `incompatible` against your CPU / RAM / GPU / arch.
67
67
  - **Input-hash caching**: re-running a recipe with unchanged inputs
68
68
  returns in seconds.
69
+ - **Run provenance**: every recipe writes `provenance.json` +
70
+ `ro-crate-metadata.json` recording input SHA-256, container image
71
+ digests, commands, and timestamps — a self-describing research object
72
+ for reproducibility and journal submission. `--no-provenance` to skip.
69
73
  - **Privacy-first LLM companion** (optional): terminology Q&A, sanitized
70
74
  error diagnosis, tool-registration assist. Disabled by default.
71
75
 
@@ -202,19 +206,30 @@ Some pipelines need external databases (Pfam, eggNOG, BUSCO, etc.).
202
206
 
203
207
  ```bash
204
208
  bioflow db list # show available DBs
205
- bioflow db fetch busco_bacteria --dest /refs
206
- bioflow db verify busco_bacteria --dest /refs
209
+ bioflow db fetch dbsnp_grch38 --dest /refs
210
+ bioflow db verify dbsnp_grch38 --dest /refs
211
+ bioflow db manifest --dest /refs # refgenie-compatible asset map
207
212
  ```
208
213
 
209
- | Key | Size | Used by |
210
- |---|---:|---|
211
- | `busco_bacteria` | 0.07 GB | busco |
212
- | `busco_insecta` | 0.08 GB | busco |
213
- | `busco_vertebrata` | 0.30 GB | busco |
214
- | `pfam` | 0.50 GB | interproscan |
215
- | `dfam_curated` | 2.00 GB | repeatmasker, earlgrey |
216
- | `uniprot_sprot` | 0.25 GB | braker3 |
217
- | `eggnog` | 8.50 GB | eggnog_mapper |
214
+ | Key | Size | Used by | refgenie asset |
215
+ |---|---:|---|---|
216
+ | `busco_bacteria` | 0.07 GB | busco | — |
217
+ | `busco_insecta` | 0.08 GB | busco | — |
218
+ | `busco_vertebrata` | 0.30 GB | busco | — |
219
+ | `pfam` | 0.50 GB | interproscan | — |
220
+ | `dfam_curated` | 2.00 GB | repeatmasker, earlgrey | — |
221
+ | `uniprot_sprot` | 0.25 GB | braker3 | — |
222
+ | `eggnog` | 8.50 GB | eggnog_mapper | — |
223
+ | `kraken2_standard_8gb` | 7.50 GB | kraken2, bracken | — |
224
+ | `bowtie2_grch38_noalt` | 3.50 GB | bowtie2 | hg38/bowtie2_index |
225
+ | `dbsnp_grch38` | 1.60 GB | gatk4 | hg38/dbsnp |
226
+ | `mills_indels_grch38` | 0.02 GB | gatk4 | hg38/known_indels |
227
+ | `encode_blacklist_grch38` | 0.001 GB | macs3, tobias | hg38/blacklist |
228
+ | `gencode_grch38` | 0.05 GB | star, salmon, subread | hg38/ensembl_gtf |
229
+
230
+ `bioflow db manifest` emits a [refgenie](https://refgenie.databio.org/)-compatible
231
+ JSON mapping `<genome>/<asset>` → catalogued DB, so a lab already on
232
+ refgenie can see which existing assets satisfy a bioflow requirement.
218
233
 
219
234
  ---
220
235
 
@@ -3,7 +3,7 @@
3
3
  [![PyPI](https://img.shields.io/pypi/v/bioflowkit.svg)](https://pypi.org/project/bioflowkit/)
4
4
  [![Downloads](https://img.shields.io/pypi/dm/bioflowkit.svg)](https://pypi.org/project/bioflowkit/)
5
5
  [![python](https://img.shields.io/pypi/pyversions/bioflowkit.svg)](https://pypi.org/project/bioflowkit/)
6
- [![tests](https://img.shields.io/badge/tests-565%20passed-brightgreen)](tests/)
6
+ [![tests](https://img.shields.io/badge/tests-609%20passed-brightgreen)](tests/)
7
7
  [![nightly smoke](https://github.com/hope9901/bioflow/actions/workflows/nightly-smoke.yml/badge.svg)](https://github.com/hope9901/bioflow/actions/workflows/nightly-smoke.yml)
8
8
  [![license](https://img.shields.io/badge/license-MIT-lightgrey)](LICENSE)
9
9
  [![docs](https://img.shields.io/badge/docs-mkdocs-blue)](https://hope9901.github.io/bioflow/)
@@ -19,14 +19,14 @@ and a privacy-first LLM companion is available when you want it.
19
19
 
20
20
  ## What you get
21
21
 
22
- - **19 cookbook recipes** invokable as one-liners:
22
+ - **20 cookbook recipes** invokable as one-liners:
23
23
  - *Comparative genomics (8)*: pangenome, ANI, phylogeny, GWAS,
24
24
  gene-family evolution, AMR/VF catalogue, COG enrichment, NCBI
25
25
  download.
26
- - *Per-pipeline (11)*: prokaryote_assembly, eukaryote_assembly,
26
+ - *Per-pipeline (12)*: prokaryote_assembly, eukaryote_assembly,
27
27
  rnaseq_deg, metagenomics_profile, metagenome_assembly, scrna_seq,
28
28
  chip_seq, atac_seq, methylation_wgbs, proteomics_dda,
29
- germline_variants.
29
+ germline_variants, joint_genotyping (GATK cohort best practice).
30
30
  - **110 tools** registered across 16 categories, all pulled as
31
31
  BioContainer images at run time — nothing to install on the host
32
32
  beyond Docker + Python.
@@ -34,6 +34,10 @@ and a privacy-first LLM companion is available when you want it.
34
34
  `runnable_slow` / `incompatible` against your CPU / RAM / GPU / arch.
35
35
  - **Input-hash caching**: re-running a recipe with unchanged inputs
36
36
  returns in seconds.
37
+ - **Run provenance**: every recipe writes `provenance.json` +
38
+ `ro-crate-metadata.json` recording input SHA-256, container image
39
+ digests, commands, and timestamps — a self-describing research object
40
+ for reproducibility and journal submission. `--no-provenance` to skip.
37
41
  - **Privacy-first LLM companion** (optional): terminology Q&A, sanitized
38
42
  error diagnosis, tool-registration assist. Disabled by default.
39
43
 
@@ -170,19 +174,30 @@ Some pipelines need external databases (Pfam, eggNOG, BUSCO, etc.).
170
174
 
171
175
  ```bash
172
176
  bioflow db list # show available DBs
173
- bioflow db fetch busco_bacteria --dest /refs
174
- bioflow db verify busco_bacteria --dest /refs
177
+ bioflow db fetch dbsnp_grch38 --dest /refs
178
+ bioflow db verify dbsnp_grch38 --dest /refs
179
+ bioflow db manifest --dest /refs # refgenie-compatible asset map
175
180
  ```
176
181
 
177
- | Key | Size | Used by |
178
- |---|---:|---|
179
- | `busco_bacteria` | 0.07 GB | busco |
180
- | `busco_insecta` | 0.08 GB | busco |
181
- | `busco_vertebrata` | 0.30 GB | busco |
182
- | `pfam` | 0.50 GB | interproscan |
183
- | `dfam_curated` | 2.00 GB | repeatmasker, earlgrey |
184
- | `uniprot_sprot` | 0.25 GB | braker3 |
185
- | `eggnog` | 8.50 GB | eggnog_mapper |
182
+ | Key | Size | Used by | refgenie asset |
183
+ |---|---:|---|---|
184
+ | `busco_bacteria` | 0.07 GB | busco | — |
185
+ | `busco_insecta` | 0.08 GB | busco | — |
186
+ | `busco_vertebrata` | 0.30 GB | busco | — |
187
+ | `pfam` | 0.50 GB | interproscan | — |
188
+ | `dfam_curated` | 2.00 GB | repeatmasker, earlgrey | — |
189
+ | `uniprot_sprot` | 0.25 GB | braker3 | — |
190
+ | `eggnog` | 8.50 GB | eggnog_mapper | — |
191
+ | `kraken2_standard_8gb` | 7.50 GB | kraken2, bracken | — |
192
+ | `bowtie2_grch38_noalt` | 3.50 GB | bowtie2 | hg38/bowtie2_index |
193
+ | `dbsnp_grch38` | 1.60 GB | gatk4 | hg38/dbsnp |
194
+ | `mills_indels_grch38` | 0.02 GB | gatk4 | hg38/known_indels |
195
+ | `encode_blacklist_grch38` | 0.001 GB | macs3, tobias | hg38/blacklist |
196
+ | `gencode_grch38` | 0.05 GB | star, salmon, subread | hg38/ensembl_gtf |
197
+
198
+ `bioflow db manifest` emits a [refgenie](https://refgenie.databio.org/)-compatible
199
+ JSON mapping `<genome>/<asset>` → catalogued DB, so a lab already on
200
+ refgenie can see which existing assets satisfy a bioflow requirement.
186
201
 
187
202
  ---
188
203
 
@@ -1,6 +1,6 @@
1
1
  """bioflow - bioinformatics pipeline platform."""
2
2
 
3
- __version__ = "0.2.0"
3
+ __version__ = "0.2.1"
4
4
 
5
5
  # Tier-A SDK — @stage / @pipeline / runtime config
6
6
  from bioflow.sdk import ( # noqa: E402,F401
@@ -18,6 +18,7 @@ Subcommands (MVP scope):
18
18
  bioflow update Run the monthly registry update workflow.
19
19
  bioflow ncbi Search / download genomes & proteins from NCBI.
20
20
  bioflow recipe List or run a curated end-to-end recipe.
21
+ bioflow provenance Inspect a recipe run's recorded provenance.
21
22
  bioflow llm Opt-in LLM companion (explain / diagnose / …).
22
23
  bioflow setup First-time LLM backend wizard.
23
24
  """
@@ -33,6 +34,7 @@ from bioflow.cli import ( # noqa: F401,E402
33
34
  llm,
34
35
  ncbi,
35
36
  pipelines,
37
+ provenance,
36
38
  recipe,
37
39
  setup,
38
40
  update,
@@ -12,7 +12,7 @@ from bioflow.cli._app import app, console
12
12
 
13
13
  @app.command("db")
14
14
  def db_cmd(
15
- action: str = typer.Argument(..., help="fetch | list | verify"),
15
+ action: str = typer.Argument(..., help="fetch | list | verify | manifest"),
16
16
  name: Optional[str] = typer.Argument(None, help="Database key (see 'bioflow db list')."),
17
17
  dest: Path = typer.Option(
18
18
  Path("data/references"),
@@ -21,23 +21,43 @@ def db_cmd(
21
21
  ),
22
22
  force: bool = typer.Option(False, "--force", "-f", help="Re-download even if file exists."),
23
23
  ) -> None:
24
- """Fetch or verify reference databases (eggNOG / Pfam / Dfam / BUSCO / UniProt)."""
25
- from bioflow.core.db import fetch_db, list_dbs, verify_db # noqa: PLC0415
24
+ """Fetch / verify / list reference databases, or emit a refgenie manifest.
25
+
26
+ \b
27
+ list Show every catalogued DB, its size, and which tools use it.
28
+ fetch Download a DB into --dest (resumable, size-checked).
29
+ verify Confirm a fetched DB is present (+ MD5 when registered).
30
+ manifest Emit a refgenie-compatible asset manifest (JSON) mapping
31
+ genome/asset → catalogued DB, so labs on refgenie can see
32
+ which existing assets satisfy a bioflow requirement.
33
+ """
34
+ import json # noqa: PLC0415
35
+
36
+ from bioflow.core.db import ( # noqa: PLC0415
37
+ fetch_db, list_dbs, refgenie_manifest, verify_db,
38
+ )
26
39
 
27
40
  if action == "list":
28
41
  rows = list_dbs()
29
42
  console.print("\n[bold]Available reference databases:[/]\n")
30
43
  for r in rows:
31
44
  used = ", ".join(r["used_by"])
45
+ tag = f" [dim]({r['genome']}/{r['asset']})[/]" if r.get("genome") else ""
32
46
  console.print(
33
- f" [cyan]{r['key']:<20}[/] {r['size_gb']:5.1f} GB "
34
- f"used by: {used}"
47
+ f" [cyan]{r['key']:<24}[/] {r['size_gb']:5.2f} GB "
48
+ f"used by: {used}{tag}"
35
49
  )
36
50
  console.print(f" {r['name']}")
37
51
  if r["notes"]:
38
52
  console.print(f" [dim]{r['notes']}[/]")
39
53
  return
40
54
 
55
+ if action == "manifest":
56
+ import sys # noqa: PLC0415
57
+ manifest = refgenie_manifest(dest_root=dest)
58
+ sys.stdout.write(json.dumps(manifest, indent=2) + "\n")
59
+ return
60
+
41
61
  if not name:
42
62
  rprint("[red]Error:[/] 'name' argument required for fetch/verify.")
43
63
  raise typer.Exit(code=1)