pen-stack 7.2.1__tar.gz → 7.2.3__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 (582) hide show
  1. {pen_stack-7.2.1 → pen_stack-7.2.3}/CHANGELOG.md +36 -4
  2. {pen_stack-7.2.1 → pen_stack-7.2.3}/CITATION.cff +1 -1
  3. {pen_stack-7.2.1 → pen_stack-7.2.3}/PKG-INFO +1 -1
  4. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/offtarget/integrase/SHA256SUMS +1 -1
  5. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/cards/offtarget_data.md +2 -2
  6. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/positioning.md +3 -3
  7. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/__init__.py +1 -1
  8. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/server/api.py +2 -2
  9. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/offtarget_enumerate.py +3 -3
  10. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/offtarget_integrase.py +30 -12
  11. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/offtarget_nuclease.py +1 -1
  12. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/offtarget_predict.py +2 -2
  13. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack.egg-info/PKG-INFO +1 -1
  14. pen_stack-7.2.3/prereg/SHA256_LOCK_ws_offtarget2.json +9 -0
  15. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/paper4.yaml +1 -1
  16. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_offtarget2.yaml +5 -5
  17. {pen_stack-7.2.1 → pen_stack-7.2.3}/pyproject.toml +1 -1
  18. pen_stack-7.2.1/prereg/SHA256_LOCK_ws_offtarget2.json +0 -9
  19. {pen_stack-7.2.1 → pen_stack-7.2.3}/LICENSE +0 -0
  20. {pen_stack-7.2.1 → pen_stack-7.2.3}/MANIFEST.in +0 -0
  21. {pen_stack-7.2.1 → pen_stack-7.2.3}/README.md +0 -0
  22. {pen_stack-7.2.1 → pen_stack-7.2.3}/bench/run.py +0 -0
  23. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/chat_grounding/README.md +0 -0
  24. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/chat_grounding/SHA256SUMS +0 -0
  25. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/chat_headtohead/README.md +0 -0
  26. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/chat_routing/README.md +0 -0
  27. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/chat_routing/SHA256SUMS +0 -0
  28. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/chat_safety/README.md +0 -0
  29. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/chat_safety/SHA256SUMS +0 -0
  30. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/delivery/SHA256SUMS +0 -0
  31. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/genome_writing_bench/LEADERBOARD.md +0 -0
  32. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/genome_writing_bench/README.md +0 -0
  33. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/genome_writing_bench/SHA256SUMS +0 -0
  34. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/genome_writing_bench/SUBMISSIONS.md +0 -0
  35. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/genome_writing_bench/tasks.yaml +0 -0
  36. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/genome_writing_challenge/README.md +0 -0
  37. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/genome_writing_challenge/SUBMISSIONS.md +0 -0
  38. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/loop/SHA256SUMS +0 -0
  39. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/offtarget/SHA256SUMS +0 -0
  40. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/offtarget/integrase/README.md +0 -0
  41. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/oracle/SHA256SUMS +0 -0
  42. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/position_effect/README.md +0 -0
  43. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/position_effect/SHA256SUMS +0 -0
  44. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/verify/SHA256SUMS +0 -0
  45. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/writer_efficiency/README.md +0 -0
  46. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/writer_efficiency/SHA256SUMS +0 -0
  47. {pen_stack-7.2.1 → pen_stack-7.2.3}/benchmarks/writespec/SHA256SUMS +0 -0
  48. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/aav_serotype_tropism.yaml +0 -0
  49. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/antipeg.yaml +0 -0
  50. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/atlas_families.yaml +0 -0
  51. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/bridge_offtarget_profile.yaml +0 -0
  52. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/calibration/preexisting_nab_independent.yaml +0 -0
  53. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/capsid_epitope_oracle.yaml +0 -0
  54. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/capsid_sequences.fasta +0 -0
  55. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/cargo_polish.yaml +0 -0
  56. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/cell_types.yaml +0 -0
  57. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/datasets.yaml +0 -0
  58. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/delivery_constraints.yaml +0 -0
  59. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/delivery_rules.yaml +0 -0
  60. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/delivery_vehicles.yaml +0 -0
  61. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/expression/modifiers.yaml +0 -0
  62. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/expression/promoters.yaml +0 -0
  63. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/gates_v3.yaml +0 -0
  64. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/genotoxicity_oracle.yaml +0 -0
  65. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/gsh_validated_heldout.yaml +0 -0
  66. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/intent_weights.yaml +0 -0
  67. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/known_unknowns.yaml +0 -0
  68. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/llm.yaml +0 -0
  69. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/metric_guide.yaml +0 -0
  70. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/mhc_epitope_oracle.yaml +0 -0
  71. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/monitor_queries.yaml +0 -0
  72. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/oracles/execution.yaml +0 -0
  73. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/oracles/reliability.yaml +0 -0
  74. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/oracles/scope_cards.yaml +0 -0
  75. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/rules/compliance.yaml +0 -0
  76. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/rules/delivery.yaml +0 -0
  77. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/rules/fold.yaml +0 -0
  78. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/rules/multiplex.yaml +0 -0
  79. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/rules/payload.yaml +0 -0
  80. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/rules/reachability.yaml +0 -0
  81. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/safety/hazard_registry.yaml +0 -0
  82. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/safety/policy.yaml +0 -0
  83. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/safety/probes.yaml +0 -0
  84. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/score_axes.yaml +0 -0
  85. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/seroprevalence.yaml +0 -0
  86. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/target_sites.yaml +0 -0
  87. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/universe_crosswalk.yaml +0 -0
  88. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/write_types.yaml +0 -0
  89. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/writer_sequences.fasta +0 -0
  90. {pen_stack-7.2.1 → pen_stack-7.2.3}/configs/wtkb_curated.yaml +0 -0
  91. {pen_stack-7.2.1 → pen_stack-7.2.3}/data/curated/bridge_offtarget_energetics.json +0 -0
  92. {pen_stack-7.2.1 → pen_stack-7.2.3}/data/curated/bridge_offtarget_profile_measured.parquet +0 -0
  93. {pen_stack-7.2.1 → pen_stack-7.2.3}/data/curated/cast_systems.yaml +0 -0
  94. {pen_stack-7.2.1 → pen_stack-7.2.3}/data/curated/gene_coords.parquet +0 -0
  95. {pen_stack-7.2.1 → pen_stack-7.2.3}/data/curated/integrase_att.yaml +0 -0
  96. {pen_stack-7.2.1 → pen_stack-7.2.3}/data/curated/unified_editor_universe.parquet +0 -0
  97. {pen_stack-7.2.1 → pen_stack-7.2.3}/data/offtarget/enumerated_cache.parquet +0 -0
  98. {pen_stack-7.2.1 → pen_stack-7.2.3}/data/offtarget/motif_cache.parquet +0 -0
  99. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/BACKLOG.md +0 -0
  100. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/DEPLOY.md +0 -0
  101. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/INFRA.md +0 -0
  102. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/MCP.md +0 -0
  103. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/RELEASING.md +0 -0
  104. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/REPRO.md +0 -0
  105. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/STABILITY.md +0 -0
  106. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/agent.md +0 -0
  107. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/alphagenome_feasibility.md +0 -0
  108. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/autonomy.md +0 -0
  109. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/benchmark_circularity.md +0 -0
  110. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/biosecurity.md +0 -0
  111. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/build_interface.md +0 -0
  112. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/cards/atlas.md +0 -0
  113. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/cards/durability.md +0 -0
  114. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/cards/position_effect_data.md +0 -0
  115. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/cards/safety.md +0 -0
  116. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/cards/writer_efficiency_data.md +0 -0
  117. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/challenge.md +0 -0
  118. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/closed_loop.md +0 -0
  119. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/co_scientist.md +0 -0
  120. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/co_scientist_loop.md +0 -0
  121. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/delivery.md +0 -0
  122. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/delivery_immunology.md +0 -0
  123. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/delivery_recommender.md +0 -0
  124. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/digital_twin.md +0 -0
  125. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/dissemination.md +0 -0
  126. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/environment.md +0 -0
  127. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/experiment_design.md +0 -0
  128. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/generative_design.md +0 -0
  129. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/immune_profiler.md +0 -0
  130. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/index.md +0 -0
  131. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/integrations.md +0 -0
  132. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/live_oracles.md +0 -0
  133. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/mechanistic_constraints.md +0 -0
  134. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/offtarget.md +0 -0
  135. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/oracle_mesh.md +0 -0
  136. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/oracles.md +0 -0
  137. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/position_effect.md +0 -0
  138. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/private_data_formats.md +0 -0
  139. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/quickstart.md +0 -0
  140. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/responsible_use.md +0 -0
  141. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/rule_spec.md +0 -0
  142. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/rules.md +0 -0
  143. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/scope.md +0 -0
  144. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/scorecard.md +0 -0
  145. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/tpe_bench.md +0 -0
  146. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/tutorials/compare-families.md +0 -0
  147. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/tutorials/score-deliverability.md +0 -0
  148. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/tutorials/where-can-i-write.md +0 -0
  149. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/tutorials/which-writer-reaches-locus.md +0 -0
  150. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/uncertainty.md +0 -0
  151. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/verify.md +0 -0
  152. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/verify_service.md +0 -0
  153. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/world_model.md +0 -0
  154. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/writer_efficiency.md +0 -0
  155. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/writer_verification.md +0 -0
  156. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/writespec_bench.md +0 -0
  157. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/writespec_profile.md +0 -0
  158. {pen_stack-7.2.1 → pen_stack-7.2.3}/docs/wtkb.md +0 -0
  159. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/_resources.py +0 -0
  160. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/active/__init__.py +0 -0
  161. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/active/acquire.py +0 -0
  162. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/active/brains.py +0 -0
  163. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/active/campaign.py +0 -0
  164. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/active/design.py +0 -0
  165. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/active/validate.py +0 -0
  166. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/adapt/__init__.py +0 -0
  167. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/adapt/finetune.py +0 -0
  168. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/adapt/ingest.py +0 -0
  169. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/adapt/pipeline.py +0 -0
  170. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/adapt/recalibrate.py +0 -0
  171. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/adapt/report.py +0 -0
  172. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/agent/__init__.py +0 -0
  173. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/agent/cite.py +0 -0
  174. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/agent/co_scientist.py +0 -0
  175. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/agent/epistemic.py +0 -0
  176. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/agent/guardrails.py +0 -0
  177. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/agent/mcp_server.py +0 -0
  178. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/agent/orchestrator.py +0 -0
  179. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/agent/orchestrator_live.py +0 -0
  180. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/agent/pen_agent.py +0 -0
  181. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/agent/scope.py +0 -0
  182. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/agent/tools.py +0 -0
  183. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/api/__init__.py +0 -0
  184. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/api/manifest.py +0 -0
  185. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/atlas/__init__.py +0 -0
  186. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/atlas/build_wtkb.py +0 -0
  187. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/atlas/crosslink.py +0 -0
  188. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/atlas/expand.py +0 -0
  189. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/atlas/guide_design.py +0 -0
  190. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/atlas/schema.py +0 -0
  191. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/atlas/scorecard.py +0 -0
  192. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/atlas/universe.py +0 -0
  193. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/atlas/variant_propose.py +0 -0
  194. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/atlas/writer_efficiency.py +0 -0
  195. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/atlas/writer_predict.py +0 -0
  196. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/atlas/writer_recommend.py +0 -0
  197. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/atlas/writer_verify.py +0 -0
  198. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/bridge/__init__.py +0 -0
  199. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/bridge/activity.py +0 -0
  200. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/bridge/cli.py +0 -0
  201. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/bridge/fold_qc.py +0 -0
  202. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/bridge/guide_qc.py +0 -0
  203. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/bridge/ingest.py +0 -0
  204. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/bridge/offtarget.py +0 -0
  205. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/bridge/offtarget_energetics.py +0 -0
  206. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/bridge/ortholog_screen.py +0 -0
  207. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/bridge/pipeline.py +0 -0
  208. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/build/__init__.py +0 -0
  209. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/build/cloudlab.py +0 -0
  210. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/build/ingest.py +0 -0
  211. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/build/protocol.py +0 -0
  212. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/build/simlab.py +0 -0
  213. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/cli.py +0 -0
  214. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/data/__init__.py +0 -0
  215. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/data/encode.py +0 -0
  216. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/data/genome.py +0 -0
  217. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/data/ingest_chromatin.py +0 -0
  218. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/data/ingest_integration.py +0 -0
  219. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/data/ingest_safety_annot.py +0 -0
  220. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/data/ingest_trip.py +0 -0
  221. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/design/__init__.py +0 -0
  222. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/design/capsid_generate.py +0 -0
  223. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/design/generate.py +0 -0
  224. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/design/pareto.py +0 -0
  225. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/design/space.py +0 -0
  226. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/design/writer_variants.py +0 -0
  227. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/env/__init__.py +0 -0
  228. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/env/genome_writing_env.py +0 -0
  229. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/env/policies.py +0 -0
  230. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/graph/__init__.py +0 -0
  231. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/graph/build.py +0 -0
  232. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/graph/cell_types.py +0 -0
  233. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/graph/ingest.py +0 -0
  234. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/graph/query.py +0 -0
  235. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/graph/schema.py +0 -0
  236. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/loop/__init__.py +0 -0
  237. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/loop/continual.py +0 -0
  238. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/loop/cycle.py +0 -0
  239. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/loop/drift.py +0 -0
  240. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/mech/__init__.py +0 -0
  241. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/mech/classify_atlas.py +0 -0
  242. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/mech/whitelist.py +0 -0
  243. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/monitor/__init__.py +0 -0
  244. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/monitor/europepmc.py +0 -0
  245. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/monitor/run.py +0 -0
  246. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/monitor/triage.py +0 -0
  247. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/oracles/__init__.py +0 -0
  248. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/oracles/affinity.py +0 -0
  249. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/oracles/cache.py +0 -0
  250. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/oracles/energetics.py +0 -0
  251. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/oracles/genome.py +0 -0
  252. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/oracles/protein_design.py +0 -0
  253. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/oracles/reliability.py +0 -0
  254. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/oracles/rna.py +0 -0
  255. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/oracles/schema.py +0 -0
  256. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/oracles/status.py +0 -0
  257. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/oracles/structure.py +0 -0
  258. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/oracles/structure_run.py +0 -0
  259. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/oracles/vcell.py +0 -0
  260. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/__init__.py +0 -0
  261. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/ada_risk.py +0 -0
  262. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/antipeg_oracle.py +0 -0
  263. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/capsid_epitope_oracle.py +0 -0
  264. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/cargo.py +0 -0
  265. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/cargo_polish.py +0 -0
  266. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/chromosome.py +0 -0
  267. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/delivery.py +0 -0
  268. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/delivery_constraints.py +0 -0
  269. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/delivery_immune.py +0 -0
  270. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/delivery_immunology.py +0 -0
  271. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/delivery_predict.py +0 -0
  272. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/delivery_vehicles.py +0 -0
  273. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/genotoxicity_oracle.py +0 -0
  274. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/immune_mhc2.py +0 -0
  275. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/immune_profile.py +0 -0
  276. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/innate_sensing.py +0 -0
  277. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/multiplex.py +0 -0
  278. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/optimize.py +0 -0
  279. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/pipeline.py +0 -0
  280. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/report.py +0 -0
  281. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/router.py +0 -0
  282. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/seroprevalence_oracle.py +0 -0
  283. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/planner/target_site.py +0 -0
  284. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/rag/__init__.py +0 -0
  285. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/rag/corpus.py +0 -0
  286. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/rag/embed.py +0 -0
  287. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/rag/ground.py +0 -0
  288. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/rag/index.py +0 -0
  289. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/rag/llm.py +0 -0
  290. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/rag/qa.py +0 -0
  291. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/rag/retrieve.py +0 -0
  292. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/rules/__init__.py +0 -0
  293. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/rules/evaluators.py +0 -0
  294. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/rules/loader.py +0 -0
  295. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/rules/schema.py +0 -0
  296. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/rules/solver.py +0 -0
  297. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/rules/spec.py +0 -0
  298. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/safety/__init__.py +0 -0
  299. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/safety/audit.py +0 -0
  300. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/safety/gate.py +0 -0
  301. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/safety/policy.py +0 -0
  302. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/safety/redteam.py +0 -0
  303. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/safety/registry.py +0 -0
  304. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/safety/screen.py +0 -0
  305. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/safety/standards.py +0 -0
  306. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/score/__init__.py +0 -0
  307. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/score/recalibrate.py +0 -0
  308. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/score/therapeutic.py +0 -0
  309. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/server/__init__.py +0 -0
  310. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/spec/__init__.py +0 -0
  311. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/spec/clarify.py +0 -0
  312. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/spec/extract.py +0 -0
  313. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/spec/resolvers/__init__.py +0 -0
  314. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/spec/resolvers/cell.py +0 -0
  315. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/spec/resolvers/chem.py +0 -0
  316. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/spec/resolvers/feature.py +0 -0
  317. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/spec/resolvers/gene.py +0 -0
  318. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/spec/resolvers/locus.py +0 -0
  319. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/spec/resolvers/phenotype.py +0 -0
  320. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/spec/satisfy.py +0 -0
  321. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/spec/service.py +0 -0
  322. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/spec/writespec.py +0 -0
  323. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/twin/__init__.py +0 -0
  324. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/twin/calibrate.py +0 -0
  325. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/twin/data/__init__.py +0 -0
  326. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/twin/data/position_effect.py +0 -0
  327. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/twin/mechanistic.py +0 -0
  328. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/twin/outcome.py +0 -0
  329. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/twin/position_effect.py +0 -0
  330. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/ui/__init__.py +0 -0
  331. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/ui/app.py +0 -0
  332. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/__init__.py +0 -0
  333. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/adapt_demo.py +0 -0
  334. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/agent_eval.py +0 -0
  335. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/bench_adversarial_tasks.py +0 -0
  336. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/bench_coscientist_tasks.py +0 -0
  337. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/bench_graph_tasks.py +0 -0
  338. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/bench_rule_tasks.py +0 -0
  339. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/bench_trust_tasks.py +0 -0
  340. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/bench_writetype_tasks.py +0 -0
  341. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/blind_gsh_discovery.py +0 -0
  342. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/cargo_directionality.py +0 -0
  343. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/closed_loop.py +0 -0
  344. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/durability_baselines.py +0 -0
  345. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/experiment_design.py +0 -0
  346. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/expr_controls.py +0 -0
  347. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/forward_hypotheses.py +0 -0
  348. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/generative_design.py +0 -0
  349. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/guide_qc_demo.py +0 -0
  350. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/heldout_celltype_expr.py +0 -0
  351. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/immune_calibration.py +0 -0
  352. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/intent_specification.py +0 -0
  353. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/known_biology_expr.py +0 -0
  354. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/offtarget_energetics_eval.py +0 -0
  355. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/out_of_scope_refusal.py +0 -0
  356. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/outcome_calibration.py +0 -0
  357. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/outcome_prediction.py +0 -0
  358. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/paper3_benchmark.py +0 -0
  359. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/paper4_real_validation.py +0 -0
  360. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/paper4_validation.py +0 -0
  361. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/protocol_safety.py +0 -0
  362. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/safety_screening.py +0 -0
  363. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/selective_prediction.py +0 -0
  364. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/seq_vs_measured.py +0 -0
  365. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/target_site_controls.py +0 -0
  366. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/uncertainty_eval.py +0 -0
  367. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/ungrounded_baseline.py +0 -0
  368. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/within_locus_ranking.py +0 -0
  369. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/validate/writer_recovery.py +0 -0
  370. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/verify/__init__.py +0 -0
  371. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/verify/proof.py +0 -0
  372. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/verify/schema.py +0 -0
  373. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/verify/service.py +0 -0
  374. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/web/__init__.py +0 -0
  375. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/web/guide.py +0 -0
  376. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/web/llm.py +0 -0
  377. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/web/llm_provider.py +0 -0
  378. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/web/router.py +0 -0
  379. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/web/server.py +0 -0
  380. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/web/tools.py +0 -0
  381. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/__init__.py +0 -0
  382. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/chromatin_seq.py +0 -0
  383. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/durability.py +0 -0
  384. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/export_tracks.py +0 -0
  385. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/features.py +0 -0
  386. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/gsh_baseline.py +0 -0
  387. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/mesh_features.py +0 -0
  388. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/offtarget_assay.py +0 -0
  389. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/offtarget_bridge.py +0 -0
  390. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/offtarget_cast.py +0 -0
  391. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/offtarget_data.py +0 -0
  392. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/offtarget_paste.py +0 -0
  393. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/ood.py +0 -0
  394. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/providers.py +0 -0
  395. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/safety.py +0 -0
  396. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/structure3d.py +0 -0
  397. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/uncertainty.py +0 -0
  398. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack/wgenome/writability.py +0 -0
  399. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack.egg-info/SOURCES.txt +0 -0
  400. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack.egg-info/dependency_links.txt +0 -0
  401. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack.egg-info/entry_points.txt +0 -0
  402. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack.egg-info/requires.txt +0 -0
  403. {pen_stack-7.2.1 → pen_stack-7.2.3}/pen_stack.egg-info/top_level.txt +0 -0
  404. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_phase0.json +0 -0
  405. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_phase1_5.json +0 -0
  406. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_phase2.json +0 -0
  407. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_phase3.json +0 -0
  408. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_a.json +0 -0
  409. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_acq.json +0 -0
  410. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_aldesign.json +0 -0
  411. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_alvalidate.json +0 -0
  412. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_atlas.json +0 -0
  413. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_b.json +0 -0
  414. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_ba.json +0 -0
  415. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_ba_v33.json +0 -0
  416. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_ba_v45.json +0 -0
  417. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_bench.json +0 -0
  418. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_c.json +0 -0
  419. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_cal.json +0 -0
  420. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_calib.json +0 -0
  421. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_challenge.json +0 -0
  422. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_chat.json +0 -0
  423. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_cite.json +0 -0
  424. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_closedloop.json +0 -0
  425. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_continual.json +0 -0
  426. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_cosci2.json +0 -0
  427. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_crit.json +0 -0
  428. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_ct.json +0 -0
  429. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_d.json +0 -0
  430. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_delivery.json +0 -0
  431. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_drift.json +0 -0
  432. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_e.json +0 -0
  433. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_env.json +0 -0
  434. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_ep.json +0 -0
  435. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_epitope.json +0 -0
  436. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_expr2.json +0 -0
  437. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_f.json +0 -0
  438. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_frontend.json +0 -0
  439. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_g.json +0 -0
  440. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_gen.json +0 -0
  441. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_genotox.json +0 -0
  442. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_graph.json +0 -0
  443. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_h.json +0 -0
  444. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_hybrid.json +0 -0
  445. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_immune.json +0 -0
  446. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_immune2.json +0 -0
  447. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_ingest.json +0 -0
  448. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_innate.json +0 -0
  449. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_loop.json +0 -0
  450. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_manifest.json +0 -0
  451. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_mc.json +0 -0
  452. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_mcp.json +0 -0
  453. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_mech.json +0 -0
  454. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_mon.json +0 -0
  455. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_o.json +0 -0
  456. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_offtarget.json +0 -0
  457. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_openapi.json +0 -0
  458. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_oracle.json +0 -0
  459. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_orch.json +0 -0
  460. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_outcome.json +0 -0
  461. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_pareto.json +0 -0
  462. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_peg.json +0 -0
  463. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_penchat.json +0 -0
  464. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_plan.json +0 -0
  465. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_policy.json +0 -0
  466. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_profile.json +0 -0
  467. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_proto.json +0 -0
  468. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_r.json +0 -0
  469. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_redteam.json +0 -0
  470. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_route.json +0 -0
  471. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_screen.json +0 -0
  472. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_seroprev.json +0 -0
  473. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_simlab.json +0 -0
  474. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_twincal.json +0 -0
  475. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_uq.json +0 -0
  476. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_v.json +0 -0
  477. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_vcell.json +0 -0
  478. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_verify.json +0 -0
  479. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_writer.json +0 -0
  480. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_writespec.json +0 -0
  481. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/SHA256_LOCK_ws_wv.json +0 -0
  482. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/paper1.yaml +0 -0
  483. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/paper2.yaml +0 -0
  484. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/paper3.yaml +0 -0
  485. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/phase0.yaml +0 -0
  486. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_a.yaml +0 -0
  487. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_acq.yaml +0 -0
  488. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_aldesign.yaml +0 -0
  489. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_alvalidate.yaml +0 -0
  490. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_atlas.yaml +0 -0
  491. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_b.yaml +0 -0
  492. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_ba.yaml +0 -0
  493. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_ba_v33.yaml +0 -0
  494. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_ba_v45.yaml +0 -0
  495. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_bench.yaml +0 -0
  496. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_c.yaml +0 -0
  497. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_cal.yaml +0 -0
  498. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_calib.yaml +0 -0
  499. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_challenge.yaml +0 -0
  500. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_chat.yaml +0 -0
  501. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_cite.yaml +0 -0
  502. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_closedloop.yaml +0 -0
  503. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_continual.yaml +0 -0
  504. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_cosci2.yaml +0 -0
  505. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_crit.yaml +0 -0
  506. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_ct.yaml +0 -0
  507. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_d.yaml +0 -0
  508. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_delivery.yaml +0 -0
  509. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_drift.yaml +0 -0
  510. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_e.yaml +0 -0
  511. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_env.yaml +0 -0
  512. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_ep.yaml +0 -0
  513. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_epitope.yaml +0 -0
  514. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_expr2.yaml +0 -0
  515. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_f.yaml +0 -0
  516. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_frontend.yaml +0 -0
  517. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_g.yaml +0 -0
  518. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_gen.yaml +0 -0
  519. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_genotox.yaml +0 -0
  520. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_graph.yaml +0 -0
  521. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_h.yaml +0 -0
  522. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_hybrid.yaml +0 -0
  523. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_immune.yaml +0 -0
  524. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_immune2.yaml +0 -0
  525. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_ingest.yaml +0 -0
  526. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_innate.yaml +0 -0
  527. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_loop.yaml +0 -0
  528. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_manifest.yaml +0 -0
  529. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_mc.yaml +0 -0
  530. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_mcp.yaml +0 -0
  531. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_mech.yaml +0 -0
  532. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_mon.yaml +0 -0
  533. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_o.yaml +0 -0
  534. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_offtarget.yaml +0 -0
  535. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_openapi.yaml +0 -0
  536. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_oracle.yaml +0 -0
  537. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_orch.yaml +0 -0
  538. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_outcome.yaml +0 -0
  539. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_pareto.yaml +0 -0
  540. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_peg.yaml +0 -0
  541. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_penchat.yaml +0 -0
  542. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_plan.yaml +0 -0
  543. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_policy.yaml +0 -0
  544. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_profile.yaml +0 -0
  545. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_proto.yaml +0 -0
  546. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_r.yaml +0 -0
  547. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_redteam.yaml +0 -0
  548. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_route.yaml +0 -0
  549. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_screen.yaml +0 -0
  550. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_seroprev.yaml +0 -0
  551. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_simlab.yaml +0 -0
  552. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_twincal.yaml +0 -0
  553. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_uq.yaml +0 -0
  554. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_v.yaml +0 -0
  555. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_vcell.yaml +0 -0
  556. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_verify.yaml +0 -0
  557. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_writer.yaml +0 -0
  558. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_writespec.yaml +0 -0
  559. {pen_stack-7.2.1 → pen_stack-7.2.3}/prereg/ws_wv.yaml +0 -0
  560. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/build_capsid_fitness.py +0 -0
  561. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/build_rag_corpus.py +0 -0
  562. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/calibrate_immune_axes.py +0 -0
  563. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/fetch_licensed_sources.py +0 -0
  564. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/offtarget_chromatin_incremental.py +0 -0
  565. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/offtarget_chromatin_matched.py +0 -0
  566. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/offtarget_chromatin_validation.py +0 -0
  567. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/p1_build_atlas.py +0 -0
  568. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/p1_build_durability.py +0 -0
  569. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/p1_build_position_effect.py +0 -0
  570. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/p1_build_writer_eff.py +0 -0
  571. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/p1_export_tracks.py +0 -0
  572. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/p1_safety_concordance.py +0 -0
  573. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/p1_train_safety.py +0 -0
  574. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/p1_validation_report.py +0 -0
  575. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/p2_build_atlas.py +0 -0
  576. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/p3_benchmark_report.py +0 -0
  577. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/p4_genome_scan.py +0 -0
  578. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/p52_build_genotox_oracle.py +0 -0
  579. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/p53_build_epitope_oracle.py +0 -0
  580. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/ws_b_report.py +0 -0
  581. {pen_stack-7.2.1 → pen_stack-7.2.3}/scripts/ws_c_report.py +0 -0
  582. {pen_stack-7.2.1 → pen_stack-7.2.3}/setup.cfg +0 -0
@@ -3,6 +3,38 @@
3
3
  All notable changes to PEN-STACK are documented here. This file follows
4
4
  [Keep a Changelog](https://keepachangelog.com/).
5
5
 
6
+ ## [7.2.3] - 2026-07-02 - Off-Target: professional wording (self-contained, no external-tool comparisons) + a plain-language explainer
7
+
8
+ ### Changed
9
+ - **Removed all external-tool comparisons** ("like CRISPOR / CHOPCHOP", "CRISPOR-class", "CRISPOR-comparable") from
10
+ every off-target surface — the Off-Target page, nav, code docstrings, REST docstring, the data card, `positioning.md`,
11
+ the prereg (re-SHA-locked), paper-4 prereg, and the v7.2.0 CHANGELOG entry. The capability is now described on its
12
+ own terms: a genome-wide off-target *finder* — given a guide/target it enumerates and ranks the off-target sites
13
+ itself. No functional change.
14
+ - **Off-Target page now explains off-target effects in plain language**: a new top card covers *what an off-target
15
+ effect is*, *what you enter* (per writer class), and *what you get back* (ranked genome-wide sites with
16
+ coordinates + a risk band + the confirming assay), plus a "how it works" line (scan GRCh38 within the mismatch
17
+ tolerance → score → rank; heavy scan on the VM, replayed or honest-abstain). The per-metric ScoreGuide was
18
+ reworded to match.
19
+
20
+ ## [7.2.2] - 2026-07-02 - Integrase: precise capability framing (the negative is about a method, not the biology)
21
+
22
+ A framing/presentation refinement of the v7.2.1 sealed-negative result — no science changes, the number is
23
+ unchanged and the negative stands.
24
+
25
+ ### Changed
26
+ - **Precise claim, everywhere:** what the sealed PhiC31 benchmark showed is that a specific *method* (attP
27
+ sequence-similarity scanning) is insufficient — **NOT** that pseudosites are unpredictable. The signal is real
28
+ (Chalberg's palindromic consensus; IntQuery's success on 410,776 cryptic attB), just not capturable by simple
29
+ identity. So the honest, narrow claim is "sequence similarity is insufficient," and this negative is the
30
+ empirical justification for a learned/DMS model (the indicated next step). Sharpened in `offtarget_integrase.py`,
31
+ `phic31_recall_metrics.json`, and the data card so nothing reads as "unpredictable."
32
+ - **App presentation:** `nominate_integrase` now returns a `capability` disclosure (badge + plain microcopy). The
33
+ Off-Target page shows a badge reading **"mechanism-based · not predictive by sequence alone"** (not a bare red
34
+ flag) plus one line — *"φC31 pseudosite activity is sequence-guided but not predictable from similarity alone
35
+ (sealed benchmark, negative); confirm empirically"* — separating the grounded facts (verified att + documented
36
+ pseudo-attP with GenBank accessions) from the honest capability limit. A trust-building disclosure, not an alarm.
37
+
6
38
  ## [7.2.1] - 2026-07-02 - PhiC31 integrase: close the O-WS3/O-G2 data gap with verified data + a sealed recall benchmark (honest NEGATIVE)
7
39
 
8
40
  Closes the one genuine open item from v7.2.0 — the PhiC31 integrase data gap — with independently-verified,
@@ -35,10 +67,10 @@ open, citable sequences (no fabrication) and a **sealed recall benchmark whose r
35
67
 
36
68
  ## [7.2.0] - 2026-07-01 - PEN-OFFTGT v2: Stage E becomes a genome-wide, per-mechanism off-target FINDER (all 5 writer classes)
37
69
 
38
- Stage E was a candidate *scorer* — it ranked off-target sites you supplied. A real off-target tool (CRISPOR /
39
- CHOPCHOP) takes a guide/target and *finds* the genome-wide off-target set itself. PEN-OFFTGT v2 closes that
40
- enumeration gap AND applies the **correct off-target mechanism for each writer class**, each carrying a truthful
41
- per-mechanism validation status (O-WS0–O-WS9 of the plan).
70
+ Stage E was a candidate *scorer* — it ranked off-target sites you supplied. An off-target *finder* instead takes
71
+ a guide/target and enumerates the genome-wide off-target sites itself. PEN-OFFTGT v2 closes that enumeration gap
72
+ AND applies the **correct off-target mechanism for each writer class**, each carrying a truthful per-mechanism
73
+ validation status (O-WS0–O-WS9 of the plan).
42
74
 
43
75
  ### Per-mechanism paths (O-WS3–O-WS6)
44
76
  - **Serine integrase** (`offtarget_integrase.py`, O-WS3): a genome-wide **pseudo-attP** scan — a fixed-sequence
@@ -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: 7.2.1
4
+ version: 7.2.3
5
5
  date-released: 2026-07-02
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: 7.2.1
3
+ Version: 7.2.3
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
@@ -1,4 +1,4 @@
1
1
  701efce23441ba6ec3865060aa3a749d7165d013628f3ed8010737861b306557 README.md
2
2
  888dd4ba69bbe1eccd323797adc89b242b1c8ec6208a5f9f41df839d641d10e6 harness.py
3
3
  fe23827ff34204bc2cd1f903fcd3e32b120c4521787342e6590824249573a4d4 phic31_pseudo.fasta
4
- 2a0f22d700f0db0bafd1c98b8b8893f14e86ae9574ff789042bd3ad1c7f6a3c0 phic31_recall_metrics.json
4
+ 8ac9ee21ddab7ddc9af4d68f6eef872c30069f6dbc6ae8de89f62c981d1868cd phic31_recall_metrics.json
@@ -103,7 +103,7 @@ disclosure** where it does not. No mechanism is ever presented as validated wher
103
103
  | Writer class | Mechanism | Enumeration | Status | Ground truth / benchmark |
104
104
  |---|---|---|---|---|
105
105
  | **Nuclease** (SpCas9/SaCas9/Cas12a) | mismatch-tolerant cleavage at protospacer+PAM | Cas-OFFinder genome scan | ✅ **validated** | 4-assay Off-Target-Bench (above) + **O-G1**: enumeration recovers 100% of EMX1's documented GUIDE-seq off-targets ≤5 mm |
106
- | **Serine integrase** (Bxb1, PhiC31) | recombination at genomic pseudo-attP | fixed-sequence att-window scan | 🔵 **mechanism-based, sealed-NEGATIVE benchmark** (v7.2.1) | att verified (Bxb1: FlyBase FBto0000359 / Ghosh 2003 `10.1016/S1097-2765(03)00444-1`; PhiC31: **PDB 9U2T/9U2S** + Groth 2000 `10.1073/pnas.090527097`); the PhiC31 human pseudo-attP set is verified (Thyagarajan 2001, **GenBank AF333429/30/31**, `10.1128/MCB.21.12.3926-3934.2001`; chr8/16/15). The v7.2.1 **SEALED recall benchmark** (`benchmarks/offtarget/integrase/`) is **NEGATIVE**: att-sequence-similarity does NOT recover the documented pseudo-attP above random background (all three at 14 mm / 30 bp = the background median). The genome-wide similarity RANKING is therefore **unvalidated** φC31 recognition needs palindromic architecture (Chalberg 2006, `10.1016/j.jmb.2005.11.098`) / a learned model (IntQuery), not raw identity. Documented pseudosites surfaced as verified known loci; the negative is reported verbatim (a stronger, more honest O-G2 than an untested "semi-validated"). |
106
+ | **Serine integrase** (Bxb1, PhiC31) | recombination at genomic pseudo-attP | fixed-sequence att-window scan | 🔵 **mechanism-based, sealed-NEGATIVE benchmark** (v7.2.1) | att verified (Bxb1: FlyBase FBto0000359 / Ghosh 2003 `10.1016/S1097-2765(03)00444-1`; PhiC31: **PDB 9U2T/9U2S** + Groth 2000 `10.1073/pnas.090527097`); the PhiC31 human pseudo-attP set is verified (Thyagarajan 2001, **GenBank AF333429/30/31**, `10.1128/MCB.21.12.3926-3934.2001`; chr8/16/15). The v7.2.1 **SEALED recall benchmark** (`benchmarks/offtarget/integrase/`) is **NEGATIVE**: att-sequence-similarity does NOT recover the documented pseudo-attP above random background (all three at 14 mm / 30 bp = the background median). The genome-wide similarity RANKING is therefore **not predictive by sequence alone**. **Precise claim:** what failed is a specific *method* (attP sequence-similarity), NOT the existence of predictable pseudosites — the signal is real (Chalberg 2006's palindromic consensus `10.1016/j.jmb.2005.11.098`; IntQuery's 410,776 cryptic attB), just not capturable by simple identity. "Sequence similarity is insufficient," never "unpredictable." This negative is the empirical justification for a learned/DMS model (the indicated next step). Documented pseudosites surfaced as verified known loci; the negative is reported verbatim (a stronger, more honest O-G2 than an untested "semi-validated"). |
107
107
  | **Bridge** (IS110/IS621) | recombination at bridge-RNA target-loop matches | core-seeded genome scan (pysam) | 🔵 **mechanism-based, unvalidated** | **NO genome-wide unbiased CELLULAR off-target assay exists** (technology ~2024). The mismatch-tolerance RANKER is validated on the measured Perry-2025 in-vitro DMS specificity (held-out ranking AUROC 0.88), but genomic recovery is unvalidated. |
108
108
  | **CAST** (ShCAST V-K / VchCAST I-F) | guide-directed integration + guide-independent untargeted transposition | spacer scan + per-system untargeted background | 🔵 **mechanism-based, unvalidated** | untargeted-transposition rates documented per system (`data/curated/cast_systems.yaml`): ShCAST high/AT-biased (Strecker 2019 `10.1126/science.aax9181`; Science 2024 `10.1126/science.adj8543`), VchCAST >95–99% on-target (Klompe 2019 `10.1038/s41586-019-1323-z`; Vo 2021 `10.1038/s41587-020-00745-y`). No genome-wide cellular assay for human-cell CAST. |
109
109
  | **PASTE / (ee)PASSIGE** | Cas9-nickase off-target + integrase pseudo-attP | compose(nuclease, integrase) | composite (✅ nickase + 🟡 integrase) | inherits the nuclease benchmark for the nickase and the integrase status for the installed att; recommends BOTH a nuclease assay AND an integrase assay |
@@ -113,5 +113,5 @@ data-gap disclosure (integrase-PhiC31, bridge, CAST) — never a fabricated metr
113
113
  **hard-locked** to 🔵 unvalidated in code.
114
114
 
115
115
  **Honest limits (v7.2):** enumeration recall depends on the mismatch tolerance (≤5 mm nuclease, ≤8 mm integrase
116
- att window); very divergent off-targets can be missed (a limitation shared with CRISPOR). DNA/RNA bulges are not
116
+ att window); very divergent off-targets can be missed (a limitation inherent to any mismatch-bounded genome search). DNA/RNA bulges are not
117
117
  enumerated in v2.0 (substitutions only). The engine nominates and ranks; it does not clear a design.
@@ -2,8 +2,8 @@
2
2
 
3
3
  ## The gap
4
4
 
5
- Genome **editing** (Cas9, base, and prime editors) is mature and well-benchmarked: CRISPOR, GUIDE-seq,
6
- DeepCRISPR, off-target predictors, and many guide-design tools all answer *how to change a base in place*.
5
+ Genome **editing** (Cas9, base, and prime editors) is mature and well-benchmarked: established guide-design
6
+ tools, off-target predictors, and unbiased assays (GUIDE-seq) all answer *how to change a base in place*.
7
7
  Genome **writing** - installing new information: inserting genes, flipping or excising kilobases, placing
8
8
  programmable landing pads with serine integrases and RNA-guided bridge recombinases - is the harder, more
9
9
  clinically transformative modality, and it has **no canonical reference layer and no benchmark**. Each lab
@@ -23,7 +23,7 @@ benchmark for the writing side. It is deliberately complementary, not competitiv
23
23
  | Question | how to change a base in place | where to write, what writer, how to design, what risk |
24
24
  | Unit | a guide / edit at a target | a site x writer x cargo x delivery plan |
25
25
  | Tasks | on-target efficiency, off-target cleavage | site selection, writer selection, within-locus, off-target, intent, no-fabrication |
26
- | Off-target | Cas9 cleavage (CRISPOR-class) | bridge-recombinase insertion (the unoccupied gap) |
26
+ | Off-target | Cas9 cleavage (mature sequence-similarity predictors) | bridge-recombinase insertion (the unoccupied gap) |
27
27
  | Agents | rarely scored | a grounded LLM-agent leaderboard with a no-fabrication hard gate |
28
28
 
29
29
  ## Design commitments (why it is trustworthy)
@@ -1,2 +1,2 @@
1
1
  """PEN-STACK v3.0 - open infrastructure for genome writing."""
2
- __version__ = "7.2.1"
2
+ __version__ = "7.2.3"
@@ -379,8 +379,8 @@ def offtarget_endpoint(req: dict):
379
379
 
380
380
  v7.2 (finder): for a nuclease guide with NO ``candidate_sites``, enumerates the genome-wide off-target set
381
381
  over GRCh38 (Cas-OFFinder, replayed from the committed cache) and ranks it by the real CRISOT-Score +
382
- mismatch-calibrated risk + chromatin annotation - the CRISPOR-like default. Supplying ``candidate_sites``
383
- keeps the v6.10 score-my-candidates path. Abstains (never fabricates) for a novel guide with no VM scan."""
382
+ mismatch-calibrated risk + chromatin annotation - the default. Supplying ``candidate_sites`` keeps the v6.10
383
+ score-my-candidates path. Abstains (never fabricates) for a novel guide with no VM scan."""
384
384
  from pen_stack.wgenome.offtarget_predict import nominate_offtargets
385
385
  return nominate_offtargets(
386
386
  req.get("writer_family", ""), guide=req.get("guide"), candidate_sites=req.get("candidate_sites"),
@@ -1,9 +1,9 @@
1
- """Genome-wide off-target ENUMERATION — the CRISPOR/CHOPCHOP-like search step (PEN-OFFTGT v2, O-WS1).
1
+ """Genome-wide off-target ENUMERATION — the search step of the off-target finder (PEN-OFFTGT v2, O-WS1).
2
2
 
3
3
  Stage E used to only SCORE candidate sites a caller supplied. This module adds the missing half: given a guide +
4
4
  enzyme, ENUMERATE every genomic site within the mismatch tolerance across GRCh38 — returning coordinates, strand,
5
- matched sequence, and mismatch count — so the downstream scorer ranks a genome-wide candidate set (what a real
6
- off-target tool does), not a hand-typed one.
5
+ matched sequence, and mismatch count — so the downstream scorer ranks a genome-wide candidate set, not a
6
+ hand-typed one (the caller supplies a guide and gets the off-target sites back).
7
7
 
8
8
  **Where it runs.** A full GRCh38 scan is heavy, so enumeration executes ONLY where Cas-OFFinder + the genome are
9
9
  present — the VM, via the `casoffinder:tools` Docker image (Bae, Park & Kim, Bioinformatics 2014,
@@ -24,6 +24,22 @@ _ALIAS = {"bxb1": "Bxb1", "serine_integrase": "Bxb1", "pe_integrase": "Bxb1",
24
24
  "phic31": "PhiC31", "phic31_integrase": "PhiC31"}
25
25
  _CONFIRM = "Cryptic-seq / HIDE-seq (Tome Biosciences, 2024 preprint)"
26
26
 
27
+ # Capability disclosure (v7.2.2): be PRECISE about what the sealed benchmark showed. What failed is a specific
28
+ # METHOD (attP sequence-similarity scanning), NOT the existence of predictable pseudosites — the signal is real
29
+ # (Chalberg's ~30-bp palindromic consensus; IntQuery's success on 410,776 cryptic attB), just not capturable by
30
+ # simple similarity. The honest claim is narrow: "sequence similarity is insufficient", never "unpredictable".
31
+ _CAPABILITY = {
32
+ "badge": "mechanism-based · not predictive by sequence alone",
33
+ "microcopy": ("phiC31 pseudosite activity is sequence-guided but NOT predictable from similarity alone "
34
+ "(sealed benchmark, negative); confirm empirically (Cryptic-seq / HIDE-seq)."),
35
+ "what_failed": ("attP sequence-SIMILARITY scanning (a specific method) — NOT the existence of predictable "
36
+ "pseudosites."),
37
+ "signal_is_real": ("the pseudosite signal IS real — Chalberg's ~30-bp palindromic consensus and IntQuery's "
38
+ "success on 410,776 cryptic attB show it — just not capturable by simple sequence identity."),
39
+ "indicated_next_step": ("a learned / DMS model (as IntQuery uses); this sealed negative is the empirical "
40
+ "justification for it, not evidence that pseudosites are unpredictable."),
41
+ }
42
+
27
43
 
28
44
  @lru_cache(maxsize=1)
29
45
  def integrase_att() -> dict:
@@ -69,15 +85,17 @@ def nominate_integrase(integrase: str = "Bxb1", top: int = 20) -> dict:
69
85
  "att_doi": rec["doi"], "pdb": rec.get("pdb"),
70
86
  "documented_pseudo_attP": rec.get("pseudo_attP_positive_set"),
71
87
  "documented_source": rec.get("positive_set_source"), "documented_doi": rec.get("positive_set_doi"),
72
- "sealed_recall_benchmark": bench, "similarity_ranking_validated": False,
88
+ "sealed_recall_benchmark": bench, "similarity_ranking_validated": False, "capability": _CAPABILITY,
73
89
  "specificity_note": rec.get("specificity_note"),
74
90
  "method": ("PhiC31 documented human pseudo-attP (verified GenBank AF333429/30/31, Thyagarajan 2001) "
75
- "are surfaced as known off-target loci; the att-similarity genome scan is mechanism-"
76
- "based and its SEALED recall benchmark is NEGATIVE (does not recover them above "
77
- "background) -> the genome-wide ranking is unvalidated (reported verbatim)."),
91
+ "are surfaced as verified known off-target loci. Separately, the att-SIMILARITY genome "
92
+ "scan is a mechanism-based method whose sealed recall benchmark is NEGATIVE: sequence "
93
+ "similarity is INSUFFICIENT to rank these sites (the signal is real but needs a learned "
94
+ "model, not raw identity). Reported verbatim."),
78
95
  "confirm_assay": _CONFIRM,
79
- "honesty": "verified documented pseudosites + an honest NEGATIVE recall benchmark; NOT a validated "
80
- "predictor and NOT a clearance.",
96
+ "honesty": "verified documented pseudosites (grounded facts) PLUS an explicit capability disclosure: "
97
+ "sequence-similarity scanning does not reliably rank them; NOT a clearance. Confirm "
98
+ "empirically.",
81
99
  "nomination_is_not_clearance": True}
82
100
 
83
101
  # Bxb1 (and any integrase with a committed genome-scan cache): genome-wide similarity candidates
@@ -100,12 +118,12 @@ def nominate_integrase(integrase: str = "Bxb1", top: int = 20) -> dict:
100
118
  "scan_window": window, "source": enum["source"], "att_doi": rec["doi"],
101
119
  "n_sites_genome_wide": len(noms), "nominations": noms[:top],
102
120
  "specificity_note": rec.get("specificity_note"),
103
- "sealed_recall_benchmark": bench, "similarity_ranking_validated": False,
121
+ "sealed_recall_benchmark": bench, "similarity_ranking_validated": False, "capability": _CAPABILITY,
104
122
  "method": ("fixed-sequence Cas-OFFinder scan of the attP core window over GRCh38, scored by att-arm "
105
- "similarity. The similarity RANKING is mechanism-based and UNVALIDATED: the sealed PhiC31 "
106
- "recall benchmark is NEGATIVE (att-similarity does not recover documented pseudo-attP "
107
- "above background)."),
123
+ "similarity. The similarity RANKING is mechanism-based and NOT predictive by sequence alone: "
124
+ "the sealed PhiC31 recall benchmark is NEGATIVE (sequence similarity is insufficient to "
125
+ "rank pseudo-attP; the signal is real but needs a learned model, per IntQuery)."),
108
126
  "confirm_assay": _CONFIRM,
109
- "honesty": "genome-wide pseudo-attP candidates by att similarity; the ranking is unvalidated "
110
- "(sealed-negative benchmark) and NOT a clearance.",
127
+ "honesty": "genome-wide pseudo-attP candidates by att similarity; sequence similarity is insufficient "
128
+ "to rank them (sealed-negative benchmark) -> mechanism-based, confirm empirically. NOT a clearance.",
111
129
  "nomination_is_not_clearance": True}
@@ -1,7 +1,7 @@
1
1
  """Nuclease off-target FINDER (PEN-OFFTGT v2, O-WS2): enumerate -> CRISOT -> risk -> chromatin.
2
2
 
3
3
  Chains the genome-wide enumeration (O-WS1) into the existing, validated nuclease scorer, so a GUIDE returns a
4
- genome-wide ranked off-target set (what CRISPOR/CHOPCHOP do) rather than a hand-supplied one. The scoring is
4
+ genome-wide ranked off-target set rather than a hand-supplied one. The scoring is
5
5
  UNCHANGED from v6.10 — the real CRISOT-Score, the mismatch-calibrated risk band, and the chromatin annotation
6
6
  (validated, not a re-ranker). v2 only adds the enumeration front end. Status: **validated** (CRISOT beats
7
7
  homology on four unbiased assays; enumeration reproduces the documented off-target set, gate O-G1).
@@ -222,8 +222,8 @@ def nominate_offtargets(writer_family: str, guide: str | None = None, candidate_
222
222
  ``cell_type`` enable the REAL Stage B chromatin-accessibility modifier for nucleases.
223
223
 
224
224
  v7.2 (O-WS2): for a nuclease guide WITHOUT supplied ``candidate_sites``, this runs the genome-wide FINDER
225
- (enumerate GRCh38 -> CRISOT -> risk -> chromatin), the CRISPOR-like default. Supplying ``candidate_sites``
226
- keeps the v6.10 score-my-candidates path (backward compatible)."""
225
+ (enumerate GRCh38 -> CRISOT -> risk -> chromatin) by default. Supplying ``candidate_sites`` keeps the v6.10
226
+ score-my-candidates path (backward compatible)."""
227
227
  from pen_stack.wgenome.offtarget_assay import recommend_assay
228
228
  fam = (writer_family or "").lower()
229
229
  assay_rec = recommend_assay(writer_family)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pen-stack
3
- Version: 7.2.1
3
+ Version: 7.2.3
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
@@ -0,0 +1,9 @@
1
+ {
2
+ "cycle": "v7.2",
3
+ "workstream": "PEN-OFFTGT-v2",
4
+ "prepared": "2026-07-01",
5
+ "amended": "2026-07-02 (v7.2.1 O-G2 sealed result; v7.2.2 professional wording pass)",
6
+ "sha256": {
7
+ "prereg/ws_offtarget2.yaml": "208a000c11cf697c73e1e92f785fed5b72cd469d5f7c54c81975c1489e37e054"
8
+ }
9
+ }
@@ -1,5 +1,5 @@
1
1
  # PEN-STACK v3.0 - Paper 4 (Bridge-recombinase off-target engine) pre-registered success criteria.
2
- # SHA-locked. Paper 4 is the beachhead: "a CRISPOR for bridge recombinases."
2
+ # Paper 4 is the beachhead: a genome-wide off-target screening tool for RNA-guided bridge recombinases.
3
3
  paper: 4
4
4
  title: "A screening tool to nominate genome-wide off-target locations for RNA-guided bridge recombinases"
5
5
  prepared: "2026-06-02"
@@ -2,8 +2,8 @@
2
2
  # Locks the mechanism taxonomy, per-mechanism enumeration parameters, the status-label rules, and the acceptance
3
3
  # gates BEFORE building, per the standing "pre-register + SHA-lock" discipline. Lands as v7.2.0 (Stage E).
4
4
  #
5
- # The load-bearing change: Stage E becomes a genome-wide FINDER (enumerates candidates itself, like CRISPOR/
6
- # CHOPCHOP) instead of only a SCORER of supplied candidates. Enumeration is heavy and runs on the VM over GRCh38;
5
+ # The load-bearing change: Stage E becomes a genome-wide FINDER (given a guide, it enumerates the candidate sites
6
+ # itself) instead of only a SCORER of supplied candidates. Enumeration is heavy and runs on the VM over GRCh38;
7
7
  # the live app replays a committed coordinate cache or abstains (the enumerated coordinates are public-genome facts).
8
8
 
9
9
  version: "1.0"
@@ -16,7 +16,7 @@ invariants:
16
16
  - nomination_is_not_clearance # every candidate ships with the confirming empirical assay
17
17
  - no_fabrication # never invent a site or a validated status; abstain / flag where no data
18
18
  - per_mechanism_honesty # each writer class returns its own mechanism, algorithm, and status label
19
- - genome_wide_by_default # the engine enumerates candidates itself (the CRISPOR-like property)
19
+ - genome_wide_by_default # the engine enumerates candidates itself (a guide in, the off-target sites out)
20
20
 
21
21
  # The enumerated off-target coordinates are FACTS derivable from the public GRCh38 assembly with a public tool
22
22
  # (Cas-OFFinder). Unlike the CRISOT weights (CC-BY-NC, VM-only), the coordinates carry no license restriction and
@@ -37,7 +37,7 @@ mechanisms:
37
37
  off_target_mechanism: mismatch/bulge-tolerant cleavage at protospacer + PAM
38
38
  pam: {SpCas9: NGG, SaCas9: NNGRRT, AsCas12a: TTTV, LbCas12a: TTTV}
39
39
  protospacer_len: {SpCas9: 20, SaCas9: 21, AsCas12a: 23, LbCas12a: 23}
40
- max_mismatches: 5 # enumeration tolerance (recall/-precision trade; CRISPOR-comparable)
40
+ max_mismatches: 5 # enumeration tolerance (a recall / precision trade-off)
41
41
  max_dna_bulge: 0 # v2.0 ships substitutions only; bulges are a follow-up
42
42
  max_rna_bulge: 0
43
43
  scorer: crisot # existing real CRISOT-Score (VM, CC-BY-NC, derived scores cached)
@@ -78,7 +78,7 @@ mechanisms:
78
78
  acceptance_gates:
79
79
  O-G1:
80
80
  workstream: O-WS1
81
- claim: enumeration reproduces a documented Cas9 off-target set (behaves like CRISPOR's search step)
81
+ claim: enumeration reproduces a documented Cas9 off-target set (the finder's genome-wide search step)
82
82
  metric: recall of the EMX1 documented/validated GUIDE-seq off-targets among the enumerated candidates
83
83
  floor: 0.90 # >=90% of the documented validated off-targets are enumerated at k<=5
84
84
  guide: EMX1 (GAGTCCGAGCAGAAGAAGAA, NGG)
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pen-stack"
7
- version = "7.2.1"
7
+ version = "7.2.3"
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"
@@ -1,9 +0,0 @@
1
- {
2
- "cycle": "v7.2",
3
- "workstream": "PEN-OFFTGT-v2",
4
- "prepared": "2026-07-01",
5
- "amended": "2026-07-02 (v7.2.1: O-G2 sealed PhiC31 recall benchmark, result NEGATIVE)",
6
- "sha256": {
7
- "prereg/ws_offtarget2.yaml": "6cf66e9cd972e638366e585072464287c7bfacca9b9575ac91a6a9317a7e22df"
8
- }
9
- }
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