pen-stack 4.0.0__tar.gz → 4.0.2__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 (275) hide show
  1. {pen_stack-4.0.0 → pen_stack-4.0.2}/CHANGELOG.md +34 -0
  2. {pen_stack-4.0.0 → pen_stack-4.0.2}/CITATION.cff +1 -1
  3. {pen_stack-4.0.0 → pen_stack-4.0.2}/PKG-INFO +2 -2
  4. {pen_stack-4.0.0 → pen_stack-4.0.2}/README.md +1 -1
  5. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/delivery_vehicles.yaml +3 -3
  6. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/gsh_validated_heldout.yaml +1 -1
  7. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/rules/delivery.yaml +1 -1
  8. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/rules/payload.yaml +1 -1
  9. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/__init__.py +1 -1
  10. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/atlas/writer_verify.py +12 -9
  11. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/bench_writetype_tasks.py +1 -1
  12. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack.egg-info/PKG-INFO +2 -2
  13. {pen_stack-4.0.0 → pen_stack-4.0.2}/pyproject.toml +1 -1
  14. {pen_stack-4.0.0 → pen_stack-4.0.2}/LICENSE +0 -0
  15. {pen_stack-4.0.0 → pen_stack-4.0.2}/MANIFEST.in +0 -0
  16. {pen_stack-4.0.0 → pen_stack-4.0.2}/bench/run.py +0 -0
  17. {pen_stack-4.0.0 → pen_stack-4.0.2}/benchmarks/genome_writing_bench/LEADERBOARD.md +0 -0
  18. {pen_stack-4.0.0 → pen_stack-4.0.2}/benchmarks/genome_writing_bench/README.md +0 -0
  19. {pen_stack-4.0.0 → pen_stack-4.0.2}/benchmarks/genome_writing_bench/SHA256SUMS +0 -0
  20. {pen_stack-4.0.0 → pen_stack-4.0.2}/benchmarks/genome_writing_bench/SUBMISSIONS.md +0 -0
  21. {pen_stack-4.0.0 → pen_stack-4.0.2}/benchmarks/genome_writing_bench/tasks.yaml +0 -0
  22. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/atlas_families.yaml +0 -0
  23. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/bridge_offtarget_profile.yaml +0 -0
  24. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/cargo_polish.yaml +0 -0
  25. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/datasets.yaml +0 -0
  26. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/delivery_constraints.yaml +0 -0
  27. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/delivery_rules.yaml +0 -0
  28. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/gates_v3.yaml +0 -0
  29. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/intent_weights.yaml +0 -0
  30. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/known_unknowns.yaml +0 -0
  31. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/llm.yaml +0 -0
  32. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/monitor_queries.yaml +0 -0
  33. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/oracles/scope_cards.yaml +0 -0
  34. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/rules/fold.yaml +0 -0
  35. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/rules/multiplex.yaml +0 -0
  36. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/rules/reachability.yaml +0 -0
  37. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/score_axes.yaml +0 -0
  38. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/target_sites.yaml +0 -0
  39. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/universe_crosswalk.yaml +0 -0
  40. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/write_types.yaml +0 -0
  41. {pen_stack-4.0.0 → pen_stack-4.0.2}/configs/wtkb_curated.yaml +0 -0
  42. {pen_stack-4.0.0 → pen_stack-4.0.2}/data/curated/bridge_offtarget_energetics.json +0 -0
  43. {pen_stack-4.0.0 → pen_stack-4.0.2}/data/curated/bridge_offtarget_profile_measured.parquet +0 -0
  44. {pen_stack-4.0.0 → pen_stack-4.0.2}/data/curated/gene_coords.parquet +0 -0
  45. {pen_stack-4.0.0 → pen_stack-4.0.2}/data/curated/unified_editor_universe.parquet +0 -0
  46. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/BACKLOG.md +0 -0
  47. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/DEPLOY.md +0 -0
  48. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/INFRA.md +0 -0
  49. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/MCP.md +0 -0
  50. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/RELEASING.md +0 -0
  51. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/REPRO.md +0 -0
  52. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/agent.md +0 -0
  53. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/alphagenome_feasibility.md +0 -0
  54. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/benchmark_circularity.md +0 -0
  55. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/cards/atlas.md +0 -0
  56. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/cards/durability.md +0 -0
  57. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/cards/safety.md +0 -0
  58. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/delivery.md +0 -0
  59. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/dissemination.md +0 -0
  60. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/environment.md +0 -0
  61. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/index.md +0 -0
  62. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/mechanistic_constraints.md +0 -0
  63. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/oracles.md +0 -0
  64. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/positioning.md +0 -0
  65. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/private_data_formats.md +0 -0
  66. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/quickstart.md +0 -0
  67. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/rules.md +0 -0
  68. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/scope.md +0 -0
  69. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/scorecard.md +0 -0
  70. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/tutorials/compare-families.md +0 -0
  71. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/tutorials/score-deliverability.md +0 -0
  72. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/tutorials/where-can-i-write.md +0 -0
  73. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/tutorials/which-writer-reaches-locus.md +0 -0
  74. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/uncertainty.md +0 -0
  75. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/verify.md +0 -0
  76. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/writer_verification.md +0 -0
  77. {pen_stack-4.0.0 → pen_stack-4.0.2}/docs/wtkb.md +0 -0
  78. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/_resources.py +0 -0
  79. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/adapt/__init__.py +0 -0
  80. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/adapt/finetune.py +0 -0
  81. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/adapt/ingest.py +0 -0
  82. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/adapt/pipeline.py +0 -0
  83. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/adapt/recalibrate.py +0 -0
  84. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/adapt/report.py +0 -0
  85. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/agent/__init__.py +0 -0
  86. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/agent/epistemic.py +0 -0
  87. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/agent/guardrails.py +0 -0
  88. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/agent/mcp_server.py +0 -0
  89. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/agent/orchestrator.py +0 -0
  90. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/agent/pen_agent.py +0 -0
  91. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/agent/scope.py +0 -0
  92. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/agent/tools.py +0 -0
  93. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/atlas/__init__.py +0 -0
  94. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/atlas/build_wtkb.py +0 -0
  95. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/atlas/crosslink.py +0 -0
  96. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/atlas/expand.py +0 -0
  97. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/atlas/schema.py +0 -0
  98. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/atlas/scorecard.py +0 -0
  99. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/atlas/universe.py +0 -0
  100. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/atlas/variant_propose.py +0 -0
  101. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/bridge/__init__.py +0 -0
  102. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/bridge/activity.py +0 -0
  103. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/bridge/cli.py +0 -0
  104. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/bridge/fold_qc.py +0 -0
  105. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/bridge/guide_qc.py +0 -0
  106. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/bridge/ingest.py +0 -0
  107. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/bridge/offtarget.py +0 -0
  108. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/bridge/offtarget_energetics.py +0 -0
  109. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/bridge/ortholog_screen.py +0 -0
  110. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/bridge/pipeline.py +0 -0
  111. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/cli.py +0 -0
  112. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/data/__init__.py +0 -0
  113. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/data/encode.py +0 -0
  114. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/data/genome.py +0 -0
  115. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/data/ingest_chromatin.py +0 -0
  116. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/data/ingest_integration.py +0 -0
  117. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/data/ingest_safety_annot.py +0 -0
  118. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/data/ingest_trip.py +0 -0
  119. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/env/__init__.py +0 -0
  120. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/env/genome_writing_env.py +0 -0
  121. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/env/policies.py +0 -0
  122. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/mech/__init__.py +0 -0
  123. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/mech/classify_atlas.py +0 -0
  124. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/mech/whitelist.py +0 -0
  125. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/monitor/__init__.py +0 -0
  126. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/monitor/europepmc.py +0 -0
  127. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/monitor/run.py +0 -0
  128. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/monitor/triage.py +0 -0
  129. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/oracles/__init__.py +0 -0
  130. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/oracles/cache.py +0 -0
  131. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/oracles/energetics.py +0 -0
  132. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/oracles/genome.py +0 -0
  133. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/oracles/protein_design.py +0 -0
  134. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/oracles/rna.py +0 -0
  135. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/oracles/schema.py +0 -0
  136. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/oracles/structure.py +0 -0
  137. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/planner/__init__.py +0 -0
  138. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/planner/cargo.py +0 -0
  139. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/planner/cargo_polish.py +0 -0
  140. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/planner/delivery.py +0 -0
  141. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/planner/delivery_constraints.py +0 -0
  142. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/planner/delivery_vehicles.py +0 -0
  143. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/planner/multiplex.py +0 -0
  144. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/planner/optimize.py +0 -0
  145. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/planner/pipeline.py +0 -0
  146. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/planner/report.py +0 -0
  147. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/planner/router.py +0 -0
  148. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/planner/target_site.py +0 -0
  149. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/rag/__init__.py +0 -0
  150. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/rag/index.py +0 -0
  151. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/rag/llm.py +0 -0
  152. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/rag/qa.py +0 -0
  153. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/rules/__init__.py +0 -0
  154. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/rules/evaluators.py +0 -0
  155. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/rules/loader.py +0 -0
  156. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/rules/schema.py +0 -0
  157. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/rules/solver.py +0 -0
  158. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/score/__init__.py +0 -0
  159. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/score/recalibrate.py +0 -0
  160. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/score/therapeutic.py +0 -0
  161. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/server/__init__.py +0 -0
  162. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/server/api.py +0 -0
  163. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/ui/__init__.py +0 -0
  164. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/ui/app.py +0 -0
  165. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/__init__.py +0 -0
  166. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/adapt_demo.py +0 -0
  167. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/agent_eval.py +0 -0
  168. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/bench_adversarial_tasks.py +0 -0
  169. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/bench_rule_tasks.py +0 -0
  170. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/bench_trust_tasks.py +0 -0
  171. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/blind_gsh_discovery.py +0 -0
  172. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/cargo_directionality.py +0 -0
  173. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/durability_baselines.py +0 -0
  174. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/forward_hypotheses.py +0 -0
  175. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/guide_qc_demo.py +0 -0
  176. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/intent_specification.py +0 -0
  177. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/offtarget_energetics_eval.py +0 -0
  178. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/out_of_scope_refusal.py +0 -0
  179. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/outcome_calibration.py +0 -0
  180. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/paper3_benchmark.py +0 -0
  181. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/paper4_real_validation.py +0 -0
  182. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/paper4_validation.py +0 -0
  183. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/selective_prediction.py +0 -0
  184. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/seq_vs_measured.py +0 -0
  185. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/target_site_controls.py +0 -0
  186. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/uncertainty_eval.py +0 -0
  187. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/ungrounded_baseline.py +0 -0
  188. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/within_locus_ranking.py +0 -0
  189. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/validate/writer_recovery.py +0 -0
  190. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/verify/__init__.py +0 -0
  191. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/verify/schema.py +0 -0
  192. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/verify/service.py +0 -0
  193. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/wgenome/__init__.py +0 -0
  194. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/wgenome/chromatin_seq.py +0 -0
  195. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/wgenome/durability.py +0 -0
  196. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/wgenome/export_tracks.py +0 -0
  197. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/wgenome/features.py +0 -0
  198. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/wgenome/gsh_baseline.py +0 -0
  199. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/wgenome/mesh_features.py +0 -0
  200. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/wgenome/ood.py +0 -0
  201. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/wgenome/providers.py +0 -0
  202. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/wgenome/safety.py +0 -0
  203. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/wgenome/structure3d.py +0 -0
  204. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/wgenome/uncertainty.py +0 -0
  205. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack/wgenome/writability.py +0 -0
  206. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack.egg-info/SOURCES.txt +0 -0
  207. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack.egg-info/dependency_links.txt +0 -0
  208. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack.egg-info/entry_points.txt +0 -0
  209. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack.egg-info/requires.txt +0 -0
  210. {pen_stack-4.0.0 → pen_stack-4.0.2}/pen_stack.egg-info/top_level.txt +0 -0
  211. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_phase0.json +0 -0
  212. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_phase1_5.json +0 -0
  213. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_phase2.json +0 -0
  214. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_phase3.json +0 -0
  215. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_a.json +0 -0
  216. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_atlas.json +0 -0
  217. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_b.json +0 -0
  218. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_ba.json +0 -0
  219. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_ba_v33.json +0 -0
  220. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_bench.json +0 -0
  221. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_c.json +0 -0
  222. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_cal.json +0 -0
  223. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_d.json +0 -0
  224. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_e.json +0 -0
  225. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_env.json +0 -0
  226. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_ep.json +0 -0
  227. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_f.json +0 -0
  228. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_g.json +0 -0
  229. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_h.json +0 -0
  230. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_mc.json +0 -0
  231. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_o.json +0 -0
  232. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_r.json +0 -0
  233. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_route.json +0 -0
  234. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_uq.json +0 -0
  235. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_v.json +0 -0
  236. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/SHA256_LOCK_ws_wv.json +0 -0
  237. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/paper1.yaml +0 -0
  238. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/paper2.yaml +0 -0
  239. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/paper3.yaml +0 -0
  240. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/paper4.yaml +0 -0
  241. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/phase0.yaml +0 -0
  242. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_a.yaml +0 -0
  243. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_atlas.yaml +0 -0
  244. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_b.yaml +0 -0
  245. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_ba.yaml +0 -0
  246. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_ba_v33.yaml +0 -0
  247. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_bench.yaml +0 -0
  248. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_c.yaml +0 -0
  249. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_cal.yaml +0 -0
  250. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_d.yaml +0 -0
  251. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_e.yaml +0 -0
  252. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_env.yaml +0 -0
  253. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_ep.yaml +0 -0
  254. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_f.yaml +0 -0
  255. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_g.yaml +0 -0
  256. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_h.yaml +0 -0
  257. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_mc.yaml +0 -0
  258. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_o.yaml +0 -0
  259. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_r.yaml +0 -0
  260. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_route.yaml +0 -0
  261. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_uq.yaml +0 -0
  262. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_v.yaml +0 -0
  263. {pen_stack-4.0.0 → pen_stack-4.0.2}/prereg/ws_wv.yaml +0 -0
  264. {pen_stack-4.0.0 → pen_stack-4.0.2}/scripts/p1_build_atlas.py +0 -0
  265. {pen_stack-4.0.0 → pen_stack-4.0.2}/scripts/p1_build_durability.py +0 -0
  266. {pen_stack-4.0.0 → pen_stack-4.0.2}/scripts/p1_export_tracks.py +0 -0
  267. {pen_stack-4.0.0 → pen_stack-4.0.2}/scripts/p1_safety_concordance.py +0 -0
  268. {pen_stack-4.0.0 → pen_stack-4.0.2}/scripts/p1_train_safety.py +0 -0
  269. {pen_stack-4.0.0 → pen_stack-4.0.2}/scripts/p1_validation_report.py +0 -0
  270. {pen_stack-4.0.0 → pen_stack-4.0.2}/scripts/p2_build_atlas.py +0 -0
  271. {pen_stack-4.0.0 → pen_stack-4.0.2}/scripts/p3_benchmark_report.py +0 -0
  272. {pen_stack-4.0.0 → pen_stack-4.0.2}/scripts/p4_genome_scan.py +0 -0
  273. {pen_stack-4.0.0 → pen_stack-4.0.2}/scripts/ws_b_report.py +0 -0
  274. {pen_stack-4.0.0 → pen_stack-4.0.2}/scripts/ws_c_report.py +0 -0
  275. {pen_stack-4.0.0 → pen_stack-4.0.2}/setup.cfg +0 -0
@@ -3,6 +3,40 @@
3
3
  All notable changes to PEN-STACK are documented here. This file follows
4
4
  [Keep a Changelog](https://keepachangelog.com/) and the program's phase structure.
5
5
 
6
+ ## [4.0.2] - 2026-06-09 - citation-correctness patch: full-repo DOI audit
7
+
8
+ ### Fixed
9
+ A full sweep of all 56 DOIs in the repo (verified via Crossref + doi.org) found six incorrect or
10
+ non-existent citations — all now corrected to verified, topically-correct references:
11
+ - `configs/gsh_validated_heldout.yaml` H11 locus: `10.1371/journal.pone.0113481` (resolved to an unrelated
12
+ cardiology paper) → **`10.1093/nar/gkt1290`** (Zhu et al. 2014, *DICE*, NAR 42:e34 — the paper that
13
+ characterized human H11 on chr22q12.2 between DRG1 and EIF4ENIF1).
14
+ - `configs/delivery_vehicles.yaml` + `configs/rules/{delivery,payload}.yaml`: `10.1089/hum.2017.084`
15
+ (non-existent), `10.1089/hum.2009.213` (non-existent), `10.1038/sj.gt.3302529` (unrelated erratum) →
16
+ **`10.1128/JVI.79.15.9933-9944.2005`** (Grieger & Samulski, AAV packaging capacity),
17
+ **`10.1128/JVI.72.2.926-933.1998`** (multiply-deleted adenovirus vectors), **`10.1038/nbt1101-1067`**
18
+ (Wade-Martins, HSV-1 amplicon large-capacity).
19
+ - `pen_stack/validate/bench_writetype_tasks.py` provenance: `10.1038/s41586-023-06756-4` (diabetes program)
20
+ and `10.1126/science.abm1123` (freshwater fish) → **`10.1016/j.cell.2022.03.045`** and
21
+ **`10.1128/JVI.79.15.9933-9944.2005`**.
22
+
23
+ The remaining 50 DOIs resolve correctly; three legacy DOIs in `mech/pfam_whitelist.yaml` (Rice 1995 Cell,
24
+ Kholodii 1997 Res Microbiol, Prudhomme 2002 J Bacteriol) carry full author/year/journal references and are
25
+ real classic papers whose pre-modern DOIs do not resolve at doi.org — left unchanged (a registration artifact,
26
+ not an error).
27
+
28
+ ## [4.0.1] - 2026-06-09 - data-correctness patch: writer-verification panel verified against Perry 2025
29
+
30
+ ### Fixed
31
+ - **WS-WV frozen panel is now verbatim from the measured Perry 2025 ISCro4 DMS.** The offline-fallback panel
32
+ in `atlas/writer_verify.py` previously used *illustrative* Z-scores (2.6/2.1/1.7) and invented control
33
+ variants (G15D/P88R/L120E), and `_CORE_RESIDUES` used illustrative arginines. Replaced with the REAL values
34
+ from `science.adz0276` Table S3: the top-3 enhancers **N322P (Z 0.754), H50K (0.742), R278M (0.709)**, real
35
+ near-neutral variants (V21R, S312Q, G286T), the most-deleterious variants (R132E −5.40, R137E −5.12,
36
+ R195D −4.98), and the documented catalytic residues **D11/E60/D102/D105/S241** ("Residue Groups" sheet). The
37
+ real-DMS path (on the VM/Drive) was already correct; only the offline fallback constants were illustrative.
38
+ Added `test_ws_wv.py::test_frozen_panel_matches_real_perry_dms_table_s3` to guard against drift.
39
+
6
40
  ## [4.0.0] - 2026-06-09 - v4.0 release: the Oracle Mesh (on top of the foundation models) + writer verification
7
41
 
8
42
  A major bump: the substrate now *composes* the biomolecular foundation models under one contract and verifies
@@ -1,7 +1,7 @@
1
1
  cff-version: 1.2.0
2
2
  message: "If you use PEN-STACK, please cite it as below."
3
3
  title: "PEN-STACK: open infrastructure for genome writing"
4
- version: 4.0.0
4
+ version: 4.0.2
5
5
  date-released: 2026-06-01
6
6
  authors:
7
7
  - family-names: "Mahaboob Ali"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pen-stack
3
- Version: 4.0.0
3
+ Version: 4.0.2
4
4
  Summary: Open infrastructure for genome writing: the Writable Genome atlas, the Writer Atlas, and the Write Planner.
5
5
  Author-email: Anees Ahmed Mahaboob Ali <ahmedaneesm@gmail.com>
6
6
  License: MIT
@@ -89,7 +89,7 @@ and durably write new DNA, **which enzyme** can write it there, and **how** to d
89
89
  [![codecov](https://codecov.io/gh/ahmedanees-m/pen-stack/branch/main/graph/badge.svg)](https://codecov.io/gh/ahmedanees-m/pen-stack)
90
90
  [![License: MIT](https://img.shields.io/badge/License-MIT-informational.svg)](LICENSE)
91
91
  [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/)
92
- [![Version](https://img.shields.io/badge/version-4.0.0-blue.svg)](CHANGELOG.md)
92
+ [![Version](https://img.shields.io/badge/version-4.0.2-blue.svg)](CHANGELOG.md)
93
93
  [![Tests](https://img.shields.io/badge/tests-208%20passing-success.svg)](tests/)
94
94
  [![Lint: ruff](https://img.shields.io/badge/lint-ruff-purple.svg)](https://github.com/astral-sh/ruff)
95
95
  [![Runtime: Docker](https://img.shields.io/badge/runtime-docker-2496ED.svg)](docker/)
@@ -14,7 +14,7 @@ and durably write new DNA, **which enzyme** can write it there, and **how** to d
14
14
  [![codecov](https://codecov.io/gh/ahmedanees-m/pen-stack/branch/main/graph/badge.svg)](https://codecov.io/gh/ahmedanees-m/pen-stack)
15
15
  [![License: MIT](https://img.shields.io/badge/License-MIT-informational.svg)](LICENSE)
16
16
  [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/)
17
- [![Version](https://img.shields.io/badge/version-4.0.0-blue.svg)](CHANGELOG.md)
17
+ [![Version](https://img.shields.io/badge/version-4.0.2-blue.svg)](CHANGELOG.md)
18
18
  [![Tests](https://img.shields.io/badge/tests-208%20passing-success.svg)](tests/)
19
19
  [![Lint: ruff](https://img.shields.io/badge/lint-ruff-purple.svg)](https://github.com/astral-sh/ruff)
20
20
  [![Runtime: Docker](https://img.shields.io/badge/runtime-docker-2496ED.svg)](docker/)
@@ -29,7 +29,7 @@ vehicles:
29
29
  in_vivo: true
30
30
  compatible_cargo_form: [DNA]
31
31
  constraint_key: AAV
32
- dois: ["10.1089/hum.2017.084"]
32
+ dois: ["10.1128/JVI.79.15.9933-9944.2005"] # Grieger & Samulski 2005, AAV packaging capacity
33
33
 
34
34
  lentivirus:
35
35
  cargo_capacity_bp: 8000
@@ -53,7 +53,7 @@ vehicles:
53
53
  in_vivo: true
54
54
  compatible_cargo_form: [DNA]
55
55
  constraint_key: plasmid
56
- dois: ["10.1089/hum.2009.213"]
56
+ dois: ["10.1128/JVI.72.2.926-933.1998"] # multiply-deleted (gutless-class) adenovirus vectors
57
57
 
58
58
  hsv_amplicon:
59
59
  cargo_capacity_bp: 100000 # >100 kb
@@ -65,7 +65,7 @@ vehicles:
65
65
  in_vivo: true
66
66
  compatible_cargo_form: [DNA]
67
67
  constraint_key: plasmid
68
- dois: ["10.1038/sj.gt.3302529"]
68
+ dois: ["10.1038/nbt1101-1067"] # Wade-Martins 2001, HSV-1 amplicon (iBAC) large genomic-DNA transfer
69
69
 
70
70
  lnp_mrna:
71
71
  cargo_capacity_bp: 15000 # large RNA payload (mRNA encoding the writer/RNP)
@@ -20,7 +20,7 @@ gsh:
20
20
  - {name: CLYBL, tier: validated, anchor_gene: CLYBL, doi: "10.1371/journal.pone.0116032"} # Cerbini 2015
21
21
  - {name: CCR5, tier: validated, anchor_gene: CCR5, doi: "10.1038/nbt1353"} # Lombardo 2007
22
22
  - {name: hRosa26, tier: validated, anchor_gene: THUMPD3, doi: "10.1038/nbt1362"} # Irion 2007
23
- - {name: H11, tier: validated, anchor_gene: EIF4ENIF1, doi: "10.1371/journal.pone.0113481"} # H11/HIPP11
23
+ - {name: H11, tier: validated, anchor_gene: EIF4ENIF1, doi: "10.1093/nar/gkt1290"} # H11/HIPP11 (Zhu 2014, DICE; hH11 on chr22q12.2 between DRG1 and EIF4ENIF1)
24
24
  # --- tier 1 (cont.): functionally validated in Lin et al. 2024 (eLife 79592), precise hg38 spans ---
25
25
  - {name: Pansio-1, tier: validated, anchor_coord: {chrom: chr1, start: 113339961, end: 113340514}, anchor_gene_note: HIPK1, doi: "10.7554/eLife.79592"}
26
26
  - {name: Olonne-18, tier: validated, anchor_coord: {chrom: chr18, start: 56534775, end: 56536439}, anchor_gene_note: TXNL1, doi: "10.7554/eLife.79592"}
@@ -26,7 +26,7 @@ rules:
26
26
  mechanism: "vehicle-specific construct hazards (lentiviral internal poly(A), AAV inverted-repeat/homopolymer, recombinogenic direct repeats, GC extremes) lower titre/yield"
27
27
  evaluator: delivery_sequence_constraints
28
28
  param: {}
29
- provenance: { doi: ["10.1089/hum.2017.084"], note: "v3.2 MC2 delivery_constraints scan" }
29
+ provenance: { doi: ["10.1128/JVI.79.15.9933-9944.2005"], note: "AAV genome/sequence constraints; v3.2 MC2 delivery_constraints scan (labelled heuristic, per-check sources in configs/delivery_constraints.yaml)" }
30
30
  test_ref: "tests/unit/test_ws_r.py::test_delivery_controls"
31
31
  scope: "labeled heuristic, directional; not a titre predictor"
32
32
  - id: delivery.aav_packaging_margin
@@ -17,6 +17,6 @@ rules:
17
17
  mechanism: "an AAV cargo above a single capsid (~4.7 kb) requires split/dual AAV, which drops efficiency sharply"
18
18
  evaluator: split_aav_penalty
19
19
  param: { single_aav_cap_bp: 4700 }
20
- provenance: { doi: ["10.1089/hum.2017.084"], note: "dual-AAV split efficiency" }
20
+ provenance: { doi: ["10.1128/JVI.79.15.9933-9944.2005"], note: "AAV packaging capacity (~4.7 kb); oversize cargo needs split/dual AAV" }
21
21
  test_ref: "tests/unit/test_ws_r.py::test_payload_controls"
22
22
  scope: "directional efficiency flag, not a titre prediction"
@@ -1,2 +1,2 @@
1
1
  """PEN-STACK v3.0 - open infrastructure for genome writing."""
2
- __version__ = "4.0.0"
2
+ __version__ = "4.0.2"
@@ -21,16 +21,20 @@ from __future__ import annotations
21
21
  import math
22
22
  from dataclasses import dataclass
23
23
 
24
- # Known ISCro4 enhancers (Perry 2025 DMS) + documented-neutral/worse controls a FROZEN retrospective panel
25
- # (relative activity Z-score wrt WT; positive = enhancing). Used only when the full Perry DMS is absent.
24
+ # A FROZEN retrospective panel of REAL values from the Perry 2025 ISCro4 deep mutational scan
25
+ # (science.adz0276 Table S3, sheet "L2FC_Relative_Z-Scores", column Z_Score_wrt_WT) the three top-ranked
26
+ # enhancers, three near-neutral variants, and the three most-deleterious variants, copied verbatim from the
27
+ # measured table. Used only when the full Perry DMS is absent (offline/CI); never fabricated.
26
28
  _FROZEN_DMS_Z = {
27
- "N322P": 2.6, "H50K": 2.1, "R278M": 1.7, # published enhancers
28
- "K12A": 0.1, "S40T": -0.2, "V90I": 0.0, # ~neutral
29
- "G15D": -2.4, "P88R": -1.9, "L120E": -1.5, # deleterious / worse
29
+ "N322P": 0.754, "H50K": 0.742, "R278M": 0.709, # top-3 enhancers (measured Z, ranks 1-3)
30
+ "V21R": -0.000, "S312Q": -0.001, "G286T": -0.001, # near-neutral (|Z| ~ 0)
31
+ "R132E": -5.400, "R137E": -5.115, "R195D": -4.984, # most-deleterious (measured worst by Z)
30
32
  }
31
33
  KNOWN_ISCRO4_ENHANCERS = ["N322P", "H50K", "R278M"]
32
- # minimal conserved core residues a plausible ISCro4-family candidate should retain (active-site heuristic)
33
- _CORE_RESIDUES = {49: "R", 277: "R"} # 0-based; illustrative conserved arginines
34
+ _WORSE_CONTROLS = ["R132E", "R137E", "R195D"] # measured-worst variants (Perry Table S3)
35
+ # the catalytic residues a plausible ISCro4-family candidate must retain (Perry Table S3, sheet
36
+ # "Residue Groups", Catalytic_Residues == "Catalytic"): D11, E60, D102, D105, S241 (1-based) -> 0-based below
37
+ _CORE_RESIDUES = {10: "D", 59: "E", 101: "D", 104: "D", 240: "S"}
34
38
 
35
39
 
36
40
  def _sigmoid(x: float) -> float:
@@ -91,9 +95,8 @@ def blind_recovery(top_k: int = 5) -> dict:
91
95
  ranked = sorted(scores, key=scores.get, reverse=True)
92
96
  top = ranked[:top_k]
93
97
  recovered = {e: (e in top) for e in KNOWN_ISCRO4_ENHANCERS}
94
- worse = ["G15D", "P88R", "L120E"]
95
98
  enh_min = min(scores[e] for e in KNOWN_ISCRO4_ENHANCERS)
96
- worse_max = max(scores[w] for w in worse)
99
+ worse_max = max(scores[w] for w in _WORSE_CONTROLS)
97
100
  return {"available": True, "model": "frozen_retrospective_panel", "n": len(_FROZEN_DMS_Z), "top_k": top_k,
98
101
  "top": top, "recovered": recovered, "all_enhancers_recovered": all(recovered.values()),
99
102
  "enhancers_outrank_worse": bool(enh_min > worse_max),
@@ -53,7 +53,7 @@ PANEL = [
53
53
 
54
54
  # documented mechanisms behind the legality labels (provenance, not circular)
55
55
  PROVENANCE = {
56
- "doi": ["10.1038/s41586-023-06756-4", "10.1126/science.abm1123", "10.1038/s41587-020-0561-9"],
56
+ "doi": ["10.1016/j.cell.2022.03.045", "10.1128/JVI.79.15.9933-9944.2005", "10.1038/s41587-020-0561-9"],
57
57
  "note": "RNP/DNA cargo-form compatibility (delivery) + AAV ~4.7 kb packaging limit (payload) are the "
58
58
  "documented physical facts; routing per write type follows the v3.3 write-type taxonomy.",
59
59
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pen-stack
3
- Version: 4.0.0
3
+ Version: 4.0.2
4
4
  Summary: Open infrastructure for genome writing: the Writable Genome atlas, the Writer Atlas, and the Write Planner.
5
5
  Author-email: Anees Ahmed Mahaboob Ali <ahmedaneesm@gmail.com>
6
6
  License: MIT
@@ -89,7 +89,7 @@ and durably write new DNA, **which enzyme** can write it there, and **how** to d
89
89
  [![codecov](https://codecov.io/gh/ahmedanees-m/pen-stack/branch/main/graph/badge.svg)](https://codecov.io/gh/ahmedanees-m/pen-stack)
90
90
  [![License: MIT](https://img.shields.io/badge/License-MIT-informational.svg)](LICENSE)
91
91
  [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/)
92
- [![Version](https://img.shields.io/badge/version-4.0.0-blue.svg)](CHANGELOG.md)
92
+ [![Version](https://img.shields.io/badge/version-4.0.2-blue.svg)](CHANGELOG.md)
93
93
  [![Tests](https://img.shields.io/badge/tests-208%20passing-success.svg)](tests/)
94
94
  [![Lint: ruff](https://img.shields.io/badge/lint-ruff-purple.svg)](https://github.com/astral-sh/ruff)
95
95
  [![Runtime: Docker](https://img.shields.io/badge/runtime-docker-2496ED.svg)](docker/)
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pen-stack"
7
- version = "4.0.0"
7
+ version = "4.0.2"
8
8
  description = "Open infrastructure for genome writing: the Writable Genome atlas, the Writer Atlas, and the Write Planner."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes