pen-stack 6.2.1__tar.gz → 6.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 (444) hide show
  1. {pen_stack-6.2.1 → pen_stack-6.2.3}/CHANGELOG.md +36 -0
  2. {pen_stack-6.2.1 → pen_stack-6.2.3}/CITATION.cff +1 -1
  3. {pen_stack-6.2.1 → pen_stack-6.2.3}/PKG-INFO +3 -3
  4. {pen_stack-6.2.1 → pen_stack-6.2.3}/README.md +2 -2
  5. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/known_unknowns.yaml +18 -2
  6. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/__init__.py +1 -1
  7. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/atlas/crosslink.py +3 -6
  8. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/planner/optimize.py +13 -2
  9. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack.egg-info/PKG-INFO +3 -3
  10. {pen_stack-6.2.1 → pen_stack-6.2.3}/pyproject.toml +1 -1
  11. {pen_stack-6.2.1 → pen_stack-6.2.3}/LICENSE +0 -0
  12. {pen_stack-6.2.1 → pen_stack-6.2.3}/MANIFEST.in +0 -0
  13. {pen_stack-6.2.1 → pen_stack-6.2.3}/bench/run.py +0 -0
  14. {pen_stack-6.2.1 → pen_stack-6.2.3}/benchmarks/genome_writing_bench/LEADERBOARD.md +0 -0
  15. {pen_stack-6.2.1 → pen_stack-6.2.3}/benchmarks/genome_writing_bench/README.md +0 -0
  16. {pen_stack-6.2.1 → pen_stack-6.2.3}/benchmarks/genome_writing_bench/SHA256SUMS +0 -0
  17. {pen_stack-6.2.1 → pen_stack-6.2.3}/benchmarks/genome_writing_bench/SUBMISSIONS.md +0 -0
  18. {pen_stack-6.2.1 → pen_stack-6.2.3}/benchmarks/genome_writing_bench/tasks.yaml +0 -0
  19. {pen_stack-6.2.1 → pen_stack-6.2.3}/benchmarks/genome_writing_challenge/README.md +0 -0
  20. {pen_stack-6.2.1 → pen_stack-6.2.3}/benchmarks/genome_writing_challenge/SUBMISSIONS.md +0 -0
  21. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/antipeg.yaml +0 -0
  22. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/atlas_families.yaml +0 -0
  23. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/bridge_offtarget_profile.yaml +0 -0
  24. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/capsid_epitope_oracle.yaml +0 -0
  25. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/capsid_sequences.fasta +0 -0
  26. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/cargo_polish.yaml +0 -0
  27. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/cell_types.yaml +0 -0
  28. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/datasets.yaml +0 -0
  29. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/delivery_constraints.yaml +0 -0
  30. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/delivery_rules.yaml +0 -0
  31. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/delivery_vehicles.yaml +0 -0
  32. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/gates_v3.yaml +0 -0
  33. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/genotoxicity_oracle.yaml +0 -0
  34. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/gsh_validated_heldout.yaml +0 -0
  35. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/intent_weights.yaml +0 -0
  36. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/llm.yaml +0 -0
  37. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/monitor_queries.yaml +0 -0
  38. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/oracles/scope_cards.yaml +0 -0
  39. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/rules/delivery.yaml +0 -0
  40. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/rules/fold.yaml +0 -0
  41. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/rules/multiplex.yaml +0 -0
  42. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/rules/payload.yaml +0 -0
  43. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/rules/reachability.yaml +0 -0
  44. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/safety/hazard_registry.yaml +0 -0
  45. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/safety/policy.yaml +0 -0
  46. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/safety/probes.yaml +0 -0
  47. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/score_axes.yaml +0 -0
  48. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/seroprevalence.yaml +0 -0
  49. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/target_sites.yaml +0 -0
  50. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/universe_crosswalk.yaml +0 -0
  51. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/write_types.yaml +0 -0
  52. {pen_stack-6.2.1 → pen_stack-6.2.3}/configs/wtkb_curated.yaml +0 -0
  53. {pen_stack-6.2.1 → pen_stack-6.2.3}/data/curated/bridge_offtarget_energetics.json +0 -0
  54. {pen_stack-6.2.1 → pen_stack-6.2.3}/data/curated/bridge_offtarget_profile_measured.parquet +0 -0
  55. {pen_stack-6.2.1 → pen_stack-6.2.3}/data/curated/gene_coords.parquet +0 -0
  56. {pen_stack-6.2.1 → pen_stack-6.2.3}/data/curated/unified_editor_universe.parquet +0 -0
  57. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/BACKLOG.md +0 -0
  58. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/DEPLOY.md +0 -0
  59. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/INFRA.md +0 -0
  60. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/MCP.md +0 -0
  61. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/RELEASING.md +0 -0
  62. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/REPRO.md +0 -0
  63. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/STABILITY.md +0 -0
  64. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/agent.md +0 -0
  65. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/alphagenome_feasibility.md +0 -0
  66. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/autonomy.md +0 -0
  67. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/benchmark_circularity.md +0 -0
  68. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/biosecurity.md +0 -0
  69. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/build_interface.md +0 -0
  70. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/cards/atlas.md +0 -0
  71. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/cards/durability.md +0 -0
  72. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/cards/safety.md +0 -0
  73. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/challenge.md +0 -0
  74. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/closed_loop.md +0 -0
  75. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/co_scientist.md +0 -0
  76. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/co_scientist_loop.md +0 -0
  77. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/delivery.md +0 -0
  78. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/delivery_immunology.md +0 -0
  79. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/digital_twin.md +0 -0
  80. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/dissemination.md +0 -0
  81. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/environment.md +0 -0
  82. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/experiment_design.md +0 -0
  83. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/generative_design.md +0 -0
  84. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/index.md +0 -0
  85. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/integrations.md +0 -0
  86. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/mechanistic_constraints.md +0 -0
  87. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/oracles.md +0 -0
  88. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/positioning.md +0 -0
  89. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/private_data_formats.md +0 -0
  90. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/quickstart.md +0 -0
  91. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/responsible_use.md +0 -0
  92. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/rules.md +0 -0
  93. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/scope.md +0 -0
  94. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/scorecard.md +0 -0
  95. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/tutorials/compare-families.md +0 -0
  96. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/tutorials/score-deliverability.md +0 -0
  97. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/tutorials/where-can-i-write.md +0 -0
  98. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/tutorials/which-writer-reaches-locus.md +0 -0
  99. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/uncertainty.md +0 -0
  100. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/verify.md +0 -0
  101. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/world_model.md +0 -0
  102. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/writer_verification.md +0 -0
  103. {pen_stack-6.2.1 → pen_stack-6.2.3}/docs/wtkb.md +0 -0
  104. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/_resources.py +0 -0
  105. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/active/__init__.py +0 -0
  106. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/active/acquire.py +0 -0
  107. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/active/design.py +0 -0
  108. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/active/validate.py +0 -0
  109. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/adapt/__init__.py +0 -0
  110. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/adapt/finetune.py +0 -0
  111. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/adapt/ingest.py +0 -0
  112. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/adapt/pipeline.py +0 -0
  113. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/adapt/recalibrate.py +0 -0
  114. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/adapt/report.py +0 -0
  115. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/agent/__init__.py +0 -0
  116. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/agent/cite.py +0 -0
  117. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/agent/co_scientist.py +0 -0
  118. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/agent/epistemic.py +0 -0
  119. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/agent/guardrails.py +0 -0
  120. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/agent/mcp_server.py +0 -0
  121. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/agent/orchestrator.py +0 -0
  122. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/agent/orchestrator_live.py +0 -0
  123. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/agent/pen_agent.py +0 -0
  124. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/agent/scope.py +0 -0
  125. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/agent/tools.py +0 -0
  126. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/api/__init__.py +0 -0
  127. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/api/manifest.py +0 -0
  128. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/atlas/__init__.py +0 -0
  129. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/atlas/build_wtkb.py +0 -0
  130. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/atlas/expand.py +0 -0
  131. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/atlas/schema.py +0 -0
  132. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/atlas/scorecard.py +0 -0
  133. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/atlas/universe.py +0 -0
  134. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/atlas/variant_propose.py +0 -0
  135. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/atlas/writer_verify.py +0 -0
  136. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/bridge/__init__.py +0 -0
  137. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/bridge/activity.py +0 -0
  138. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/bridge/cli.py +0 -0
  139. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/bridge/fold_qc.py +0 -0
  140. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/bridge/guide_qc.py +0 -0
  141. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/bridge/ingest.py +0 -0
  142. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/bridge/offtarget.py +0 -0
  143. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/bridge/offtarget_energetics.py +0 -0
  144. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/bridge/ortholog_screen.py +0 -0
  145. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/bridge/pipeline.py +0 -0
  146. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/build/__init__.py +0 -0
  147. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/build/ingest.py +0 -0
  148. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/build/protocol.py +0 -0
  149. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/build/simlab.py +0 -0
  150. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/cli.py +0 -0
  151. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/data/__init__.py +0 -0
  152. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/data/encode.py +0 -0
  153. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/data/genome.py +0 -0
  154. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/data/ingest_chromatin.py +0 -0
  155. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/data/ingest_integration.py +0 -0
  156. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/data/ingest_safety_annot.py +0 -0
  157. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/data/ingest_trip.py +0 -0
  158. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/design/__init__.py +0 -0
  159. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/design/generate.py +0 -0
  160. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/design/pareto.py +0 -0
  161. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/design/space.py +0 -0
  162. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/env/__init__.py +0 -0
  163. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/env/genome_writing_env.py +0 -0
  164. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/env/policies.py +0 -0
  165. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/graph/__init__.py +0 -0
  166. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/graph/build.py +0 -0
  167. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/graph/cell_types.py +0 -0
  168. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/graph/ingest.py +0 -0
  169. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/graph/query.py +0 -0
  170. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/graph/schema.py +0 -0
  171. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/loop/__init__.py +0 -0
  172. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/loop/continual.py +0 -0
  173. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/loop/cycle.py +0 -0
  174. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/loop/drift.py +0 -0
  175. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/mech/__init__.py +0 -0
  176. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/mech/classify_atlas.py +0 -0
  177. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/mech/whitelist.py +0 -0
  178. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/monitor/__init__.py +0 -0
  179. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/monitor/europepmc.py +0 -0
  180. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/monitor/run.py +0 -0
  181. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/monitor/triage.py +0 -0
  182. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/oracles/__init__.py +0 -0
  183. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/oracles/cache.py +0 -0
  184. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/oracles/energetics.py +0 -0
  185. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/oracles/genome.py +0 -0
  186. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/oracles/protein_design.py +0 -0
  187. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/oracles/rna.py +0 -0
  188. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/oracles/schema.py +0 -0
  189. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/oracles/structure.py +0 -0
  190. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/oracles/vcell.py +0 -0
  191. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/planner/__init__.py +0 -0
  192. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/planner/antipeg_oracle.py +0 -0
  193. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/planner/capsid_epitope_oracle.py +0 -0
  194. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/planner/cargo.py +0 -0
  195. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/planner/cargo_polish.py +0 -0
  196. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/planner/delivery.py +0 -0
  197. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/planner/delivery_constraints.py +0 -0
  198. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/planner/delivery_immunology.py +0 -0
  199. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/planner/delivery_vehicles.py +0 -0
  200. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/planner/genotoxicity_oracle.py +0 -0
  201. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/planner/immune_profile.py +0 -0
  202. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/planner/innate_sensing.py +0 -0
  203. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/planner/multiplex.py +0 -0
  204. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/planner/pipeline.py +0 -0
  205. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/planner/report.py +0 -0
  206. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/planner/router.py +0 -0
  207. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/planner/seroprevalence_oracle.py +0 -0
  208. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/planner/target_site.py +0 -0
  209. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/rag/__init__.py +0 -0
  210. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/rag/index.py +0 -0
  211. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/rag/llm.py +0 -0
  212. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/rag/qa.py +0 -0
  213. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/rules/__init__.py +0 -0
  214. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/rules/evaluators.py +0 -0
  215. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/rules/loader.py +0 -0
  216. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/rules/schema.py +0 -0
  217. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/rules/solver.py +0 -0
  218. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/safety/__init__.py +0 -0
  219. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/safety/audit.py +0 -0
  220. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/safety/gate.py +0 -0
  221. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/safety/policy.py +0 -0
  222. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/safety/redteam.py +0 -0
  223. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/safety/registry.py +0 -0
  224. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/safety/screen.py +0 -0
  225. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/score/__init__.py +0 -0
  226. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/score/recalibrate.py +0 -0
  227. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/score/therapeutic.py +0 -0
  228. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/server/__init__.py +0 -0
  229. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/server/api.py +0 -0
  230. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/twin/__init__.py +0 -0
  231. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/twin/calibrate.py +0 -0
  232. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/twin/mechanistic.py +0 -0
  233. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/twin/outcome.py +0 -0
  234. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/ui/__init__.py +0 -0
  235. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/ui/app.py +0 -0
  236. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/__init__.py +0 -0
  237. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/adapt_demo.py +0 -0
  238. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/agent_eval.py +0 -0
  239. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/bench_adversarial_tasks.py +0 -0
  240. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/bench_coscientist_tasks.py +0 -0
  241. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/bench_graph_tasks.py +0 -0
  242. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/bench_rule_tasks.py +0 -0
  243. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/bench_trust_tasks.py +0 -0
  244. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/bench_writetype_tasks.py +0 -0
  245. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/blind_gsh_discovery.py +0 -0
  246. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/cargo_directionality.py +0 -0
  247. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/closed_loop.py +0 -0
  248. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/durability_baselines.py +0 -0
  249. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/experiment_design.py +0 -0
  250. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/forward_hypotheses.py +0 -0
  251. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/generative_design.py +0 -0
  252. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/guide_qc_demo.py +0 -0
  253. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/immune_calibration.py +0 -0
  254. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/intent_specification.py +0 -0
  255. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/offtarget_energetics_eval.py +0 -0
  256. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/out_of_scope_refusal.py +0 -0
  257. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/outcome_calibration.py +0 -0
  258. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/outcome_prediction.py +0 -0
  259. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/paper3_benchmark.py +0 -0
  260. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/paper4_real_validation.py +0 -0
  261. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/paper4_validation.py +0 -0
  262. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/protocol_safety.py +0 -0
  263. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/safety_screening.py +0 -0
  264. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/selective_prediction.py +0 -0
  265. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/seq_vs_measured.py +0 -0
  266. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/target_site_controls.py +0 -0
  267. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/uncertainty_eval.py +0 -0
  268. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/ungrounded_baseline.py +0 -0
  269. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/within_locus_ranking.py +0 -0
  270. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/validate/writer_recovery.py +0 -0
  271. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/verify/__init__.py +0 -0
  272. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/verify/schema.py +0 -0
  273. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/verify/service.py +0 -0
  274. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/web/__init__.py +0 -0
  275. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/web/llm.py +0 -0
  276. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/web/server.py +0 -0
  277. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/web/tools.py +0 -0
  278. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/wgenome/__init__.py +0 -0
  279. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/wgenome/chromatin_seq.py +0 -0
  280. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/wgenome/durability.py +0 -0
  281. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/wgenome/export_tracks.py +0 -0
  282. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/wgenome/features.py +0 -0
  283. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/wgenome/gsh_baseline.py +0 -0
  284. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/wgenome/mesh_features.py +0 -0
  285. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/wgenome/ood.py +0 -0
  286. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/wgenome/providers.py +0 -0
  287. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/wgenome/safety.py +0 -0
  288. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/wgenome/structure3d.py +0 -0
  289. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/wgenome/uncertainty.py +0 -0
  290. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack/wgenome/writability.py +0 -0
  291. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack.egg-info/SOURCES.txt +0 -0
  292. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack.egg-info/dependency_links.txt +0 -0
  293. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack.egg-info/entry_points.txt +0 -0
  294. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack.egg-info/requires.txt +0 -0
  295. {pen_stack-6.2.1 → pen_stack-6.2.3}/pen_stack.egg-info/top_level.txt +0 -0
  296. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_phase0.json +0 -0
  297. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_phase1_5.json +0 -0
  298. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_phase2.json +0 -0
  299. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_phase3.json +0 -0
  300. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_a.json +0 -0
  301. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_acq.json +0 -0
  302. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_aldesign.json +0 -0
  303. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_alvalidate.json +0 -0
  304. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_atlas.json +0 -0
  305. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_b.json +0 -0
  306. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_ba.json +0 -0
  307. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_ba_v33.json +0 -0
  308. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_ba_v45.json +0 -0
  309. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_bench.json +0 -0
  310. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_c.json +0 -0
  311. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_cal.json +0 -0
  312. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_calib.json +0 -0
  313. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_challenge.json +0 -0
  314. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_chat.json +0 -0
  315. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_cite.json +0 -0
  316. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_continual.json +0 -0
  317. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_cosci2.json +0 -0
  318. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_crit.json +0 -0
  319. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_ct.json +0 -0
  320. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_d.json +0 -0
  321. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_drift.json +0 -0
  322. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_e.json +0 -0
  323. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_env.json +0 -0
  324. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_ep.json +0 -0
  325. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_epitope.json +0 -0
  326. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_f.json +0 -0
  327. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_frontend.json +0 -0
  328. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_g.json +0 -0
  329. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_gen.json +0 -0
  330. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_genotox.json +0 -0
  331. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_graph.json +0 -0
  332. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_h.json +0 -0
  333. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_immune.json +0 -0
  334. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_ingest.json +0 -0
  335. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_innate.json +0 -0
  336. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_loop.json +0 -0
  337. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_manifest.json +0 -0
  338. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_mc.json +0 -0
  339. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_mcp.json +0 -0
  340. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_mech.json +0 -0
  341. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_mon.json +0 -0
  342. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_o.json +0 -0
  343. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_openapi.json +0 -0
  344. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_orch.json +0 -0
  345. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_outcome.json +0 -0
  346. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_pareto.json +0 -0
  347. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_peg.json +0 -0
  348. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_plan.json +0 -0
  349. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_policy.json +0 -0
  350. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_profile.json +0 -0
  351. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_proto.json +0 -0
  352. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_r.json +0 -0
  353. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_redteam.json +0 -0
  354. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_route.json +0 -0
  355. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_screen.json +0 -0
  356. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_seroprev.json +0 -0
  357. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_simlab.json +0 -0
  358. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_twincal.json +0 -0
  359. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_uq.json +0 -0
  360. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_v.json +0 -0
  361. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_vcell.json +0 -0
  362. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/SHA256_LOCK_ws_wv.json +0 -0
  363. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/paper1.yaml +0 -0
  364. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/paper2.yaml +0 -0
  365. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/paper3.yaml +0 -0
  366. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/paper4.yaml +0 -0
  367. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/phase0.yaml +0 -0
  368. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_a.yaml +0 -0
  369. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_acq.yaml +0 -0
  370. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_aldesign.yaml +0 -0
  371. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_alvalidate.yaml +0 -0
  372. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_atlas.yaml +0 -0
  373. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_b.yaml +0 -0
  374. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_ba.yaml +0 -0
  375. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_ba_v33.yaml +0 -0
  376. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_ba_v45.yaml +0 -0
  377. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_bench.yaml +0 -0
  378. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_c.yaml +0 -0
  379. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_cal.yaml +0 -0
  380. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_calib.yaml +0 -0
  381. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_challenge.yaml +0 -0
  382. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_chat.yaml +0 -0
  383. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_cite.yaml +0 -0
  384. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_continual.yaml +0 -0
  385. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_cosci2.yaml +0 -0
  386. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_crit.yaml +0 -0
  387. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_ct.yaml +0 -0
  388. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_d.yaml +0 -0
  389. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_drift.yaml +0 -0
  390. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_e.yaml +0 -0
  391. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_env.yaml +0 -0
  392. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_ep.yaml +0 -0
  393. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_epitope.yaml +0 -0
  394. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_f.yaml +0 -0
  395. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_frontend.yaml +0 -0
  396. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_g.yaml +0 -0
  397. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_gen.yaml +0 -0
  398. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_genotox.yaml +0 -0
  399. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_graph.yaml +0 -0
  400. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_h.yaml +0 -0
  401. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_immune.yaml +0 -0
  402. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_ingest.yaml +0 -0
  403. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_innate.yaml +0 -0
  404. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_loop.yaml +0 -0
  405. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_manifest.yaml +0 -0
  406. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_mc.yaml +0 -0
  407. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_mcp.yaml +0 -0
  408. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_mech.yaml +0 -0
  409. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_mon.yaml +0 -0
  410. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_o.yaml +0 -0
  411. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_openapi.yaml +0 -0
  412. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_orch.yaml +0 -0
  413. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_outcome.yaml +0 -0
  414. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_pareto.yaml +0 -0
  415. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_peg.yaml +0 -0
  416. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_plan.yaml +0 -0
  417. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_policy.yaml +0 -0
  418. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_profile.yaml +0 -0
  419. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_proto.yaml +0 -0
  420. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_r.yaml +0 -0
  421. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_redteam.yaml +0 -0
  422. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_route.yaml +0 -0
  423. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_screen.yaml +0 -0
  424. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_seroprev.yaml +0 -0
  425. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_simlab.yaml +0 -0
  426. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_twincal.yaml +0 -0
  427. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_uq.yaml +0 -0
  428. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_v.yaml +0 -0
  429. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_vcell.yaml +0 -0
  430. {pen_stack-6.2.1 → pen_stack-6.2.3}/prereg/ws_wv.yaml +0 -0
  431. {pen_stack-6.2.1 → pen_stack-6.2.3}/scripts/p1_build_atlas.py +0 -0
  432. {pen_stack-6.2.1 → pen_stack-6.2.3}/scripts/p1_build_durability.py +0 -0
  433. {pen_stack-6.2.1 → pen_stack-6.2.3}/scripts/p1_export_tracks.py +0 -0
  434. {pen_stack-6.2.1 → pen_stack-6.2.3}/scripts/p1_safety_concordance.py +0 -0
  435. {pen_stack-6.2.1 → pen_stack-6.2.3}/scripts/p1_train_safety.py +0 -0
  436. {pen_stack-6.2.1 → pen_stack-6.2.3}/scripts/p1_validation_report.py +0 -0
  437. {pen_stack-6.2.1 → pen_stack-6.2.3}/scripts/p2_build_atlas.py +0 -0
  438. {pen_stack-6.2.1 → pen_stack-6.2.3}/scripts/p3_benchmark_report.py +0 -0
  439. {pen_stack-6.2.1 → pen_stack-6.2.3}/scripts/p4_genome_scan.py +0 -0
  440. {pen_stack-6.2.1 → pen_stack-6.2.3}/scripts/p52_build_genotox_oracle.py +0 -0
  441. {pen_stack-6.2.1 → pen_stack-6.2.3}/scripts/p53_build_epitope_oracle.py +0 -0
  442. {pen_stack-6.2.1 → pen_stack-6.2.3}/scripts/ws_b_report.py +0 -0
  443. {pen_stack-6.2.1 → pen_stack-6.2.3}/scripts/ws_c_report.py +0 -0
  444. {pen_stack-6.2.1 → pen_stack-6.2.3}/setup.cfg +0 -0
@@ -3,6 +3,42 @@
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
+ ## [6.2.3] - 2026-06-12 - v6.2.3: scope matcher covers functional titer + durability (patch)
7
+
8
+ **Honesty-coverage fix (from the 20-query acceptance suite, `phase_6.2/PEN-STACK_ACCEPTANCE_TESTS.md`).** The
9
+ known-unknowns matcher (`configs/known_unknowns.yaml`) had no entry for *functional titer / absolute in-vivo
10
+ expression magnitude* and its *durability* terms were too narrow ("how long will it last **in a patient**"), so
11
+ common measured-endpoint questions ("what functional titer (% of normal)?", "how long will episomal AAV
12
+ expression last?") were not explicitly deferred. The no-fabrication spine already held (no titer/half-life was
13
+ ever emitted, and the immune profile lists `patient_specific_titer`), but the matcher should flag these
14
+ proactively.
15
+
16
+ ### Added / Fixed
17
+ - `configs/known_unknowns.yaml`: new known-unknown `in_vivo_expression_magnitude` (functional titer / % of normal
18
+ / absolute expression — a measured clinical endpoint, never predicted; PEN-STACK gives the relative mechanistic
19
+ proxy + immune context); broadened `long_term_clinical_durability` match-terms/patterns to catch "how long will
20
+ … last/persist", "durability", "half-life". Regression test
21
+ `tests/unit/test_ws_api.py::test_scope_defers_titer_and_durability_questions`.
22
+
23
+ ### Acceptance suite result
24
+ - 20/20 behave as specified at the engine level: grounded where earned, refusing where unsafe (ricin/botulinum),
25
+ abstaining/deferring where honest (titer, durability, phenotype), no fabricated number. T10 (RNP↔AAV) and T12
26
+ (multiplex translocation) are enforced via `delivery.cargo_form_compatible` and `multiplex.translocation_risk`
27
+ on the structured design fields (`writer_output_form`, `edits`).
28
+
29
+ ## [6.2.2] - 2026-06-12 - v6.2.2: safe-harbour locus-nickname resolution (patch)
30
+
31
+ **Usability fix.** Site Finder / `/plan` / `/writable` returned 0 plans for `AAVS1` because it is a genomic
32
+ safe-harbour *locus nickname*, not an HGNC gene symbol, so the gene→coordinate lookup (`gene_coords`, 60,888
33
+ symbols) could not resolve it — honest empty, but unhelpful for the most-typed safe harbour. (The cell-type
34
+ atlases are complete; real symbols like `PCSK9`/`HBB`/`CCR5`/`CLYBL` resolved fine.)
35
+
36
+ ### Fixed
37
+ - `pen_stack/planner/optimize.py`: `resolve_gene()` maps well-documented safe-harbour nicknames to their host
38
+ gene (`AAVS1`→`PPP1R12C` 19q13.42; `H11`/`Hipp11`→`EIF4ENIF1` 22q12) at every gene→coordinate lookup
39
+ (`gene_region`, `plan`, `crosslink.loci_for_gene`); real symbols pass through unchanged. Regression test
40
+ `tests/unit/test_ws_api.py::test_safe_harbour_nickname_resolves_to_host_gene`.
41
+
6
42
  ## [6.2.1] - 2026-06-12 - v6.2.1: JSON-safe atlas/crosslink endpoints (patch)
7
43
 
8
44
  **Bug fix.** The `/atlas`, `/writable`, and `/crosslink/loci` endpoints returned raw DataFrame records, which
@@ -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: 6.2.1
4
+ version: 6.2.3
5
5
  date-released: 2026-06-11
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: 6.2.1
3
+ Version: 6.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
@@ -90,9 +90,9 @@ every design against rule-grounded mechanism, reports calibrated confidence, cit
90
90
  [![codecov](https://codecov.io/gh/ahmedanees-m/pen-stack/branch/main/graph/badge.svg)](https://codecov.io/gh/ahmedanees-m/pen-stack)
91
91
  [![License: MIT](https://img.shields.io/badge/License-MIT-informational.svg)](LICENSE)
92
92
  [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/)
93
- [![Version](https://img.shields.io/badge/version-6.2.1-blue.svg)](CHANGELOG.md)
93
+ [![Version](https://img.shields.io/badge/version-6.2.3-blue.svg)](CHANGELOG.md)
94
94
  [![Status](https://img.shields.io/badge/status-1.0%20First%20Stable-success.svg)](docs/STABILITY.md)
95
- [![Tests](https://img.shields.io/badge/tests-369%20passing-success.svg)](tests/)
95
+ [![Tests](https://img.shields.io/badge/tests-371%20passing-success.svg)](tests/)
96
96
  [![Lint: ruff](https://img.shields.io/badge/lint-ruff-purple.svg)](https://github.com/astral-sh/ruff)
97
97
  [![Runtime: Docker](https://img.shields.io/badge/runtime-docker-2496ED.svg)](docker/)
98
98
  [![Validation: pre-registered](https://img.shields.io/badge/validation-pre--registered-critical.svg)](prereg/)
@@ -15,9 +15,9 @@ every design against rule-grounded mechanism, reports calibrated confidence, cit
15
15
  [![codecov](https://codecov.io/gh/ahmedanees-m/pen-stack/branch/main/graph/badge.svg)](https://codecov.io/gh/ahmedanees-m/pen-stack)
16
16
  [![License: MIT](https://img.shields.io/badge/License-MIT-informational.svg)](LICENSE)
17
17
  [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/)
18
- [![Version](https://img.shields.io/badge/version-6.2.1-blue.svg)](CHANGELOG.md)
18
+ [![Version](https://img.shields.io/badge/version-6.2.3-blue.svg)](CHANGELOG.md)
19
19
  [![Status](https://img.shields.io/badge/status-1.0%20First%20Stable-success.svg)](docs/STABILITY.md)
20
- [![Tests](https://img.shields.io/badge/tests-369%20passing-success.svg)](tests/)
20
+ [![Tests](https://img.shields.io/badge/tests-371%20passing-success.svg)](tests/)
21
21
  [![Lint: ruff](https://img.shields.io/badge/lint-ruff-purple.svg)](https://github.com/astral-sh/ruff)
22
22
  [![Runtime: Docker](https://img.shields.io/badge/runtime-docker-2496ED.svg)](docker/)
23
23
  [![Validation: pre-registered](https://img.shields.io/badge/validation-pre--registered-critical.svg)](prereg/)
@@ -36,8 +36,24 @@ known_unknowns:
36
36
  cassette in a given epigenome) — it does NOT predict multi-year in-vivo persistence, immune clearance,
37
37
  or clonal dynamics in a patient"
38
38
  match_terms: ["long-term in-vivo", "long term in vivo", "years of expression", "clinical durability",
39
- "persist in the patient", "how long will it last in", "in-vivo persistence", "clonal"]
40
- patterns: ["\\bhow long (will|would) (it|the cassette|expression) (last|persist) (in|in a)\\b"]
39
+ "persist in the patient", "how long will it last in", "in-vivo persistence", "clonal",
40
+ "how long will expression last", "how long will it last", "how long will the cassette",
41
+ "expression duration", "half-life", "half life", "will it persist", "how durable",
42
+ "durability magnitude", "how long does"]
43
+ patterns: ["\\bhow long\\b[^?]{0,60}\\b(last|persist|express|stay expressed|remain)\\b",
44
+ "\\bduration of (expression|the cassette|the transgene)\\b"]
45
+
46
+ - id: in_vivo_expression_magnitude
47
+ title: "absolute in-vivo expression magnitude / functional titer"
48
+ requires: "an in-vivo expression / pharmacokinetic measurement (functional titer, % of normal, ng/mL) in a
49
+ living organism"
50
+ why: "PEN-STACK computes a RELATIVE, dimensionless mechanistic expression proxy (promoter × copy ×
51
+ accessibility) and the immune context — it does NOT predict an absolute in-vivo functional titer, a
52
+ percent-of-normal level, or a protein concentration; that is a measured clinical endpoint, never predicted"
53
+ match_terms: ["titer", "titre", "percent of normal", "% of normal", "percent normal", "iu/ml", "ng/ml",
54
+ "absolute expression", "expression level in vivo", "how much protein", "how much will it express",
55
+ "what level of expression", "protein concentration", "serum level", "plasma level"]
56
+ patterns: ["\\bwhat (functional )?titer\\b", "\\b\\d+\\s*% of normal\\b"]
41
57
 
42
58
  - id: higher_order_epistasis
43
59
  title: "higher-order epistasis / multi-edit interaction beyond the translocation screen"
@@ -1,2 +1,2 @@
1
1
  """PEN-STACK v3.0 - open infrastructure for genome writing."""
2
- __version__ = "6.2.1"
2
+ __version__ = "6.2.3"
@@ -99,13 +99,10 @@ def writers_for_locus(chrom: str, bin_idx: int, ct: str = "k562") -> pd.DataFram
99
99
 
100
100
  def loci_for_gene(gene: str, ct: str = "k562", gene_coords: str | Path | None = None) -> pd.DataFrame:
101
101
  """Writable bins overlapping a gene body (forward query helper)."""
102
- if gene_coords:
103
- gc_path = Path(gene_coords)
104
- else:
105
- from pen_stack.planner.optimize import gene_coords_path
106
- gc_path = gene_coords_path()
102
+ from pen_stack.planner.optimize import gene_coords_path, resolve_gene
103
+ gc_path = Path(gene_coords) if gene_coords else gene_coords_path()
107
104
  gc = pd.read_parquet(gc_path)
108
- g = gc[gc["gene"] == gene]
105
+ g = gc[gc["gene"] == resolve_gene(gene)] # resolve safe-harbour nicknames (AAVS1 -> PPP1R12C)
109
106
  if g.empty:
110
107
  return pd.DataFrame()
111
108
  r = g.iloc[0]
@@ -209,9 +209,20 @@ def _gene_coords(path: str | None = None) -> pd.DataFrame:
209
209
  return pd.read_parquet(Path(path) if path else gene_coords_path())
210
210
 
211
211
 
212
+ # Genomic safe-harbour *locus nicknames* are not HGNC gene symbols, so they are absent from gene_coords; map the
213
+ # well-documented ones to their host gene so a user who types the common name still gets a plan. AAVS1 = intron 1
214
+ # of PPP1R12C (19q13.42); H11/Hipp11 = an intron of EIF4ENIF1 (22q12). (CCR5, CLYBL, HPRT1 are real symbols.)
215
+ _GSH_ALIASES = {"AAVS1": "PPP1R12C", "H11": "EIF4ENIF1", "HIPP11": "EIF4ENIF1"}
216
+
217
+
218
+ def resolve_gene(gene: str) -> str:
219
+ """Map a safe-harbour locus nickname (e.g. AAVS1) to its HGNC host gene; pass real symbols through unchanged."""
220
+ return _GSH_ALIASES.get(str(gene).strip().upper(), gene)
221
+
222
+
212
223
  def gene_region(gene: str, flank_kb: int = 50) -> tuple[str, int, int] | None:
213
224
  gc = _gene_coords()
214
- g = gc[gc["gene"] == gene]
225
+ g = gc[gc["gene"] == resolve_gene(gene)]
215
226
  if g.empty:
216
227
  return None
217
228
  r = g.iloc[0]
@@ -232,7 +243,7 @@ def plan(gene: str, intent: EditIntent | str, cargo_bp: int, writable_df: pd.Dat
232
243
  return pd.DataFrame()
233
244
  # on_target = bin overlaps the gene body (not just the flank)
234
245
  g = _gene_coords()
235
- gr = g[g["gene"] == gene].iloc[0]
246
+ gr = g[g["gene"] == resolve_gene(gene)].iloc[0]
236
247
  sub["on_target"] = sub["bin"].between(int(gr["start"]) // BIN_BP, int(gr["end"]) // BIN_BP)
237
248
  scored = score_candidates(sub, intent, cargo_bp)
238
249
  cols = ["chrom", "bin", "writer", "safety", "p_durable", "writer_activity",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pen-stack
3
- Version: 6.2.1
3
+ Version: 6.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
@@ -90,9 +90,9 @@ every design against rule-grounded mechanism, reports calibrated confidence, cit
90
90
  [![codecov](https://codecov.io/gh/ahmedanees-m/pen-stack/branch/main/graph/badge.svg)](https://codecov.io/gh/ahmedanees-m/pen-stack)
91
91
  [![License: MIT](https://img.shields.io/badge/License-MIT-informational.svg)](LICENSE)
92
92
  [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/)
93
- [![Version](https://img.shields.io/badge/version-6.2.1-blue.svg)](CHANGELOG.md)
93
+ [![Version](https://img.shields.io/badge/version-6.2.3-blue.svg)](CHANGELOG.md)
94
94
  [![Status](https://img.shields.io/badge/status-1.0%20First%20Stable-success.svg)](docs/STABILITY.md)
95
- [![Tests](https://img.shields.io/badge/tests-369%20passing-success.svg)](tests/)
95
+ [![Tests](https://img.shields.io/badge/tests-371%20passing-success.svg)](tests/)
96
96
  [![Lint: ruff](https://img.shields.io/badge/lint-ruff-purple.svg)](https://github.com/astral-sh/ruff)
97
97
  [![Runtime: Docker](https://img.shields.io/badge/runtime-docker-2496ED.svg)](docker/)
98
98
  [![Validation: pre-registered](https://img.shields.io/badge/validation-pre--registered-critical.svg)](prereg/)
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pen-stack"
7
- version = "6.2.1"
7
+ version = "6.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"
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
File without changes
File without changes
File without changes
File without changes
File without changes