pen-stack 4.5.1__tar.gz → 5.1.0__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 (306) hide show
  1. {pen_stack-4.5.1 → pen_stack-5.1.0}/CHANGELOG.md +57 -0
  2. {pen_stack-4.5.1 → pen_stack-5.1.0}/CITATION.cff +2 -2
  3. {pen_stack-4.5.1 → pen_stack-5.1.0}/PKG-INFO +44 -8
  4. {pen_stack-4.5.1 → pen_stack-5.1.0}/README.md +43 -7
  5. {pen_stack-4.5.1 → pen_stack-5.1.0}/benchmarks/genome_writing_bench/LEADERBOARD.md +6 -5
  6. {pen_stack-4.5.1 → pen_stack-5.1.0}/benchmarks/genome_writing_bench/tasks.yaml +18 -1
  7. pen_stack-5.1.0/configs/delivery_vehicles.yaml +185 -0
  8. pen_stack-5.1.0/docs/co_scientist.md +31 -0
  9. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/__init__.py +1 -1
  10. pen_stack-5.1.0/pen_stack/agent/cite.py +119 -0
  11. pen_stack-5.1.0/pen_stack/agent/co_scientist.py +232 -0
  12. pen_stack-5.1.0/pen_stack/planner/delivery_immunology.py +160 -0
  13. pen_stack-5.1.0/pen_stack/validate/bench_coscientist_tasks.py +60 -0
  14. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/verify/schema.py +2 -0
  15. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/verify/service.py +16 -1
  16. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack.egg-info/PKG-INFO +44 -8
  17. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack.egg-info/SOURCES.txt +13 -0
  18. pen_stack-5.1.0/prereg/SHA256_LOCK_ws_cite.json +8 -0
  19. pen_stack-5.1.0/prereg/SHA256_LOCK_ws_crit.json +8 -0
  20. pen_stack-5.1.0/prereg/SHA256_LOCK_ws_immune.json +8 -0
  21. pen_stack-5.1.0/prereg/SHA256_LOCK_ws_plan.json +8 -0
  22. pen_stack-5.1.0/prereg/ws_cite.yaml +17 -0
  23. pen_stack-5.1.0/prereg/ws_crit.yaml +16 -0
  24. pen_stack-5.1.0/prereg/ws_immune.yaml +43 -0
  25. pen_stack-5.1.0/prereg/ws_plan.yaml +18 -0
  26. {pen_stack-4.5.1 → pen_stack-5.1.0}/pyproject.toml +1 -1
  27. pen_stack-4.5.1/configs/delivery_vehicles.yaml +0 -105
  28. {pen_stack-4.5.1 → pen_stack-5.1.0}/LICENSE +0 -0
  29. {pen_stack-4.5.1 → pen_stack-5.1.0}/MANIFEST.in +0 -0
  30. {pen_stack-4.5.1 → pen_stack-5.1.0}/bench/run.py +0 -0
  31. {pen_stack-4.5.1 → pen_stack-5.1.0}/benchmarks/genome_writing_bench/README.md +0 -0
  32. {pen_stack-4.5.1 → pen_stack-5.1.0}/benchmarks/genome_writing_bench/SHA256SUMS +0 -0
  33. {pen_stack-4.5.1 → pen_stack-5.1.0}/benchmarks/genome_writing_bench/SUBMISSIONS.md +0 -0
  34. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/atlas_families.yaml +0 -0
  35. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/bridge_offtarget_profile.yaml +0 -0
  36. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/cargo_polish.yaml +0 -0
  37. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/cell_types.yaml +0 -0
  38. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/datasets.yaml +0 -0
  39. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/delivery_constraints.yaml +0 -0
  40. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/delivery_rules.yaml +0 -0
  41. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/gates_v3.yaml +0 -0
  42. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/gsh_validated_heldout.yaml +0 -0
  43. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/intent_weights.yaml +0 -0
  44. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/known_unknowns.yaml +0 -0
  45. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/llm.yaml +0 -0
  46. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/monitor_queries.yaml +0 -0
  47. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/oracles/scope_cards.yaml +0 -0
  48. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/rules/delivery.yaml +0 -0
  49. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/rules/fold.yaml +0 -0
  50. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/rules/multiplex.yaml +0 -0
  51. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/rules/payload.yaml +0 -0
  52. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/rules/reachability.yaml +0 -0
  53. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/score_axes.yaml +0 -0
  54. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/target_sites.yaml +0 -0
  55. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/universe_crosswalk.yaml +0 -0
  56. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/write_types.yaml +0 -0
  57. {pen_stack-4.5.1 → pen_stack-5.1.0}/configs/wtkb_curated.yaml +0 -0
  58. {pen_stack-4.5.1 → pen_stack-5.1.0}/data/curated/bridge_offtarget_energetics.json +0 -0
  59. {pen_stack-4.5.1 → pen_stack-5.1.0}/data/curated/bridge_offtarget_profile_measured.parquet +0 -0
  60. {pen_stack-4.5.1 → pen_stack-5.1.0}/data/curated/gene_coords.parquet +0 -0
  61. {pen_stack-4.5.1 → pen_stack-5.1.0}/data/curated/unified_editor_universe.parquet +0 -0
  62. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/BACKLOG.md +0 -0
  63. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/DEPLOY.md +0 -0
  64. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/INFRA.md +0 -0
  65. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/MCP.md +0 -0
  66. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/RELEASING.md +0 -0
  67. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/REPRO.md +0 -0
  68. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/agent.md +0 -0
  69. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/alphagenome_feasibility.md +0 -0
  70. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/benchmark_circularity.md +0 -0
  71. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/cards/atlas.md +0 -0
  72. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/cards/durability.md +0 -0
  73. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/cards/safety.md +0 -0
  74. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/delivery.md +0 -0
  75. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/dissemination.md +0 -0
  76. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/environment.md +0 -0
  77. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/index.md +0 -0
  78. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/mechanistic_constraints.md +0 -0
  79. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/oracles.md +0 -0
  80. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/positioning.md +0 -0
  81. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/private_data_formats.md +0 -0
  82. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/quickstart.md +0 -0
  83. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/rules.md +0 -0
  84. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/scope.md +0 -0
  85. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/scorecard.md +0 -0
  86. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/tutorials/compare-families.md +0 -0
  87. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/tutorials/score-deliverability.md +0 -0
  88. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/tutorials/where-can-i-write.md +0 -0
  89. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/tutorials/which-writer-reaches-locus.md +0 -0
  90. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/uncertainty.md +0 -0
  91. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/verify.md +0 -0
  92. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/world_model.md +0 -0
  93. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/writer_verification.md +0 -0
  94. {pen_stack-4.5.1 → pen_stack-5.1.0}/docs/wtkb.md +0 -0
  95. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/_resources.py +0 -0
  96. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/adapt/__init__.py +0 -0
  97. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/adapt/finetune.py +0 -0
  98. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/adapt/ingest.py +0 -0
  99. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/adapt/pipeline.py +0 -0
  100. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/adapt/recalibrate.py +0 -0
  101. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/adapt/report.py +0 -0
  102. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/agent/__init__.py +0 -0
  103. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/agent/epistemic.py +0 -0
  104. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/agent/guardrails.py +0 -0
  105. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/agent/mcp_server.py +0 -0
  106. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/agent/orchestrator.py +0 -0
  107. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/agent/pen_agent.py +0 -0
  108. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/agent/scope.py +0 -0
  109. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/agent/tools.py +0 -0
  110. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/atlas/__init__.py +0 -0
  111. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/atlas/build_wtkb.py +0 -0
  112. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/atlas/crosslink.py +0 -0
  113. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/atlas/expand.py +0 -0
  114. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/atlas/schema.py +0 -0
  115. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/atlas/scorecard.py +0 -0
  116. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/atlas/universe.py +0 -0
  117. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/atlas/variant_propose.py +0 -0
  118. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/atlas/writer_verify.py +0 -0
  119. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/bridge/__init__.py +0 -0
  120. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/bridge/activity.py +0 -0
  121. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/bridge/cli.py +0 -0
  122. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/bridge/fold_qc.py +0 -0
  123. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/bridge/guide_qc.py +0 -0
  124. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/bridge/ingest.py +0 -0
  125. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/bridge/offtarget.py +0 -0
  126. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/bridge/offtarget_energetics.py +0 -0
  127. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/bridge/ortholog_screen.py +0 -0
  128. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/bridge/pipeline.py +0 -0
  129. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/cli.py +0 -0
  130. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/data/__init__.py +0 -0
  131. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/data/encode.py +0 -0
  132. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/data/genome.py +0 -0
  133. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/data/ingest_chromatin.py +0 -0
  134. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/data/ingest_integration.py +0 -0
  135. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/data/ingest_safety_annot.py +0 -0
  136. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/data/ingest_trip.py +0 -0
  137. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/env/__init__.py +0 -0
  138. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/env/genome_writing_env.py +0 -0
  139. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/env/policies.py +0 -0
  140. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/graph/__init__.py +0 -0
  141. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/graph/build.py +0 -0
  142. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/graph/cell_types.py +0 -0
  143. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/graph/ingest.py +0 -0
  144. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/graph/query.py +0 -0
  145. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/graph/schema.py +0 -0
  146. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/mech/__init__.py +0 -0
  147. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/mech/classify_atlas.py +0 -0
  148. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/mech/whitelist.py +0 -0
  149. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/monitor/__init__.py +0 -0
  150. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/monitor/europepmc.py +0 -0
  151. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/monitor/run.py +0 -0
  152. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/monitor/triage.py +0 -0
  153. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/oracles/__init__.py +0 -0
  154. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/oracles/cache.py +0 -0
  155. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/oracles/energetics.py +0 -0
  156. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/oracles/genome.py +0 -0
  157. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/oracles/protein_design.py +0 -0
  158. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/oracles/rna.py +0 -0
  159. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/oracles/schema.py +0 -0
  160. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/oracles/structure.py +0 -0
  161. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/planner/__init__.py +0 -0
  162. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/planner/cargo.py +0 -0
  163. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/planner/cargo_polish.py +0 -0
  164. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/planner/delivery.py +0 -0
  165. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/planner/delivery_constraints.py +0 -0
  166. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/planner/delivery_vehicles.py +0 -0
  167. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/planner/multiplex.py +0 -0
  168. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/planner/optimize.py +0 -0
  169. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/planner/pipeline.py +0 -0
  170. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/planner/report.py +0 -0
  171. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/planner/router.py +0 -0
  172. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/planner/target_site.py +0 -0
  173. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/rag/__init__.py +0 -0
  174. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/rag/index.py +0 -0
  175. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/rag/llm.py +0 -0
  176. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/rag/qa.py +0 -0
  177. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/rules/__init__.py +0 -0
  178. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/rules/evaluators.py +0 -0
  179. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/rules/loader.py +0 -0
  180. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/rules/schema.py +0 -0
  181. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/rules/solver.py +0 -0
  182. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/score/__init__.py +0 -0
  183. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/score/recalibrate.py +0 -0
  184. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/score/therapeutic.py +0 -0
  185. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/server/__init__.py +0 -0
  186. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/server/api.py +0 -0
  187. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/ui/__init__.py +0 -0
  188. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/ui/app.py +0 -0
  189. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/__init__.py +0 -0
  190. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/adapt_demo.py +0 -0
  191. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/agent_eval.py +0 -0
  192. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/bench_adversarial_tasks.py +0 -0
  193. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/bench_graph_tasks.py +0 -0
  194. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/bench_rule_tasks.py +0 -0
  195. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/bench_trust_tasks.py +0 -0
  196. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/bench_writetype_tasks.py +0 -0
  197. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/blind_gsh_discovery.py +0 -0
  198. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/cargo_directionality.py +0 -0
  199. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/durability_baselines.py +0 -0
  200. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/forward_hypotheses.py +0 -0
  201. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/guide_qc_demo.py +0 -0
  202. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/intent_specification.py +0 -0
  203. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/offtarget_energetics_eval.py +0 -0
  204. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/out_of_scope_refusal.py +0 -0
  205. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/outcome_calibration.py +0 -0
  206. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/paper3_benchmark.py +0 -0
  207. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/paper4_real_validation.py +0 -0
  208. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/paper4_validation.py +0 -0
  209. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/selective_prediction.py +0 -0
  210. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/seq_vs_measured.py +0 -0
  211. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/target_site_controls.py +0 -0
  212. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/uncertainty_eval.py +0 -0
  213. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/ungrounded_baseline.py +0 -0
  214. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/within_locus_ranking.py +0 -0
  215. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/validate/writer_recovery.py +0 -0
  216. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/verify/__init__.py +0 -0
  217. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/wgenome/__init__.py +0 -0
  218. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/wgenome/chromatin_seq.py +0 -0
  219. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/wgenome/durability.py +0 -0
  220. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/wgenome/export_tracks.py +0 -0
  221. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/wgenome/features.py +0 -0
  222. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/wgenome/gsh_baseline.py +0 -0
  223. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/wgenome/mesh_features.py +0 -0
  224. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/wgenome/ood.py +0 -0
  225. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/wgenome/providers.py +0 -0
  226. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/wgenome/safety.py +0 -0
  227. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/wgenome/structure3d.py +0 -0
  228. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/wgenome/uncertainty.py +0 -0
  229. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack/wgenome/writability.py +0 -0
  230. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack.egg-info/dependency_links.txt +0 -0
  231. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack.egg-info/entry_points.txt +0 -0
  232. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack.egg-info/requires.txt +0 -0
  233. {pen_stack-4.5.1 → pen_stack-5.1.0}/pen_stack.egg-info/top_level.txt +0 -0
  234. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_phase0.json +0 -0
  235. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_phase1_5.json +0 -0
  236. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_phase2.json +0 -0
  237. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_phase3.json +0 -0
  238. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_a.json +0 -0
  239. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_atlas.json +0 -0
  240. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_b.json +0 -0
  241. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_ba.json +0 -0
  242. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_ba_v33.json +0 -0
  243. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_ba_v45.json +0 -0
  244. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_bench.json +0 -0
  245. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_c.json +0 -0
  246. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_cal.json +0 -0
  247. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_ct.json +0 -0
  248. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_d.json +0 -0
  249. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_e.json +0 -0
  250. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_env.json +0 -0
  251. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_ep.json +0 -0
  252. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_f.json +0 -0
  253. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_g.json +0 -0
  254. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_graph.json +0 -0
  255. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_h.json +0 -0
  256. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_mc.json +0 -0
  257. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_mon.json +0 -0
  258. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_o.json +0 -0
  259. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_r.json +0 -0
  260. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_route.json +0 -0
  261. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_uq.json +0 -0
  262. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_v.json +0 -0
  263. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/SHA256_LOCK_ws_wv.json +0 -0
  264. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/paper1.yaml +0 -0
  265. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/paper2.yaml +0 -0
  266. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/paper3.yaml +0 -0
  267. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/paper4.yaml +0 -0
  268. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/phase0.yaml +0 -0
  269. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_a.yaml +0 -0
  270. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_atlas.yaml +0 -0
  271. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_b.yaml +0 -0
  272. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_ba.yaml +0 -0
  273. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_ba_v33.yaml +0 -0
  274. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_ba_v45.yaml +0 -0
  275. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_bench.yaml +0 -0
  276. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_c.yaml +0 -0
  277. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_cal.yaml +0 -0
  278. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_ct.yaml +0 -0
  279. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_d.yaml +0 -0
  280. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_e.yaml +0 -0
  281. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_env.yaml +0 -0
  282. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_ep.yaml +0 -0
  283. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_f.yaml +0 -0
  284. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_g.yaml +0 -0
  285. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_graph.yaml +0 -0
  286. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_h.yaml +0 -0
  287. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_mc.yaml +0 -0
  288. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_mon.yaml +0 -0
  289. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_o.yaml +0 -0
  290. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_r.yaml +0 -0
  291. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_route.yaml +0 -0
  292. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_uq.yaml +0 -0
  293. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_v.yaml +0 -0
  294. {pen_stack-4.5.1 → pen_stack-5.1.0}/prereg/ws_wv.yaml +0 -0
  295. {pen_stack-4.5.1 → pen_stack-5.1.0}/scripts/p1_build_atlas.py +0 -0
  296. {pen_stack-4.5.1 → pen_stack-5.1.0}/scripts/p1_build_durability.py +0 -0
  297. {pen_stack-4.5.1 → pen_stack-5.1.0}/scripts/p1_export_tracks.py +0 -0
  298. {pen_stack-4.5.1 → pen_stack-5.1.0}/scripts/p1_safety_concordance.py +0 -0
  299. {pen_stack-4.5.1 → pen_stack-5.1.0}/scripts/p1_train_safety.py +0 -0
  300. {pen_stack-4.5.1 → pen_stack-5.1.0}/scripts/p1_validation_report.py +0 -0
  301. {pen_stack-4.5.1 → pen_stack-5.1.0}/scripts/p2_build_atlas.py +0 -0
  302. {pen_stack-4.5.1 → pen_stack-5.1.0}/scripts/p3_benchmark_report.py +0 -0
  303. {pen_stack-4.5.1 → pen_stack-5.1.0}/scripts/p4_genome_scan.py +0 -0
  304. {pen_stack-4.5.1 → pen_stack-5.1.0}/scripts/ws_b_report.py +0 -0
  305. {pen_stack-4.5.1 → pen_stack-5.1.0}/scripts/ws_c_report.py +0 -0
  306. {pen_stack-4.5.1 → pen_stack-5.1.0}/setup.cfg +0 -0
@@ -3,6 +3,63 @@
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
+ ## [5.1.0] - 2026-06-10 - v5.1 release: Delivery immunology (the safety↔efficacy balance)
7
+
8
+ The delivery palette gains a **documented, cited, qualitative immune + safety + efficacy profile** per vehicle,
9
+ so the substrate can make the safety↔efficacy tradeoff legible and user-weightable — without ever predicting an
10
+ immune magnitude (that stays a declared known-unknown). Workstream WS-IMMUNE, SHA-locked.
11
+
12
+ ### Added
13
+ - **WS-IMMUNE config** — `configs/delivery_vehicles.yaml` (v1.1): an `immune_safety` block on all 8 vehicles
14
+ (`preexisting_immunity`, `neutralizing_antibody`, `innate_immune`, `adaptive_immune`, `genotoxicity`,
15
+ `efficacy`, `tradeoff`, `immune_dois`) — DOCUMENTED ordinal low/moderate/high priors, every `immune_doi`
16
+ Crossref-verified and in the curated-DOI set (citations resolve by construction).
17
+ - **WS-IMMUNE planner** — `pen_stack/planner/delivery_immunology.py`: `safety_efficacy_profile()` reports two
18
+ **separate** safety sub-axes — `immune_score` (immunogenicity; reversible, eligibility/re-dosing) and
19
+ `genotox_score` (insertional/oncogenic; permanent) — never collapsed, with headline
20
+ `safety_score = min(immune_score, genotox_score)` (precautionary worst-axis). `recommend_delivery(cargo_form,
21
+ cargo_bp, safety_weight, in_vivo)` ranks the eligible palette along the safety↔efficacy frontier by a
22
+ user-supplied weight. Reproduces the stated tradeoff: AAV is dinged on immunogenicity, lentivirus on
23
+ genotoxicity. `prereg/ws_immune.yaml`.
24
+ - **WS-IMMUNE verify** — `Verdict.delivery_profile` + a `delivery_immune_profile` scope flag: `verify()` now
25
+ surfaces the documented profile and tradeoff for a chosen vehicle, always attaching the standing
26
+ `in_vivo_immunogenicity` known-unknown flag — never adding confidence, never predicting a magnitude.
27
+
28
+ ### Changed
29
+ - Version 5.0.0 -> 5.1.0 (minor — additive delivery-immunology layer); `cite.curated_dois()` now also ingests
30
+ the per-vehicle `immune_dois`.
31
+
32
+ ### Honesty invariant (unchanged)
33
+ - The in-vivo immune MAGNITUDE (patient/construct-specific response) remains a declared known-unknown
34
+ (`configs/known_unknowns.yaml: in_vivo_immunogenicity`) and is **never** predicted. v5.1 exposes only
35
+ documented ordinal priors plus a transparent, user-weighted ranking — it makes the boundary legible, it does
36
+ not close it.
37
+
38
+ ## [5.0.0] - 2026-06-09 - v5.0 release: the Co-Scientist (capstone — smart because it is grounded)
39
+
40
+ The reasoning ceiling rises while the grounding floor stays fixed: a co-scientist that proposes multiple
41
+ distinct strategies, critiques and revises its own plans, cites its reasoning, and itemises what it cannot
42
+ assess — with **no-fabrication holding across the full reasoning stack** (the central gate). Workstreams
43
+ WS-{PLAN,MULTI,CRIT,SCOPE2,CITE,GEN}, each SHA-locked.
44
+
45
+ ### Added
46
+ - **WS-PLAN + WS-MULTI** — `pen_stack/agent/co_scientist.py`: `propose_strategies()` returns 2–3 **materially
47
+ distinct** strategies (≥2 design axes differ — measured by `distinctness()`, not reworded), each
48
+ independently legal + confidence-tagged; `deliberate()` benchmarks the deliberative planner vs the
49
+ deterministic baseline. `prereg/ws_plan.yaml`.
50
+ - **WS-CRIT + WS-SCOPE2** — `critique()` / `critique_and_revise()` (the critic only flags + swaps a design
51
+ choice, never invents a number; revisions re-verified) + `critique_falsifiability()` (improves flawed plans
52
+ illegal→legal, 0 spurious revisions on clean) + `scope_ledger()` (per-recommendation: what was/ wasn't
53
+ assessed, the known-unknowns itemised). `prereg/ws_crit.yaml`.
54
+ - **WS-CITE + WS-GEN** — `pen_stack/agent/cite.py`: `cited_rationale()` (citations drawn from the curated
55
+ world-model → resolve by construction) + `citations_grounded()` guard (rejects any DOI not in the curated
56
+ set) + `generalise()` (adjacent tasks grounded-or-refused). `prereg/ws_cite.yaml`.
57
+ - **Bench v0.3.2** — `co_scientist_grounded` reference-solver task: grounded rate 1.0 vs ungrounded 0.0;
58
+ no-fabrication across the full stack. `docs/co_scientist.md`.
59
+
60
+ ### Changed
61
+ - Version 4.5.1 -> 5.0.0 (major — the substrate matured into a grounded co-scientist); bench 0.3.1 -> 0.3.2.
62
+
6
63
  ## [4.5.1] - 2026-06-09 - ID-correctness patch: cell-type ontology IDs
7
64
 
8
65
  ### Fixed
@@ -1,8 +1,8 @@
1
1
  cff-version: 1.2.0
2
2
  message: "If you use PEN-STACK, please cite it as below."
3
3
  title: "PEN-STACK: open infrastructure for genome writing"
4
- version: 4.5.1
5
- date-released: 2026-06-01
4
+ version: 5.1.0
5
+ date-released: 2026-06-10
6
6
  authors:
7
7
  - family-names: "Mahaboob Ali"
8
8
  given-names: "Anees Ahmed"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pen-stack
3
- Version: 4.5.1
3
+ Version: 5.1.0
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
@@ -77,10 +77,12 @@ Dynamic: license-file
77
77
 
78
78
  # PEN-STACK
79
79
 
80
- ### The Writable Genome - open infrastructure for genome *writing*
80
+ ### The verification & grounding substrate for genome-writing AI — matured into a co-scientist
81
81
 
82
- *Editing tools tell you **how** to change a base. PEN-STACK tells you **where** in the genome you can safely
83
- and durably write new DNA, **which enzyme** can write it there, and **how** to design the write end-to-end.*
82
+ *The foundation models *generate*; PEN-STACK *checks*. It tells you **where** in the genome you can safely and
83
+ durably write, **which enzyme** can write it there, and **how** to design the write end-to-end — then verifies
84
+ every design against rule-grounded mechanism, reports calibrated confidence, cites its reasoning, and says
85
+ "out of scope" rather than guess. Every number comes from a validated tool; nothing is fabricated.*
84
86
 
85
87
  [![PyPI](https://img.shields.io/pypi/v/pen-stack.svg)](https://pypi.org/project/pen-stack/)
86
88
  [![CI](https://github.com/ahmedanees-m/pen-stack/actions/workflows/ci.yml/badge.svg)](https://github.com/ahmedanees-m/pen-stack/actions/workflows/ci.yml)
@@ -89,12 +91,12 @@ and durably write new DNA, **which enzyme** can write it there, and **how** to d
89
91
  [![codecov](https://codecov.io/gh/ahmedanees-m/pen-stack/branch/main/graph/badge.svg)](https://codecov.io/gh/ahmedanees-m/pen-stack)
90
92
  [![License: MIT](https://img.shields.io/badge/License-MIT-informational.svg)](LICENSE)
91
93
  [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/)
92
- [![Version](https://img.shields.io/badge/version-4.5.1-blue.svg)](CHANGELOG.md)
93
- [![Tests](https://img.shields.io/badge/tests-224%20passing-success.svg)](tests/)
94
+ [![Version](https://img.shields.io/badge/version-5.1.0-blue.svg)](CHANGELOG.md)
95
+ [![Tests](https://img.shields.io/badge/tests-240%20passing-success.svg)](tests/)
94
96
  [![Lint: ruff](https://img.shields.io/badge/lint-ruff-purple.svg)](https://github.com/astral-sh/ruff)
95
97
  [![Runtime: Docker](https://img.shields.io/badge/runtime-docker-2496ED.svg)](docker/)
96
98
  [![Validation: pre-registered](https://img.shields.io/badge/validation-pre--registered-critical.svg)](prereg/)
97
- [![Genome-Writing Bench v0.3](https://img.shields.io/badge/benchmark-Genome--Writing%20Bench%20v0.3.1-6f42c1.svg)](benchmarks/genome_writing_bench/)
99
+ [![Genome-Writing Bench v0.3](https://img.shields.io/badge/benchmark-Genome--Writing%20Bench%20v0.3.2-6f42c1.svg)](benchmarks/genome_writing_bench/)
98
100
 
99
101
  **Built on five prior, separately published repositories:**
100
102
 
@@ -133,6 +135,40 @@ Two questions gate every genome-writing project, and before PEN-STACK no resourc
133
135
  Everything is built on bulk-downloadable public data, runs on a single GPU, and is validated **blind** against
134
136
  a pre-registered, honest baseline before release.
135
137
 
138
+ ## What is new in v5.1 — Delivery immunology (the safety↔efficacy balance)
139
+
140
+ v5.1 makes the delivery palette's **safety↔efficacy tradeoff legible and user-weightable**. Every vehicle now
141
+ carries a documented, cited, qualitative immune + safety + efficacy profile — so you can ask for a *balance*
142
+ (AAV is safe by integration but neutralizing-antibody/pre-existing-immunity limited; lentivirus is a highly
143
+ efficacious integrator but its genotoxicity is the dominant concern). Crucially, the in-vivo immune
144
+ **magnitude** stays a declared known-unknown — v5.1 surfaces documented priors, it does **not** predict a
145
+ patient-specific immune response.
146
+
147
+ | Workstream | What it adds | Result |
148
+ |---|---|---|
149
+ | **IMMUNE config** | `immune_safety` block on all 8 vehicles in `configs/delivery_vehicles.yaml` | documented ordinal (low/moderate/high) priors for pre-existing immunity, neutralizing antibody, innate/adaptive immune, **genotoxicity**, efficacy — every `immune_doi` Crossref-verified and in the curated-DOI set |
150
+ | **IMMUNE planner** | `planner/delivery_immunology.py` — `safety_efficacy_profile()` / `recommend_delivery()` | two **separate** safety sub-axes (`immune_score` reversible vs `genotox_score` permanent), never collapsed; headline `safety_score = min(...)` (worst-axis); ranks the palette along the safety↔efficacy frontier by a **user weight** |
151
+ | **IMMUNE verify** | `Verdict.delivery_profile` + `delivery_immune_profile` scope flag | `verify()` surfaces the documented tradeoff for a chosen vehicle, always attaching the `in_vivo_immunogenicity` known-unknown flag — never adding confidence, never predicting a magnitude |
152
+
153
+ See `prereg/ws_immune.yaml`.
154
+
155
+ ## What is new in v5.0 — the Co-Scientist (smart because it is grounded)
156
+
157
+ v5.0 matures the reasoning layer on top of everything beneath it. Given a goal and an intent, PEN-STACK
158
+ returns a small set of **materially distinct, ranked, fully-traceable strategies** — each verified,
159
+ calibrated, cited, and scope-ledgered — while the **no-fabrication guarantee holds by construction**: the
160
+ reasoning layer proposes and critiques, but every number still comes from a validated tool or oracle.
161
+ Intelligence rises while groundedness never falls.
162
+
163
+ | Workstream | What it adds | Result |
164
+ |---|---|---|
165
+ | **PLAN + MULTI** | `agent/co_scientist.py` — `propose_strategies()` / `deliberate()` | 2–3 **materially-distinct** strategies (≥2 design axes differ — *measured*, not reworded), each independently **legal** + **confidence-tagged**; deliberative planner benchmarked vs the deterministic baseline |
166
+ | **CRIT + SCOPE2** | self-critique/revise loop + scope ledger | the critic only flags + swaps (never invents a number); revisions are **re-verified** and **falsifiable** (improve flawed plans illegal→legal, never touch clean ones); every recommendation carries a **complete scope ledger** itemising the known-unknowns |
167
+ | **CITE + GEN** | `agent/cite.py` — cited rationale + scoped generalisation | citations are **drawn from the curated world-model** (resolve by construction); a guard **rejects any hallucinated DOI**; adjacent tasks are **grounded-or-refused** |
168
+ | **central gate** | `co_scientist_grounded` bench (v0.3.2) | grounded rate **1.0** vs ungrounded **0.0**; **no-fabrication holds across the full reasoning stack** (asserted) |
169
+
170
+ See `docs/co_scientist.md` and `prereg/ws_{plan,crit,cite}.yaml`.
171
+
136
172
  ## What is new in v4.5 — the Living World-Model (a knowledge graph that keeps itself current)
137
173
 
138
174
  v4.5 promotes the flat atlas/WT-KB/crosslink tables into a queryable **knowledge graph**: writers, loci,
@@ -412,7 +448,7 @@ pen-stack/
412
448
  │ │ + v3.3 router (write-type dispatch) / delivery_vehicles (8-vehicle palette)
413
449
  │ ├── bridge/ bridge off-target engine (Paper 4): offtarget / fold_qc / guide_qc / pipeline / cli
414
450
  │ │ + v3.2 offtarget_energetics (position x substitution; held-out 0.88, ships)
415
- │ ├── agent/ agentic platform: tools / orchestrator / pen_agent / mcp_server / guardrails
451
+ │ ├── agent/ agentic platform: tools / orchestrator / pen_agent / mcp_server / guardrails; v5.0 co_scientist + cite (multi-strategy, self-critique, cited rationale, scope ledger)
416
452
  │ │ + v3.2 epistemic (3-tier status) / scope (known-unknowns matcher)
417
453
  │ ├── graph/ v4.5 living world-model knowledge graph (schema/build/query/ingest/cell_types); typed provenanced edges; gated living loop (propose-only)
418
454
  │ ├── oracles/ v4.0 L1 oracle mesh: OracleResult contract + adapters (genome/structure/protein_design/rna/energetics) over the foundation models; version-pinned cache
@@ -2,10 +2,12 @@
2
2
 
3
3
  # PEN-STACK
4
4
 
5
- ### The Writable Genome - open infrastructure for genome *writing*
5
+ ### The verification & grounding substrate for genome-writing AI — matured into a co-scientist
6
6
 
7
- *Editing tools tell you **how** to change a base. PEN-STACK tells you **where** in the genome you can safely
8
- and durably write new DNA, **which enzyme** can write it there, and **how** to design the write end-to-end.*
7
+ *The foundation models *generate*; PEN-STACK *checks*. It tells you **where** in the genome you can safely and
8
+ durably write, **which enzyme** can write it there, and **how** to design the write end-to-end — then verifies
9
+ every design against rule-grounded mechanism, reports calibrated confidence, cites its reasoning, and says
10
+ "out of scope" rather than guess. Every number comes from a validated tool; nothing is fabricated.*
9
11
 
10
12
  [![PyPI](https://img.shields.io/pypi/v/pen-stack.svg)](https://pypi.org/project/pen-stack/)
11
13
  [![CI](https://github.com/ahmedanees-m/pen-stack/actions/workflows/ci.yml/badge.svg)](https://github.com/ahmedanees-m/pen-stack/actions/workflows/ci.yml)
@@ -14,12 +16,12 @@ and durably write new DNA, **which enzyme** can write it there, and **how** to d
14
16
  [![codecov](https://codecov.io/gh/ahmedanees-m/pen-stack/branch/main/graph/badge.svg)](https://codecov.io/gh/ahmedanees-m/pen-stack)
15
17
  [![License: MIT](https://img.shields.io/badge/License-MIT-informational.svg)](LICENSE)
16
18
  [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/)
17
- [![Version](https://img.shields.io/badge/version-4.5.1-blue.svg)](CHANGELOG.md)
18
- [![Tests](https://img.shields.io/badge/tests-224%20passing-success.svg)](tests/)
19
+ [![Version](https://img.shields.io/badge/version-5.1.0-blue.svg)](CHANGELOG.md)
20
+ [![Tests](https://img.shields.io/badge/tests-240%20passing-success.svg)](tests/)
19
21
  [![Lint: ruff](https://img.shields.io/badge/lint-ruff-purple.svg)](https://github.com/astral-sh/ruff)
20
22
  [![Runtime: Docker](https://img.shields.io/badge/runtime-docker-2496ED.svg)](docker/)
21
23
  [![Validation: pre-registered](https://img.shields.io/badge/validation-pre--registered-critical.svg)](prereg/)
22
- [![Genome-Writing Bench v0.3](https://img.shields.io/badge/benchmark-Genome--Writing%20Bench%20v0.3.1-6f42c1.svg)](benchmarks/genome_writing_bench/)
24
+ [![Genome-Writing Bench v0.3](https://img.shields.io/badge/benchmark-Genome--Writing%20Bench%20v0.3.2-6f42c1.svg)](benchmarks/genome_writing_bench/)
23
25
 
24
26
  **Built on five prior, separately published repositories:**
25
27
 
@@ -58,6 +60,40 @@ Two questions gate every genome-writing project, and before PEN-STACK no resourc
58
60
  Everything is built on bulk-downloadable public data, runs on a single GPU, and is validated **blind** against
59
61
  a pre-registered, honest baseline before release.
60
62
 
63
+ ## What is new in v5.1 — Delivery immunology (the safety↔efficacy balance)
64
+
65
+ v5.1 makes the delivery palette's **safety↔efficacy tradeoff legible and user-weightable**. Every vehicle now
66
+ carries a documented, cited, qualitative immune + safety + efficacy profile — so you can ask for a *balance*
67
+ (AAV is safe by integration but neutralizing-antibody/pre-existing-immunity limited; lentivirus is a highly
68
+ efficacious integrator but its genotoxicity is the dominant concern). Crucially, the in-vivo immune
69
+ **magnitude** stays a declared known-unknown — v5.1 surfaces documented priors, it does **not** predict a
70
+ patient-specific immune response.
71
+
72
+ | Workstream | What it adds | Result |
73
+ |---|---|---|
74
+ | **IMMUNE config** | `immune_safety` block on all 8 vehicles in `configs/delivery_vehicles.yaml` | documented ordinal (low/moderate/high) priors for pre-existing immunity, neutralizing antibody, innate/adaptive immune, **genotoxicity**, efficacy — every `immune_doi` Crossref-verified and in the curated-DOI set |
75
+ | **IMMUNE planner** | `planner/delivery_immunology.py` — `safety_efficacy_profile()` / `recommend_delivery()` | two **separate** safety sub-axes (`immune_score` reversible vs `genotox_score` permanent), never collapsed; headline `safety_score = min(...)` (worst-axis); ranks the palette along the safety↔efficacy frontier by a **user weight** |
76
+ | **IMMUNE verify** | `Verdict.delivery_profile` + `delivery_immune_profile` scope flag | `verify()` surfaces the documented tradeoff for a chosen vehicle, always attaching the `in_vivo_immunogenicity` known-unknown flag — never adding confidence, never predicting a magnitude |
77
+
78
+ See `prereg/ws_immune.yaml`.
79
+
80
+ ## What is new in v5.0 — the Co-Scientist (smart because it is grounded)
81
+
82
+ v5.0 matures the reasoning layer on top of everything beneath it. Given a goal and an intent, PEN-STACK
83
+ returns a small set of **materially distinct, ranked, fully-traceable strategies** — each verified,
84
+ calibrated, cited, and scope-ledgered — while the **no-fabrication guarantee holds by construction**: the
85
+ reasoning layer proposes and critiques, but every number still comes from a validated tool or oracle.
86
+ Intelligence rises while groundedness never falls.
87
+
88
+ | Workstream | What it adds | Result |
89
+ |---|---|---|
90
+ | **PLAN + MULTI** | `agent/co_scientist.py` — `propose_strategies()` / `deliberate()` | 2–3 **materially-distinct** strategies (≥2 design axes differ — *measured*, not reworded), each independently **legal** + **confidence-tagged**; deliberative planner benchmarked vs the deterministic baseline |
91
+ | **CRIT + SCOPE2** | self-critique/revise loop + scope ledger | the critic only flags + swaps (never invents a number); revisions are **re-verified** and **falsifiable** (improve flawed plans illegal→legal, never touch clean ones); every recommendation carries a **complete scope ledger** itemising the known-unknowns |
92
+ | **CITE + GEN** | `agent/cite.py` — cited rationale + scoped generalisation | citations are **drawn from the curated world-model** (resolve by construction); a guard **rejects any hallucinated DOI**; adjacent tasks are **grounded-or-refused** |
93
+ | **central gate** | `co_scientist_grounded` bench (v0.3.2) | grounded rate **1.0** vs ungrounded **0.0**; **no-fabrication holds across the full reasoning stack** (asserted) |
94
+
95
+ See `docs/co_scientist.md` and `prereg/ws_{plan,crit,cite}.yaml`.
96
+
61
97
  ## What is new in v4.5 — the Living World-Model (a knowledge graph that keeps itself current)
62
98
 
63
99
  v4.5 promotes the flat atlas/WT-KB/crosslink tables into a queryable **knowledge graph**: writers, loci,
@@ -337,7 +373,7 @@ pen-stack/
337
373
  │ │ + v3.3 router (write-type dispatch) / delivery_vehicles (8-vehicle palette)
338
374
  │ ├── bridge/ bridge off-target engine (Paper 4): offtarget / fold_qc / guide_qc / pipeline / cli
339
375
  │ │ + v3.2 offtarget_energetics (position x substitution; held-out 0.88, ships)
340
- │ ├── agent/ agentic platform: tools / orchestrator / pen_agent / mcp_server / guardrails
376
+ │ ├── agent/ agentic platform: tools / orchestrator / pen_agent / mcp_server / guardrails; v5.0 co_scientist + cite (multi-strategy, self-critique, cited rationale, scope ledger)
341
377
  │ │ + v3.2 epistemic (3-tier status) / scope (known-unknowns matcher)
342
378
  │ ├── graph/ v4.5 living world-model knowledge graph (schema/build/query/ingest/cell_types); typed provenanced edges; gated living loop (propose-only)
343
379
  │ ├── oracles/ v4.0 L1 oracle mesh: OracleResult contract + adapters (genome/structure/protein_design/rna/energetics) over the foundation models; version-pinned cache
@@ -1,12 +1,12 @@
1
- # Genome-Writing Bench v0.3.1 - Leaderboard
1
+ # Genome-Writing Bench v0.3.2 - Leaderboard
2
2
 
3
- Tasks: **15/15 available** in this run (unavailable = needs the Phase-1 atlas / Perry tables / an LLM, which run on the VM/local).
4
- Deterministic planner beats the naive baseline on **11/11** grounded tasks with a baseline.
3
+ Tasks: **16/16 available** in this run (unavailable = needs the Phase-1 atlas / Perry tables / an LLM, which run on the VM/local).
4
+ Deterministic planner beats the naive baseline on **12/12** grounded tasks with a baseline.
5
5
 
6
6
  | Solver | Tasks scored | Beats naive | No-fabrication | Note |
7
7
  |---|---|---|---|---|
8
- | deterministic_planner | 15 | 11/11 | n/a (deterministic) | validated planning tools - the reference |
9
- | naive_baseline | 11 | - | n/a (deterministic) | safety-only / prevalence / Hamming baselines |
8
+ | deterministic_planner | 16 | 12/12 | n/a (deterministic) | validated planning tools - the reference |
9
+ | naive_baseline | 12 | - | n/a (deterministic) | safety-only / prevalence / Hamming baselines |
10
10
 
11
11
  ## Per-task results
12
12
  | Task | Family | Available | Planner | Naive baseline | Gate |
@@ -26,6 +26,7 @@ Deterministic planner beats the naive baseline on **11/11** grounded tasks with
26
26
  | multi_write_type_legality | MW_multi_write_type | True | 1.0 | 0.0 | - |
27
27
  | adversarial_robustness | T13_scope_disguise | True | 1.0 | 0.0 | - |
28
28
  | graph_multihop_reasoning | GR_graph_reasoning | True | 1.0 | 0.0 | - |
29
+ | co_scientist_grounded | CS_co_scientist | True | 1.0 | 0.0 | - |
29
30
 
30
31
  ## Trust tasks (T8-T11) - calibration + scope-awareness separate *trustworthy* agents
31
32
  Each contrasts the **uncertainty-aware** agent (conformal coverage, selective prediction, OOD flagging, out-of-scope deferral) with an **over-confident** baseline (an uncalibrated interval, no abstention, never flags OOD, no scope layer). The over-confident agent is the realistic failure mode a calibrated co-scientist must beat.
@@ -8,7 +8,7 @@
8
8
  # A task names a `scorer` (module.function in pen_stack.validate / pen_stack.bridge) and a `metric` key to
9
9
  # read from its report. Solvers (deterministic planner, naive baseline, LLM agent) are compared on the same
10
10
  # tasks; a solver that cannot ground a number must refuse, not invent (no-fabrication is a hard gate).
11
- version: "0.3.1"
11
+ version: "0.3.2"
12
12
  prepared: "2026-06-09"
13
13
 
14
14
  taxonomy:
@@ -35,6 +35,8 @@ taxonomy:
35
35
  T16_distribution_shift: "an OOD context -> confidence is deflated (extrapolating), not reported at the in-distribution level"
36
36
  # v0.3.1 (v4.5): multi-hop reasoning over the living world-model graph.
37
37
  GR_graph_reasoning: "answer a multi-hop design question (writers reaching a locus AND deliverable carrying a cargo form) as a PROVENANCED graph traversal (vs an ungrounded agent that cannot cite a path)"
38
+ # v0.3.2 (v5.0): the matured co-scientist as reference solver.
39
+ CS_co_scientist: "end-to-end grounded design: multiple materially-distinct legal confidence-tagged strategies, each citation-grounded + scope-ledgered, no-fabrication across the full reasoning stack (vs an ungrounded agent producing none of these)"
38
40
 
39
41
  tasks:
40
42
  - id: site_selection_blind_gsh
@@ -207,3 +209,18 @@ tasks:
207
209
  circular: false
208
210
  note: "v4.5 world-model graph: a design question answered as one grounded traversal; an ungrounded agent
209
211
  has no graph and cannot produce a provenanced path (0 by construction). no-fabrication holds."
212
+
213
+ # ---- v0.3.2 (v5.0): the matured co-scientist as the reference solver.
214
+ - id: co_scientist_grounded
215
+ family: CS_co_scientist
216
+ scorer: "pen_stack.validate.bench_coscientist_tasks:run"
217
+ metric: "co_scientist_grounded_rate"
218
+ baseline_metric: "ungrounded_baseline_rate"
219
+ higher_is_better: true
220
+ ground_truth: "frozen panel of write goals; a recommendation set is 'fully grounded' iff it is multiple
221
+ materially-distinct (>=2 design axes) + each legal (verifier) + confidence-tagged (calibrated) + the
222
+ rationale's citations are in the curated DOI set + the scope ledger is complete + no-fabrication - all
223
+ mechanistic/verifier facts, not the agent's own claim (non-circular)"
224
+ circular: false
225
+ note: "v5.0 capstone: the matured co-scientist; the central gate is no-fabrication under the FULL reasoning
226
+ stack. An ungrounded agent produces none of these grounded properties (0 by construction)."
@@ -0,0 +1,185 @@
1
+ # PEN-STACK v3.3 — Delivery vehicle palette (WS-D / North-Star §4). The substrate must score and constrain
2
+ # the WHOLE delivery palette, not just dual-AAV. Each row: cargo capacity, integration, division dependence,
3
+ # immunogenicity PRIOR (qualitative; MAGNITUDE is a known-unknown — never predicted), re-dosability, tropism,
4
+ # ex/in-vivo, compatible cargo form {DNA, mRNA, RNP}, and >=1 DOI. Values cited to 2026 sources.
5
+ # `constraint_key` maps to configs/delivery_constraints.yaml for the sequence-level scan.
6
+ #
7
+ # v5.1 — `immune_safety`: a DOCUMENTED, CITED, QUALITATIVE (low/moderate/high) immune + safety + efficacy
8
+ # profile per vehicle, for the safety<->efficacy balance (planner/delivery_immunology.py). These are ordinal
9
+ # DOCUMENTED PRIORS from the literature — NOT a predicted, patient- or construct-specific immune magnitude
10
+ # (that stays a known-unknown / scope flag, `in_vivo_immunogenicity`, never predicted). `genotoxicity` = the
11
+ # integration / insertional-mutagenesis risk; `efficacy` = transduction/integration efficiency.
12
+
13
+ version: "1.1"
14
+
15
+ vehicles:
16
+ AAV_single:
17
+ cargo_capacity_bp: 4700
18
+ integrating: false # episomal
19
+ division_dependent: false
20
+ immunogenicity_prior: "moderate-high; pre-existing NAbs exclude 30-60% of patients"
21
+ re_dosable: false
22
+ tropism: "serotype-dependent (liver, muscle, CNS, retina)"
23
+ in_vivo: true
24
+ compatible_cargo_form: [DNA]
25
+ constraint_key: AAV
26
+ dois: ["10.1038/s41573-019-0012-9"]
27
+ immune_safety:
28
+ preexisting_immunity: high # serotype-dependent; seroprevalence ~30-60% of patients
29
+ neutralizing_antibody: high # pre-existing + vector-elicited NAbs; exclude/relapse risk
30
+ innate_immune: low
31
+ adaptive_immune: moderate # capsid-directed CD8 T-cell responses
32
+ genotoxicity: low # episomal, non-integrating
33
+ efficacy: high # efficient in-vivo transduction (cargo-limited ~4.7 kb)
34
+ tradeoff: "safe vector (non-integrating, low genotoxicity) BUT pre-existing/elicited NAbs limit eligibility and prevent re-dosing"
35
+ immune_dois: ["10.1182/blood-2013-01-306647", "10.1089/hum.2009.182", "10.1016/j.ymthe.2019.12.010"]
36
+
37
+ AAV_dual:
38
+ cargo_capacity_bp: 9000 # split across 2 capsids (~9 kb); efficiency drops sharply
39
+ integrating: false
40
+ division_dependent: false
41
+ immunogenicity_prior: "as AAV; split lowers efficiency"
42
+ re_dosable: false
43
+ tropism: "serotype-dependent"
44
+ in_vivo: true
45
+ compatible_cargo_form: [DNA]
46
+ constraint_key: AAV
47
+ dois: ["10.1128/JVI.79.15.9933-9944.2005"] # Grieger & Samulski 2005, AAV packaging capacity
48
+ immune_safety:
49
+ preexisting_immunity: high # same AAV capsid immunology as single
50
+ neutralizing_antibody: high
51
+ innate_immune: low
52
+ adaptive_immune: moderate
53
+ genotoxicity: low # episomal
54
+ efficacy: moderate # split across 2 capsids -> co-transduction needed, efficiency drops
55
+ tradeoff: "as AAV (non-integrating, NAb-limited) AND split-capsid co-transduction lowers efficiency"
56
+ immune_dois: ["10.1182/blood-2013-01-306647", "10.1089/hum.2009.182"]
57
+
58
+ lentivirus:
59
+ cargo_capacity_bp: 8000
60
+ integrating: true # semi-random integration
61
+ division_dependent: false # integrates in non-dividing too; strong in dividing
62
+ immunogenicity_prior: "moderate"
63
+ re_dosable: false
64
+ tropism: "broad (VSV-G pseudotyped)"
65
+ ex_vivo: true
66
+ compatible_cargo_form: [DNA]
67
+ constraint_key: lentiviral
68
+ dois: ["10.1126/science.1233151"]
69
+ immune_safety:
70
+ preexisting_immunity: low # pseudotyped, typically ex-vivo (no host pre-immunity to the vector)
71
+ neutralizing_antibody: low # ex-vivo use avoids humoral neutralisation
72
+ innate_immune: low # ex-vivo
73
+ adaptive_immune: low # ex-vivo
74
+ genotoxicity: moderate # INTEGRATING: insertional-mutagenesis risk; SIN-LTR + gene-body bias reduce but do not eliminate it (gamma-retro LMO2 precedent)
75
+ efficacy: high # efficient, STABLE integration; large-ish cargo (~8 kb); transduces non-dividing cells
76
+ tradeoff: "highly efficacious STABLE integration BUT insertional-mutagenesis / genotoxicity is the dominant safety concern (mitigated by SIN design, not eliminated)"
77
+ immune_dois: ["10.1038/s41375-018-0106-0", "10.1038/nbt1216", "10.1126/science.1088547"]
78
+
79
+ helper_dependent_adenovirus:
80
+ cargo_capacity_bp: 35000 # "gutless" HDAd, up to ~35 kb
81
+ integrating: false
82
+ division_dependent: false
83
+ immunogenicity_prior: "high (innate + adaptive)"
84
+ re_dosable: false
85
+ tropism: "liver and others"
86
+ in_vivo: true
87
+ compatible_cargo_form: [DNA]
88
+ constraint_key: plasmid
89
+ dois: ["10.1128/JVI.72.2.926-933.1998"] # multiply-deleted (gutless-class) adenovirus vectors
90
+ immune_safety:
91
+ preexisting_immunity: high # widespread prior adenovirus exposure in the population
92
+ neutralizing_antibody: high # anti-Ad NAbs common; limit systemic in-vivo dosing
93
+ innate_immune: high # potent acute innate/inflammatory response to the capsid
94
+ adaptive_immune: high # strong anti-vector adaptive response
95
+ genotoxicity: low # non-integrating, episomal "gutless" genome
96
+ efficacy: high # very large cargo (~35 kb), efficient hepatic transduction
97
+ tradeoff: "huge cargo + non-integrating BUT strong innate+adaptive anti-Ad immunity and pre-existing NAbs are the dominant safety limit for systemic use"
98
+ immune_dois: ["10.1089/hum.2004.15.1157"]
99
+
100
+ hsv_amplicon:
101
+ cargo_capacity_bp: 100000 # >100 kb
102
+ integrating: false
103
+ division_dependent: false
104
+ immunogenicity_prior: "high; neurotropic"
105
+ re_dosable: false
106
+ tropism: "neurotropic (CNS)"
107
+ in_vivo: true
108
+ compatible_cargo_form: [DNA]
109
+ constraint_key: plasmid
110
+ dois: ["10.1038/nbt1101-1067"] # Wade-Martins 2001, HSV-1 amplicon (iBAC) large genomic-DNA transfer
111
+ immune_safety:
112
+ preexisting_immunity: moderate # prior HSV exposure common, but helper-free amplicon is gene-free of HSV ORFs
113
+ neutralizing_antibody: moderate # anti-HSV humoral immunity in seropositive hosts
114
+ innate_immune: high # immunogenic / inflammatory in CNS
115
+ adaptive_immune: high
116
+ genotoxicity: low # non-integrating, episomal
117
+ efficacy: moderate # massive cargo (>100 kb) + neurotropism, but transient/variable expression
118
+ tradeoff: "unmatched cargo (>100 kb) and CNS tropism BUT immunogenic/inflammatory and expression is transient"
119
+ immune_dois: ["10.1089/hum.2004.15.1157"]
120
+
121
+ lnp_mrna:
122
+ cargo_capacity_bp: 15000 # large RNA payload (mRNA encoding the writer/RNP)
123
+ integrating: false # transient
124
+ division_dependent: false
125
+ immunogenicity_prior: "low/transient"
126
+ re_dosable: true
127
+ tropism: "liver-tropic by default"
128
+ in_vivo: true
129
+ compatible_cargo_form: [mRNA, RNP]
130
+ constraint_key: lnp_mrna
131
+ dois: ["10.1038/s41578-021-00358-0"]
132
+ immune_safety:
133
+ preexisting_immunity: low # no widespread pre-existing immunity to the LNP (anti-PEG is an emerging exception)
134
+ neutralizing_antibody: low # anti-PEG antibodies emerging; can accelerate clearance on repeat dosing
135
+ innate_immune: moderate # transient innate sensing of mRNA / ionizable lipid (mitigated by mod-nucleosides)
136
+ adaptive_immune: low # no anti-vector adaptive memory to a protein capsid
137
+ genotoxicity: low # NON-integrating, transient (no insertional risk)
138
+ efficacy: moderate # transient expression; potent for hepatic RNP/mRNA but durability is short
139
+ re_dosable: yes # repeatable dosing is the key advantage
140
+ tradeoff: "SAFEST profile (non-integrating, transient, re-dosable, low pre-existing immunity) BUT expression is transient and anti-PEG immunity can blunt repeat doses"
141
+ immune_dois: ["10.1016/j.addr.2020.07.024"]
142
+
143
+ evlp:
144
+ cargo_capacity_bp: null # RNP payload (not a DNA packaging limit)
145
+ integrating: false
146
+ division_dependent: false
147
+ immunogenicity_prior: "low (transient, no DNA)"
148
+ re_dosable: true
149
+ tropism: "engineerable (T cells, retina)"
150
+ in_vivo: true
151
+ ex_vivo: true
152
+ compatible_cargo_form: [RNP]
153
+ constraint_key: evlp
154
+ dois: ["10.1016/j.cell.2022.03.045"]
155
+ immune_safety:
156
+ preexisting_immunity: low # protein/RNP payload, no viral capsid; transient
157
+ neutralizing_antibody: low
158
+ innate_immune: low # no DNA, transient delivery
159
+ adaptive_immune: low
160
+ genotoxicity: low # non-integrating RNP, transient nuclease exposure
161
+ efficacy: moderate # engineerable tropism; emerging modality, in-vivo efficiency still maturing
162
+ re_dosable: yes
163
+ tradeoff: "low-immunogenicity transient RNP delivery with engineerable tropism BUT an emerging modality with still-maturing in-vivo efficiency"
164
+ immune_dois: ["10.1016/j.ymthe.2019.12.010"]
165
+
166
+ electroporation:
167
+ cargo_capacity_bp: null # physical; no packaging limit
168
+ integrating: false # depends on cargo
169
+ division_dependent: false
170
+ immunogenicity_prior: "n/a (ex vivo)"
171
+ re_dosable: false
172
+ tropism: "n/a (ex vivo)"
173
+ ex_vivo: true
174
+ compatible_cargo_form: [DNA, mRNA, RNP]
175
+ constraint_key: electroporation
176
+ dois: ["10.1038/nprot.2014.157"]
177
+ immune_safety:
178
+ preexisting_immunity: low # ex-vivo, physical method; no vector immunology
179
+ neutralizing_antibody: low # ex-vivo (n/a in host)
180
+ innate_immune: low # ex-vivo
181
+ adaptive_immune: low # ex-vivo
182
+ genotoxicity: low # cargo-dependent; RNP/transient cargo carries no insertional risk
183
+ efficacy: high # high ex-vivo delivery efficiency across DNA/mRNA/RNP
184
+ tradeoff: "no vector immunology and high ex-vivo efficiency BUT EX-VIVO ONLY (cell harvest/manufacture required) and cytotoxic at high field strength"
185
+ immune_dois: ["10.1016/j.ymthe.2019.12.010"]
@@ -0,0 +1,31 @@
1
+ # The co-scientist (v5.0)
2
+
3
+ v5.0 matures the reasoning layer on top of the verifier (v3.3), the environment (v3.4), the oracle mesh
4
+ (v4.0), and the living world-model (v4.5). Give it a goal and an intent and it returns a small set of
5
+ **materially distinct, ranked, fully-traceable strategies** — each verified, calibrated, cited, and
6
+ scope-ledgered — while the **no-fabrication guarantee holds by construction**: the reasoning layer proposes
7
+ and critiques, but every number still comes from a validated tool or oracle.
8
+
9
+ > **The central invariant.** Intelligence rises while groundedness never falls. A test asserts no-fabrication
10
+ > across the *full* reasoning stack (`pen_stack/validate/bench_coscientist_tasks.py`).
11
+
12
+ ## What it does (`pen_stack/agent/co_scientist.py`, `pen_stack/agent/cite.py`)
13
+
14
+ | Capability | Function | Guarantee |
15
+ |---|---|---|
16
+ | **Multiple distinct strategies** | `propose_strategies(goal)` | 2–3 strategies differing on ≥2 design axes (write-type / writer / delivery / intent) — *materially* distinct, not reworded (`distinctness()` measures it); each independently **legal** + **confidence-tagged** |
17
+ | **Deliberative planning** | `deliberate(goal)` | the deliberative planner vs the deterministic `pen_agent` baseline, head-to-head; both grounded |
18
+ | **Self-critique / revise** | `critique_and_revise(design)` | the critic only flags + suggests a design-level swap (never invents a number); the revision is **re-verified**; falsifiable — it improves flawed plans (illegal→legal) and never spuriously touches clean ones (`critique_falsifiability()`) |
19
+ | **Cited rationale** | `cited_rationale(design)` | the "why" cites DOIs **drawn from the curated world-model** (so they resolve by construction); a hallucinated-citation guard rejects any DOI not in the curated set |
20
+ | **Scope ledger** | `scope_ledger(design)` | per recommendation, an itemised list of what **was** assessed (legality / reachability / delivery / payload / calibrated confidence) and what was **not** (the standing known-unknowns) — never silently omitted |
21
+ | **Scoped generalisation** | `generalise(task)` | adjacent genetic-engineering tasks are **grounded-or-refused**: answered only if they map to an existing grounded capability, otherwise refused with a scope statement |
22
+
23
+ ## Honest scope
24
+
25
+ A better reasoner is **not a complete model of the cell**. structure→phenotype, in-vivo behaviour,
26
+ immunogenicity magnitude, long-term durability and higher-order epistasis remain out of scope — the
27
+ co-scientist makes that boundary *legible* (the scope ledger), it does not close it. Self-critique and
28
+ multi-strategy ship only because they help on held-out checks, or are reported as not-yet-useful.
29
+ Generalisation is approached only as far as the grounding allows; the rest is refused, not faked.
30
+
31
+ See `prereg/ws_{plan,crit,cite}.yaml` and the `co_scientist_grounded` bench task (Genome-Writing Bench v0.3.2).
@@ -1,2 +1,2 @@
1
1
  """PEN-STACK v3.0 - open infrastructure for genome writing."""
2
- __version__ = "4.5.1"
2
+ __version__ = "5.1.0"