dna-decode 0.5.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 (981) hide show
  1. dna_decode-0.5.1/.claude/settings.local.json +16 -0
  2. dna_decode-0.5.1/.claude/testable-modules.md +30 -0
  3. dna_decode-0.5.1/.gitignore +76 -0
  4. dna_decode-0.5.1/.python-version +1 -0
  5. dna_decode-0.5.1/2026-05-30-1200-ep4-pathotype/approvals.md +1 -0
  6. dna_decode-0.5.1/2026-05-30-1200-ep4-pathotype/audit-trail.md +1 -0
  7. dna_decode-0.5.1/2026-05-30-1200-ep4-pathotype/intent-contract.md +1 -0
  8. dna_decode-0.5.1/2026-05-30-1200-ep4-pathotype/recommendation.md +1 -0
  9. dna_decode-0.5.1/2026-05-30-1200-ep4-pathotype/result.md +1 -0
  10. dna_decode-0.5.1/CHANGELOG.md +455 -0
  11. dna_decode-0.5.1/CLAUDE.md +296 -0
  12. dna_decode-0.5.1/FUTURE_FEATURES.md +68 -0
  13. dna_decode-0.5.1/LESSONS_LEARNED.md +135 -0
  14. dna_decode-0.5.1/PKG-INFO +457 -0
  15. dna_decode-0.5.1/QUICKSTART.md +78 -0
  16. dna_decode-0.5.1/README.md +419 -0
  17. dna_decode-0.5.1/TODOS.md +130 -0
  18. dna_decode-0.5.1/bash.exe.stackdump +9 -0
  19. dna_decode-0.5.1/config/datasources.yaml +98 -0
  20. dna_decode-0.5.1/data/antiviral_ref/Flu_N1_NA_EU716587_1_H275Y.fna +22 -0
  21. dna_decode-0.5.1/data/antiviral_ref/Flu_N1_NA_EU716623_1_WT.fna +22 -0
  22. dna_decode-0.5.1/data/antiviral_ref/N1_NA_NC026434_cds.fna +22 -0
  23. dna_decode-0.5.1/data/arabidopsis/FT10_pheno_261.csv +1164 -0
  24. dna_decode-0.5.1/data/arabidopsis/FT16_pheno_262.csv +1124 -0
  25. dna_decode-0.5.1/data/fungal_ref/Cauris_ERG11_PV630302_K143R.fna +2 -0
  26. dna_decode-0.5.1/data/fungal_ref/Cauris_ERG11_PV630305_Y132F.fna +2 -0
  27. dna_decode-0.5.1/data/fungal_ref/Cauris_ERG11_PV630306_WT.fna +2 -0
  28. dna_decode-0.5.1/data/fungal_ref/Cauris_ERG11_cds.fna +25 -0
  29. dna_decode-0.5.1/data/fungal_ref/cauris_g1_cohort.tsv +91 -0
  30. dna_decode-0.5.1/data/fungal_ref/cauris_g1_subset.assembled.tsv +25 -0
  31. dna_decode-0.5.1/data/fungal_ref/cauris_g1_subset.tsv +26 -0
  32. dna_decode-0.5.1/data/hiv_ref/HIV1_CA_HXB2_cds.fna +12 -0
  33. dna_decode-0.5.1/data/hiv_ref/HIV1_IN_HXB2_cds.fna +15 -0
  34. dna_decode-0.5.1/data/hiv_ref/HIV1_PR_HXB2_cds.fna +7 -0
  35. dna_decode-0.5.1/data/hiv_ref/HIV1_RT_HXB2_cds.fna +26 -0
  36. dna_decode-0.5.1/data/sarscov2_ref/SARSCoV2_Mpro_NC045512_cds.fna +15 -0
  37. dna_decode-0.5.1/dna_decode/__init__.py +7 -0
  38. dna_decode-0.5.1/dna_decode/amr/__init__.py +1 -0
  39. dna_decode-0.5.1/dna_decode/amr/cli.py +505 -0
  40. dna_decode-0.5.1/dna_decode/cli.py +169 -0
  41. dna_decode-0.5.1/dna_decode/colocalization/__init__.py +8 -0
  42. dna_decode-0.5.1/dna_decode/colocalization/__main__.py +4 -0
  43. dna_decode-0.5.1/dna_decode/colocalization/cli.py +122 -0
  44. dna_decode-0.5.1/dna_decode/colocalization/core.py +53 -0
  45. dna_decode-0.5.1/dna_decode/concordance/__init__.py +7 -0
  46. dna_decode-0.5.1/dna_decode/concordance/__main__.py +4 -0
  47. dna_decode-0.5.1/dna_decode/concordance/cli.py +104 -0
  48. dna_decode-0.5.1/dna_decode/concordance/core.py +85 -0
  49. dna_decode-0.5.1/dna_decode/data/__init__.py +10 -0
  50. dna_decode-0.5.1/dna_decode/data/annotations.py +258 -0
  51. dna_decode-0.5.1/dna_decode/data/antimalarial_amr.py +132 -0
  52. dna_decode-0.5.1/dna_decode/data/antiviral_amr.py +129 -0
  53. dna_decode-0.5.1/dna_decode/data/ast_data.py +176 -0
  54. dna_decode-0.5.1/dna_decode/data/bacdive.py +235 -0
  55. dna_decode-0.5.1/dna_decode/data/bvbrc_genome.py +170 -0
  56. dna_decode-0.5.1/dna_decode/data/calibrated_amr_rules.json +99 -0
  57. dna_decode-0.5.1/dna_decode/data/cell_key.py +23 -0
  58. dna_decode-0.5.1/dna_decode/data/cohort.py +497 -0
  59. dna_decode-0.5.1/dna_decode/data/experimental_drug_rules.py +80 -0
  60. dna_decode-0.5.1/dna_decode/data/external_cohort_genomes.py +103 -0
  61. dna_decode-0.5.1/dna_decode/data/external_crosswalk.py +86 -0
  62. dna_decode-0.5.1/dna_decode/data/external_mic_ingest.py +65 -0
  63. dna_decode-0.5.1/dna_decode/data/external_mic_labels.py +223 -0
  64. dna_decode-0.5.1/dna_decode/data/fungal_amr.py +152 -0
  65. dna_decode-0.5.1/dna_decode/data/hiv_amr.py +400 -0
  66. dna_decode-0.5.1/dna_decode/data/mic_tiers.py +350 -0
  67. dna_decode-0.5.1/dna_decode/data/pilot.py +302 -0
  68. dna_decode-0.5.1/dna_decode/data/refseq.py +236 -0
  69. dna_decode-0.5.1/dna_decode/data/resistance_db.py +159 -0
  70. dna_decode-0.5.1/dna_decode/data/sarscov2_amr.py +138 -0
  71. dna_decode-0.5.1/dna_decode/data/shipped_decoder_surface.py +73 -0
  72. dna_decode-0.5.1/dna_decode/data/tb_lineage_barcode.py +69 -0
  73. dna_decode-0.5.1/dna_decode/data/tb_who_catalogue.py +149 -0
  74. dna_decode-0.5.1/dna_decode/data/trust_surface.py +258 -0
  75. dna_decode-0.5.1/dna_decode/disinfinder/__init__.py +7 -0
  76. dna_decode-0.5.1/dna_decode/disinfinder/__main__.py +4 -0
  77. dna_decode-0.5.1/dna_decode/disinfinder/cli.py +83 -0
  78. dna_decode-0.5.1/dna_decode/disinfinder/runner.py +38 -0
  79. dna_decode-0.5.1/dna_decode/eval/__init__.py +9 -0
  80. dna_decode-0.5.1/dna_decode/eval/amr_rules.py +386 -0
  81. dna_decode-0.5.1/dna_decode/eval/biosample_resolver.py +302 -0
  82. dna_decode-0.5.1/dna_decode/eval/calibrate_organism.py +298 -0
  83. dna_decode-0.5.1/dna_decode/eval/clade_baseline.py +109 -0
  84. dna_decode-0.5.1/dna_decode/eval/clonality.py +250 -0
  85. dna_decode-0.5.1/dna_decode/eval/cohort_deconfound.py +158 -0
  86. dna_decode-0.5.1/dna_decode/eval/cohort_manifest.py +138 -0
  87. dna_decode-0.5.1/dna_decode/eval/cv.py +287 -0
  88. dna_decode-0.5.1/dna_decode/eval/expression_context.py +146 -0
  89. dna_decode-0.5.1/dna_decode/eval/loso_kmer.py +199 -0
  90. dna_decode-0.5.1/dna_decode/eval/metrics.py +219 -0
  91. dna_decode-0.5.1/dna_decode/eval/phylogeny.py +268 -0
  92. dna_decode-0.5.1/dna_decode/eval/point_baseline.py +92 -0
  93. dna_decode-0.5.1/dna_decode/eval/prospective_lock.py +168 -0
  94. dna_decode-0.5.1/dna_decode/genome_map/__init__.py +64 -0
  95. dna_decode-0.5.1/dna_decode/genome_map/amrfinder.py +68 -0
  96. dna_decode-0.5.1/dna_decode/genome_map/annotate.py +84 -0
  97. dna_decode-0.5.1/dna_decode/genome_map/build_map.py +396 -0
  98. dna_decode-0.5.1/dna_decode/genome_map/gate.py +199 -0
  99. dna_decode-0.5.1/dna_decode/genome_map/ingest.py +74 -0
  100. dna_decode-0.5.1/dna_decode/genome_map/phenotype_overlay.py +334 -0
  101. dna_decode-0.5.1/dna_decode/genome_map/tier_vocab.py +45 -0
  102. dna_decode-0.5.1/dna_decode/genome_map/tiers.py +69 -0
  103. dna_decode-0.5.1/dna_decode/genome_map/virulence_overlay.py +201 -0
  104. dna_decode-0.5.1/dna_decode/interp/__init__.py +8 -0
  105. dna_decode-0.5.1/dna_decode/interp/mutagenesis.py +407 -0
  106. dna_decode-0.5.1/dna_decode/ktype/__init__.py +1 -0
  107. dna_decode-0.5.1/dna_decode/ktype/__main__.py +4 -0
  108. dna_decode-0.5.1/dna_decode/ktype/cli.py +86 -0
  109. dna_decode-0.5.1/dna_decode/ktype/runner.py +74 -0
  110. dna_decode-0.5.1/dna_decode/mlst/__init__.py +7 -0
  111. dna_decode-0.5.1/dna_decode/mlst/__main__.py +4 -0
  112. dna_decode-0.5.1/dna_decode/mlst/cli.py +110 -0
  113. dna_decode-0.5.1/dna_decode/mlst/core.py +57 -0
  114. dna_decode-0.5.1/dna_decode/mlst/runner.py +58 -0
  115. dna_decode-0.5.1/dna_decode/models/__init__.py +7 -0
  116. dna_decode-0.5.1/dna_decode/models/cache.py +434 -0
  117. dna_decode-0.5.1/dna_decode/models/classical_baselines.py +355 -0
  118. dna_decode-0.5.1/dna_decode/models/classifiers.py +233 -0
  119. dna_decode-0.5.1/dna_decode/models/foundation.py +404 -0
  120. dna_decode-0.5.1/dna_decode/organism_rules/__init__.py +9 -0
  121. dna_decode-0.5.1/dna_decode/organism_rules/tb_amr.py +97 -0
  122. dna_decode-0.5.1/dna_decode/organism_rules/tb_goldset.py +107 -0
  123. dna_decode-0.5.1/dna_decode/organism_rules/tb_lineage.py +56 -0
  124. dna_decode-0.5.1/dna_decode/organism_rules/tb_vcf.py +197 -0
  125. dna_decode-0.5.1/dna_decode/pathotype/__init__.py +12 -0
  126. dna_decode-0.5.1/dna_decode/pathotype/__main__.py +4 -0
  127. dna_decode-0.5.1/dna_decode/pathotype/cli.py +134 -0
  128. dna_decode-0.5.1/dna_decode/pathotype/detect.py +167 -0
  129. dna_decode-0.5.1/dna_decode/pathotype/expec_score.py +59 -0
  130. dna_decode-0.5.1/dna_decode/pathotype/markers.py +81 -0
  131. dna_decode-0.5.1/dna_decode/pathotype/resolve.py +197 -0
  132. dna_decode-0.5.1/dna_decode/pathotype/vf_runner.py +357 -0
  133. dna_decode-0.5.1/dna_decode/plasmid/__init__.py +8 -0
  134. dna_decode-0.5.1/dna_decode/plasmid/__main__.py +4 -0
  135. dna_decode-0.5.1/dna_decode/plasmid/cli.py +90 -0
  136. dna_decode-0.5.1/dna_decode/plasmid/runner.py +65 -0
  137. dna_decode-0.5.1/dna_decode/pointfinder/__init__.py +8 -0
  138. dna_decode-0.5.1/dna_decode/pointfinder/__main__.py +4 -0
  139. dna_decode-0.5.1/dna_decode/pointfinder/cli.py +99 -0
  140. dna_decode-0.5.1/dna_decode/pointfinder/runner.py +120 -0
  141. dna_decode-0.5.1/dna_decode/profile/__init__.py +7 -0
  142. dna_decode-0.5.1/dna_decode/profile/__main__.py +4 -0
  143. dna_decode-0.5.1/dna_decode/profile/cli.py +218 -0
  144. dna_decode-0.5.1/dna_decode/resfinder/__init__.py +7 -0
  145. dna_decode-0.5.1/dna_decode/resfinder/__main__.py +4 -0
  146. dna_decode-0.5.1/dna_decode/resfinder/cli.py +105 -0
  147. dna_decode-0.5.1/dna_decode/resfinder/runner.py +60 -0
  148. dna_decode-0.5.1/dna_decode/serotype/__init__.py +6 -0
  149. dna_decode-0.5.1/dna_decode/serotype/__main__.py +4 -0
  150. dna_decode-0.5.1/dna_decode/serotype/cli.py +82 -0
  151. dna_decode-0.5.1/dna_decode/serotype/runner.py +70 -0
  152. dna_decode-0.5.1/dna_decode/typing/__init__.py +4 -0
  153. dna_decode-0.5.1/dna_decode/typing/blast_caller.py +96 -0
  154. dna_decode-0.5.1/dna_decode/typing/codon_map.py +54 -0
  155. dna_decode-0.5.1/dna_decode/viz/__init__.py +5 -0
  156. dna_decode-0.5.1/dna_decode/viz/browser.py +138 -0
  157. dna_decode-0.5.1/docs/ARCHITECTURE.md +291 -0
  158. dna_decode-0.5.1/dogfood-observations/minister-real-run-ep4-v01-2026-06-03.md +52 -0
  159. dna_decode-0.5.1/dogfood-observations/soraya-advance-ep4-interpret-2026-06-02.md +18 -0
  160. dna_decode-0.5.1/dogfood-observations/soraya-advance-ep4-v0resolver-2026-06-02.md +16 -0
  161. dna_decode-0.5.1/dogfood-observations/soraya-minister-ep4-2026-05-31.md +41 -0
  162. dna_decode-0.5.1/dogfood-observations/soraya-untilmvp-ep4-v0cli-2026-06-02.md +16 -0
  163. dna_decode-0.5.1/executed_plans/Clonality_Disclosure_Layer_Plan/execution-log.md +11 -0
  164. dna_decode-0.5.1/executed_plans/Clonality_Disclosure_Layer_Plan/technical-plan.md +132 -0
  165. dna_decode-0.5.1/executed_plans/Decoder_Suite_Validation_Report_Card_Productionization_Plan/execution-log.md +6 -0
  166. dna_decode-0.5.1/executed_plans/Decoder_Suite_Validation_Report_Card_Productionization_Plan/technical-plan.md +131 -0
  167. dna_decode-0.5.1/executed_plans/Expression_Context_Acinetobacter_Meropenem_Plan/execution-log.md +7 -0
  168. dna_decode-0.5.1/executed_plans/Expression_Context_Acinetobacter_Meropenem_Plan/technical-plan.md +152 -0
  169. dna_decode-0.5.1/executed_plans/Genome_Map_Virulence_Overlay_Plan/execution-log.md +12 -0
  170. dna_decode-0.5.1/executed_plans/Genome_Map_Virulence_Overlay_Plan/technical-plan.md +146 -0
  171. dna_decode-0.5.1/executed_plans/Oxford_Cohort_External_Revalidation_Plan/execution-log.md +9 -0
  172. dna_decode-0.5.1/executed_plans/Oxford_Cohort_External_Revalidation_Plan/technical-plan.md +179 -0
  173. dna_decode-0.5.1/executed_plans/Oxford_MIC_Ingester_Plan/execution-log.md +9 -0
  174. dna_decode-0.5.1/executed_plans/Oxford_MIC_Ingester_Plan/technical-plan.md +190 -0
  175. dna_decode-0.5.1/executed_plans/Stage1_Refactor_And_Test_Hardening_Plan.md +329 -0
  176. dna_decode-0.5.1/executed_plans/TMP_SMX_External_Validation_Cell_Plan/execution-log.md +6 -0
  177. dna_decode-0.5.1/executed_plans/TMP_SMX_External_Validation_Cell_Plan/technical-plan.md +144 -0
  178. dna_decode-0.5.1/features/genome-map/feature.md +318 -0
  179. dna_decode-0.5.1/features/genome-map/technical-plan.md +164 -0
  180. dna_decode-0.5.1/minister_drive_ep4.py +113 -0
  181. dna_decode-0.5.1/mission-control-runs/2026-05-22-2115-research-prs-cross-ancestry/audit-trail.md +96 -0
  182. dna_decode-0.5.1/mission-control-runs/2026-05-22-2115-research-prs-cross-ancestry/intent-contract.md +70 -0
  183. dna_decode-0.5.1/mission-control-runs/2026-05-23-1400-research-aou-prs-ancestry/audit-trail.md +94 -0
  184. dna_decode-0.5.1/mission-control-runs/2026-05-23-1400-research-aou-prs-ancestry/brainstorm_payload.md +93 -0
  185. dna_decode-0.5.1/mission-control-runs/2026-05-23-1400-research-aou-prs-ancestry/intent-contract.md +70 -0
  186. dna_decode-0.5.1/mission-control-runs/2026-05-27-0140-research-ecoli-pathotype-substrate/audit-trail.md +111 -0
  187. dna_decode-0.5.1/mission-control-runs/2026-05-27-0140-research-ecoli-pathotype-substrate/intent-contract.md +72 -0
  188. dna_decode-0.5.1/mission-control-runs/2026-06-06-0339-research-decoder-substrate-feasibility/audit-trail.md +35 -0
  189. dna_decode-0.5.1/mission-control-runs/2026-06-06-0339-research-decoder-substrate-feasibility/intent-contract.md +27 -0
  190. dna_decode-0.5.1/mission-control-runs/2026-06-07-1500-research-eukaryotic-multimodal-substrate/audit-trail.md +30 -0
  191. dna_decode-0.5.1/mission-control-runs/2026-06-07-1500-research-eukaryotic-multimodal-substrate/intent-contract.md +27 -0
  192. dna_decode-0.5.1/mission-control-runs/2026-06-21-1314-research-viral-antiviral-resistance-gp-datasets/audit-trail.md +45 -0
  193. dna_decode-0.5.1/mission-control-runs/2026-06-21-1314-research-viral-antiviral-resistance-gp-datasets/intent-contract.md +35 -0
  194. dna_decode-0.5.1/mission-control-runs/2026-06-22-1000-research-noncircular-label-sources/audit-trail.md +49 -0
  195. dna_decode-0.5.1/mission-control-runs/2026-06-22-1000-research-noncircular-label-sources/intent-contract.md +37 -0
  196. dna_decode-0.5.1/plans/AMR_embedding_niche_decision_2026-06-05.md +60 -0
  197. dna_decode-0.5.1/plans/Audit_Calibration_NT_AutoModel_Plan.md +165 -0
  198. dna_decode-0.5.1/plans/Audit_Calibration_NT_AutoModel_Ship_Path_Plan.md +194 -0
  199. dna_decode-0.5.1/plans/BVBRC_Genome_Metadata_Adapter_Plan.md +222 -0
  200. dna_decode-0.5.1/plans/Cef_Audit_Aware_Packet_Design.md +256 -0
  201. dna_decode-0.5.1/plans/Cef_Cached_Strain_V0_1_Slice_Plan.md +191 -0
  202. dna_decode-0.5.1/plans/Cef_Mechanism_Audit_Plan.md +162 -0
  203. dna_decode-0.5.1/plans/Cef_V0_1_Promotion_Slice_Plan.md +245 -0
  204. dna_decode-0.5.1/plans/Cipro_Decision_Bundle_Plan.md +142 -0
  205. dna_decode-0.5.1/plans/Cipro_Decision_Bundle_Technical_Plan.md +479 -0
  206. dna_decode-0.5.1/plans/Cipro_Post_Falsifier_Ship_Path_Technical_Plan.md +459 -0
  207. dna_decode-0.5.1/plans/DNA_Decoder_v0_1_Genome_Input_Cipro_Plan.md +179 -0
  208. dna_decode-0.5.1/plans/EP1_EP2_Cross_Drug_Synthesis_Plan.md +157 -0
  209. dna_decode-0.5.1/plans/EP2_Cef_Tet_Smoke_Design_Plan.md +169 -0
  210. dna_decode-0.5.1/plans/EP6_Carbon_Utilization_Substrate.md +92 -0
  211. dna_decode-0.5.1/plans/EP7_Fungal_AMR_Substrate.md +77 -0
  212. dna_decode-0.5.1/plans/EP8_Arabidopsis_Embedding_Test.md +44 -0
  213. dna_decode-0.5.1/plans/EP8_PathB_PreStage_Manifest.md +176 -0
  214. dna_decode-0.5.1/plans/EP8_PathB_PreStage_brainstorm.md +46 -0
  215. dna_decode-0.5.1/plans/EP_1A_Public_Genome_Selection_Memo.md +81 -0
  216. dna_decode-0.5.1/plans/EP_1B_External_Benchmark_Panel_Memo.md +118 -0
  217. dna_decode-0.5.1/plans/EP_1_5_Architecture_Decision_Packet.md +214 -0
  218. dna_decode-0.5.1/plans/EP_4_Non_AMR_Phenotype_Candidates.md +146 -0
  219. dna_decode-0.5.1/plans/EP_4_Pathotype_Discovery_Closeout_Memos_Plan.md +173 -0
  220. dna_decode-0.5.1/plans/EP_4_Pathotype_Idea_Anchor_Draft.md +144 -0
  221. dna_decode-0.5.1/plans/Ecoli_G2P_Phase1_Closeout_Plan.md +229 -0
  222. dna_decode-0.5.1/plans/Ecoli_G2P_Phase1_Ship_Path_Plan.md +175 -0
  223. dna_decode-0.5.1/plans/Ecoli_G2P_Platform_Technical_Plan.md +583 -0
  224. dna_decode-0.5.1/plans/Eukaryotic_DualMachine_Coordination.md +48 -0
  225. dna_decode-0.5.1/plans/Gene_Presence_AUROC_Bug_Fix_Plan.md +114 -0
  226. dna_decode-0.5.1/plans/Klebsiella_K_antigen_capsule_typing_feasibility_2026-06-24.md +87 -0
  227. dna_decode-0.5.1/plans/NT_Deferral_Docs_Cleanup_Plan.md +101 -0
  228. dna_decode-0.5.1/plans/NT_Deferral_Docs_Cleanup_Ship_Path_Plan.md +196 -0
  229. dna_decode-0.5.1/plans/Non_AMR_Phenotype_Pivot_Assessment_2026-06-24.md +149 -0
  230. dna_decode-0.5.1/plans/Phase2_Decision_Gate_Plan.md +169 -0
  231. dna_decode-0.5.1/plans/Phase2_Framing_Brainstorm_Plan.md +137 -0
  232. dna_decode-0.5.1/plans/Phase2_Framing_Brainstorm_Technical_Plan.md +173 -0
  233. dna_decode-0.5.1/plans/Post_V0_EP_Ladder_Plan.md +312 -0
  234. dna_decode-0.5.1/plans/Return_Decision_Tree_Patch_Plan.md +187 -0
  235. dna_decode-0.5.1/plans/SARSCoV2_Mpro_Cell_Build_Spec_2026-06-23.md +60 -0
  236. dna_decode-0.5.1/plans/Sidework_Sequence_Plan.md +227 -0
  237. dna_decode-0.5.1/plans/Sidework_Sequence_Ship_Path_Plan.md +315 -0
  238. dna_decode-0.5.1/plans/Stage1_N40_Cipro_Engineering_Screen_Plan.md +146 -0
  239. dna_decode-0.5.1/plans/Stage2_Docker_Tools_Install_Plan.md +197 -0
  240. dna_decode-0.5.1/plans/Stage2_N150_Prep_Plan.md +199 -0
  241. dna_decode-0.5.1/plans/TB_AMR_Decoder_CRyPTIC_Technical_Plan.md +162 -0
  242. dna_decode-0.5.1/plans/TB_AMR_Decoder_RIF_INH_On_CRyPTIC_Plan/technical-plan.md +177 -0
  243. dna_decode-0.5.1/plans/Trait_Decoding_Roadmap.md +193 -0
  244. dna_decode-0.5.1/plans/Two_Machine_Capability_Map_And_Transfer_Minimization_Plan_2026-05-31.md +109 -0
  245. dna_decode-0.5.1/plans/Two_Machine_Operating_Contract.md +192 -0
  246. dna_decode-0.5.1/plans/Variety_Decoder_Roadmap.md +74 -0
  247. dna_decode-0.5.1/plans/calibrate_organism_brainstorm.md +58 -0
  248. dna_decode-0.5.1/plans/cef_falsifier_brainstorm.md +40 -0
  249. dna_decode-0.5.1/plans/hypothesise_prompt_highest_value_strands_2026-06-08.md +92 -0
  250. dna_decode-0.5.1/plans/idea_anchor_prompts_2026-06-10.md +170 -0
  251. dna_decode-0.5.1/plans/v0.1_Ingestion_Contract_Plan.md +201 -0
  252. dna_decode-0.5.1/plans/v1_Horizon_Framing_Plan.md +166 -0
  253. dna_decode-0.5.1/project_state/dna-decode-2026-05-11.md +451 -0
  254. dna_decode-0.5.1/project_state/ecoli-pathotype-prediction-cli-2026-05-26.md +358 -0
  255. dna_decode-0.5.1/project_state/ep4-v01-expec-recall/big-idea.md +18 -0
  256. dna_decode-0.5.1/project_state/ep4-v01-expec-recall/round2-commitments-corrected.md +41 -0
  257. dna_decode-0.5.1/project_state/ep4-v01-vf-diff/big-idea.md +49 -0
  258. dna_decode-0.5.1/project_state/eukaryotic-trait-decoding-cycle-2026-06-07.md +240 -0
  259. dna_decode-0.5.1/pyproject.toml +153 -0
  260. dna_decode-0.5.1/research_outputs/_claim_promotion_register.md +68 -0
  261. dna_decode-0.5.1/research_outputs/_followup_queue.md +130 -0
  262. dna_decode-0.5.1/research_outputs/acquirable-ecoli-phenotype-label-sources-2026-06-14.md +70 -0
  263. dna_decode-0.5.1/research_outputs/acquirable-ecoli-phenotype-label-sources-2026-06-14.raw.md +41 -0
  264. dna_decode-0.5.1/research_outputs/acquirable-ecoli-phenotype-label-sources-2026-06-14_unsupported.md +18 -0
  265. dna_decode-0.5.1/research_outputs/acquirable-label-sources-2026-06-16.md +49 -0
  266. dna_decode-0.5.1/research_outputs/all-of-us-prs-ancestry-stratified-accuracy-2025-2026-05-23.md +84 -0
  267. dna_decode-0.5.1/research_outputs/all-of-us-prs-ancestry-stratified-accuracy-2025-2026-05-23.raw.md +55 -0
  268. dna_decode-0.5.1/research_outputs/all-of-us-prs-ancestry-stratified-accuracy-2025-2026-05-23_unsupported.md +26 -0
  269. dna_decode-0.5.1/research_outputs/cauris-wgs-mic-cohort-sources-2026-06-07.raw.md +54 -0
  270. dna_decode-0.5.1/research_outputs/dna_decoder_phase4_gate_a_pass_2026-05-28.md +82 -0
  271. dna_decode-0.5.1/research_outputs/ecoli-amr-revalidation-source-portfolio-2026-06-14.md +65 -0
  272. dna_decode-0.5.1/research_outputs/ecoli-amr-revalidation-source-portfolio-2026-06-14.raw.md +39 -0
  273. dna_decode-0.5.1/research_outputs/ecoli-amr-revalidation-source-portfolio-2026-06-14_unsupported.md +12 -0
  274. dna_decode-0.5.1/research_outputs/ecoli-bacterial-phenotype-decoder-substrate-feasibility-2026-06-05.md +80 -0
  275. dna_decode-0.5.1/research_outputs/ecoli-bacterial-phenotype-decoder-substrate-feasibility-2026-06-05.raw.md +35 -0
  276. dna_decode-0.5.1/research_outputs/ecoli-bacterial-phenotype-decoder-substrate-feasibility-2026-06-05_unsupported.md +18 -0
  277. dna_decode-0.5.1/research_outputs/ecoli-pathotype-labeled-genome-substrate-survey-2026-05-27.md +96 -0
  278. dna_decode-0.5.1/research_outputs/ecoli-pathotype-labeled-genome-substrate-survey-2026-05-27.raw.md +61 -0
  279. dna_decode-0.5.1/research_outputs/ecoli-pathotype-labeled-genome-substrate-survey-2026-05-27_unsupported.md +20 -0
  280. dna_decode-0.5.1/research_outputs/ep1-suspend-gate-pathotype-reuse-feasibility-2026-05-27.md +100 -0
  281. dna_decode-0.5.1/research_outputs/etec_reference_vonmentzer_2026-05-30.md +50 -0
  282. dna_decode-0.5.1/research_outputs/etec_reference_vonmentzer_strains_2026-05-30.csv +9 -0
  283. dna_decode-0.5.1/research_outputs/etec_vonmentzer_collection_gca_2026-05-30.csv +559 -0
  284. dna_decode-0.5.1/research_outputs/eukaryotic-multimodal-substrate-feasibility-2026-06-07.md +42 -0
  285. dna_decode-0.5.1/research_outputs/eukaryotic-multimodal-substrate-feasibility-2026-06-07.raw.md +35 -0
  286. dna_decode-0.5.1/research_outputs/eukaryotic-multimodal-substrate-feasibility-2026-06-07_unsupported.md +10 -0
  287. dna_decode-0.5.1/research_outputs/expec_rule_external_validity_2026-06-04.md +46 -0
  288. dna_decode-0.5.1/research_outputs/gate-b-target-contact-shortlist-2026-05-27.md +51 -0
  289. dna_decode-0.5.1/research_outputs/gate_b_cold_email_packet_2026-05-27.md +138 -0
  290. dna_decode-0.5.1/research_outputs/horesh-2021-file-f1-audit-2026-05-27.md +142 -0
  291. dna_decode-0.5.1/research_outputs/horesh-f1-label-provenance-audit-2026-06-04.md +84 -0
  292. dna_decode-0.5.1/research_outputs/horesh2021-file-f1-label-provenance-audit-2026-05-29.md +103 -0
  293. dna_decode-0.5.1/research_outputs/horesh_bounded_slice_accession_resolution_2026-05-30.md +49 -0
  294. dna_decode-0.5.1/research_outputs/horesh_bounded_slice_wgs_accession_candidates_2026-05-30.csv +261 -0
  295. dna_decode-0.5.1/research_outputs/ncbi-pathogen-detection-host-disease-facet-2026-05-27.md +87 -0
  296. dna_decode-0.5.1/research_outputs/noncircular-label-sources-2026-06-22.md +51 -0
  297. dna_decode-0.5.1/research_outputs/noncircular-label-sources-2026-06-22.raw.md +40 -0
  298. dna_decode-0.5.1/research_outputs/noncircular-label-sources-2026-06-22_unsupported.md +9 -0
  299. dna_decode-0.5.1/research_outputs/pathotype_bakeoff_kmer_expec_epec_2026-05-31.json +39 -0
  300. dna_decode-0.5.1/research_outputs/pathotype_cli_demo_AIEY01.json +86 -0
  301. dna_decode-0.5.1/research_outputs/pathotype_cli_demo_JSIS01.json +86 -0
  302. dna_decode-0.5.1/research_outputs/pathotype_gate_a_result_2026-05-28.json +9 -0
  303. dna_decode-0.5.1/research_outputs/pathotype_gate_a_result_2026-05-28.md +10 -0
  304. dna_decode-0.5.1/research_outputs/pathotype_gate_b_digital_proxy_2026-05-29.md +246 -0
  305. dna_decode-0.5.1/research_outputs/pathotype_gate_b_one_pager_2026-05-29.md +90 -0
  306. dna_decode-0.5.1/research_outputs/pathotype_gate_b_response_rubric_2026-05-29.md +108 -0
  307. dna_decode-0.5.1/research_outputs/pathotype_gate_b_send_kit_2026-05-29.md +123 -0
  308. dna_decode-0.5.1/research_outputs/pathotype_horesh_bounded_slice_decision_2026-05-30.md +57 -0
  309. dna_decode-0.5.1/research_outputs/pathotype_kmer_fullspectrum_diag_2026-06-02.json +54 -0
  310. dna_decode-0.5.1/research_outputs/pathotype_model_interpret_confound_2026-06-02.json +115 -0
  311. dna_decode-0.5.1/research_outputs/pathotype_model_state_and_bakeoff_plan_2026-05-31.md +32 -0
  312. dna_decode-0.5.1/research_outputs/pathotype_nt_windowed_arm_2026-06-02.json +55 -0
  313. dna_decode-0.5.1/research_outputs/pathotype_smoke_lt_vs_st_cohort_2026-05-31.csv +9 -0
  314. dna_decode-0.5.1/research_outputs/pathotype_smoke_lt_vs_st_result_2026-05-31.json +63 -0
  315. dna_decode-0.5.1/research_outputs/pathotype_smoke_lt_vs_st_result_2026-05-31.md +8 -0
  316. dna_decode-0.5.1/research_outputs/pathotype_v0_cohort_eval_2026-06-03.json +312 -0
  317. dna_decode-0.5.1/research_outputs/pathotype_v0_cohort_eval_baseline_2026-06-03.json +311 -0
  318. dna_decode-0.5.1/research_outputs/pathotype_v0_marker_screen_2026-06-02.json +1356 -0
  319. dna_decode-0.5.1/research_outputs/pathotype_vf_sidebyside_feasibility_2026-06-03.md +21 -0
  320. dna_decode-0.5.1/research_outputs/phase4_pathotype_discovery_handoff_to_workhorse_2026-05-27.md +150 -0
  321. dna_decode-0.5.1/research_outputs/polygenic-risk-score-cross-ancestry-portability-2025-2026.md +77 -0
  322. dna_decode-0.5.1/research_outputs/polygenic-risk-score-cross-ancestry-portability-2025-2026.raw.md +54 -0
  323. dna_decode-0.5.1/research_outputs/polygenic-risk-score-cross-ancestry-portability-2025-2026_unsupported.md +22 -0
  324. dna_decode-0.5.1/research_outputs/sota-bacterial-amr-prediction-small-cohorts-2026-05-13.md +68 -0
  325. dna_decode-0.5.1/research_outputs/sota-bacterial-amr-prediction-small-cohorts-2026-05-13.raw.md +46 -0
  326. dna_decode-0.5.1/research_outputs/sota-bacterial-amr-prediction-small-cohorts-2026-05-13_unsupported.md +26 -0
  327. dna_decode-0.5.1/research_outputs/tb_goldset_source_shortlist_2026-06-22.md +59 -0
  328. dna_decode-0.5.1/research_outputs/viral-antiviral-resistance-gp-datasets-2026-06-21.md +68 -0
  329. dna_decode-0.5.1/research_outputs/viral-antiviral-resistance-gp-datasets-2026-06-21.raw.md +48 -0
  330. dna_decode-0.5.1/research_outputs/viral-antiviral-resistance-gp-datasets-2026-06-21_unsupported.md +22 -0
  331. dna_decode-0.5.1/research_outputs/whittam-stec-center-contact-draft-2026-05-27.md +41 -0
  332. dna_decode-0.5.1/run_mechanism_audit_detached.bat +3 -0
  333. dna_decode-0.5.1/run_stage1b_detached.bat +4 -0
  334. dna_decode-0.5.1/scripts/__init__.py +0 -0
  335. dna_decode-0.5.1/scripts/amr_falsifier.py +248 -0
  336. dna_decode-0.5.1/scripts/amr_portal_feasibility.py +151 -0
  337. dna_decode-0.5.1/scripts/amr_portal_score_independent.py +202 -0
  338. dna_decode-0.5.1/scripts/amr_portal_tb_cohort.py +115 -0
  339. dna_decode-0.5.1/scripts/amr_predict.py +13 -0
  340. dna_decode-0.5.1/scripts/assemble_sra_cohort.py +246 -0
  341. dna_decode-0.5.1/scripts/audit_cohort.py +611 -0
  342. dna_decode-0.5.1/scripts/bacdive_carbon_util_feasibility.py +264 -0
  343. dna_decode-0.5.1/scripts/bacdive_li2023_to_long.py +104 -0
  344. dna_decode-0.5.1/scripts/build_acinetobacter_indep_cohort.py +73 -0
  345. dna_decode-0.5.1/scripts/build_amr_portal_report_card.py +107 -0
  346. dna_decode-0.5.1/scripts/build_calibrated_registry.py +92 -0
  347. dna_decode-0.5.1/scripts/build_cross_kingdom_summary.py +153 -0
  348. dna_decode-0.5.1/scripts/build_external_validation_report.py +261 -0
  349. dna_decode-0.5.1/scripts/build_fungal_cohort.py +286 -0
  350. dna_decode-0.5.1/scripts/build_hiv_report_card.py +164 -0
  351. dna_decode-0.5.1/scripts/build_mini_cohort.py +121 -0
  352. dna_decode-0.5.1/scripts/build_oxford_labels.py +146 -0
  353. dna_decode-0.5.1/scripts/build_pergene_support_cache.py +114 -0
  354. dna_decode-0.5.1/scripts/build_stage2_n150_cohort.py +158 -0
  355. dna_decode-0.5.1/scripts/build_tb_goldset_manifest.py +106 -0
  356. dna_decode-0.5.1/scripts/build_tb_report_card.py +153 -0
  357. dna_decode-0.5.1/scripts/build_tbportals_candidates.py +416 -0
  358. dna_decode-0.5.1/scripts/build_validation_report_card.py +293 -0
  359. dna_decode-0.5.1/scripts/bvbrc_strict_mic_4drug_census.py +664 -0
  360. dna_decode-0.5.1/scripts/cef_falsifier.py +22 -0
  361. dna_decode-0.5.1/scripts/cef_mic_audit.py +217 -0
  362. dna_decode-0.5.1/scripts/check_n40_cohort_genomes.py +49 -0
  363. dna_decode-0.5.1/scripts/cipro_attribution_preflight.py +338 -0
  364. dna_decode-0.5.1/scripts/cipro_bounded_falsifier.py +529 -0
  365. dna_decode-0.5.1/scripts/cipro_curated_baseline.py +504 -0
  366. dna_decode-0.5.1/scripts/cipro_duplicate_accession_audit.py +181 -0
  367. dna_decode-0.5.1/scripts/cipro_mechanism_audit.py +411 -0
  368. dna_decode-0.5.1/scripts/cipro_mechanism_phenotype_merge.py +313 -0
  369. dna_decode-0.5.1/scripts/cipro_mic_audit.py +269 -0
  370. dna_decode-0.5.1/scripts/compute_lineage_metrics.py +363 -0
  371. dna_decode-0.5.1/scripts/cross_machine_sync_check.py +341 -0
  372. dna_decode-0.5.1/scripts/cryptic_feasibility_probe.py +207 -0
  373. dna_decode-0.5.1/scripts/diagnose_bvbrc_mlst_gaps.py +107 -0
  374. dna_decode-0.5.1/scripts/diagnose_gene_presence_auroc.py +155 -0
  375. dna_decode-0.5.1/scripts/diagnose_gene_presence_synthetic.py +61 -0
  376. dna_decode-0.5.1/scripts/drug_mechanism_audit.py +494 -0
  377. dna_decode-0.5.1/scripts/drug_mechanism_phenotype_merge.py +190 -0
  378. dna_decode-0.5.1/scripts/expec_rule_external_validity.py +106 -0
  379. dna_decode-0.5.1/scripts/expression_context_validate.py +211 -0
  380. dna_decode-0.5.1/scripts/external_cohort_preflight.py +207 -0
  381. dna_decode-0.5.1/scripts/external_cohort_revalidate.py +341 -0
  382. dna_decode-0.5.1/scripts/fam_subclass_resolver.py +113 -0
  383. dna_decode-0.5.1/scripts/fetch_arabidopsis_pathb.py +91 -0
  384. dna_decode-0.5.1/scripts/fetch_prospective_cohort.py +241 -0
  385. dna_decode-0.5.1/scripts/flu_na_caller.py +46 -0
  386. dna_decode-0.5.1/scripts/fungal_erg11_caller.py +152 -0
  387. dna_decode-0.5.1/scripts/g2_dry_manifest.py +244 -0
  388. dna_decode-0.5.1/scripts/genome_map.py +250 -0
  389. dna_decode-0.5.1/scripts/genome_map_spike.py +383 -0
  390. dna_decode-0.5.1/scripts/genome_map_tool_surface.py +256 -0
  391. dna_decode-0.5.1/scripts/handoff_gate.py +411 -0
  392. dna_decode-0.5.1/scripts/hiv_nnrti_baseline.py +229 -0
  393. dna_decode-0.5.1/scripts/hiv_nnrti_validate.py +215 -0
  394. dna_decode-0.5.1/scripts/hiv_nrti_mutant_catalog.py +190 -0
  395. dna_decode-0.5.1/scripts/hiv_nrti_validate.py +165 -0
  396. dna_decode-0.5.1/scripts/hiv_nrti_within_subtype.py +138 -0
  397. dna_decode-0.5.1/scripts/hiv_pi_mutant_catalog.py +227 -0
  398. dna_decode-0.5.1/scripts/hiv_rt_caller.py +63 -0
  399. dna_decode-0.5.1/scripts/hiv_targetsite_baseline.py +167 -0
  400. dna_decode-0.5.1/scripts/hiv_targetsite_validate.py +183 -0
  401. dna_decode-0.5.1/scripts/independent_cohort_validate.py +213 -0
  402. dna_decode-0.5.1/scripts/klebsiella_cipro_transfer.py +189 -0
  403. dna_decode-0.5.1/scripts/klebsiella_drug_validate.py +196 -0
  404. dna_decode-0.5.1/scripts/klebsiella_meropenem_validate.py +192 -0
  405. dna_decode-0.5.1/scripts/ktype_validate.py +144 -0
  406. dna_decode-0.5.1/scripts/leaderboard.py +248 -0
  407. dna_decode-0.5.1/scripts/leakage_check_dup_accession.py +92 -0
  408. dna_decode-0.5.1/scripts/mash_cluster_n147.py +285 -0
  409. dna_decode-0.5.1/scripts/ncbi_pd_provenance_census.py +172 -0
  410. dna_decode-0.5.1/scripts/organism_drug_validate.py +192 -0
  411. dna_decode-0.5.1/scripts/oxford_score.py +167 -0
  412. dna_decode-0.5.1/scripts/oxford_w0_probe.py +137 -0
  413. dna_decode-0.5.1/scripts/pathotype_kmer_bakeoff.py +227 -0
  414. dna_decode-0.5.1/scripts/pathotype_kmer_fullspectrum_diag.py +94 -0
  415. dna_decode-0.5.1/scripts/pathotype_laptop_pipeline.py +208 -0
  416. dna_decode-0.5.1/scripts/pathotype_model_interpret_confound.py +161 -0
  417. dna_decode-0.5.1/scripts/pathotype_nt_windowed_arm.py +180 -0
  418. dna_decode-0.5.1/scripts/pathotype_nt_windowed_bakeoff.py +129 -0
  419. dna_decode-0.5.1/scripts/pathotype_v0_cohort_eval.py +125 -0
  420. dna_decode-0.5.1/scripts/pathotype_v0_marker_screen.py +204 -0
  421. dna_decode-0.5.1/scripts/pf_kelch13_caller.py +48 -0
  422. dna_decode-0.5.1/scripts/pilot_gate.py +108 -0
  423. dna_decode-0.5.1/scripts/pipeline.py +1028 -0
  424. dna_decode-0.5.1/scripts/plot_nt_embeddings_pca_umap.py +144 -0
  425. dna_decode-0.5.1/scripts/populate_cache.py +215 -0
  426. dna_decode-0.5.1/scripts/populate_tb_cohort.py +75 -0
  427. dna_decode-0.5.1/scripts/populate_tb_regeno_detached.bat +9 -0
  428. dna_decode-0.5.1/scripts/preflight_runnable.py +504 -0
  429. dna_decode-0.5.1/scripts/probe_nt_cache.py +136 -0
  430. dna_decode-0.5.1/scripts/prospective_lock_validate.py +200 -0
  431. dna_decode-0.5.1/scripts/provenance_disjoint_validate.py +169 -0
  432. dna_decode-0.5.1/scripts/quantize_fidelity_check.py +283 -0
  433. dna_decode-0.5.1/scripts/run_oxford_revalidation.py +114 -0
  434. dna_decode-0.5.1/scripts/run_tb_independent_amr_portal.py +226 -0
  435. dna_decode-0.5.1/scripts/sarscov2_caller.py +49 -0
  436. dna_decode-0.5.1/scripts/sarscov2_mpro_validate.py +153 -0
  437. dna_decode-0.5.1/scripts/sci234_score.py +241 -0
  438. dna_decode-0.5.1/scripts/score_tb_cryptic.py +231 -0
  439. dna_decode-0.5.1/scripts/score_tb_cryptic_parquet.py +237 -0
  440. dna_decode-0.5.1/scripts/score_tb_independent_goldset.py +38 -0
  441. dna_decode-0.5.1/scripts/slim_ast_csv_for_bundle.py +86 -0
  442. dna_decode-0.5.1/scripts/smoke_gate_12strain_cipro.py +396 -0
  443. dna_decode-0.5.1/scripts/smoke_pipeline.py +294 -0
  444. dna_decode-0.5.1/scripts/stage1_n40_cipro.py +615 -0
  445. dna_decode-0.5.1/scripts/stage_tb_vcf_subset.py +70 -0
  446. dna_decode-0.5.1/scripts/tb_coordinate_alignment_probe.py +219 -0
  447. dna_decode-0.5.1/scripts/tb_indep_finisher.sh +22 -0
  448. dna_decode-0.5.1/scripts/tb_independence_biosample_check.py +130 -0
  449. dna_decode-0.5.1/scripts/tb_independent_lineage_collapse.py +103 -0
  450. dna_decode-0.5.1/scripts/tmp_smx_external_validate.py +188 -0
  451. dna_decode-0.5.1/scripts/validate_tb_goldset_candidates.py +89 -0
  452. dna_decode-0.5.1/scripts/verify_quickstart.py +83 -0
  453. dna_decode-0.5.1/scripts/verify_wheel_ships_cards.py +87 -0
  454. dna_decode-0.5.1/scripts/within_lineage_diagnostic.py +149 -0
  455. dna_decode-0.5.1/scripts/xsource_validation.py +224 -0
  456. dna_decode-0.5.1/soraya_runs/2026-05-30-1135-ep4-etec-gca/approvals.md +1 -0
  457. dna_decode-0.5.1/soraya_runs/2026-05-30-1135-ep4-etec-gca/audit-trail.md +14 -0
  458. dna_decode-0.5.1/soraya_runs/2026-05-30-1135-ep4-etec-gca/intent-contract.md +8 -0
  459. dna_decode-0.5.1/soraya_runs/2026-05-30-1135-ep4-etec-gca/recommendation.md +4 -0
  460. dna_decode-0.5.1/soraya_runs/2026-05-30-1135-ep4-etec-gca/result.md +5 -0
  461. dna_decode-0.5.1/soraya_runs/2026-05-30-1200-ep4-pathotype/approvals.md +1 -0
  462. dna_decode-0.5.1/soraya_runs/2026-05-30-1200-ep4-pathotype/audit-trail.md +16 -0
  463. dna_decode-0.5.1/soraya_runs/2026-05-30-1200-ep4-pathotype/intent-contract.md +18 -0
  464. dna_decode-0.5.1/soraya_runs/2026-05-30-1200-ep4-pathotype/recommendation.md +6 -0
  465. dna_decode-0.5.1/soraya_runs/2026-05-30-1200-ep4-pathotype/result.md +12 -0
  466. dna_decode-0.5.1/soraya_runs/2026-05-30-1807-ep4-etec-gca2/MOESM4.xlsx +0 -0
  467. dna_decode-0.5.1/soraya_runs/2026-05-30-1807-ep4-etec-gca2/MOESM5.xlsx +0 -0
  468. dna_decode-0.5.1/soraya_runs/2026-05-30-1807-ep4-etec-gca2/approvals.md +1 -0
  469. dna_decode-0.5.1/soraya_runs/2026-05-30-1807-ep4-etec-gca2/audit-trail.md +18 -0
  470. dna_decode-0.5.1/soraya_runs/2026-05-30-1807-ep4-etec-gca2/intent-contract.md +7 -0
  471. dna_decode-0.5.1/soraya_runs/2026-05-30-1807-ep4-etec-gca2/recommendation.md +5 -0
  472. dna_decode-0.5.1/soraya_runs/2026-05-30-1807-ep4-etec-gca2/result.md +7 -0
  473. dna_decode-0.5.1/soraya_runs/2026-05-31-1333-ep4-a1-vf-runtime/approvals.md +1 -0
  474. dna_decode-0.5.1/soraya_runs/2026-05-31-1333-ep4-a1-vf-runtime/audit-trail.md +1 -0
  475. dna_decode-0.5.1/soraya_runs/2026-05-31-1333-ep4-a1-vf-runtime/intent-contract.md +1 -0
  476. dna_decode-0.5.1/soraya_runs/2026-05-31-1333-ep4-a1-vf-runtime/recommendation.md +1 -0
  477. dna_decode-0.5.1/soraya_runs/2026-05-31-1333-ep4-a1-vf-runtime/result.md +1 -0
  478. dna_decode-0.5.1/soraya_runs/2026-06-02-1500-ep4-interpret-confound/approvals.md +1 -0
  479. dna_decode-0.5.1/soraya_runs/2026-06-02-1500-ep4-interpret-confound/audit-trail.md +21 -0
  480. dna_decode-0.5.1/soraya_runs/2026-06-02-1500-ep4-interpret-confound/intent-contract.md +25 -0
  481. dna_decode-0.5.1/soraya_runs/2026-06-02-1500-ep4-interpret-confound/recommendation.md +24 -0
  482. dna_decode-0.5.1/soraya_runs/2026-06-02-1500-ep4-interpret-confound/result.md +39 -0
  483. dna_decode-0.5.1/soraya_runs/2026-06-02-1530-ep4-v0-marker-resolver/approvals.md +1 -0
  484. dna_decode-0.5.1/soraya_runs/2026-06-02-1530-ep4-v0-marker-resolver/audit-trail.md +20 -0
  485. dna_decode-0.5.1/soraya_runs/2026-06-02-1530-ep4-v0-marker-resolver/intent-contract.md +23 -0
  486. dna_decode-0.5.1/soraya_runs/2026-06-02-1530-ep4-v0-marker-resolver/recommendation.md +24 -0
  487. dna_decode-0.5.1/soraya_runs/2026-06-02-1530-ep4-v0-marker-resolver/result.md +26 -0
  488. dna_decode-0.5.1/soraya_runs/2026-06-02-1600-ep4-v0-cli-build/approvals.md +1 -0
  489. dna_decode-0.5.1/soraya_runs/2026-06-02-1600-ep4-v0-cli-build/audit-trail.md +21 -0
  490. dna_decode-0.5.1/soraya_runs/2026-06-02-1600-ep4-v0-cli-build/intent-contract.md +25 -0
  491. dna_decode-0.5.1/soraya_runs/2026-06-02-1600-ep4-v0-cli-build/recommendation.md +20 -0
  492. dna_decode-0.5.1/soraya_runs/2026-06-02-1600-ep4-v0-cli-build/result.md +24 -0
  493. dna_decode-0.5.1/soraya_runs/2026-06-03-0000-ep4-v0-cohort-calibrate/approvals.md +1 -0
  494. dna_decode-0.5.1/soraya_runs/2026-06-03-0000-ep4-v0-cohort-calibrate/audit-trail.md +21 -0
  495. dna_decode-0.5.1/soraya_runs/2026-06-03-0000-ep4-v0-cohort-calibrate/intent-contract.md +20 -0
  496. dna_decode-0.5.1/soraya_runs/2026-06-03-0000-ep4-v0-cohort-calibrate/recommendation.md +20 -0
  497. dna_decode-0.5.1/soraya_runs/2026-06-03-0000-ep4-v0-cohort-calibrate/result.md +30 -0
  498. dna_decode-0.5.1/soraya_runs/2026-06-03-1309-ep4-v01-expec-recall/approvals.md +1 -0
  499. dna_decode-0.5.1/soraya_runs/2026-06-03-1309-ep4-v01-expec-recall/audit-trail.md +34 -0
  500. dna_decode-0.5.1/soraya_runs/2026-06-03-1309-ep4-v01-expec-recall/gate-receipts/interrogation-fam-per-gene-expec-scoring-1.json +9 -0
  501. dna_decode-0.5.1/soraya_runs/2026-06-03-1309-ep4-v01-expec-recall/gate-receipts/interrogation-fam-per-gene-expec-scoring-2.json +9 -0
  502. dna_decode-0.5.1/soraya_runs/2026-06-03-1309-ep4-v01-expec-recall/intent-contract.md +22 -0
  503. dna_decode-0.5.1/soraya_runs/2026-06-03-1309-ep4-v01-expec-recall/lifecycle-journal.ndjson +2 -0
  504. dna_decode-0.5.1/soraya_runs/2026-06-03-1309-ep4-v01-expec-recall/recommendation.md +34 -0
  505. dna_decode-0.5.1/soraya_runs/2026-06-03-1309-ep4-v01-expec-recall/result.md +33 -0
  506. dna_decode-0.5.1/soraya_runs/2026-06-04-0008-ep4-v01-vf-diff/epoch-snapshot.json +17 -0
  507. dna_decode-0.5.1/soraya_runs/2026-06-04-0008-ep4-v01-vf-diff/gate-receipts/interrogation-ep4-v01-vf-diff-1.json +9 -0
  508. dna_decode-0.5.1/soraya_runs/2026-06-04-0008-ep4-v01-vf-diff/gate-receipts/interrogation-ep4-v01-vf-diff-2.json +9 -0
  509. dna_decode-0.5.1/soraya_runs/2026-06-04-0008-ep4-v01-vf-diff/result.md +35 -0
  510. dna_decode-0.5.1/soraya_runs/2026-06-08-gw38-wider-amr-campylobacter/intent-contract.md +15 -0
  511. dna_decode-0.5.1/soraya_runs/2026-06-08-gw38-wider-amr-campylobacter/result.md +34 -0
  512. dna_decode-0.5.1/soraya_runs/2026-06-08-qh3c-self-calibration-falsifier/falsify.py +169 -0
  513. dna_decode-0.5.1/soraya_runs/2026-06-08-qh3c-self-calibration-falsifier/falsify_result.json +194 -0
  514. dna_decode-0.5.1/soraya_runs/2026-06-08-qh3c-self-calibration-falsifier/result.md +31 -0
  515. dna_decode-0.5.1/soraya_runs/2026-06-09-dkld-antimalarial-g1/result.md +6 -0
  516. dna_decode-0.5.1/soraya_runs/2026-06-09-eqty-calibrate-brainstorm-fixes/result.md +19 -0
  517. dna_decode-0.5.1/soraya_runs/2026-06-09-fg1e-antimalarial-cli-wire/result.md +11 -0
  518. dna_decode-0.5.1/soraya_runs/2026-06-09-mxd8-pfcrt-chloroquine/result.md +10 -0
  519. dna_decode-0.5.1/soraya_runs/2026-06-09-ruv8-antimalarial-kelch13/result.md +20 -0
  520. dna_decode-0.5.1/soraya_runs/2026-06-10-3hzi-pfcrt-genome-flip/result.md +10 -0
  521. dna_decode-0.5.1/soraya_runs/2026-06-10-7qjq-expression-frontier-isaba1/isaba1_falsifier.py +117 -0
  522. dna_decode-0.5.1/soraya_runs/2026-06-10-7qjq-expression-frontier-isaba1/isaba1_falsifier_result.json +258 -0
  523. dna_decode-0.5.1/soraya_runs/2026-06-10-7qjq-expression-frontier-isaba1/result.md +9 -0
  524. dna_decode-0.5.1/soraya_runs/2026-06-10-uzlc-intron-aware-mapping/result.md +10 -0
  525. dna_decode-0.5.1/soraya_runs/2026-06-22-adv1-hiv-ols-baseline/audit-trail.md +12 -0
  526. dna_decode-0.5.1/soraya_runs/2026-06-22-adv1-hiv-ols-baseline/intent-contract.md +33 -0
  527. dna_decode-0.5.1/soraya_runs/2026-06-22-adv1-hiv-ols-baseline/recommendation.md +19 -0
  528. dna_decode-0.5.1/soraya_runs/2026-06-22-adv1-hiv-ols-baseline/result.md +13 -0
  529. dna_decode-0.5.1/soraya_runs/2026-06-22-umvp-prospective-cohort-fetch/intent-contract.md +9 -0
  530. dna_decode-0.5.1/soraya_runs/2026-06-22-umvp-prospective-cohort-fetch/recommendation.md +10 -0
  531. dna_decode-0.5.1/soraya_runs/2026-06-22-umvp-prospective-cohort-fetch/result.md +13 -0
  532. dna_decode-0.5.1/soraya_runs/2026-06-22-umvp-tb-cryptic-baseline/recommendation.md +10 -0
  533. dna_decode-0.5.1/soraya_runs/2026-06-22-umvp-tb-cryptic-baseline/result.md +11 -0
  534. dna_decode-0.5.1/soraya_runs/2026-06-22-umvp-tb-goldset/intent-contract.md +9 -0
  535. dna_decode-0.5.1/soraya_runs/2026-06-22-umvp-tb-goldset/recommendation.md +9 -0
  536. dna_decode-0.5.1/soraya_runs/2026-06-22-umvp-tb-goldset/result.md +15 -0
  537. dna_decode-0.5.1/soraya_runs/_bakta_smoke_test.py +20 -0
  538. dna_decode-0.5.1/soraya_runs/_download_smoke.py +16 -0
  539. dna_decode-0.5.1/soraya_runs/_vf_diff_driver.py +68 -0
  540. dna_decode-0.5.1/soraya_runs/self-init-potential.json +7 -0
  541. dna_decode-0.5.1/test_baseline.json +17 -0
  542. dna_decode-0.5.1/tests/__init__.py +0 -0
  543. dna_decode-0.5.1/tests/conftest.py +16 -0
  544. dna_decode-0.5.1/tests/fixtures/amr_mini/main.tsv +4 -0
  545. dna_decode-0.5.1/tests/fixtures/ecoli_mini/annotations.gff3 +12 -0
  546. dna_decode-0.5.1/tests/fixtures/ecoli_mini/genome.fna +21 -0
  547. dna_decode-0.5.1/tests/fixtures/ktype/genome.fna +2 -0
  548. dna_decode-0.5.1/tests/fixtures/ktype/wzi_db/wzi.fasta +4 -0
  549. dna_decode-0.5.1/tests/fixtures/ktype/wzi_db/wzi.txt +3 -0
  550. dna_decode-0.5.1/tests/test_amr_cli.py +66 -0
  551. dna_decode-0.5.1/tests/test_amr_cli_antimalarial.py +98 -0
  552. dna_decode-0.5.1/tests/test_amr_cli_antiviral.py +145 -0
  553. dna_decode-0.5.1/tests/test_amr_cli_fungal.py +84 -0
  554. dna_decode-0.5.1/tests/test_amr_cli_hiv.py +124 -0
  555. dna_decode-0.5.1/tests/test_amr_cli_sarscov2.py +49 -0
  556. dna_decode-0.5.1/tests/test_amr_portal_feasibility.py +49 -0
  557. dna_decode-0.5.1/tests/test_amr_portal_score_independent.py +73 -0
  558. dna_decode-0.5.1/tests/test_amr_portal_tb_cohort.py +25 -0
  559. dna_decode-0.5.1/tests/test_amr_rules.py +387 -0
  560. dna_decode-0.5.1/tests/test_amr_rules_expression_override.py +115 -0
  561. dna_decode-0.5.1/tests/test_audit_cohort.py +473 -0
  562. dna_decode-0.5.1/tests/test_bacdive.py +138 -0
  563. dna_decode-0.5.1/tests/test_biosample_resolver.py +289 -0
  564. dna_decode-0.5.1/tests/test_bootstrap.py +79 -0
  565. dna_decode-0.5.1/tests/test_build_amr_portal_report_card.py +28 -0
  566. dna_decode-0.5.1/tests/test_build_cross_kingdom_summary.py +21 -0
  567. dna_decode-0.5.1/tests/test_build_external_validation_report.py +240 -0
  568. dna_decode-0.5.1/tests/test_build_fungal_cohort.py +134 -0
  569. dna_decode-0.5.1/tests/test_build_hiv_report_card.py +43 -0
  570. dna_decode-0.5.1/tests/test_build_mini_cohort.py +177 -0
  571. dna_decode-0.5.1/tests/test_build_oxford_labels.py +79 -0
  572. dna_decode-0.5.1/tests/test_build_tb_report_card.py +23 -0
  573. dna_decode-0.5.1/tests/test_build_tbportals_candidates.py +148 -0
  574. dna_decode-0.5.1/tests/test_build_validation_report_card.py +279 -0
  575. dna_decode-0.5.1/tests/test_calibrate_organism.py +175 -0
  576. dna_decode-0.5.1/tests/test_calibrate_wiring.py +137 -0
  577. dna_decode-0.5.1/tests/test_cef_mic_audit.py +55 -0
  578. dna_decode-0.5.1/tests/test_census_persist.py +57 -0
  579. dna_decode-0.5.1/tests/test_cipro_bounded_falsifier.py +225 -0
  580. dna_decode-0.5.1/tests/test_cipro_curated_baseline.py +167 -0
  581. dna_decode-0.5.1/tests/test_cipro_mechanism_audit.py +289 -0
  582. dna_decode-0.5.1/tests/test_cipro_mechanism_phenotype_merge.py +192 -0
  583. dna_decode-0.5.1/tests/test_cipro_mic_audit.py +135 -0
  584. dna_decode-0.5.1/tests/test_cli_dispatch.py +83 -0
  585. dna_decode-0.5.1/tests/test_clonality.py +189 -0
  586. dna_decode-0.5.1/tests/test_cohort_build_dedup.py +132 -0
  587. dna_decode-0.5.1/tests/test_cohort_deconfound.py +94 -0
  588. dna_decode-0.5.1/tests/test_cohort_discovery_build_mode.py +196 -0
  589. dna_decode-0.5.1/tests/test_cohort_manifest.py +65 -0
  590. dna_decode-0.5.1/tests/test_colocalization.py +82 -0
  591. dna_decode-0.5.1/tests/test_compute_lineage_metrics.py +313 -0
  592. dna_decode-0.5.1/tests/test_concordance.py +92 -0
  593. dna_decode-0.5.1/tests/test_cross_machine_sync_check.py +124 -0
  594. dna_decode-0.5.1/tests/test_cryptic_feasibility_probe.py +56 -0
  595. dna_decode-0.5.1/tests/test_data_annotations.py +269 -0
  596. dna_decode-0.5.1/tests/test_data_ast.py +213 -0
  597. dna_decode-0.5.1/tests/test_data_bvbrc_genome.py +196 -0
  598. dna_decode-0.5.1/tests/test_data_cohort.py +440 -0
  599. dna_decode-0.5.1/tests/test_data_refseq.py +230 -0
  600. dna_decode-0.5.1/tests/test_data_resistance_db.py +198 -0
  601. dna_decode-0.5.1/tests/test_disinfinder_decoder.py +55 -0
  602. dna_decode-0.5.1/tests/test_docker_runner.py +99 -0
  603. dna_decode-0.5.1/tests/test_drug_mechanism_audit.py +260 -0
  604. dna_decode-0.5.1/tests/test_drug_mechanism_phenotype_merge.py +42 -0
  605. dna_decode-0.5.1/tests/test_drug_mechanism_phenotype_merge_contract.py +257 -0
  606. dna_decode-0.5.1/tests/test_eval.py +270 -0
  607. dna_decode-0.5.1/tests/test_eval_phylogeny.py +307 -0
  608. dna_decode-0.5.1/tests/test_experimental_drug_rules.py +65 -0
  609. dna_decode-0.5.1/tests/test_expression_context.py +121 -0
  610. dna_decode-0.5.1/tests/test_expression_context_validate.py +78 -0
  611. dna_decode-0.5.1/tests/test_external_cohort_genomes.py +112 -0
  612. dna_decode-0.5.1/tests/test_external_cohort_preflight.py +266 -0
  613. dna_decode-0.5.1/tests/test_external_cohort_revalidate.py +265 -0
  614. dna_decode-0.5.1/tests/test_external_crosswalk.py +98 -0
  615. dna_decode-0.5.1/tests/test_external_mic_ingest.py +93 -0
  616. dna_decode-0.5.1/tests/test_external_mic_labels.py +187 -0
  617. dna_decode-0.5.1/tests/test_fam_subclass_resolver.py +73 -0
  618. dna_decode-0.5.1/tests/test_fetch_prospective_cohort.py +99 -0
  619. dna_decode-0.5.1/tests/test_fungal_amr.py +60 -0
  620. dna_decode-0.5.1/tests/test_fungal_erg11_caller.py +107 -0
  621. dna_decode-0.5.1/tests/test_g2_dry_manifest.py +117 -0
  622. dna_decode-0.5.1/tests/test_genome_map_build.py +208 -0
  623. dna_decode-0.5.1/tests/test_genome_map_calibrated.py +76 -0
  624. dna_decode-0.5.1/tests/test_genome_map_cli.py +264 -0
  625. dna_decode-0.5.1/tests/test_genome_map_gate.py +218 -0
  626. dna_decode-0.5.1/tests/test_genome_map_ingest.py +204 -0
  627. dna_decode-0.5.1/tests/test_genome_map_overlay.py +218 -0
  628. dna_decode-0.5.1/tests/test_genome_map_spike.py +170 -0
  629. dna_decode-0.5.1/tests/test_genome_map_tiers.py +67 -0
  630. dna_decode-0.5.1/tests/test_genome_map_tool_surface.py +113 -0
  631. dna_decode-0.5.1/tests/test_genome_map_virulence_overlay.py +328 -0
  632. dna_decode-0.5.1/tests/test_handoff_gate.py +263 -0
  633. dna_decode-0.5.1/tests/test_hiv_amr.py +211 -0
  634. dna_decode-0.5.1/tests/test_hiv_nnrti_baseline.py +52 -0
  635. dna_decode-0.5.1/tests/test_hiv_nnrti_validate.py +55 -0
  636. dna_decode-0.5.1/tests/test_hiv_nrti_mutant_catalog.py +49 -0
  637. dna_decode-0.5.1/tests/test_hiv_nrti_within_subtype.py +21 -0
  638. dna_decode-0.5.1/tests/test_hiv_pi_mutant_catalog.py +73 -0
  639. dna_decode-0.5.1/tests/test_hiv_rt_caller.py +121 -0
  640. dna_decode-0.5.1/tests/test_hiv_targetsite_caller.py +101 -0
  641. dna_decode-0.5.1/tests/test_interp_mutagenesis.py +337 -0
  642. dna_decode-0.5.1/tests/test_intron_aware_mapping.py +78 -0
  643. dna_decode-0.5.1/tests/test_ktype.py +65 -0
  644. dna_decode-0.5.1/tests/test_leaderboard.py +93 -0
  645. dna_decode-0.5.1/tests/test_loso_kmer.py +330 -0
  646. dna_decode-0.5.1/tests/test_loso_kmer_cache_equivalence.py +64 -0
  647. dna_decode-0.5.1/tests/test_mash_cluster_n147.py +177 -0
  648. dna_decode-0.5.1/tests/test_mic_tiers.py +394 -0
  649. dna_decode-0.5.1/tests/test_mlst_decoder.py +84 -0
  650. dna_decode-0.5.1/tests/test_models_cache.py +595 -0
  651. dna_decode-0.5.1/tests/test_models_classical_baselines.py +359 -0
  652. dna_decode-0.5.1/tests/test_models_classifiers.py +204 -0
  653. dna_decode-0.5.1/tests/test_models_foundation.py +431 -0
  654. dna_decode-0.5.1/tests/test_oxford_w0_probe.py +73 -0
  655. dna_decode-0.5.1/tests/test_pathotype_expec_recall.py +183 -0
  656. dna_decode-0.5.1/tests/test_pathotype_resolver.py +136 -0
  657. dna_decode-0.5.1/tests/test_pathotype_vf_diff.py +137 -0
  658. dna_decode-0.5.1/tests/test_pf_kelch13.py +159 -0
  659. dna_decode-0.5.1/tests/test_pilot_gate.py +372 -0
  660. dna_decode-0.5.1/tests/test_pipeline_cli.py +321 -0
  661. dna_decode-0.5.1/tests/test_pipeline_predict_e2e.py +334 -0
  662. dna_decode-0.5.1/tests/test_pipeline_predict_genome_input_e2e.py +197 -0
  663. dna_decode-0.5.1/tests/test_pipeline_predict_v0.py +287 -0
  664. dna_decode-0.5.1/tests/test_plasmid_decoder.py +89 -0
  665. dna_decode-0.5.1/tests/test_pointfinder_decoder.py +96 -0
  666. dna_decode-0.5.1/tests/test_populate_cache.py +276 -0
  667. dna_decode-0.5.1/tests/test_preflight_runnable.py +198 -0
  668. dna_decode-0.5.1/tests/test_profile.py +42 -0
  669. dna_decode-0.5.1/tests/test_profile_amr_section.py +85 -0
  670. dna_decode-0.5.1/tests/test_prospective_lock.py +139 -0
  671. dna_decode-0.5.1/tests/test_provenance_disjoint_validate.py +82 -0
  672. dna_decode-0.5.1/tests/test_quantize_fidelity_check.py +190 -0
  673. dna_decode-0.5.1/tests/test_resfinder_decoder.py +76 -0
  674. dna_decode-0.5.1/tests/test_run_oxford_revalidation.py +65 -0
  675. dna_decode-0.5.1/tests/test_run_tb_independent.py +34 -0
  676. dna_decode-0.5.1/tests/test_sarscov2_amr.py +61 -0
  677. dna_decode-0.5.1/tests/test_sarscov2_caller.py +67 -0
  678. dna_decode-0.5.1/tests/test_sarscov2_mpro_validate.py +48 -0
  679. dna_decode-0.5.1/tests/test_score_tb_cryptic.py +92 -0
  680. dna_decode-0.5.1/tests/test_score_tb_cryptic_parquet.py +104 -0
  681. dna_decode-0.5.1/tests/test_serotype_decoder.py +80 -0
  682. dna_decode-0.5.1/tests/test_shipped_decoder_surface.py +64 -0
  683. dna_decode-0.5.1/tests/test_smoke.py +54 -0
  684. dna_decode-0.5.1/tests/test_smoke_gate_12strain.py +187 -0
  685. dna_decode-0.5.1/tests/test_stage1_n40_cipro.py +527 -0
  686. dna_decode-0.5.1/tests/test_tb_amr.py +103 -0
  687. dna_decode-0.5.1/tests/test_tb_goldset.py +40 -0
  688. dna_decode-0.5.1/tests/test_tb_goldset_ingest.py +95 -0
  689. dna_decode-0.5.1/tests/test_tb_independence_biosample_check.py +39 -0
  690. dna_decode-0.5.1/tests/test_tb_independent_lineage_collapse.py +17 -0
  691. dna_decode-0.5.1/tests/test_tb_leak_guard.py +60 -0
  692. dna_decode-0.5.1/tests/test_tb_lineage.py +77 -0
  693. dna_decode-0.5.1/tests/test_tb_vcf.py +106 -0
  694. dna_decode-0.5.1/tests/test_tb_who_catalogue.py +104 -0
  695. dna_decode-0.5.1/tests/test_tmp_smx_external_validate.py +89 -0
  696. dna_decode-0.5.1/tests/test_trust_surface.py +107 -0
  697. dna_decode-0.5.1/tests/test_trust_surface_guard.py +83 -0
  698. dna_decode-0.5.1/tests/test_trust_surface_packaging.py +56 -0
  699. dna_decode-0.5.1/tests/test_two_machine_operating_contract.py +122 -0
  700. dna_decode-0.5.1/tests/test_verify_quickstart.py +24 -0
  701. dna_decode-0.5.1/tests/test_vf_runner_coords.py +209 -0
  702. dna_decode-0.5.1/tests/test_viz_browser.py +123 -0
  703. dna_decode-0.5.1/tools/__init__.py +0 -0
  704. dna_decode-0.5.1/tools/docker_runner.py +112 -0
  705. dna_decode-0.5.1/uv.lock +1562 -0
  706. dna_decode-0.5.1/wiki/3 idea anchors for dna project.rtf +0 -0
  707. dna_decode-0.5.1/wiki/EP2_cef_tet_verdict_2026-05-17.md +94 -0
  708. dna_decode-0.5.1/wiki/GATE_A_REPORT.md +86 -0
  709. dna_decode-0.5.1/wiki/GATE_B_REPORT.md +164 -0
  710. dna_decode-0.5.1/wiki/HANDOFF_2026-06-07.md +93 -0
  711. dna_decode-0.5.1/wiki/HANDOFF_amr_phase2_RESULT_2026-06-05.md +80 -0
  712. dna_decode-0.5.1/wiki/HANDOFF_amr_phase2_embedding_frontier_2026-06-04.md +111 -0
  713. dna_decode-0.5.1/wiki/HANDOFF_ep4_2026-06-03.md +140 -0
  714. dna_decode-0.5.1/wiki/HANDOFF_ep4_nt_windowed_arm_2026-06-02.md +60 -0
  715. dna_decode-0.5.1/wiki/HANDOFF_ep4_pathotype_model_2026-05-31.md +54 -0
  716. dna_decode-0.5.1/wiki/HANDOFF_ep4_v0_resolver_2026-06-03.md +37 -0
  717. dna_decode-0.5.1/wiki/HANDOFF_session_2026-06-05.md +87 -0
  718. dna_decode-0.5.1/wiki/HANDOFF_session_2026-06-10.md +83 -0
  719. dna_decode-0.5.1/wiki/HANDOFF_workhorse_eukaryotic_2026-06-07.md +73 -0
  720. dna_decode-0.5.1/wiki/MINISTER_LAUNCH_ep4_v01_vf_diff_2026-06-03.md +60 -0
  721. dna_decode-0.5.1/wiki/MINISTER_MAIDEN_RUN_ep4_v01_expec_2026-06-03.md +58 -0
  722. dna_decode-0.5.1/wiki/PHASE2_PREFLIGHT.md +108 -0
  723. dna_decode-0.5.1/wiki/SESSION_HANDOFF_2026-06-16.md +90 -0
  724. dna_decode-0.5.1/wiki/SESSION_HANDOFF_2026-06-17_genome_map_execute.md +76 -0
  725. dna_decode-0.5.1/wiki/SESSION_HANDOFF_2026-06-17_tb_decoder_plan.md +77 -0
  726. dna_decode-0.5.1/wiki/SESSION_HANDOFF_2026-06-21_hiv_viral_decoder.md +158 -0
  727. dna_decode-0.5.1/wiki/SESSION_HANDOFF_2026-06-21_virulence_overlay_commit.md +132 -0
  728. dna_decode-0.5.1/wiki/SESSION_HANDOFF_2026-06-23_independent_validation_breakthrough.md +115 -0
  729. dna_decode-0.5.1/wiki/acinetobacter_meropenem_validate_2026-06-08.json +66 -0
  730. dna_decode-0.5.1/wiki/acinetobacter_meropenem_validate_2026-06-08.md +70 -0
  731. dna_decode-0.5.1/wiki/amr_multiorganism_capstone_2026-06-07.md +67 -0
  732. dna_decode-0.5.1/wiki/amr_portal_feasibility.json +2602 -0
  733. dna_decode-0.5.1/wiki/amr_portal_feasibility_result_2026-06-23.md +58 -0
  734. dna_decode-0.5.1/wiki/amr_portal_independent_report_card.json +500 -0
  735. dna_decode-0.5.1/wiki/amr_portal_independent_report_card.md +41 -0
  736. dna_decode-0.5.1/wiki/amr_portal_independent_scores.json +643 -0
  737. dna_decode-0.5.1/wiki/amr_portal_independent_validation_2026-06-23.md +93 -0
  738. dna_decode-0.5.1/wiki/amr_portal_tb_cohort_stats.json +9 -0
  739. dna_decode-0.5.1/wiki/amr_portal_tb_independent_runbook_2026-06-23.md +55 -0
  740. dna_decode-0.5.1/wiki/antimalarial_k13_g1_2026-06-09.md +48 -0
  741. dna_decode-0.5.1/wiki/antiviral_na_4th_kingdom_2026-06-10.md +62 -0
  742. dna_decode-0.5.1/wiki/arabidopsis_af001_stop_vs_escalate_decision_2026-06-21.json +39 -0
  743. dna_decode-0.5.1/wiki/arabidopsis_af001_stop_vs_escalate_decision_2026-06-21.md +74 -0
  744. dna_decode-0.5.1/wiki/arabidopsis_af002_ft16_bounded_execution_2026-06-21.json +87 -0
  745. dna_decode-0.5.1/wiki/arabidopsis_af002_ft16_bounded_execution_2026-06-21.md +215 -0
  746. dna_decode-0.5.1/wiki/bacdive_carbon_util_feasibility_2026-06-06.json +23 -0
  747. dna_decode-0.5.1/wiki/bacdive_carbon_util_feasibility_2026-06-06.md +35 -0
  748. dna_decode-0.5.1/wiki/bvbrc_strict_mic_4drug_census_2026-05-18.json +196 -0
  749. dna_decode-0.5.1/wiki/bvbrc_strict_mic_4drug_census_2026-05-18.md +173 -0
  750. dna_decode-0.5.1/wiki/calibrate_organism_validation_2026-06-08.json +88 -0
  751. dna_decode-0.5.1/wiki/calibrate_organism_validation_2026-06-08.md +49 -0
  752. dna_decode-0.5.1/wiki/calibrated_registry_independent_validation_2026-06-08.json +113 -0
  753. dna_decode-0.5.1/wiki/calibrated_registry_independent_validation_2026-06-08.md +52 -0
  754. dna_decode-0.5.1/wiki/calibrated_registry_independent_validation_2026-06-09.json +143 -0
  755. dna_decode-0.5.1/wiki/calibrated_registry_independent_validation_2026-06-09.md +24 -0
  756. dna_decode-0.5.1/wiki/campylobacter_ciprofloxacin_validate_2026-06-08.json +66 -0
  757. dna_decode-0.5.1/wiki/campylobacter_ciprofloxacin_validate_2026-06-08.md +72 -0
  758. dna_decode-0.5.1/wiki/ceftriaxone_falsifier_2026-06-04.md +7 -0
  759. dna_decode-0.5.1/wiki/ceftriaxone_mechanism_audit_2026-05-26.json +5476 -0
  760. dna_decode-0.5.1/wiki/ceftriaxone_mechanism_audit_2026-05-26.md +84 -0
  761. dna_decode-0.5.1/wiki/cipro_attribution_preflight_2026-05-16.md +87 -0
  762. dna_decode-0.5.1/wiki/cipro_attribution_preflight_2026-05-16.per_strain.json +1517 -0
  763. dna_decode-0.5.1/wiki/cipro_bounded_falsifier_coordination_plan_2026-05-22.md +415 -0
  764. dna_decode-0.5.1/wiki/cipro_bounded_falsifier_subset_2026-05-22.json +44 -0
  765. dna_decode-0.5.1/wiki/cipro_decision_bundle_pre_conditions_2026-05-17.md +92 -0
  766. dna_decode-0.5.1/wiki/cipro_ep1_closeout_2026-05-17.md +78 -0
  767. dna_decode-0.5.1/wiki/cipro_mechanism_audit_2026-05-17.json +5626 -0
  768. dna_decode-0.5.1/wiki/cipro_mechanism_audit_2026-05-17.md +73 -0
  769. dna_decode-0.5.1/wiki/cipro_mechanism_audit_smoke.json +57 -0
  770. dna_decode-0.5.1/wiki/cipro_mechanism_audit_smoke.md +32 -0
  771. dna_decode-0.5.1/wiki/cipro_mechanism_audit_smoke_st131.json +342 -0
  772. dna_decode-0.5.1/wiki/cipro_mechanism_audit_smoke_st131.md +34 -0
  773. dna_decode-0.5.1/wiki/cipro_mechanism_phenotype_audit_2026-05-17.json +1208 -0
  774. dna_decode-0.5.1/wiki/cipro_mechanism_phenotype_audit_2026-05-17.md +91 -0
  775. dna_decode-0.5.1/wiki/cipro_mic_audit_2026-05-17.json +1311 -0
  776. dna_decode-0.5.1/wiki/cipro_mic_audit_2026-05-17.md +83 -0
  777. dna_decode-0.5.1/wiki/ciprofloxacin_falsifier_2026-06-05.md +21 -0
  778. dna_decode-0.5.1/wiki/ciprofloxacin_falsifier_2026-06-05.scores.json +862 -0
  779. dna_decode-0.5.1/wiki/ciprofloxacin_mechanism_audit_2026-06-05.json +2220 -0
  780. dna_decode-0.5.1/wiki/ciprofloxacin_mechanism_audit_2026-06-05.md +83 -0
  781. dna_decode-0.5.1/wiki/ciprofloxacin_within_lineage_diagnostic_2026-06-05.md +21 -0
  782. dna_decode-0.5.1/wiki/codex_active_handoff_packet_2026-05-23.md +155 -0
  783. dna_decode-0.5.1/wiki/cross_kingdom_validation_summary.json +43 -0
  784. dna_decode-0.5.1/wiki/cross_kingdom_validation_summary.md +22 -0
  785. dna_decode-0.5.1/wiki/cryptic_feasibility_probe_2026-06-16.json +136 -0
  786. dna_decode-0.5.1/wiki/cryptic_feasibility_probe_result_2026-06-16.md +65 -0
  787. dna_decode-0.5.1/wiki/current_cef_duplicate_accession_audit_2026-05-25.json +23 -0
  788. dna_decode-0.5.1/wiki/current_cef_duplicate_accession_audit_2026-05-25.md +29 -0
  789. dna_decode-0.5.1/wiki/decisions-log.md +293 -0
  790. dna_decode-0.5.1/wiki/decoder_v0_ux_and_success_criterion.md +142 -0
  791. dna_decode-0.5.1/wiki/decoder_validation_report_card.json +737 -0
  792. dna_decode-0.5.1/wiki/decoder_validation_report_card.md +85 -0
  793. dna_decode-0.5.1/wiki/dna_amr_external_validation_2026-06-05.md +48 -0
  794. dna_decode-0.5.1/wiki/dna_amr_multidrug_validation_2026-06-06.md +107 -0
  795. dna_decode-0.5.1/wiki/dna_amr_xsource_validation_2026-06-07.json +144 -0
  796. dna_decode-0.5.1/wiki/dna_amr_xsource_validation_2026-06-07.md +33 -0
  797. dna_decode-0.5.1/wiki/dna_decoder_cross_session_handoff_2026-06-22.md +218 -0
  798. dna_decode-0.5.1/wiki/dna_decoder_integrated_handoff_2026-06-22.md +209 -0
  799. dna_decode-0.5.1/wiki/dna_decoder_progress_report_gmail_2026-05-26.md +201 -0
  800. dna_decode-0.5.1/wiki/dna_decoder_v0_1_cef_cached_handoff_2026-05-25.md +131 -0
  801. dna_decode-0.5.1/wiki/dna_decoder_v0_1_cef_cached_release_candidate_2026-05-26.md +209 -0
  802. dna_decode-0.5.1/wiki/dna_decoder_v0_1_cef_cached_vs_genome_full_validation_2026-05-26.json +683 -0
  803. dna_decode-0.5.1/wiki/dna_decoder_v0_1_cef_cached_vs_genome_full_validation_2026-05-26.md +68 -0
  804. dna_decode-0.5.1/wiki/dna_decoder_v0_1_cef_overnight_handoff_2026-05-26.md +74 -0
  805. dna_decode-0.5.1/wiki/dna_decoder_v0_1_cef_release_template_pending_audit.md +252 -0
  806. dna_decode-0.5.1/wiki/dna_decoder_v0_1_genome_input_release_candidate_2026-05-25.md +180 -0
  807. dna_decode-0.5.1/wiki/dna_decoder_v0_1_genome_input_validation_2026-05-25.json +76 -0
  808. dna_decode-0.5.1/wiki/dna_decoder_v0_1_genome_input_validation_2026-05-25.md +25 -0
  809. dna_decode-0.5.1/wiki/dna_decoder_v0_1_parallel_handoff_2026-05-25.md +204 -0
  810. dna_decode-0.5.1/wiki/dna_decoder_v0_closeout_handoff_2026-05-24.md +158 -0
  811. dna_decode-0.5.1/wiki/ebi_amr_portal_finding_2026-06-23.md +68 -0
  812. dna_decode-0.5.1/wiki/ecoli_provdisjoint_label_discordance_2026-06-10.md +55 -0
  813. dna_decode-0.5.1/wiki/embedding_niche_cross_domain_synthesis_2026-06-12.md +50 -0
  814. dna_decode-0.5.1/wiki/enterobacter_cloacae_ceftriaxone_validate_2026-06-08.json +47 -0
  815. dna_decode-0.5.1/wiki/enterobacter_cloacae_ceftriaxone_validate_2026-06-08.md +63 -0
  816. dna_decode-0.5.1/wiki/ep1_ep2_cross_drug_architectural_finding_2026-05-17.md +125 -0
  817. dna_decode-0.5.1/wiki/eukaryotic_active_frontier_registry_2026-06-15.json +89 -0
  818. dna_decode-0.5.1/wiki/evo2_zeroshot_vep_lead_2026-06-19.md +48 -0
  819. dna_decode-0.5.1/wiki/expression_context_acinetobacter_validation_2026-06-10.json +392 -0
  820. dna_decode-0.5.1/wiki/expression_context_acinetobacter_validation_2026-06-10.md +22 -0
  821. dna_decode-0.5.1/wiki/expression_frontier_isaba1_falsifier_2026-06-10.md +58 -0
  822. dna_decode-0.5.1/wiki/external_validation_milestone_synthesis_2026-06-16.md +46 -0
  823. dna_decode-0.5.1/wiki/external_validation_oxford_2026-06-15.json +139 -0
  824. dna_decode-0.5.1/wiki/external_validation_oxfordtmpsmx_tmpsmx20260616_2026-06-16.json +80 -0
  825. dna_decode-0.5.1/wiki/external_validation_report_card.json +104 -0
  826. dna_decode-0.5.1/wiki/external_validation_report_card.md +8 -0
  827. dna_decode-0.5.1/wiki/external_validation_sci234_2026-06-15.json +25 -0
  828. dna_decode-0.5.1/wiki/external_validation_sci234_2026-06-16.json +152 -0
  829. dna_decode-0.5.1/wiki/external_validation_sci234_result_2026-06-16.md +65 -0
  830. dna_decode-0.5.1/wiki/external_validation_sci234tmpsmx_tmpsmx20260616_2026-06-16.json +80 -0
  831. dna_decode-0.5.1/wiki/external_validation_tmpsmx_result_2026-06-16.md +58 -0
  832. dna_decode-0.5.1/wiki/fungal_cohort_g1_fluconazole_2026-06-08.json +293 -0
  833. dna_decode-0.5.1/wiki/fungal_cohort_g1_fluconazole_2026-06-08.md +58 -0
  834. dna_decode-0.5.1/wiki/fungal_ep7_g1_closeout_2026-06-08.md +78 -0
  835. dna_decode-0.5.1/wiki/genome_map_idea_anchor_prompt_2026-06-17.md +78 -0
  836. dna_decode-0.5.1/wiki/genome_map_spike_verdict_2026-06-18.json +26 -0
  837. dna_decode-0.5.1/wiki/genome_map_spike_verdict_2026-06-18.md +75 -0
  838. dna_decode-0.5.1/wiki/genome_map_spike_verdict_2026-06-19.json +30 -0
  839. dna_decode-0.5.1/wiki/genome_map_spike_verdict_2026-06-19.md +66 -0
  840. dna_decode-0.5.1/wiki/genome_map_tool_surface_2026-06-18.json +158 -0
  841. dna_decode-0.5.1/wiki/genome_map_usage.md +112 -0
  842. dna_decode-0.5.1/wiki/genome_map_virulence_overlay_feasibility_2026-06-19.md +94 -0
  843. dna_decode-0.5.1/wiki/hiv_cai_baseline_vs_ols_2026-06-22.json +42 -0
  844. dna_decode-0.5.1/wiki/hiv_cai_baseline_vs_ols_2026-06-22.md +13 -0
  845. dna_decode-0.5.1/wiki/hiv_cai_v0_validation_2026-06-22.json +47 -0
  846. dna_decode-0.5.1/wiki/hiv_cai_v0_validation_2026-06-22.md +20 -0
  847. dna_decode-0.5.1/wiki/hiv_decoder_report_card.json +318 -0
  848. dna_decode-0.5.1/wiki/hiv_decoder_report_card.md +42 -0
  849. dna_decode-0.5.1/wiki/hiv_insti_baseline_vs_ols_2026-06-22.json +150 -0
  850. dna_decode-0.5.1/wiki/hiv_insti_baseline_vs_ols_2026-06-22.md +17 -0
  851. dna_decode-0.5.1/wiki/hiv_insti_v0_validation_2026-06-22.json +114 -0
  852. dna_decode-0.5.1/wiki/hiv_insti_v0_validation_2026-06-22.md +24 -0
  853. dna_decode-0.5.1/wiki/hiv_nnrti_baseline_vs_ols_2026-06-21.json +147 -0
  854. dna_decode-0.5.1/wiki/hiv_nnrti_baseline_vs_ols_2026-06-21.md +19 -0
  855. dna_decode-0.5.1/wiki/hiv_nnrti_v0_validation_2026-06-21.json +98 -0
  856. dna_decode-0.5.1/wiki/hiv_nnrti_v0_validation_2026-06-21.md +22 -0
  857. dna_decode-0.5.1/wiki/hiv_nrti_mutant_catalog_v0_1_2026-06-21.json +239 -0
  858. dna_decode-0.5.1/wiki/hiv_nrti_mutant_catalog_v0_1_2026-06-21.md +25 -0
  859. dna_decode-0.5.1/wiki/hiv_nrti_v0_validation_2026-06-21.json +199 -0
  860. dna_decode-0.5.1/wiki/hiv_nrti_v0_validation_2026-06-21.md +21 -0
  861. dna_decode-0.5.1/wiki/hiv_nrti_within_subtype_2026-06-21.json +188 -0
  862. dna_decode-0.5.1/wiki/hiv_nrti_within_subtype_2026-06-21.md +21 -0
  863. dna_decode-0.5.1/wiki/hiv_pi_baseline_vs_ols_2026-06-22.json +231 -0
  864. dna_decode-0.5.1/wiki/hiv_pi_baseline_vs_ols_2026-06-22.md +20 -0
  865. dna_decode-0.5.1/wiki/hiv_pi_v0.1_validation_2026-06-23.json +405 -0
  866. dna_decode-0.5.1/wiki/hiv_pi_v0.1_validation_2026-06-23.md +38 -0
  867. dna_decode-0.5.1/wiki/hiv_pi_v0_validation_2026-06-22.json +165 -0
  868. dna_decode-0.5.1/wiki/hiv_pi_v0_validation_2026-06-22.md +27 -0
  869. dna_decode-0.5.1/wiki/independent_phenotype_label_census_2026-06-10.md +54 -0
  870. dna_decode-0.5.1/wiki/independent_phenotype_source_sweep_2026-06-10.md +86 -0
  871. dna_decode-0.5.1/wiki/klebsiella_ceftriaxone_validate_2026-06-07.json +66 -0
  872. dna_decode-0.5.1/wiki/klebsiella_ceftriaxone_validate_2026-06-07.md +18 -0
  873. dna_decode-0.5.1/wiki/klebsiella_cipro_transfer_2026-06-07.json +69 -0
  874. dna_decode-0.5.1/wiki/klebsiella_cipro_transfer_2026-06-07.md +52 -0
  875. dna_decode-0.5.1/wiki/klebsiella_ciprofloxacin_validate_2026-06-08.json +66 -0
  876. dna_decode-0.5.1/wiki/klebsiella_ciprofloxacin_validate_2026-06-08.md +18 -0
  877. dna_decode-0.5.1/wiki/klebsiella_drug_matrix_2026-06-07.md +60 -0
  878. dna_decode-0.5.1/wiki/klebsiella_gentamicin_validate_2026-06-07.json +66 -0
  879. dna_decode-0.5.1/wiki/klebsiella_gentamicin_validate_2026-06-07.md +18 -0
  880. dna_decode-0.5.1/wiki/klebsiella_meropenem_fn_dissection_2026-06-11.md +54 -0
  881. dna_decode-0.5.1/wiki/klebsiella_meropenem_validate_2026-06-07.json +66 -0
  882. dna_decode-0.5.1/wiki/klebsiella_meropenem_validate_2026-06-07.md +20 -0
  883. dna_decode-0.5.1/wiki/klebsiella_tetracycline_validate_2026-06-07.json +66 -0
  884. dna_decode-0.5.1/wiki/klebsiella_tetracycline_validate_2026-06-07.md +18 -0
  885. dna_decode-0.5.1/wiki/ktype_report_card.json +28 -0
  886. dna_decode-0.5.1/wiki/ktype_report_card.md +24 -0
  887. dna_decode-0.5.1/wiki/ncbi_pd_provenance_census_2026-06-10.md +75 -0
  888. dna_decode-0.5.1/wiki/negative_results_map_2026-06-13.md +54 -0
  889. dna_decode-0.5.1/wiki/new_drug_coverage_brainstorm_prompt_2026-06-16.md +92 -0
  890. dna_decode-0.5.1/wiki/new_drug_coverage_idea_anchor_prompt_2026-06-16.md +112 -0
  891. dna_decode-0.5.1/wiki/next_epoch_idea_anchor_prompt_2026-06-13.md +70 -0
  892. dna_decode-0.5.1/wiki/next_epoch_idea_anchor_prompt_2026-06-14.md +72 -0
  893. dna_decode-0.5.1/wiki/next_independent_label_cell_feasibility_2026-06-23.md +66 -0
  894. dna_decode-0.5.1/wiki/nf001_branch_state_decision_2026-06-20.json +66 -0
  895. dna_decode-0.5.1/wiki/nf001_branch_state_decision_2026-06-20.md +58 -0
  896. dna_decode-0.5.1/wiki/north_star_distance_brainstorm_2026-06-17.md +60 -0
  897. dna_decode-0.5.1/wiki/overnight_status_2026-05-23.md +102 -0
  898. dna_decode-0.5.1/wiki/oxford_external_validation_result_2026-06-15.md +34 -0
  899. dna_decode-0.5.1/wiki/oxford_revalidation_runbook.md +56 -0
  900. dna_decode-0.5.1/wiki/pathb_databricks_handoff_2026-06-12.md +286 -0
  901. dna_decode-0.5.1/wiki/pca_umap_12strain_cipro_2026-05-14.png +0 -0
  902. dna_decode-0.5.1/wiki/phase1_ship_report.md +105 -0
  903. dna_decode-0.5.1/wiki/phase2_arabidopsis_result_2026-06-12.md +63 -0
  904. dna_decode-0.5.1/wiki/phenotype_trait_tool_completion_assessment_2026-06-21.md +157 -0
  905. dna_decode-0.5.1/wiki/plans-index.md +508 -0
  906. dna_decode-0.5.1/wiki/post_codex_push_checklist_2026-05-26.md +211 -0
  907. dna_decode-0.5.1/wiki/project_forward_value_map_2026-06-23.md +182 -0
  908. dna_decode-0.5.1/wiki/project_frontier_map_2026-06-19.md +78 -0
  909. dna_decode-0.5.1/wiki/prospective_lock_manifest_2026-06-22.json +60 -0
  910. dna_decode-0.5.1/wiki/provdisjoint_census_results.json +129 -0
  911. dna_decode-0.5.1/wiki/provdisjoint_lineage_metrics.json +716 -0
  912. dna_decode-0.5.1/wiki/provenance_disjoint_validation_campylobacter_cipro_2026-06-10.json +34 -0
  913. dna_decode-0.5.1/wiki/provenance_disjoint_validation_campylobacter_cipro_2026-06-10.md +18 -0
  914. dna_decode-0.5.1/wiki/provenance_disjoint_validation_escherichia_coli_shigella_ceftr_2026-06-12.json +37 -0
  915. dna_decode-0.5.1/wiki/provenance_disjoint_validation_escherichia_coli_shigella_ceftr_2026-06-12.md +18 -0
  916. dna_decode-0.5.1/wiki/provenance_disjoint_validation_escherichia_coli_shigella_cipro_2026-06-10.json +34 -0
  917. dna_decode-0.5.1/wiki/provenance_disjoint_validation_escherichia_coli_shigella_cipro_2026-06-10.md +18 -0
  918. dna_decode-0.5.1/wiki/provenance_disjoint_validation_escherichia_coli_shigella_genta_2026-06-12.json +37 -0
  919. dna_decode-0.5.1/wiki/provenance_disjoint_validation_escherichia_coli_shigella_genta_2026-06-12.md +18 -0
  920. dna_decode-0.5.1/wiki/provenance_disjoint_validation_escherichia_coli_shigella_tetra_2026-06-12.json +37 -0
  921. dna_decode-0.5.1/wiki/provenance_disjoint_validation_escherichia_coli_shigella_tetra_2026-06-12.md +18 -0
  922. dna_decode-0.5.1/wiki/provenance_disjoint_validation_klebsiella_ceftr_2026-06-10.json +34 -0
  923. dna_decode-0.5.1/wiki/provenance_disjoint_validation_klebsiella_ceftr_2026-06-10.md +18 -0
  924. dna_decode-0.5.1/wiki/provenance_disjoint_validation_klebsiella_cipro_2026-06-10.json +34 -0
  925. dna_decode-0.5.1/wiki/provenance_disjoint_validation_klebsiella_cipro_2026-06-10.md +18 -0
  926. dna_decode-0.5.1/wiki/provenance_disjoint_validation_klebsiella_genta_2026-06-10.json +34 -0
  927. dna_decode-0.5.1/wiki/provenance_disjoint_validation_klebsiella_genta_2026-06-10.md +18 -0
  928. dna_decode-0.5.1/wiki/provenance_disjoint_validation_klebsiella_merop_2026-06-10.json +37 -0
  929. dna_decode-0.5.1/wiki/provenance_disjoint_validation_klebsiella_merop_2026-06-10.md +18 -0
  930. dna_decode-0.5.1/wiki/provenance_disjoint_validation_klebsiella_tetra_2026-06-10.json +34 -0
  931. dna_decode-0.5.1/wiki/provenance_disjoint_validation_klebsiella_tetra_2026-06-10.md +18 -0
  932. dna_decode-0.5.1/wiki/pseudomonas_aeruginosa_ciprofloxacin_validate_2026-06-07.json +66 -0
  933. dna_decode-0.5.1/wiki/pseudomonas_aeruginosa_ciprofloxacin_validate_2026-06-07.md +18 -0
  934. dna_decode-0.5.1/wiki/pseudomonas_aeruginosa_meropenem_validate_2026-06-08.json +66 -0
  935. dna_decode-0.5.1/wiki/pseudomonas_aeruginosa_meropenem_validate_2026-06-08.md +57 -0
  936. dna_decode-0.5.1/wiki/pypi_publish_runbook.md +50 -0
  937. dna_decode-0.5.1/wiki/reproducibility_freeze_2026-06-13.md +92 -0
  938. dna_decode-0.5.1/wiki/return_decision_tree_2026-05-16.md +102 -0
  939. dna_decode-0.5.1/wiki/salmonella_ciprofloxacin_validate_2026-06-08.json +66 -0
  940. dna_decode-0.5.1/wiki/salmonella_ciprofloxacin_validate_2026-06-08.md +66 -0
  941. dna_decode-0.5.1/wiki/sarscov2_mpro_cov_rdb_validation.json +140 -0
  942. dna_decode-0.5.1/wiki/sarscov2_mpro_validation_result_2026-06-23.md +50 -0
  943. dna_decode-0.5.1/wiki/self_calibration_falsifier_2026-06-08.json +194 -0
  944. dna_decode-0.5.1/wiki/self_calibration_falsifier_2026-06-08.md +72 -0
  945. dna_decode-0.5.1/wiki/session_handoff_2026-05-15.md +100 -0
  946. dna_decode-0.5.1/wiki/session_status_and_codex_request_2026-05-24.md +240 -0
  947. dna_decode-0.5.1/wiki/smoke_gate_12strain_ceftriaxone_2026-05-17.md +39 -0
  948. dna_decode-0.5.1/wiki/smoke_gate_12strain_cipro_2026-05-14.md +44 -0
  949. dna_decode-0.5.1/wiki/smoke_gate_12strain_cipro_2026-05-15.md +40 -0
  950. dna_decode-0.5.1/wiki/smoke_gate_12strain_tetracycline_2026-05-17.md +39 -0
  951. dna_decode-0.5.1/wiki/stage1_n40_cipro_2026-05-15.md +95 -0
  952. dna_decode-0.5.1/wiki/stage1_n40_cipro_mean-plus-max_2026-05-16.md +95 -0
  953. dna_decode-0.5.1/wiki/stage2_install_artifact_2026-05-15.md +82 -0
  954. dna_decode-0.5.1/wiki/staphylococcus_aureus_oxacillin_validate_2026-06-07.json +66 -0
  955. dna_decode-0.5.1/wiki/staphylococcus_aureus_oxacillin_validate_2026-06-07.md +51 -0
  956. dna_decode-0.5.1/wiki/tb_coordinate_alignment_probe_2026-06-16.json +93 -0
  957. dna_decode-0.5.1/wiki/tb_coordinate_alignment_probe_2026-06-16.md +18 -0
  958. dna_decode-0.5.1/wiki/tb_cryptic_parquet_baseline_2026-06-22.md +57 -0
  959. dna_decode-0.5.1/wiki/tb_decoder_idea_anchor_prompt_2026-06-16.md +105 -0
  960. dna_decode-0.5.1/wiki/tb_goldset_author_emails_2026-06-22.md +119 -0
  961. dna_decode-0.5.1/wiki/tb_goldset_howto_2026-06-22.md +63 -0
  962. dna_decode-0.5.1/wiki/tb_goldset_public_source_exhaustion_2026-06-22.md +52 -0
  963. dna_decode-0.5.1/wiki/tb_goldset_thorpe2024_assessment_2026-06-22.md +56 -0
  964. dna_decode-0.5.1/wiki/tb_independence_biosample_check.json +24 -0
  965. dna_decode-0.5.1/wiki/tb_independent_amr_portal_lineage_collapsed.json +113 -0
  966. dna_decode-0.5.1/wiki/tb_independent_amr_portal_scores.json +43 -0
  967. dna_decode-0.5.1/wiki/tb_independent_goldset_acquisition_2026-06-17.md +32 -0
  968. dna_decode-0.5.1/wiki/tb_independent_lineage_finding_2026-06-23.md +49 -0
  969. dna_decode-0.5.1/wiki/tb_independent_number_2026-06-23.md +66 -0
  970. dna_decode-0.5.1/wiki/tb_inh_cryptic_parquet_baseline_2026-06-22.json +72 -0
  971. dna_decode-0.5.1/wiki/tb_portals_goldset_runbook_2026-06-22.md +80 -0
  972. dna_decode-0.5.1/wiki/tb_report_card.json +72 -0
  973. dna_decode-0.5.1/wiki/tb_report_card.md +27 -0
  974. dna_decode-0.5.1/wiki/tb_rif_cryptic_fullcohort_result_2026-06-17.md +52 -0
  975. dna_decode-0.5.1/wiki/tb_rif_cryptic_parquet_baseline_2026-06-22.json +72 -0
  976. dna_decode-0.5.1/wiki/tb_rif_cryptic_results_2026-06-17.json +54 -0
  977. dna_decode-0.5.1/wiki/wave_a_cross_kingdom_unification_closeout_2026-06-21.md +71 -0
  978. dna_decode-0.5.1/wiki/wave_b_hiv_viral_cell_grounding_2026-06-21.md +136 -0
  979. dna_decode-0.5.1/wiki/wider_amr_transferability_synthesis_2026-06-08.md +66 -0
  980. dna_decode-0.5.1/wiki/workhorse_convergence_recovery_checklist_2026-06-23.md +168 -0
  981. dna_decode-0.5.1/wiki/workhorse_repo_convergence_status_2026-06-22.md +115 -0
@@ -0,0 +1,16 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(powershell -NoProfile -File /tmp/bundle_repo.ps1)",
5
+ "Bash(mkdir -p /c/Users/Farshad/AppData/Local/Temp/repo_verify)",
6
+ "Bash(rm -rf /c/Users/Farshad/AppData/Local/Temp/repo_verify/*)",
7
+ "Bash(powershell -NoProfile -Command \"Expand-Archive -Path 'C:\\\\Users\\\\Farshad\\\\Downloads\\\\dna_decode_repo.zip' -DestinationPath 'C:\\\\Users\\\\Farshad\\\\AppData\\\\Local\\\\Temp\\\\repo_verify' -Force\")",
8
+ "Read(//c/Users/Farshad/AppData/Local/Temp/**)",
9
+ "Bash(mkdir -p \"C:/Users/Farshad/AppData/Local/Temp/claude_bundle_for_codex_2026-05-26\")",
10
+ "Bash(rm -rf *)",
11
+ "Bash(mkdir -p plans wiki scripts dna_decode/data dna_decode/eval tests)",
12
+ "Bash(cp __TRACKED_VAR__/plans/Trait_Decoding_Roadmap.md plans/)",
13
+ "Bash(cp __TRACKED_VAR__/plans/EP_4_Non_AMR_Phenotype_Candidates.md plans/)"
14
+ ]
15
+ }
16
+ }
@@ -0,0 +1,30 @@
1
+ # Testable Modules
2
+ <!-- Auto-maintained by /test-epilogue — do not edit manually -->
3
+
4
+ - scripts/audit_cohort.py — Phase 2.5 cohort audit report generator; cohort overview + clade composition + metadata completeness + assembly QC quantiles + AST method breakdown + GO/WARN/NO-GO verdict; argparse + cohort-loader + AST-loader integration tests
5
+ - scripts/build_mini_cohort.py — Gate B mini-cohort selector; picks N highest-assembly-quality strains per R/S class from a source cohort parquet (sort: contig_count asc, n50 desc); argparse + ValueError surface for missing class
6
+ - scripts/build_validation_report_card.py — Anchor-4 report-card classify() 7-state cell machine (SCORED/POWERED_UNSCORED/UNDERPOWERED/ABSTAINS_BY_DESIGN/NOT_CENSUSED/LABEL_CONFOUNDED/NO_FREE_PHENOTYPE_SOURCE) + surface-precedence; main() read-only roll-up emit (JSON+MD; WIKI/ROOT redirectable for test); lineage-disclosure layer: load_lineage_metrics (canonical-keyed, malformed->empty) + build_lineage_block (scored/incomplete/not_computed) + _assert_weighted_renderable C3 guard (no weighted point without Wilson CI + eff-N)
7
+ - scripts/cipro_curated_baseline.py — EP1 audit-infrastructure module-level constants + ABLATION_FEATURE_SETS contract + _load_amrfinder_features JSON parsing. 2-layer verdict (original_condition_4 + amended_condition_4 gated on no_POINT >= 0.773 OR mechanism_only >= 0.80). LR + XGB orchestration over multi-block ablation sets skipped.
8
+ - scripts/cipro_mechanism_audit.py — EP1 audit-infrastructure pure-logic: _classify_symbol (gene → mechanism class with tolerant prefix match incl. acrR + bla* + qnr*), _is_synonymous_point (first AA == last AA detection), _parse_amrfinder_outputs (main.tsv POINTX → kind=mutation routing; mutations.tsv class+synonymous filter; cross-TSV dedupe). Docker AMRFinder invocation skipped.
9
+ - scripts/cipro_mechanism_phenotype_merge.py — EP1 audit-infrastructure pure-logic: _classify_noise per-row mapping with strict PRIMARY_CIPRO_MECHANISMS = QRDR | plasmid_protect_modify; co_resistance_modifiers separated; mechanism_opacity_flag separates AMRFinder-incomplete from labels-noisy. Pre-curated-baseline gate orchestration skipped.
10
+ - scripts/cipro_mic_audit.py — EP1 audit-infrastructure pure-logic: _parse_mic (strips <>= operators, handles NA variants) + _confidence_tier (HIGH_R/HIGH_S/DECISIVE/BORDERLINE/AMBIGUOUS/CONFLICT/NO_MIC classification under CLSI 2024 + EUCAST 14.0 breakpoints). Raw AST CSV load skipped.
11
+ - scripts/compute_lineage_metrics.py — per-cohort lineage recompute pure helpers: parse_cohort_dir / find_artifact (latest) / read_selected / _fasta_ok (M1 genome gate) / ensure_cohort_genomes / reconcile_raw_metrics (M4 raises on mismatch; skips no-run-dir accs) / graded_lineage_bucket / build_threshold_results / build_cell (scored vs partial/unreconciled no-tier) / load+upsert+write sidecar (canonical-key idempotent; malformed->fresh) / process_cohort no-artifact FileNotFoundError. Docker Mash in process_cohort/main skipped.
12
+ - scripts/leaderboard.py — formatting, markdown grouping, bundle-reading helpers (subprocess paths mocked)
13
+ - scripts/ncbi_pd_provenance_census.py — census_result_to_sidecar_row group->organism normalizer (refuses error/capped/missing-count rows) + upsert_census_result idempotent powering sidecar (one row per organism×drug; skips degraded; preserves header). Network metadata streaming (census_one/main) skipped.
14
+ - scripts/provenance_disjoint_validate.py — main() fail-closed manifest gate (incomplete manifest + no --allow-incomplete-manifest -> exit 2; override proceeds DEGRADED) + prior_accessions exclusion set wiring into select_disjoint (exact-self cohort not excluded). Network selection + Docker AMRFinder skipped.
15
+ - scripts/pipeline.py — CLI dispatcher with ingest/train/predict/attribute subcommands; argparse validation + exit codes
16
+ - scripts/populate_cache.py — Phase 2 standalone embedding-cache driver; strain_id ↔ assembly_accession mapping; --allow-mock gate; end-to-end mock populate
17
+ - scripts/quantize_fidelity_check.py — top-K intersection + Spearman comparison, GO/NO-GO aggregation, markdown report writer
18
+ - scripts/smoke_gate_12strain_cipro.py — 2026-05-17 patches: --drug-templated output strings (write_packet heading + cohort description + default filename slug) + NT-XGBoost runner fallback to ast_labels iteration when cohort.per_drug_strain_ids[drug] missing. Full LOSO + NT cache run is orchestration (skipped).
19
+ - scripts/smoke_pipeline.py — end-to-end synthetic-fixture smoke run; AUROC + top-1 attribution assertions
20
+ - scripts/tmp_smx_external_validate.py — NON-FROZEN TMP-SMX external scorer pure-logic: score_cohort (4-stratum sul/dfr routing, _binary R/S/None gap, strata_reproduced gate incl. sul-only-empty `so is None` branch) + build_artifact (external-validation-v1 schema + EXPERIMENTAL_SCORED/scorer_local branding + SCORED/INDETERMINATE headline) + frozen-leak guard. _mic/_binary/load_sci234/load_oxford/main I/O skipped.
21
+ - scripts/build_external_validation_report.py — external-validation roll-up pure-logic: load_external_artifacts (run-scoped; refuses glob-all; skips hard_fail/degraded/corrupt) + _publishable + cluster_weighted_with_ci (clonality math + Wilson CI + eff-N) + build_cell (experimental branding passthrough) + render_json/render_md (strict→binary fallback incl. both-empty default-to-strict) + _fmt_ci. Docker Mash (compute_lineage_for_cohort/main) skipped.
22
+ - dna_decode/genome_map/build_map.py — genome-map assembler; build_genome_map per-feature tier precedence (AMR determinant-phenotype > virulence-determinant > function) + phenotype wall + virulence wall (_virulence_field) + M2-isolated virulence metric keys; build_feature_table flattener. PURE (no Docker/IO).
23
+ - dna_decode/genome_map/virulence_overlay.py — VF overlay pure-logic: parse_virulence_hits (per_hit→DeterminantHit, uncalled dropped, tandem kept), join_virulence (VF-namespaced counts + _count_ambiguous_contig_hits M1 + all_virulence_symbol_fallback), genome_pathotype_call (full resolve_call contract; insufficient_context only on unavailable VF/no contigs), cluster_pathotype_context, _pergene_cov_from_per_gene, virulence_organism_in_scope (E.coli/Shigella gate)
24
+ - dna_decode/pathotype/vf_runner.py — canonical-VF blastn caller; parse_blastn_outfmt6 PURE parse (minus-strand normalization, qlen=0 + malformed-line guards, per_gene/per_cluster best-hit + per_hit every-called-HSP) + _interval_dedup (overlap-merge keeps higher-coverage HSP attrs; disjoint copies retained) + _db_sha256 + build_vf_diff side-by-side concordance. Live blastn subprocess (run_canonical_vf) skipped.
25
+ - dna_decode/eval/clonality.py — clonality clustering + cluster-weighted metrics; greedy_representative_clusters_from_matrix (C2 chaining-resistant, NOT single-linkage) / cluster_class (C1 DISCORDANT never majority-voted) / cluster_weighted_confusion (one vote per lineage; missing-pred->ABSTAIN) / wilson_ci (well-behaved at small/extreme N) / effective_lineage_n (normalizes int/str cls) / cluster_members. Docker Mash in greedy_representative_clusters skipped.
26
+ - dna_decode/data/cell_key.py — canonical (organism, drug) join key (strip+lowercase); canonical_cell_key tuple + cell_key_str 'org|drug' — single source of truth shared by report card + lineage sidecar + scored JSONs
27
+ - dna_decode/eval/cohort_manifest.py — accession-manifest leakage registry; build_manifest() scans data/raw/*/selected.tsv + data/processed/*.parquet (incomplete=True fail-closed on any load failure); prior_accessions() exact-self exclusion (not substring); role/organism/drug parsing
28
+ - dna_decode/data/shipped_decoder_surface.py — SHIPPED_DECODER_SURFACE deployed-claim registry; shipped_decoder_rows/surface_index/all_surface_drugs; phenotype_source_status enum (ncbi_pd/label_confounded/no_free_source); CLI-drug coverage anti-drift guard
29
+ - dna_decode/data/bvbrc_genome.py — Phase 2 BV-BRC Genomes-tab CSV adapter; header normalization (Title Case → lowercase_underscore); organism filter (Species → Genome Name fallback); duplicate-key warning; tolerant int parsing
30
+ - dna_decode/viz/browser.py — matplotlib attribution plot rendering + TSV export
@@ -0,0 +1,76 @@
1
+ # Runtime data + caches (large, gitignored per Step 1 of technical plan)
2
+ # Anchored to repo root — doesn't match dna_decode/data/ subpackage
3
+ # Ignore data/ contents per-entry (NOT the dir itself) so specific subdirs can be re-included
4
+ /data/*
5
+ # Exception: committed public reference alleles for the fungal-AMR real-data test (tiny GenBank CDS)
6
+ !/data/fungal_ref/
7
+ # Exception: committed Arabidopsis Path-B phenotype labels (small public AraPheno CSVs)
8
+ !/data/arabidopsis/
9
+ # Exception: committed public influenza N1 NA reference + real field alleles for the antiviral (4th-kingdom)
10
+ # real-data test (tiny GenBank CDS). Same class as fungal_ref.
11
+ !/data/antiviral_ref/
12
+ # Exception: committed public HIV-1 HXB2 RT CDS reference for the genome-mode caller self-check + planted-
13
+ # mutation test (tiny NCBI CDS, K03455.1:2550-4229). Same class as fungal_ref/antiviral_ref.
14
+ !/data/hiv_ref/
15
+ # Exception: committed public SARS-CoV-2 Mpro (nsp5) reference for the genome-mode caller integrity gate
16
+ # (tiny NCBI CDS, NC_045512.2:10055-10972). Same class as fungal_ref/antiviral_ref/hiv_ref.
17
+ !/data/sarscov2_ref/
18
+ *.h5
19
+ *.parquet
20
+ *.pkl
21
+ *.pt
22
+ *.bin
23
+
24
+ # Python
25
+ __pycache__/
26
+ *.pyc
27
+ *.pyo
28
+ *.egg-info/
29
+ .pytest_cache/
30
+ .mypy_cache/
31
+ .ruff_cache/
32
+ .coverage
33
+ .coverage.*
34
+ htmlcov/
35
+
36
+ # Environments
37
+ .venv/
38
+ venv/
39
+ env/
40
+ .env
41
+ .env.local
42
+
43
+ # IDE
44
+ .vscode/
45
+ .idea/
46
+ *.swp
47
+ .DS_Store
48
+
49
+ # Build outputs
50
+ build/
51
+ dist/
52
+ *.egg
53
+
54
+ # Model checkpoints (large, fetched from HuggingFace)
55
+ *.safetensors
56
+ *.ckpt
57
+ checkpoints/
58
+
59
+ # Logs
60
+ *.log
61
+ logs/
62
+
63
+ # Claude execute-plan scaffolding — recreated by /execute-plan runs
64
+ .claude/execute-plan-state/
65
+
66
+ # Generated audit / analysis reports (re-runnable via scripts/audit_cohort.py etc.)
67
+ /reports/
68
+
69
+ # AMRFinder runs (generated artifacts; tens of MB per strain)
70
+ /data/amrfinder_runs/
71
+
72
+ # Project-state scratch/working copies (stale duplicates of the live ledger; not history)
73
+ /project_state/*-scratch.md
74
+
75
+ # genome-map spike per-genome feature maps (large, regenerable via scripts/genome_map_spike.py)
76
+ wiki/genome_map_spike_*/
@@ -0,0 +1 @@
1
+ 3.11
@@ -0,0 +1 @@
1
+ <!-- approvals.md for 2026-05-30-1200-ep4-pathotype -->
@@ -0,0 +1 @@
1
+ <!-- audit-trail.md for 2026-05-30-1200-ep4-pathotype -->
@@ -0,0 +1 @@
1
+ <!-- intent-contract.md for 2026-05-30-1200-ep4-pathotype -->
@@ -0,0 +1 @@
1
+ <!-- recommendation.md for 2026-05-30-1200-ep4-pathotype -->
@@ -0,0 +1 @@
1
+ <!-- result.md for 2026-05-30-1200-ep4-pathotype -->
@@ -0,0 +1,455 @@
1
+ # Changelog
2
+
3
+ All notable changes to `dna_decode`. Format loosely follows [Keep a Changelog](https://keepachangelog.com/);
4
+ this is a solo research-tool repo so the granularity is per-release-theme, not per-PR.
5
+
6
+ ## [Unreleased] — Anchor-4: standing decoder-suite validation report card (2026-06-10)
7
+
8
+ - **NEW `dna_decode/eval/cohort_manifest.py`** — data-driven accession-manifest registry. `build_manifest()`
9
+ scans EVERY `data/raw/*/selected.tsv` + EVERY `data/processed/*.parquet`; `prior_accessions(exclude_cohort
10
+ =name)` excludes prior accessions by **EXACT-self cohort identity (not substring)**, and `Manifest.incomplete
11
+ =True` on any load failure. REPLACES the hardcoded `_FLAGSHIP_PARQUET_COHORTS` list (3 cohorts) in
12
+ `scripts/provenance_disjoint_validate.py` — leakage exclusion now covers all 8 parquet cohorts (744
13
+ accessions vs ~175 before).
14
+ - **`scripts/provenance_disjoint_validate.py` now FAILS CLOSED on an incomplete manifest** (`INCOMPLETE_MANIFEST`,
15
+ exit 2) unless `--allow-incomplete-manifest` is passed (which stamps degraded independence into the artifact).
16
+ Artifact carries `manifest_complete` / `manifest_degraded`.
17
+ - **`scripts/ncbi_pd_provenance_census.py` now SELF-PERSISTS its powering verdict** to
18
+ `wiki/provdisjoint_census_results.json` (group→organism normalizer; idempotent upsert per `(organism, drug)`;
19
+ REFUSES to persist error/row-capped rows so a degraded run can't overwrite a good powering verdict).
20
+ Previously stdout-only.
21
+ - **NEW `dna_decode/data/shipped_decoder_surface.py`** — the authoritative DEPLOYED-CLAIM surface registry
22
+ (organism, drug, engine, organism_scope, phenotype_source_status, census_group).
23
+ - **`scripts/build_validation_report_card.py`** — rows now = shipped surface ∪ observed cells (a new decoder
24
+ can't ship invisibly); added a 7th cell-state `LABEL_CONFOUNDED` (oxacillin×S.aureus, unreliable mecA
25
+ surrogate); `NO_FREE_PHENOTYPE_SOURCE` is now surface-driven. Honest per-cell tier + no aggregate headline
26
+ preserved. Writes `wiki/decoder_validation_report_card.{md,json}`. Current card: 25 cells (6 SCORED /
27
+ 4 NOT_CENSUSED / 1 UNDERPOWERED / 2 ABSTAINS_BY_DESIGN / 1 LABEL_CONFOUNDED / 11 NO_FREE_PHENOTYPE_SOURCE).
28
+
29
+ ## [Unreleased] — intron-aware multi-HSP codon mapping (engine)
30
+
31
+ - **`observed_substitutions` (the shared target-site codon-mapper) is now INTRON-AWARE.** It stitches the
32
+ query(CDS-reference)-position → subject-nucleotide map across ALL HSPs on the gene's best contig (not just
33
+ the single best HSP). Because codon numbering is by *query* position (contiguous CDS), a codon that spans
34
+ an exon-exon boundary — its 3 nts in two different HSPs (exons separated by an intron in the genome) — is
35
+ still translated correctly. This generically improves **every** genome-mode caller (fungal ERG11, K13)
36
+ for multi-exon / split-across-contigs genes, and **unblocks intron-containing targets** (pfcrt has 13
37
+ exons; GenBank deposits are ~2471 bp genomic). Intronless genes are the single-HSP special case →
38
+ identical prior behavior (guarded by the existing fungal/K13 tests; 967 passed, 0 regressions). Validated
39
+ on the real (non-repetitive) 3D7 K13 CDS artificially split into exons: exon1 + deep-exon2 mutations both
40
+ detected across the intron; a mid-codon boundary assembles to WT with no spurious call. 2 tests
41
+ (`tests/test_intron_aware_mapping.py`). Known limit: a periodic CDS self-aligns at its period (use a real
42
+ non-repetitive reference — real CDSs are).
43
+ - **pfcrt genome mode FLIPPED ON** (same run) — committed the 3D7 pfcrt CDS reference
44
+ (`data/antimalarial_ref/Pf3D7_pfcrt_cds.fna`, NCBI RefSeq XM_001348968, 424aa, WT Lys@76) so
45
+ `dna-amr --drug chloroquine --genome-fasta X.fna` works (`--pfcrt-ref` to override). **Validated on REAL
46
+ 13-exon genomic pfcrt alleles** (the 2471 bp GenBank field isolates): the intron-aware mapper recovered
47
+ **K76T across the introns** + the full canonical CQ-R haplotype (A220S/Q271E/I356T/R371I = CVIET-type) on
48
+ all 6 tested; WT 3D7 → S. Genome-mode ref is picked by target gene (K13 → `--k13-ref`, pfcrt →
49
+ `--pfcrt-ref`); the intron guard is replaced by a ref-existence check. Real genomic fixture committed
50
+ (`Pf_pfcrt_MN419894_K76T.fna`). This is the first REAL multi-exon end-to-end validation of the engine.
51
+
52
+ ## [Unreleased] — antimalarial vertical: P. falciparum K13 (the 3rd kingdom, protozoan)
53
+
54
+ - **`dna_decode/data/antimalarial_amr.py`** + **`scripts/pf_kelch13_caller.py`** — extends the proven
55
+ deterministic target-site method (bacterial AMRFinder → fungal ERG11) to *Plasmodium falciparum*
56
+ artemisinin partial resistance via the WHO-validated **Pfkelch13 (K13)** propeller markers (C580Y, R561H,
57
+ R539T, I543T, A675V, R622I, …). Hand-curated catalog (no AMRFinder-equivalent for Plasmodium); the caller
58
+ REUSES the fungal caller's gene-generic `observed_substitutions` (BLAST K13-CDS-vs-genome → gap-aware
59
+ codon-map → catalog), so the only new surface is the catalog + a thin wrapper. Artemisinin partial
60
+ resistance is a clearance phenotype, not an MIC — the validated K13 marker IS the genotypic call; an S
61
+ call surfaces non-K13 / partner-drug blind spots. Real 3D7 K13 reference committed
62
+ (`data/antimalarial_ref/Pf3D7_K13_cds.fna`, NCBI XM_001350122.1, 726aa, WT Cys@580); G0-completion test
63
+ validates C580Y numbering on the **real** reference. Offline-safe (absent BLAST+ → INDETERMINATE).
64
+ 6 tests. **3rd kingdom decoded** (bacteria → fungi → protozoa).
65
+ - **Wired into the unified `dna-amr` CLI** (`--drug artemisinin|artesunate|dihydroartemisinin`) — routes to
66
+ the K13 engine (`--genome-fasta` real-BLAST, or `--observed K13:C580Y` wheel-only), mirroring the fungal
67
+ productization; emits the same `amr-mechanism-call-v1` record; `--organism` default relabels to
68
+ `Plasmodium_falciparum`. Shared `_target_site_record` + `_emit_target_site` now back both the fungal and
69
+ antimalarial branches (extracted, not duplicated). 4 CLI tests. So `dna-amr` now spans **3 kingdoms**.
70
+ - **+ chloroquine (pfcrt K76T)** — extends the antimalarial vertical to the iconic chloroquine-resistance
71
+ marker (`dna-amr --drug chloroquine --observed pfcrt:K76T` → R). `gene_for_drug` routes drug→target
72
+ gene; K76T → CQ-R is unambiguous (pfmdr1 partner-drug markers deliberately omitted — their direction
73
+ flips between amodiaquine and lumefantrine). Shipped first as `--observed`-only; **genome mode was then
74
+ flipped on** once the intron-aware mapper + committed pfcrt CDS reference landed (see the intron-aware
75
+ entry above) — `dna-amr --drug chloroquine --genome-fasta X.fna` now works on real 13-exon genomic pfcrt.
76
+ 5 tests.
77
+
78
+ ## [Unreleased] — self-calibrating AMR rule (`calibrate_organism`)
79
+
80
+ - **`dna_decode/eval/calibrate_organism.py`** — auto-selects the per-organism AMR rule config from a
81
+ ≥~15R/15S labeled cohort: chooses the determinant COUNTER (`qrdr_point` vs broad drug-class) and the
82
+ count THRESHOLD by leave-one-out balanced accuracy, and auto-excludes INTRINSIC gene families (≥90% of
83
+ both R and S, grouped at gene-family granularity so polymorphic intrinsics like blaOXA-51-family are
84
+ caught). Returns a `CalibratedRule` (`.predict()` applies it); ABSTAINS with verdict `EXPRESSION_FLOOR`
85
+ when no presence config clears the 0.70 LOO floor (expression-driven R that gene-presence cannot decode).
86
+ Motivated by the wider-AMR boundary taxonomy (CONTENT/TUNING/EXPRESSION) — the counter, not just the
87
+ threshold, is organism-specific (the Klebsiella-vs-Salmonella cipro contrast). Validated on cached cohorts
88
+ (`wiki/calibrate_organism_validation_2026-06-08.md`): Campylobacter→1, Klebsiella→2 (+oqxAB excluded),
89
+ Salmonella→broad@1 (deployed 0.567→1.0) all LOO 1.0; Acinetobacter + Pseudomonas meropenem → abstain.
90
+ 16 unit tests.
91
+ - **Wired into `call_resistance(..., organism=...)`** (opt-in) via a committed registry
92
+ `dna_decode/data/calibrated_amr_rules.json` (built by `scripts/build_calibrated_registry.py`). When an
93
+ organism is passed AND has a registry entry: a CALIBRATED entry applies its counter/threshold/intrinsic
94
+ exclusions; an EXPRESSION_FLOOR entry returns **`prediction: "ABSTAIN"`** (refuses to predict an
95
+ expression-driven organism×drug rather than over-call). `organism=None` (or unknown organism, or an
96
+ explicit `resistance_threshold`) keeps the unchanged `DRUG_RULE` default — backward-compatible. Registry
97
+ is IN-SAMPLE (N≈30) and opt-in by design; abstain verdicts are conservative. 9 wiring tests.
98
+ - **Design-review hardening (2026-06-09):** (a) `INSUFFICIENT_EVIDENCE` verdict + `MIN_CLASS_COUNT` guard —
99
+ a one-class/under-powered cohort no longer yields a bogus `EXPRESSION_FLOOR` (fixed a degenerate
100
+ Pseudomonas registry entry); (b) `loo_balanced_accuracy` now truly balanced (was plain accuracy), `None`
101
+ when a class is absent; (c) deployed config is the deterministic full-cohort `_select_best_config` pick
102
+ (removed the modal/tie-break ambiguity), LOO separately estimates the selection procedure; (d)
103
+ `build_calibrated_registry` resolves runs via the validator `reuse_glob` (Pseudomonas under-load fix —
104
+ all 5 entries now on valid 15R/15S); (e) promotion gate adds a **specificity floor** + min-10/class and
105
+ treats config-match as a **flag, not a gate** (non-inferior OOS perf suffices) — all 3 cipro configs
106
+ `promotion_eligible=True`. M2 (AMRFinder `Method`-column propagation) documented + deferred. 947 tests.
107
+
108
+ ## [Unreleased] — cross-decoder analyses (concordance + profile + co-localization)
109
+
110
+ Three ANALYSES that compose the shipped decoders (no new DB) — variety roadmap Waves 1-2.
111
+
112
+ - **`dna-coloc`** (`dna-decode coloc`, Wave 2) — links each acquired resistance gene to plasmid replicon(s)
113
+ on the SAME assembly contig → "is *this* AMR gene plasmid-borne?". Enabled by a new opt-in engine
114
+ positions-mode (`call_alleles(..., with_positions=True)` returns each hit's subject contig+coords;
115
+ default-off, every existing caller unchanged). Same-contig is suggestive, not proof (caveat shipped).
116
+ Pure core + real-BLAST e2e (blaNDM-1 on plasmid-contig → plasmid-borne; sul1 on chrom-contig → not).
117
+
118
+ - **`dna-concordance`** (`dna-decode concordance`) — compares the two independent acquired-gene callers,
119
+ AMRFinder (`dna-amr` main.tsv) vs ResFinder (`dna-resfinder` blastn), at the gene-family level (allele
120
+ variant stripped; `sul1`≠`sul2`, `blaNDM-1`≈`blaNDM-19`) + Jaccard agreement. The cross-check `resfinder`
121
+ was built to enable.
122
+ - **`dna-profile`** (`dna-decode profile`) — runs every assembly-FASTA decoder (pathotype + serotype +
123
+ plasmid + resfinder) on one genome → a single unified report; each section degrades independently.
124
+ - Kept out of the `TRAITS` decoder registry (new `ANALYSES` dict; disjoint namespaces). 15 new tests.
125
+
126
+ ## [Unreleased] — MLST sequence-typing decoder (the blocked one, unblocked via PubMLST)
127
+
128
+ - **`dna-mlst`** (`dna-decode mlst`) — 8th decoder. 7-gene MLST: exact per-locus allele (blastn 100/100 on
129
+ the shared engine) → profile → Sequence Type via the PubMLST profiles table. v0: E. coli Achtman
130
+ (adk/fumC/gyrB/icd/mdh/purA/recA, 16,242 STs). The earlier blocker was DB-discovery (CGE `mlst_db` raw
131
+ paths 404); resolved by using **PubMLST's REST API** (`pubmlst_ecoli_achtman_seqdef` scheme 4).
132
+ `dna-mlst --fetch-db` installs the scheme (DB on demand, gitignored). Novel/incomplete profiles report
133
+ "ST not called", never guessed. **Validated end-to-end: K-12 MG1655 → ST10** (real DB + real genome) +
134
+ synthetic real-BLAST e2e + pure-core tests. New shared `mlst/core.py` (profiles parse + ST lookup). 5 tests.
135
+
136
+ ## [Unreleased] — DisinFinder biocide-resistance decoder (roadmap W4) + profile completion
137
+
138
+ - **`dna-disinfinder`** (`dna-decode disinfinder`) — 7th decoder. Acquired biocide/disinfectant resistance
139
+ genes (quaternary-ammonium qac* + formaldehyde formA) via the DisinFinder DB on the shared engine (reuses
140
+ resfinder's CGE gene parser). Hospital infection-control relevant; qac genes often share plasmids with AMR
141
+ → pair with `dna-coloc`. Offline-safe; DB on demand. 3 tests.
142
+ - **`dna-profile` now also runs `pointfinder`** — the run-all covers all 5 assembly-FASTA decoders
143
+ (pathotype/serotype/plasmid/resfinder/pointfinder).
144
+ - MLST (roadmap remainder) stays deferred: DB raw-paths 404 + it needs exact-allele/profile→ST semantics
145
+ (a distinct batch, not the presence/codon pattern).
146
+
147
+ ## [Unreleased] — PointFinder chromosomal point-mutation decoder (roadmap W3)
148
+
149
+ - **`dna-pointfinder`** (`dna-decode pointfinder`) — 6th decoder. Chromosomal AMR point mutations via the
150
+ PointFinder DB: blastn each reference gene CDS vs the assembly, map the subject amino acid at each
151
+ catalogued codon (new shared `typing/codon_map.py` — gap-aware codon→subject-AA, the proven fungal-ERG11
152
+ pattern, now in-package), call a mutation when the subject AA matches a `Res_codon` in
153
+ `resistens-overview.txt`. v0 scope: E. coli FQ QRDR (gyrA/parC/gyrB/parE). An INDEPENDENT point-mutation
154
+ caller (`caller_is_independent_baseline: true`) complementing `amr` (AMRFinder POINT) + `resfinder`
155
+ (acquired only). Epistasis (`Required_mut`) recorded, not enforced. Offline-safe; DB on demand.
156
+ Validated on synthetic (S83L) + the real committed E. coli DB (gyrA codon83=S/87=D). 5 tests.
157
+
158
+ ## [Unreleased] — typing-decoder family (plasmid + serotype + resfinder on one shared engine)
159
+
160
+ Three new deterministic curated-DB decoders — the tool grows from 2 traits to 5, all on one engine.
161
+
162
+ - **Shared engine** `dna_decode/typing/blast_caller.py` (`call_alleles`) — the generic best-HSP-per-allele
163
+ blastn core (reuses pathotype/vf_runner's resolvers). The CGE curated-DB pattern (pathotype + plasmid)
164
+ is now config-per-decoder, not a from-scratch build. Plasmid refactored onto it (DRY).
165
+ - **`dna-serotype`** (`dna-decode serotype`) — E. coli O:H serotyping via SerotypeFinder allele DB
166
+ (best O-antigen + best H-antigen → `O25:H4`, partial → `O104:H?`). A genuinely new trait.
167
+ - **`dna-resfinder`** (`dna-decode resfinder`) — acquired-AMR-gene detection via ResFinder allele DB,
168
+ per-class. Deliberately an **independent** caller vs the AMRFinder-based `dna-amr`
169
+ (`caller_is_independent_baseline: true`) — the cross-tool concordance check the AMR decoder lacked.
170
+ - All offline-safe (status `unavailable`, exit 3); DBs downloaded on demand (not committed). ~16 new tests.
171
+
172
+ ### plasmid replicon-typing decoder (earlier in this Unreleased cycle)
173
+
174
+ New deterministic trait decoder `dna-plasmid` (`dna-decode plasmid`) — the tool grows beyond AMR.
175
+
176
+ - **New capability:** plasmid incompatibility (Inc) replicon typing from a genome assembly via the curated
177
+ PlasmidFinder allele DB + real blastn (identity 95 / coverage 60, PlasmidFinder defaults). Reports the Inc
178
+ replicons present (IncF/IncH/IncI/IncX/IncN/…) — composing with `dna-amr`: AMR says *what* resistance,
179
+ plasmid typing says whether it likely rides a known mobile element.
180
+ - Sibling architecture to `dna-pathotype` (curated-DB blastn caller; reuses `pathotype/vf_runner`'s blastn
181
+ resolvers — DRY). Offline-safe: no blastn / no DB → `status: "unavailable"` (exit 3), never a crash.
182
+ `caller_is_independent_baseline: false` (faithful to PlasmidFinder's own method, not an independent check).
183
+ - DB downloaded on demand (not committed), like the VirulenceFinder DB. 7 tests
184
+ (`tests/test_plasmid_decoder.py`); cli-dispatch registry contract updated to the 3-decoder set.
185
+
186
+ ## [0.5.0] — 2026-06-08 — Fungal AMR decoder (the kingdom jump)
187
+
188
+ `dna-amr` now decodes **fungal** azole/echinocandin resistance, not just bacterial — the determinant-scan
189
+ method validated across the bacteria→fungi kingdom boundary.
190
+
191
+ - **New capability:** `dna-amr --drug fluconazole|voriconazole|caspofungin|micafungin` routes to a
192
+ BLAST-ERG11/FKS1 target-site engine (vs the AMRFinder engine for bacterial drugs — there is no
193
+ AMRFinder-for-fungi). Two source modes: `--genome-fasta` (BLAST the committed C. auris ERG11 reference)
194
+ and `--observed GENE:SUB[,...]` (pure, wheel-only, no BLAST). Emits the same `amr-mechanism-call-v1`
195
+ record as the bacterial path (uniform tool surface); S calls surface the efflux/aneuploidy blind spots.
196
+ - **Validation (Gate G1, `wiki/fungal_ep7_g1_closeout_2026-06-08.md`):** on a de-confounded C. auris
197
+ WGS+MIC cohort (S. Africa bloodstream, PRJNA737309 + AraPheno-style Table S1 MICs), the deterministic
198
+ caller found the catalogued ERG11 mutation in **100% of fluconazole-MIC-R isolates across two clades**
199
+ (clade I Y132F, clade III F126L/VF125AL) — sensitivity 1.0. Specificity is label-limited (reduced-
200
+ susceptibility F126L carriers fall below the CDC tentative breakpoint), the documented "suspect the
201
+ label" pattern; the genotype is the trustworthy output.
202
+ - **Infra shipped:** `dna_decode/data/fungal_amr.py` (hand-curated catalog + CDC tentative breakpoints),
203
+ `scripts/fungal_erg11_caller.py` (BLAST→codon-map→catalog), `scripts/build_fungal_cohort.py` (cohort
204
+ validation + within-clade de-confound + LABEL_LIMITED_FAILURE verdict), `scripts/assemble_sra_cohort.py`
205
+ (targeted ERG11 read-mapping, ~4 min/isolate vs ~45 min full assembly). Committed real C. auris reference
206
+ + 3 public allele fixtures (`data/fungal_ref/`).
207
+ - **Eukaryotic Path B (Arabidopsis flowering-time embedding test, Gate G2)** pre-staged + brainstorm-revised
208
+ + CPU-only dry-manifest gate coded (`scripts/g2_dry_manifest.py`); GPU run deferred to the workhorse.
209
+ - ~43 new tests (fungal catalog/caller/cohort/CLI + dry-manifest). Bacterial path unchanged.
210
+
211
+ ## [0.4.0] — 2026-06-07 — Multi-Organism AMR Decoder (capstone)
212
+
213
+ Milestone release consolidating the AMR arc. No new code — a capstone over v0.3.x.
214
+
215
+ `dna-amr` is a deterministic, interpretable AMR R/S decoder validated across **6 drugs × 4 organisms ×
216
+ 4 mechanism classes, spanning the gram divide** (E. coli, K. pneumoniae, P. aeruginosa, S. aureus),
217
+ deployed as `dna-amr` / `dna-decode`. Every per-drug rule beats naive AMRFinder on independent data.
218
+
219
+ - **One engineering principle** held across every organism/mechanism: count the drug's SPECIFIC
220
+ resistance determinants (target point-mutations / drug-specific Subclass / acquired gene-family), not
221
+ the broad drug-class bag — intrinsic chromosomal genes (efflux) are the cross-organism gotcha.
222
+ - **Honest limits, named in every output:** `undetectable_mechanisms` (efflux/porin/regulatory expression
223
+ phenotypes) + label-quality caveats (oxacillin → use cefoxitin). The recurring binding constraint is the
224
+ de-confounded, reliably-labeled substrate — not the method.
225
+ - Capstone: `wiki/amr_multiorganism_capstone_2026-06-07.md`. 108 tests green.
226
+
227
+ **This is the milestone.** Further organism/drug breadth is diminishing-returns (re-confirms the same two
228
+ findings). The genuinely-different next leaps (cross-lab validation, a non-AMR sampling-independent
229
+ substrate, multimodal/eukaryotic) require resources beyond autonomous code work.
230
+
231
+ ## [0.3.7] — 2026-06-07
232
+
233
+ 1st Gram-positive: S. aureus oxacillin (MRSA/mecA) — genotype transfers; honest label finding.
234
+
235
+ ### Added
236
+ - **oxacillin** (6th drug, 1st Gram-positive): mecA-based MRSA rule (threshold 1 + METHICILLIN-subclass,
237
+ excludes blaZ penicillinase). Added to mic_tiers (breakpoints, classes, mec loci, primary mechanism) +
238
+ DRUG_RULE. `supported_drugs()` now 6. +2 tests (104 → 106 → 108 green).
239
+ - **S. aureus oxacillin validation (4th organism, 1st Gram-positive):** N=30.
240
+ `wiki/staphylococcus_aureus_oxacillin_validate_2026-06-07.md`.
241
+
242
+ ### Finding (the honest result)
243
+ - **mecA genotype detection TRANSFERS to Gram-positive: sens 1.000** (all 15 R strains carry mecA). The
244
+ acquired-gene + Subclass-refinement approach works on a Gram-positive, as on the gram-negatives.
245
+ - **spec 0.333 is oxacillin-LABEL noise, NOT a rule defect:** 10/15 "oxacillin-susceptible"-labeled strains
246
+ carry full-length mecA — far above genuine OS-MRSA (<5%). Oxacillin direct AST is the documented unreliable
247
+ comparator for mecA; CLSI/EUCAST recommend **cefoxitin** as the surrogate. The proper-label re-test is
248
+ **substrate-blocked** (cefoxitin = only 3R on this NCBI dataset).
249
+ - **Terminal:** Gram-positive mecA detection generalizes; phenotype-label validation is the limit — the
250
+ project's recurring "substrate/label is the binding constraint" lesson, now confirmed on a Gram-positive.
251
+
252
+ ## [0.3.6] — 2026-06-07
253
+
254
+ 3rd organism (Pseudomonas) + cross-organism shipped in the CLI.
255
+
256
+ ### Added
257
+ - **`dna-amr --organism <O>`** (genome mode) — passes through to AMRFinder `-O` (organism-specific QRDR
258
+ point-mutation detection); recorded in `provenance.amrfinder_organism`. Default Escherichia. Closes the
259
+ gap where cross-organism support lived only in validation scripts, not the shipped CLI. +2 CLI tests.
260
+ - **Pseudomonas aeruginosa cipro VALIDATED** (3rd organism): N=30 acc 0.867 / sens 0.80 / spec 0.933
261
+ (beats naive AMRFinder 0.767). The QRDR-POINT rule transfers UNCHANGED to a *less-similar* gram-negative
262
+ (MexAB-OprM efflux, intrinsic AmpC — no oqxAB). 3 FN = efflux-mediated cipro-R (expected blind spot).
263
+ `wiki/pseudomonas_aeruginosa_ciprofloxacin_validate_2026-06-07.md`.
264
+ - **`scripts/organism_drug_validate.py`** — generalized any-NCBI-organism × any-drug validator
265
+ (auto-discovers latest PDG metadata, reuses cached runs). Every future organism is now a one-command run.
266
+
267
+ ### Result
268
+ dna-amr validated across **3 organisms** (E. coli, K. pneumoniae, P. aeruginosa). The "count the drug's
269
+ specific determinants, not the broad class bag" principle holds across all three — strong evidence it is
270
+ organism-general, not E. coli-specific.
271
+
272
+ ## [0.3.5] — 2026-06-07
273
+
274
+ Klebsiella full drug matrix complete — dna-amr validated 5 drugs × 2 organisms.
275
+
276
+ ### Added
277
+ - **Klebsiella cef + gent + tet validated** (rules applied unchanged from E. coli):
278
+ - ceftriaxone: acc 0.800 / sens 1.0 / spec 0.6 ✅
279
+ - gentamicin: acc 0.867 / sens 0.867 / spec 0.867 ✅
280
+ - tetracycline: acc 0.800 / spec 1.0 / **sens 0.600** ⚠️ PARTIAL (efflux blind spot — see below)
281
+ - `scripts/klebsiella_drug_validate.py` (drug-agnostic; reuses cached Klebsiella runs across cohorts).
282
+ - Consolidated: `wiki/klebsiella_drug_matrix_2026-06-07.md`.
283
+ - **`gene_prefixes` rule refinement** (`amr_rules.py`): tetracycline now counts only acquired `tet*` genes,
284
+ excluding intrinsic K. pneumoniae OqxAB efflux (AMRFinder-tagged TETRACYCLINE but present in susceptible
285
+ isolates). Same cross-organism principle as cipro QRDR-POINT. **Also improved E. coli tet 0.833 → 0.917.**
286
+
287
+ ### Findings
288
+ - **tetracycline / Klebsiella is the honest PARTIAL:** the acquired-`tet*` rule is precise (spec 1.0) but
289
+ sens 0.600 — 6/15 R strains are efflux-mediated (oqxAB overexpression), undetectable by ANY
290
+ curated-determinant rule (an expression phenotype, surfaced in `undetectable_mechanisms`). A documented
291
+ biological limit, not a rule defect.
292
+ - **Cross-organism principle confirmed 3× (cipro/tet/the gent+cef+mero Subclass refinements):** count the
293
+ drug's specific resistance determinants, not the broad drug-class bag; intrinsic chromosomal determinants
294
+ (efflux) are the organism-specific gotcha.
295
+
296
+ ### Result
297
+ dna-amr spans **5 drugs × 2 organisms × 4 mechanism classes**; 4/5 Klebsiella drugs clear the bar
298
+ zero-tuning, all beat naive AMRFinder. +3 tet tests (104 green).
299
+
300
+ ## [0.3.4] — 2026-06-07
301
+
302
+ Klebsiella meropenem — 2nd organism, NEW mechanism class (carbapenem). Phase 3 slice 2.
303
+
304
+ ### Added
305
+ - **meropenem decoder** (5th drug): acquired-carbapenemase rule (threshold 1 + CARBAPENEM-subclass
306
+ refinement — blaKPC/NDM/OXA-48). **Klebsiella N=30 acc 0.867 / sens 1.0 / spec 0.733** (vs naive
307
+ AMRFinder 0.533; the CARBAPENEM-subclass refinement lifts spec 0.067→0.733 by excluding ESBL/AmpC that
308
+ raise meropenem MIC without hydrolyzing it). `wiki/klebsiella_meropenem_validate_2026-06-07.md`.
309
+ Carbapenem is the defining K. pneumoniae clinical threat — a mechanism class E. coli AMR never covered.
310
+ - meropenem added to `mic_tiers.py` (breakpoints CLSI R≥4/S≤1 + EUCAST; AMRFinder classes;
311
+ carbapenemase loci catalog; primary mechanism). `supported_drugs()` now returns 5.
312
+ - `scripts/klebsiella_meropenem_validate.py` (reuses cached cipro-cohort AMRFinder runs on strain overlap).
313
+ - +2 tests (carbapenemase counted / ESBL excluded). 102 green.
314
+
315
+ ### Honest scope
316
+ The meropenem rule is blind to porin-loss-mediated carbapenem resistance (no carbapenemase gene) — the
317
+ expected FN mode; surfaced in `undetectable_mechanisms`. 4 FP (susceptible strains carrying a carbapenemase
318
+ gene — likely low-expression / borderline MIC).
319
+
320
+ ## [0.3.3] — 2026-06-07
321
+
322
+ Cross-organism: Klebsiella + the QRDR-POINT cipro rule (roadmap Phase 3, slice 1).
323
+
324
+ ### Added
325
+ - **Cross-organism transfer (Klebsiella pneumoniae cipro):** N=30 NCBI cohort, **acc 1.000** with the
326
+ deployed rule. The method generalizes across organisms. `scripts/klebsiella_cipro_transfer.py`,
327
+ `wiki/klebsiella_cipro_transfer_2026-06-07.md`. `_run_amrfinder` gained an `organism` param
328
+ (`-O Klebsiella_pneumoniae`).
329
+ - `qrdr_point_count` / `qrdr_point_determinants` in `amr_rules.py` — count fluoroquinolone QRDR
330
+ target-alteration POINT mutations (gyrA/parC/parE) only.
331
+
332
+ ### Changed (ratified — changes the deployed cipro number)
333
+ - **cipro `DRUG_RULE` switched to the QRDR-POINT rule globally** (`counter='qrdr_point'`): count QRDR
334
+ target POINT mutations ≥2, not the broad QUINOLONE-class determinant bag. Rationale: the broad rule
335
+ FAILED on Klebsiella (acc 0.5 — intrinsic chromosomal OqxAB efflux, absent in E. coli, saturates the
336
+ count). The canonical target-mutation count is cross-organism-robust. Net effect:
337
+ - Klebsiella cipro 0.5 → **1.000**
338
+ - E. coli cipro in-cohort 0.939 → 0.925 (−1.4pp; dropped cases were qnr/efflux-mediated)
339
+ - E. coli cipro **cross-source (NCBI) 0.955 → 1.000** (+4.5pp — QRDR-POINT generalizes better; the
340
+ in-cohort −1.4pp was tuning-cohort overfit).
341
+ - **Platform finding:** cross-organism transfer requires counting the drug's TARGET-alteration mutations,
342
+ not the broad drug-class bag; intrinsic chromosomal determinants are the organism-specific gotcha.
343
+ - Tests: cipro tests updated to QRDR-POINT (point-mutation rows); +4 new (qrdr helpers + intrinsic-exclusion);
344
+ cohort regression re-pinned to 0.925/0.875/0.973. 24 total green.
345
+
346
+ ## [0.3.2] — 2026-06-06
347
+
348
+ Trust-hardening + honesty taxonomy (adversarial-review follow-through). No new science — makes the
349
+ shipped decoders auditable + honest about their blind spots.
350
+
351
+ ### Added
352
+ - **Blind-spot honesty:** every SUSCEPTIBLE `dna-amr` call now carries `undetectable_mechanisms`
353
+ (`efflux` / `porin_loss` / `regulatory` — expression/regulatory resistance absent from AMRFinder's
354
+ curated determinants) + a caveat that a negative means "no curated determinant found", not "definitely
355
+ susceptible". `UNDETECTABLE_MECHANISMS` in `amr_rules.py`.
356
+ - **Discordance taxonomy:** `discordance_bucket(prediction, true_label)` + `evaluate_cohort` now emit a
357
+ failure-mode breakdown — `FN_undetected_mechanism` (R missed → the blind spots) vs
358
+ `FP_determinant_without_phenotype` (called R but susceptible → label noise / silent-or-low-expression /
359
+ borderline MIC). The "failure-tolerant tool" deliverable: names where it fails.
360
+ - **Provenance pin:** output JSON `provenance.amrfinder_image` records the pinned AMRFinderPlus image
361
+ (`ncbi/amr:4.2.7-2026-03-24.1`; tag encodes the DB date) so an R/S verdict is reproducible against a
362
+ known determinant source. `AMRFINDER_IMAGE_PINNED` in `amr_rules.py`.
363
+ - **Value-add headline** in `wiki/dna_amr_multidrug_validation_2026-06-06.md`: explicit naive-AMRFinder
364
+ vs dna-amr table (cef +0.28 acc/+0.50 spec; gent +0.43/+0.57) — proves the per-drug policy adds value
365
+ over vanilla "any determinant → R", not just re-prints AMRFinder hits.
366
+ - 5 new tests (blind-spots on S/R calls, discordance taxonomy, cohort discordance breakdown). 20 total.
367
+
368
+ ### Fixed
369
+ - Stale gentamicin "NOT yet cohort-validated" claims (`amr_rules.py` docstring + wiki caveat) reconciled
370
+ with the N=128 acc 0.945 validation that DRUG_RULE/README/CHANGELOG already recorded (claim-hygiene).
371
+
372
+ ### Validated (cross-source — closes the same-database gap)
373
+ - **Independent NCBI Pathogen Detection validation** (`scripts/xsource_validation.py`,
374
+ `wiki/dna_amr_xsource_validation_2026-06-07.md`): 22 E. coli, balanced ~11R/11S per drug, **zero
375
+ accession overlap** with the 176 BV-BRC cohort accessions (enforced at selection). Result: cipro 0.955,
376
+ cef 0.864, gent 1.000, tet 0.909 — comparable to / better than in-cohort. **Answers the product
377
+ question:** dna-amr beats naive "any-determinant→R" AMRFinder on UN-tuned data by +0.09 (cipro) /
378
+ +0.23 (cef) / +0.41 (gent) / +0.0 (tet) accuracy — the per-drug threshold + Subclass refinement IS the
379
+ value-add, not determinant discovery. Sensitivity 1.0 on all 4 drugs (FN=0); all errors are FP
380
+ (determinant-present-but-susceptible). Honest scope: NCBI Pathogen Detection is a different
381
+ source/curation, not a controlled different-lab study.
382
+
383
+ ## [0.3.1] — 2026-06-06
384
+
385
+ The "one coherent tool" consolidation (after the v0.3.0 build settled the embedding question).
386
+
387
+ ### Added
388
+ - **Unified `dna-decode` console entry** (`dna_decode/cli.py`) — single tool that dispatches to the
389
+ trait decoders: `dna-decode amr …`, `dna-decode pathotype …`, `dna-decode list` (capability +
390
+ validation status), `dna-decode --version`. Thin pass-through (argv delegated verbatim); the
391
+ per-decoder entries (`dna-amr`, `dna-pathotype`) stay independently usable + unchanged. 6 dispatch tests.
392
+
393
+ ### Changed
394
+ - Project ledger (`project_state/dna-decode-2026-05-11.md`) updated to record the strategic inflection:
395
+ embedding frontier closed (0-for-3), deterministic mechanism-feature decoders are the product.
396
+
397
+ ## [0.3.0] — 2026-06-06
398
+
399
+ The "deterministic decoders win" release. The frozen-genome-embedding (NT mean-pool) thesis was tested
400
+ to a decisive conclusion and the project committed to deterministic, interpretable mechanism-feature
401
+ decoders as the shipping path.
402
+
403
+ ### Added
404
+ - **Multi-drug deterministic AMR caller** (`dna-amr`). Extended from cipro-only to **all 4 drugs**, with
405
+ per-drug validated rules baked into `dna_decode/eval/amr_rules.py::DRUG_RULE`:
406
+ - ciprofloxacin — threshold 2 (QRDR point-mutations) — N=147 acc 0.939.
407
+ - ceftriaxone — threshold 1 + **extended-spectrum subclass refinement** (CEPHALOSPORIN/CARBAPENEM;
408
+ excludes intrinsic blaTEM-1/blaEC that are ampicillin-R not ceftriaxone-R) — N=60 acc 0.933.
409
+ - tetracycline — threshold 1 (acquired tet genes) — N=12 acc 0.833 (small N, provisional).
410
+ - gentamicin — threshold 1 + **GENTAMICIN-subclass refinement** (excludes aph/aadA
411
+ streptomycin-kanamycin genes that don't confer gentamicin-R) — N=128 acc 0.945.
412
+ - General fix: a broad AMR class over-calls (cef spec 0.41, gent spec 0.39) because it counts genes for
413
+ OTHER class members; AMRFinder's Subclass field is the drug-specific discriminator. One-line refinement.
414
+ - `call_resistance(tsv, drug)` now auto-selects the per-drug rule; explicit threshold still overrides.
415
+ - Validation: `wiki/dna_amr_multidrug_validation_2026-06-06.md`.
416
+ - **De-confound gate** (`dna_decode/eval/cohort_deconfound.py`) — within-lineage label-contrast
417
+ precondition (3-state DE_CONFOUNDED/WARN/CONFOUNDED + promotability) for any embedding-vs-classical
418
+ falsifier. The reusable guard against study==class confounding.
419
+ - **AMR embedding falsifier** (`scripts/amr_falsifier.py`) + **QRDR-POINT knowledge baseline**
420
+ (`dna_decode/eval/point_baseline.py`) + within-lineage diagnostic.
421
+ - **dna-amr external validation** — held-out N=29 acc 0.862 / sens 0.882 / spec 0.833
422
+ (`wiki/dna_amr_external_validation_2026-06-05.md`).
423
+ - **EP-6 carbon-utilization substrate infra** — `dna_decode/data/bacdive.py` loader +
424
+ `scripts/bacdive_carbon_util_feasibility.py` census + `scripts/bacdive_li2023_to_long.py` adapter.
425
+
426
+ ### Findings (recorded, not code)
427
+ - **AMR embedding thesis FALSIFIED on the cleanest substrate.** Cipro N=147 (de-confounded): NT-XGBoost
428
+ 0.914 beats k-mer (+8.9 pp) but **LOSES to QRDR-POINT 0.943**; NT within-lineage concordance = chance
429
+ (0.605, p=0.365) → it learned lineage, not mechanism. Decision: `plans/AMR_embedding_niche_decision_2026-06-05.md`.
430
+ - **Carbon-utilization (EP-6) E. coli-INFEASIBLE.** Data acquired (Li et al. 2023 OSF jwkr7); E. coli
431
+ slice = 27 strains, 0 carbon sources clear the ≥100 floor. The embedding-niche test needs a THIRD
432
+ requirement beyond sampling-independent-label + no-catalog: **organism-specific depth at scale**.
433
+ `wiki/bacdive_carbon_util_feasibility_2026-06-06.md`.
434
+
435
+ ### Changed
436
+ - `dna-amr` CLI `--resistance-threshold` now defaults to the per-drug validated config (was hard-coded 2).
437
+ - README decoder table + `plans/Trait_Decoding_Roadmap.md` Phase 2/4 updated.
438
+
439
+ ## [0.2.0] — 2026-06-05
440
+
441
+ - In-package `dna-amr` console entry (deterministic AMR mechanism caller, cipro-validated).
442
+ - `dna-pathotype` console entry (deterministic VirulenceFinder-marker pathotype resolver + abstention +
443
+ canonical-VF diff; ExPEC recall 0.917).
444
+ - Packaging: both decoders ship in the wheel (`[project.scripts]`).
445
+
446
+ ## [pathotype-v0] / [phase-1-shipped] — 2026-05/06
447
+
448
+ - Phase-1 closeout: NT-frozen-pooling characterized (passes concentrated-signal mechanisms, fails
449
+ distributed). v0 cipro decoder + pathotype v0 resolver shipped. See git history + `wiki/`.
450
+
451
+ ## [expression-context-v0] — 2026-06-10
452
+
453
+ - `dna_decode/eval/expression_context.py` — deterministic IS-element-upstream-of-target detector (blastn ISAba1+OXA-51 vs assembly; all-hits, no truncation; same-contig + strand-aware upstream proximity; offline-safe). Reads regulatory CONTEXT, not gene presence, to cross the EXPRESSION abstain floor.
454
+ - `amr_rules.call_resistance` gains an optional `genome_fasta` + a GATED EXPRESSION_FLOOR ABSTAIN->R override (registry `expression_context.enabled`; ships **off/experimental** — opt-in only, never default-on; default decoder behavior unchanged).
455
+ - Independent-cohort validation (15R/15S disjoint from the cached 30): **HOLD — UNDERPOWERED, not a falsification**. A mechanism audit found 14/15 R carry strong acquired carbapenemases (non-target); only 1 strain is intrinsic-only-R (the signal's target subset), detector-negative. The validator was stratified by acquired-carbapenemase and now gates on `target_R_rescues>=1 AND n_target_R>=10` — the cohort cannot test the signal (intrinsic-only carbapenem-R Acinetobacter is rare; acquired OXA-23 dominates). Override remains disabled (opt-in/off). 18 new tests, 0 regressions.