pen-stack 5.13.0__tar.gz → 6.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 (437) hide show
  1. {pen_stack-5.13.0 → pen_stack-6.1.0}/CHANGELOG.md +49 -0
  2. {pen_stack-5.13.0 → pen_stack-6.1.0}/CITATION.cff +1 -1
  3. {pen_stack-5.13.0 → pen_stack-6.1.0}/PKG-INFO +116 -42
  4. {pen_stack-5.13.0 → pen_stack-6.1.0}/README.md +114 -40
  5. pen_stack-6.1.0/docs/STABILITY.md +51 -0
  6. pen_stack-6.1.0/docs/integrations.md +87 -0
  7. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/__init__.py +1 -1
  8. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/agent/mcp_server.py +65 -0
  9. pen_stack-6.1.0/pen_stack/api/__init__.py +12 -0
  10. pen_stack-6.1.0/pen_stack/api/manifest.py +93 -0
  11. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/server/api.py +66 -0
  12. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack.egg-info/PKG-INFO +116 -42
  13. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack.egg-info/SOURCES.txt +9 -0
  14. pen_stack-6.1.0/prereg/SHA256_LOCK_ws_manifest.json +8 -0
  15. pen_stack-6.1.0/prereg/SHA256_LOCK_ws_mcp.json +8 -0
  16. pen_stack-6.1.0/prereg/SHA256_LOCK_ws_openapi.json +8 -0
  17. pen_stack-6.1.0/prereg/ws_manifest.yaml +20 -0
  18. pen_stack-6.1.0/prereg/ws_mcp.yaml +14 -0
  19. pen_stack-6.1.0/prereg/ws_openapi.yaml +13 -0
  20. {pen_stack-5.13.0 → pen_stack-6.1.0}/pyproject.toml +2 -2
  21. pen_stack-5.13.0/docs/integrations.md +0 -56
  22. {pen_stack-5.13.0 → pen_stack-6.1.0}/LICENSE +0 -0
  23. {pen_stack-5.13.0 → pen_stack-6.1.0}/MANIFEST.in +0 -0
  24. {pen_stack-5.13.0 → pen_stack-6.1.0}/bench/run.py +0 -0
  25. {pen_stack-5.13.0 → pen_stack-6.1.0}/benchmarks/genome_writing_bench/LEADERBOARD.md +0 -0
  26. {pen_stack-5.13.0 → pen_stack-6.1.0}/benchmarks/genome_writing_bench/README.md +0 -0
  27. {pen_stack-5.13.0 → pen_stack-6.1.0}/benchmarks/genome_writing_bench/SHA256SUMS +0 -0
  28. {pen_stack-5.13.0 → pen_stack-6.1.0}/benchmarks/genome_writing_bench/SUBMISSIONS.md +0 -0
  29. {pen_stack-5.13.0 → pen_stack-6.1.0}/benchmarks/genome_writing_bench/tasks.yaml +0 -0
  30. {pen_stack-5.13.0 → pen_stack-6.1.0}/benchmarks/genome_writing_challenge/README.md +0 -0
  31. {pen_stack-5.13.0 → pen_stack-6.1.0}/benchmarks/genome_writing_challenge/SUBMISSIONS.md +0 -0
  32. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/antipeg.yaml +0 -0
  33. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/atlas_families.yaml +0 -0
  34. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/bridge_offtarget_profile.yaml +0 -0
  35. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/capsid_epitope_oracle.yaml +0 -0
  36. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/capsid_sequences.fasta +0 -0
  37. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/cargo_polish.yaml +0 -0
  38. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/cell_types.yaml +0 -0
  39. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/datasets.yaml +0 -0
  40. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/delivery_constraints.yaml +0 -0
  41. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/delivery_rules.yaml +0 -0
  42. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/delivery_vehicles.yaml +0 -0
  43. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/gates_v3.yaml +0 -0
  44. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/genotoxicity_oracle.yaml +0 -0
  45. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/gsh_validated_heldout.yaml +0 -0
  46. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/intent_weights.yaml +0 -0
  47. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/known_unknowns.yaml +0 -0
  48. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/llm.yaml +0 -0
  49. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/monitor_queries.yaml +0 -0
  50. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/oracles/scope_cards.yaml +0 -0
  51. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/rules/delivery.yaml +0 -0
  52. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/rules/fold.yaml +0 -0
  53. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/rules/multiplex.yaml +0 -0
  54. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/rules/payload.yaml +0 -0
  55. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/rules/reachability.yaml +0 -0
  56. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/safety/hazard_registry.yaml +0 -0
  57. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/safety/policy.yaml +0 -0
  58. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/safety/probes.yaml +0 -0
  59. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/score_axes.yaml +0 -0
  60. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/seroprevalence.yaml +0 -0
  61. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/target_sites.yaml +0 -0
  62. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/universe_crosswalk.yaml +0 -0
  63. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/write_types.yaml +0 -0
  64. {pen_stack-5.13.0 → pen_stack-6.1.0}/configs/wtkb_curated.yaml +0 -0
  65. {pen_stack-5.13.0 → pen_stack-6.1.0}/data/curated/bridge_offtarget_energetics.json +0 -0
  66. {pen_stack-5.13.0 → pen_stack-6.1.0}/data/curated/bridge_offtarget_profile_measured.parquet +0 -0
  67. {pen_stack-5.13.0 → pen_stack-6.1.0}/data/curated/gene_coords.parquet +0 -0
  68. {pen_stack-5.13.0 → pen_stack-6.1.0}/data/curated/unified_editor_universe.parquet +0 -0
  69. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/BACKLOG.md +0 -0
  70. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/DEPLOY.md +0 -0
  71. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/INFRA.md +0 -0
  72. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/MCP.md +0 -0
  73. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/RELEASING.md +0 -0
  74. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/REPRO.md +0 -0
  75. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/agent.md +0 -0
  76. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/alphagenome_feasibility.md +0 -0
  77. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/autonomy.md +0 -0
  78. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/benchmark_circularity.md +0 -0
  79. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/biosecurity.md +0 -0
  80. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/build_interface.md +0 -0
  81. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/cards/atlas.md +0 -0
  82. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/cards/durability.md +0 -0
  83. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/cards/safety.md +0 -0
  84. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/challenge.md +0 -0
  85. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/closed_loop.md +0 -0
  86. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/co_scientist.md +0 -0
  87. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/co_scientist_loop.md +0 -0
  88. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/delivery.md +0 -0
  89. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/delivery_immunology.md +0 -0
  90. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/digital_twin.md +0 -0
  91. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/dissemination.md +0 -0
  92. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/environment.md +0 -0
  93. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/experiment_design.md +0 -0
  94. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/generative_design.md +0 -0
  95. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/index.md +0 -0
  96. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/mechanistic_constraints.md +0 -0
  97. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/oracles.md +0 -0
  98. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/positioning.md +0 -0
  99. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/private_data_formats.md +0 -0
  100. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/quickstart.md +0 -0
  101. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/responsible_use.md +0 -0
  102. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/rules.md +0 -0
  103. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/scope.md +0 -0
  104. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/scorecard.md +0 -0
  105. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/tutorials/compare-families.md +0 -0
  106. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/tutorials/score-deliverability.md +0 -0
  107. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/tutorials/where-can-i-write.md +0 -0
  108. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/tutorials/which-writer-reaches-locus.md +0 -0
  109. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/uncertainty.md +0 -0
  110. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/verify.md +0 -0
  111. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/world_model.md +0 -0
  112. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/writer_verification.md +0 -0
  113. {pen_stack-5.13.0 → pen_stack-6.1.0}/docs/wtkb.md +0 -0
  114. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/_resources.py +0 -0
  115. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/active/__init__.py +0 -0
  116. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/active/acquire.py +0 -0
  117. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/active/design.py +0 -0
  118. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/active/validate.py +0 -0
  119. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/adapt/__init__.py +0 -0
  120. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/adapt/finetune.py +0 -0
  121. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/adapt/ingest.py +0 -0
  122. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/adapt/pipeline.py +0 -0
  123. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/adapt/recalibrate.py +0 -0
  124. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/adapt/report.py +0 -0
  125. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/agent/__init__.py +0 -0
  126. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/agent/cite.py +0 -0
  127. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/agent/co_scientist.py +0 -0
  128. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/agent/epistemic.py +0 -0
  129. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/agent/guardrails.py +0 -0
  130. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/agent/orchestrator.py +0 -0
  131. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/agent/orchestrator_live.py +0 -0
  132. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/agent/pen_agent.py +0 -0
  133. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/agent/scope.py +0 -0
  134. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/agent/tools.py +0 -0
  135. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/atlas/__init__.py +0 -0
  136. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/atlas/build_wtkb.py +0 -0
  137. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/atlas/crosslink.py +0 -0
  138. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/atlas/expand.py +0 -0
  139. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/atlas/schema.py +0 -0
  140. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/atlas/scorecard.py +0 -0
  141. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/atlas/universe.py +0 -0
  142. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/atlas/variant_propose.py +0 -0
  143. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/atlas/writer_verify.py +0 -0
  144. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/bridge/__init__.py +0 -0
  145. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/bridge/activity.py +0 -0
  146. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/bridge/cli.py +0 -0
  147. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/bridge/fold_qc.py +0 -0
  148. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/bridge/guide_qc.py +0 -0
  149. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/bridge/ingest.py +0 -0
  150. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/bridge/offtarget.py +0 -0
  151. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/bridge/offtarget_energetics.py +0 -0
  152. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/bridge/ortholog_screen.py +0 -0
  153. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/bridge/pipeline.py +0 -0
  154. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/build/__init__.py +0 -0
  155. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/build/ingest.py +0 -0
  156. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/build/protocol.py +0 -0
  157. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/build/simlab.py +0 -0
  158. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/cli.py +0 -0
  159. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/data/__init__.py +0 -0
  160. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/data/encode.py +0 -0
  161. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/data/genome.py +0 -0
  162. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/data/ingest_chromatin.py +0 -0
  163. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/data/ingest_integration.py +0 -0
  164. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/data/ingest_safety_annot.py +0 -0
  165. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/data/ingest_trip.py +0 -0
  166. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/design/__init__.py +0 -0
  167. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/design/generate.py +0 -0
  168. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/design/pareto.py +0 -0
  169. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/design/space.py +0 -0
  170. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/env/__init__.py +0 -0
  171. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/env/genome_writing_env.py +0 -0
  172. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/env/policies.py +0 -0
  173. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/graph/__init__.py +0 -0
  174. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/graph/build.py +0 -0
  175. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/graph/cell_types.py +0 -0
  176. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/graph/ingest.py +0 -0
  177. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/graph/query.py +0 -0
  178. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/graph/schema.py +0 -0
  179. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/loop/__init__.py +0 -0
  180. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/loop/continual.py +0 -0
  181. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/loop/cycle.py +0 -0
  182. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/loop/drift.py +0 -0
  183. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/mech/__init__.py +0 -0
  184. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/mech/classify_atlas.py +0 -0
  185. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/mech/whitelist.py +0 -0
  186. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/monitor/__init__.py +0 -0
  187. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/monitor/europepmc.py +0 -0
  188. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/monitor/run.py +0 -0
  189. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/monitor/triage.py +0 -0
  190. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/oracles/__init__.py +0 -0
  191. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/oracles/cache.py +0 -0
  192. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/oracles/energetics.py +0 -0
  193. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/oracles/genome.py +0 -0
  194. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/oracles/protein_design.py +0 -0
  195. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/oracles/rna.py +0 -0
  196. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/oracles/schema.py +0 -0
  197. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/oracles/structure.py +0 -0
  198. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/oracles/vcell.py +0 -0
  199. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/planner/__init__.py +0 -0
  200. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/planner/antipeg_oracle.py +0 -0
  201. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/planner/capsid_epitope_oracle.py +0 -0
  202. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/planner/cargo.py +0 -0
  203. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/planner/cargo_polish.py +0 -0
  204. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/planner/delivery.py +0 -0
  205. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/planner/delivery_constraints.py +0 -0
  206. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/planner/delivery_immunology.py +0 -0
  207. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/planner/delivery_vehicles.py +0 -0
  208. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/planner/genotoxicity_oracle.py +0 -0
  209. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/planner/immune_profile.py +0 -0
  210. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/planner/innate_sensing.py +0 -0
  211. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/planner/multiplex.py +0 -0
  212. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/planner/optimize.py +0 -0
  213. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/planner/pipeline.py +0 -0
  214. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/planner/report.py +0 -0
  215. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/planner/router.py +0 -0
  216. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/planner/seroprevalence_oracle.py +0 -0
  217. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/planner/target_site.py +0 -0
  218. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/rag/__init__.py +0 -0
  219. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/rag/index.py +0 -0
  220. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/rag/llm.py +0 -0
  221. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/rag/qa.py +0 -0
  222. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/rules/__init__.py +0 -0
  223. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/rules/evaluators.py +0 -0
  224. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/rules/loader.py +0 -0
  225. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/rules/schema.py +0 -0
  226. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/rules/solver.py +0 -0
  227. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/safety/__init__.py +0 -0
  228. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/safety/audit.py +0 -0
  229. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/safety/gate.py +0 -0
  230. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/safety/policy.py +0 -0
  231. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/safety/redteam.py +0 -0
  232. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/safety/registry.py +0 -0
  233. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/safety/screen.py +0 -0
  234. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/score/__init__.py +0 -0
  235. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/score/recalibrate.py +0 -0
  236. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/score/therapeutic.py +0 -0
  237. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/server/__init__.py +0 -0
  238. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/twin/__init__.py +0 -0
  239. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/twin/calibrate.py +0 -0
  240. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/twin/mechanistic.py +0 -0
  241. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/twin/outcome.py +0 -0
  242. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/ui/__init__.py +0 -0
  243. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/ui/app.py +0 -0
  244. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/__init__.py +0 -0
  245. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/adapt_demo.py +0 -0
  246. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/agent_eval.py +0 -0
  247. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/bench_adversarial_tasks.py +0 -0
  248. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/bench_coscientist_tasks.py +0 -0
  249. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/bench_graph_tasks.py +0 -0
  250. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/bench_rule_tasks.py +0 -0
  251. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/bench_trust_tasks.py +0 -0
  252. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/bench_writetype_tasks.py +0 -0
  253. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/blind_gsh_discovery.py +0 -0
  254. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/cargo_directionality.py +0 -0
  255. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/closed_loop.py +0 -0
  256. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/durability_baselines.py +0 -0
  257. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/experiment_design.py +0 -0
  258. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/forward_hypotheses.py +0 -0
  259. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/generative_design.py +0 -0
  260. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/guide_qc_demo.py +0 -0
  261. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/immune_calibration.py +0 -0
  262. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/intent_specification.py +0 -0
  263. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/offtarget_energetics_eval.py +0 -0
  264. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/out_of_scope_refusal.py +0 -0
  265. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/outcome_calibration.py +0 -0
  266. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/outcome_prediction.py +0 -0
  267. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/paper3_benchmark.py +0 -0
  268. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/paper4_real_validation.py +0 -0
  269. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/paper4_validation.py +0 -0
  270. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/protocol_safety.py +0 -0
  271. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/safety_screening.py +0 -0
  272. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/selective_prediction.py +0 -0
  273. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/seq_vs_measured.py +0 -0
  274. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/target_site_controls.py +0 -0
  275. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/uncertainty_eval.py +0 -0
  276. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/ungrounded_baseline.py +0 -0
  277. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/within_locus_ranking.py +0 -0
  278. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/validate/writer_recovery.py +0 -0
  279. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/verify/__init__.py +0 -0
  280. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/verify/schema.py +0 -0
  281. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/verify/service.py +0 -0
  282. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/wgenome/__init__.py +0 -0
  283. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/wgenome/chromatin_seq.py +0 -0
  284. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/wgenome/durability.py +0 -0
  285. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/wgenome/export_tracks.py +0 -0
  286. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/wgenome/features.py +0 -0
  287. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/wgenome/gsh_baseline.py +0 -0
  288. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/wgenome/mesh_features.py +0 -0
  289. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/wgenome/ood.py +0 -0
  290. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/wgenome/providers.py +0 -0
  291. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/wgenome/safety.py +0 -0
  292. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/wgenome/structure3d.py +0 -0
  293. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/wgenome/uncertainty.py +0 -0
  294. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack/wgenome/writability.py +0 -0
  295. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack.egg-info/dependency_links.txt +0 -0
  296. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack.egg-info/entry_points.txt +0 -0
  297. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack.egg-info/requires.txt +0 -0
  298. {pen_stack-5.13.0 → pen_stack-6.1.0}/pen_stack.egg-info/top_level.txt +0 -0
  299. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_phase0.json +0 -0
  300. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_phase1_5.json +0 -0
  301. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_phase2.json +0 -0
  302. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_phase3.json +0 -0
  303. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_a.json +0 -0
  304. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_acq.json +0 -0
  305. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_aldesign.json +0 -0
  306. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_alvalidate.json +0 -0
  307. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_atlas.json +0 -0
  308. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_b.json +0 -0
  309. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_ba.json +0 -0
  310. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_ba_v33.json +0 -0
  311. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_ba_v45.json +0 -0
  312. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_bench.json +0 -0
  313. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_c.json +0 -0
  314. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_cal.json +0 -0
  315. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_calib.json +0 -0
  316. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_challenge.json +0 -0
  317. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_cite.json +0 -0
  318. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_continual.json +0 -0
  319. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_cosci2.json +0 -0
  320. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_crit.json +0 -0
  321. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_ct.json +0 -0
  322. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_d.json +0 -0
  323. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_drift.json +0 -0
  324. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_e.json +0 -0
  325. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_env.json +0 -0
  326. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_ep.json +0 -0
  327. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_epitope.json +0 -0
  328. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_f.json +0 -0
  329. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_g.json +0 -0
  330. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_gen.json +0 -0
  331. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_genotox.json +0 -0
  332. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_graph.json +0 -0
  333. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_h.json +0 -0
  334. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_immune.json +0 -0
  335. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_ingest.json +0 -0
  336. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_innate.json +0 -0
  337. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_loop.json +0 -0
  338. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_mc.json +0 -0
  339. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_mech.json +0 -0
  340. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_mon.json +0 -0
  341. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_o.json +0 -0
  342. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_orch.json +0 -0
  343. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_outcome.json +0 -0
  344. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_pareto.json +0 -0
  345. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_peg.json +0 -0
  346. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_plan.json +0 -0
  347. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_policy.json +0 -0
  348. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_profile.json +0 -0
  349. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_proto.json +0 -0
  350. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_r.json +0 -0
  351. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_redteam.json +0 -0
  352. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_route.json +0 -0
  353. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_screen.json +0 -0
  354. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_seroprev.json +0 -0
  355. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_simlab.json +0 -0
  356. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_twincal.json +0 -0
  357. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_uq.json +0 -0
  358. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_v.json +0 -0
  359. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_vcell.json +0 -0
  360. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_wv.json +0 -0
  361. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/paper1.yaml +0 -0
  362. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/paper2.yaml +0 -0
  363. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/paper3.yaml +0 -0
  364. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/paper4.yaml +0 -0
  365. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/phase0.yaml +0 -0
  366. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_a.yaml +0 -0
  367. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_acq.yaml +0 -0
  368. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_aldesign.yaml +0 -0
  369. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_alvalidate.yaml +0 -0
  370. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_atlas.yaml +0 -0
  371. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_b.yaml +0 -0
  372. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_ba.yaml +0 -0
  373. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_ba_v33.yaml +0 -0
  374. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_ba_v45.yaml +0 -0
  375. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_bench.yaml +0 -0
  376. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_c.yaml +0 -0
  377. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_cal.yaml +0 -0
  378. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_calib.yaml +0 -0
  379. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_challenge.yaml +0 -0
  380. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_cite.yaml +0 -0
  381. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_continual.yaml +0 -0
  382. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_cosci2.yaml +0 -0
  383. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_crit.yaml +0 -0
  384. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_ct.yaml +0 -0
  385. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_d.yaml +0 -0
  386. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_drift.yaml +0 -0
  387. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_e.yaml +0 -0
  388. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_env.yaml +0 -0
  389. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_ep.yaml +0 -0
  390. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_epitope.yaml +0 -0
  391. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_f.yaml +0 -0
  392. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_g.yaml +0 -0
  393. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_gen.yaml +0 -0
  394. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_genotox.yaml +0 -0
  395. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_graph.yaml +0 -0
  396. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_h.yaml +0 -0
  397. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_immune.yaml +0 -0
  398. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_ingest.yaml +0 -0
  399. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_innate.yaml +0 -0
  400. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_loop.yaml +0 -0
  401. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_mc.yaml +0 -0
  402. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_mech.yaml +0 -0
  403. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_mon.yaml +0 -0
  404. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_o.yaml +0 -0
  405. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_orch.yaml +0 -0
  406. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_outcome.yaml +0 -0
  407. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_pareto.yaml +0 -0
  408. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_peg.yaml +0 -0
  409. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_plan.yaml +0 -0
  410. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_policy.yaml +0 -0
  411. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_profile.yaml +0 -0
  412. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_proto.yaml +0 -0
  413. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_r.yaml +0 -0
  414. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_redteam.yaml +0 -0
  415. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_route.yaml +0 -0
  416. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_screen.yaml +0 -0
  417. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_seroprev.yaml +0 -0
  418. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_simlab.yaml +0 -0
  419. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_twincal.yaml +0 -0
  420. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_uq.yaml +0 -0
  421. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_v.yaml +0 -0
  422. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_vcell.yaml +0 -0
  423. {pen_stack-5.13.0 → pen_stack-6.1.0}/prereg/ws_wv.yaml +0 -0
  424. {pen_stack-5.13.0 → pen_stack-6.1.0}/scripts/p1_build_atlas.py +0 -0
  425. {pen_stack-5.13.0 → pen_stack-6.1.0}/scripts/p1_build_durability.py +0 -0
  426. {pen_stack-5.13.0 → pen_stack-6.1.0}/scripts/p1_export_tracks.py +0 -0
  427. {pen_stack-5.13.0 → pen_stack-6.1.0}/scripts/p1_safety_concordance.py +0 -0
  428. {pen_stack-5.13.0 → pen_stack-6.1.0}/scripts/p1_train_safety.py +0 -0
  429. {pen_stack-5.13.0 → pen_stack-6.1.0}/scripts/p1_validation_report.py +0 -0
  430. {pen_stack-5.13.0 → pen_stack-6.1.0}/scripts/p2_build_atlas.py +0 -0
  431. {pen_stack-5.13.0 → pen_stack-6.1.0}/scripts/p3_benchmark_report.py +0 -0
  432. {pen_stack-5.13.0 → pen_stack-6.1.0}/scripts/p4_genome_scan.py +0 -0
  433. {pen_stack-5.13.0 → pen_stack-6.1.0}/scripts/p52_build_genotox_oracle.py +0 -0
  434. {pen_stack-5.13.0 → pen_stack-6.1.0}/scripts/p53_build_epitope_oracle.py +0 -0
  435. {pen_stack-5.13.0 → pen_stack-6.1.0}/scripts/ws_b_report.py +0 -0
  436. {pen_stack-5.13.0 → pen_stack-6.1.0}/scripts/ws_c_report.py +0 -0
  437. {pen_stack-5.13.0 → pen_stack-6.1.0}/setup.cfg +0 -0
@@ -3,6 +3,55 @@
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.1.0] - 2026-06-11 - v6.1: The AI Integration Surface
7
+
8
+ **Post-1.0 adoption surface for AI builders.** Not new capability — the *introspectable, documented, dependable*
9
+ contract that lets an external agent discover what PEN-STACK offers **and what it refuses to answer**. MINOR
10
+ release on the stable 6.0 API. Workstreams WS-{MANIFEST,OPENAPI,MCP} + examples, SHA-locked.
11
+
12
+ ### Added
13
+ - **WS-MANIFEST** *(the differentiator)* — `pen_stack/api/manifest.py`: `capability_manifest()` (machine-readable:
14
+ the stable tools, inputs/outputs, all `fabricates=False`, guarantees, stability) and **`scope_manifest()`**
15
+ (machine-readable: the **known-unknowns** registry + every **oracle scope card** — what PEN-STACK *refuses* to
16
+ answer). Generated from the live registry/scope cards (never hand-written); internal matcher fields not leaked.
17
+ - **WS-OPENAPI** — `pen_stack/server/api.py`: `GET /capabilities` + `GET /scope` + `POST /verify /safety /immune
18
+ /generate /predict /suggest /session`; FastAPI auto-generates the **OpenAPI 3.1** spec at `/openapi.json`.
19
+ - **WS-MCP** — `pen_stack/agent/mcp_server.py`: the self-describing **resources** `pen-stack://capabilities` +
20
+ `pen-stack://scope`, plus the engine tools (`safety_screen`, `immune_profile`, `generate_designs`,
21
+ `predict_outcome`, `suggest_experiment`, `co_scientist_session`). A hazardous design returns a **structured
22
+ refusal** an agent branches on.
23
+ - **WS-EXAMPLE** — runnable golden path: `examples/external_agent.py` (REST: discover scope → submit → branch on
24
+ safety/legality), `examples/mcp_client.py` (MCP), `examples/agent_tools.py` (framework-agnostic tool specs built
25
+ **from the live manifest** + an in-process dispatcher to the validated engine).
26
+ - Docs: `docs/integrations.md` rewritten as "Integrate PEN-STACK in your AI" (the four guarantees + the scope
27
+ contract + REST/MCP/framework quickstarts); prereg `ws_{manifest,openapi,mcp}` + SHA locks; deposit `phase_6.1/`.
28
+
29
+ ### Notes
30
+ - **Scope is data, not a disclaimer.** The scope manifest makes the honesty machinery itself an API — the thing
31
+ that makes trustworthy autonomy something another system can build on. This cycle lowers the barrier to
32
+ adoption; it does not, by itself, create it — outreach + a real result remain the standing bottleneck. No new
33
+ science or validation; contracts versioned + deprecation-policed under the 1.0 commitment.
34
+
35
+ ## [6.0.0] - 2026-06-11 - 1.0 — First Stable (the graduation)
36
+
37
+ **The Closed-Loop arc is complete (7/7), and PEN-STACK graduates to "1.0 — First Stable."** The public API
38
+ exercised across every surface — verify, safety, generative design, twin, experiment design, build interface,
39
+ closed loop, co-scientist, and the Genome-Writing Challenge — is documented and **frozen** with a deprecation
40
+ policy. "First Stable" is **earned, not declared**: it is cut only after the closed loop is demonstrated (v5.12),
41
+ the benchmark is public (v5.13), and the integration surface ships.
42
+
43
+ ### Changed
44
+ - **`Development Status :: 5 - Production/Stable`** (was Beta). Version **6.0.0** (MAJOR).
45
+ - The public API is documented + frozen with a deprecation policy: **`docs/STABILITY.md`** (semver from 6.0.0;
46
+ deprecations warn ≥1 MINOR before removal in a MAJOR; the `OracleResult`/`Verdict`/`SafetyVerdict`/immune-profile
47
+ contracts and invariants — incl. `collapsed_score is None` and the no-fabrication guard — are stable across 6.x).
48
+ - The Genome-Writing Challenge is **public**.
49
+
50
+ ### Notes
51
+ - "1.0 — First Stable" is a commitment to **API stability**, **not** a claim of solving genetic engineering. The
52
+ unknown funnel remains — made legible (scope flags, known-unknowns, honest baselines, no fabrication), not
53
+ hidden. The high version numbers of the program's fast youth finally meet a real stability commitment.
54
+
6
55
  ## [5.13.0] - 2026-06-11 - v5.13 release: The Standard (Genome-Writing Challenge + Co-Scientist II)
7
56
 
8
57
  **Closed-Loop arc, Cycle 7 of 7.** Make PEN-STACK the field's reference — an open, recurring, held-out benchmark
@@ -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: 5.13.0
4
+ version: 6.1.0
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: 5.13.0
3
+ Version: 6.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
@@ -11,7 +11,7 @@ Project-URL: Changelog, https://github.com/ahmedanees-m/pen-stack/blob/main/CHAN
11
11
  Project-URL: Issues, https://github.com/ahmedanees-m/pen-stack/issues
12
12
  Project-URL: Benchmark, https://github.com/ahmedanees-m/pen-stack/tree/main/benchmarks/genome_writing_bench
13
13
  Keywords: genome-writing,genome-editing,bridge-recombinase,safe-harbor,writable-genome,writer-atlas,write-planner,bioinformatics
14
- Classifier: Development Status :: 4 - Beta
14
+ Classifier: Development Status :: 5 - Production/Stable
15
15
  Classifier: Programming Language :: Python :: 3
16
16
  Classifier: Programming Language :: Python :: 3.11
17
17
  Classifier: Programming Language :: Python :: 3.12
@@ -90,8 +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-5.13.0-blue.svg)](CHANGELOG.md)
94
- [![Tests](https://img.shields.io/badge/tests-353%20passing-success.svg)](tests/)
93
+ [![Version](https://img.shields.io/badge/version-6.1.0-blue.svg)](CHANGELOG.md)
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-360%20passing-success.svg)](tests/)
95
96
  [![Lint: ruff](https://img.shields.io/badge/lint-ruff-purple.svg)](https://github.com/astral-sh/ruff)
96
97
  [![Runtime: Docker](https://img.shields.io/badge/runtime-docker-2496ED.svg)](docker/)
97
98
  [![Validation: pre-registered](https://img.shields.io/badge/validation-pre--registered-critical.svg)](prereg/)
@@ -134,6 +135,37 @@ Two questions gate every genome-writing project, and before PEN-STACK no resourc
134
135
  Everything is built on bulk-downloadable public data, runs on a single GPU, and is validated **blind** against
135
136
  a pre-registered, honest baseline before release.
136
137
 
138
+ ## 🎓 v6.0.0 — "1.0 — First Stable"
139
+
140
+ The **Closed-Loop arc is complete (7/7)** and PEN-STACK has graduated to **1.0 — First Stable**. The public API
141
+ exercised across every surface — `verify`, `safety`, generative `design`, the `twin`, `active` experiment design,
142
+ the `build` interface, the closed `loop`, the `co_scientist`, and the **Genome-Writing Challenge** — is documented
143
+ and **frozen** with a deprecation policy ([`docs/STABILITY.md`](docs/STABILITY.md)). `Development Status ::
144
+ 5 - Production/Stable`. "First Stable" is **earned, not declared** — cut only after the closed loop was
145
+ demonstrated (v5.12) and the benchmark went public (v5.13).
146
+
147
+ > "1.0 — First Stable" is a commitment to **API stability**, not a claim of solving genetic engineering. The
148
+ > unknown funnel remains — made legible (scope flags, known-unknowns, honest baselines, no fabrication), not
149
+ > hidden.
150
+
151
+ ## What is new in v6.1 — The AI Integration Surface
152
+
153
+ Post-1.0, the adoption surface for **AI builders**: PEN-STACK is now **self-describing** — an external agent can
154
+ ask, programmatically, *"what can you do, and what do you refuse to answer?"* and get a typed, honest answer it can
155
+ route on.
156
+
157
+ | Workstream | What it adds | Result |
158
+ |---|---|---|
159
+ | **MANIFEST** *(the differentiator)* | `pen_stack/api/manifest.py` | `capability_manifest()` (tools, all `fabricates=False`) + **`scope_manifest()`** — the known-unknowns + oracle scope cards as **machine-readable data** (what PEN-STACK *refuses* to answer) |
160
+ | **OPENAPI** | `server/api.py` | `GET /capabilities` + `GET /scope` + tool routes (`/verify /safety /immune /generate /predict /suggest /session`); auto **OpenAPI 3.1** at `/openapi.json` |
161
+ | **MCP** | `agent/mcp_server.py` | resources `pen-stack://capabilities` + `pen-stack://scope`; engine tools; a hazardous design returns a **structured refusal** |
162
+ | **EXAMPLE** | `examples/` | golden-path `external_agent.py` (REST), `mcp_client.py` (MCP), `agent_tools.py` (framework specs built from the live manifest + dispatcher) |
163
+
164
+ **Scope is data, not a disclaimer** — the honesty machinery becomes an API, the thing that makes trustworthy
165
+ autonomy something another system can build on. See [Integrate PEN-STACK in your AI](docs/integrations.md) and
166
+ `prereg/ws_{manifest,openapi,mcp}.yaml`. (Lowers the adoption barrier; outreach + a real result remain the
167
+ standing bottleneck — no new science.)
168
+
137
169
  ## What is new in v5.13 — The Standard (Genome-Writing Challenge + Co-Scientist II)
138
170
 
139
171
  v5.13 (**Closed-Loop arc, Cycle 7 of 7**) makes PEN-STACK the field's reference and its most useful face: the
@@ -506,45 +538,68 @@ benchmark with deterministic scorers and no circular labels. See
506
538
 
507
539
  ## Architecture
508
540
 
541
+ At **1.0**, PEN-STACK is a **closed design→build→test→learn loop** standing on two reference layers, the oracle
542
+ mesh, and the data foundation — with **the verifier at the centre as the discriminator**: nothing is generated,
543
+ built, or learned unless it passes *safe + legal + calibrated*, and no number is fabricated. The loop stops
544
+ deliberately at **autonomy Level 3** (a human in control at every gate).
545
+
509
546
  ```
510
- +-------------------------------------------+
511
- | WRITE PLANNER (engine) |
512
- | inverse design: destination x writer |
513
- | x cargo/guide x delivery -> ranked plan |
514
- +----------------^-------------^-------------+
515
- | |
516
- +-------------------------+--+ +---+------------------------+
517
- | WRITABLE GENOME (B) | | WRITER ATLAS (A) |
518
- | flagship reference |<---->| companion reference |
519
- | | reach| |
520
- | - Safety layer (learned) | ability - Family targeting KB |
521
- | - Durability layer (learned)| | - Measured scoring axes |
522
- | - Reachability layer -----+------+ - Mechanism classifier |
523
- | -> writability profile | | - DMS variant model |
524
- +-------------------------^--+ +---+------------------------+
525
- | |
526
- +----------------------------------+-------------+-------------------------+
527
- | DATA FOUNDATION (bulk-downloadable) |
528
- | hg38 . ENCODE/Roadmap chromatin . Hi-C/LADs . TRIP position effects . |
529
- | RID/VISDB/MLV integration sites . clinical genotoxic CIS . COSMIC . |
530
- | DepMap . gnomAD . GTEx . UniProt . Pfam/InterPro . bridge-recombinase |
531
- | off-target + DMS (Perry 2025) |
532
- +-------------------------------------------------------------------------+
533
-
534
- Delivery immunology (v5.1-5.6, feeds the planner): a safety<->efficacy balance over the 8-vehicle palette,
535
- with the immune/safety axes computed/grounded from data + sequence (genotoxicity = VISDB x COSMIC;
536
- adaptive/CD8 = MHCflurry over the capsid; innate = CpG/dsRNA of the cargo; pre-existing/NAb = serosurveys;
537
- anti-PEG = serosurveys, gates LNP re-dosing) -> a unified per-axis immune-risk PROFILE (Verdict.immune_profile),
538
- each axis labelled validated-or-proxy (WS-CALIB), never collapsed into one number; in-vivo magnitude + patient
539
- titer stay declared known-unknowns.
540
-
541
- Platform services (on top of the validated core): PEN-MONITOR (Europe PMC living database),
542
- grounded RAG/Q&A, a tool-using agent + MCP server, and a Streamlit web app.
547
+ +-----------------------------------------------------------------------+
548
+ | THE FACES (v5.13 / 1.0) |
549
+ | Co-Scientist (drives the loop) . Genome-Writing Challenge (held-out) |
550
+ | . MCP server . REST API . Streamlit web app |
551
+ +-----------------------------------^-----------------------------------+
552
+ |
553
+ +----------------------------------------------------+---------------------------------------------------+
554
+ | THE CLOSED LOOP (v5.12 - autonomy Level 3; a human in control at safety / build / belief-admission) |
555
+ | |
556
+ | GENERATE ----> PREDICT ----> DECIDE ----> [ SAFETY ] ----> BUILD ----> INGEST ----> LEARN |
557
+ | v5.8 v5.9 v5.10 v5.7 v5.11 v4.5 gate v5.12 |
558
+ | generative digital experiment GUARDIAN protocol (no auto- continual |
559
+ | designer twin designer gate export edit) + drift |
560
+ | (Pareto) (OOD-gated) (EIG+immVOI) (refuse=stop) (DRAFT) (versioned) |
561
+ | |
562
+ | Every candidate is DISCARDED unless it passes THE VERIFIER below. No number is fabricated. |
563
+ +----------------------------------------------------+---------------------------------------------------+
564
+ |
565
+ +-----------------------------------v-----------------------------------+
566
+ | THE VERIFIER verify(design) -> Verdict (the discriminator) |
567
+ | legality (v3.3 rules) . SAFETY gate (v5.7, runs first) . |
568
+ | calibrated confidence (v3.2) . per-axis immune-risk profile (v5.6) |
569
+ +-----------------------------------^-----------------------------------+
570
+ |
571
+ +--------------------------------+-------------------+----------------+--------------------------------+
572
+ | WRITABLE GENOME (Paper 1) | WRITER ATLAS (Paper 2) | ORACLE MESH (v4.0) |
573
+ | learned safety x durability | 33,370 systems on measured axes | AF3 . Boltz-2 . Chai-1 . ESM3 |
574
+ | x reachability | + Writer-Targeting KB (8 families)| . Evo2 . AlphaGenome . RFdiff. |
575
+ | -> writability profile | <----- reachability -----> | ProteinMPNN . v5.9 STATE/scGPT |
576
+ | + WRITE PLANNER (Paper 3) | + BRIDGE OFF-TARGET ENGINE (P4) | one OracleResult contract, |
577
+ | inverse design (edit_intent)| | OOD-gated, generative=candidate|
578
+ | + DELIVERY IMMUNOLOGY (v5.1-6) per-axis immune-risk profile (each axis validated-or-proxy, never collapsed) |
579
+ | + WORLD-MODEL GRAPH (v4.5) typed provenanced edges, gated living loop (propose-only) |
580
+ +--------------------------------+------------------------------------+--------------------------------+
581
+ +----------------------------------------------------------------------------------------------------+
582
+ | DATA FOUNDATION (bulk-downloadable, public) |
583
+ | hg38 . ENCODE/Roadmap chromatin . Hi-C/LADs . TRIP position effects . RID/VISDB/MLV integration . |
584
+ | clinical genotoxic CIS . COSMIC . DepMap . gnomAD . GTEx . UniProt . Pfam/InterPro . |
585
+ | bridge off-target + DMS (Perry 2025) . anti-vector + anti-PEG serosurveys (immunology) |
586
+ +----------------------------------------------------------------------------------------------------+
543
587
  ```
544
588
 
589
+ **Reading the loop.** A *goal* enters at the top. The **generative designer** (v5.8) proposes candidate
590
+ writing systems; the **twin** (v5.9) predicts their calibrated outcomes; the **experiment designer** (v5.10)
591
+ chooses the most informative ones to test; the **Guardian** (v5.7) refuses anything hazardous; the **build
592
+ interface** (v5.11) exports a safety-gated protocol DRAFT and ingests results through the v4.5 gate; and
593
+ **continual learning** (v5.12) recalibrates, drift-aware, versioned and reversible. Each stage is gated by the
594
+ **verifier** — the single discriminator that keeps the whole loop honest. Two **faces** sit on top: a
595
+ **co-scientist** that drives the loop for a working scientist, and the **Genome-Writing Challenge**, an open
596
+ held-out benchmark others build to.
597
+
545
598
  ## How it works
546
599
 
547
- PEN-STACK is organised as **two reference layers + one engine + a services layer**.
600
+ PEN-STACK is organised as **the data + reference layers, the oracle mesh, the verifier (the discriminator), the
601
+ closed loop, and the faces** — each layer below feeding the one above, with the verifier keeping the whole loop
602
+ honest.
548
603
 
549
604
  | Component | Module | Role | Status |
550
605
  |---|---|---|---|
@@ -555,6 +610,16 @@ PEN-STACK is organised as **two reference layers + one engine + a services layer
555
610
  | **Delivery immunology** (v5.1-5.6) | `pen_stack.planner.delivery_immunology` + `{genotoxicity,capsid_epitope,seroprevalence,antipeg}_oracle`, `innate_sensing`, `immune_profile`; `validate.immune_calibration` | safety↔efficacy balance over the 8-vehicle palette; immune axes **computed/grounded from data+sequence** + anti-PEG (gates LNP re-dosing) → a unified per-axis `Verdict.immune_profile` (each axis validated-or-proxy, never collapsed); magnitude + patient titer stay known-unknowns ([docs](docs/delivery_immunology.md)) | M2 |
556
611
  | **Agentic platform** | `pen_stack.agent` | goal to cited, auditable plan; MCP server; one-command deploy | Paper 3 |
557
612
  | **Bridge off-target engine** | `pen_stack.bridge` | "CRISPOR for bridge recombinases" + guide QC (v3.1) | Paper 4 |
613
+ | **Oracle Mesh** (v4.0) | `pen_stack.oracles` | one `OracleResult` contract over AF3/Boltz-2/Chai-1/ESM3/Evo2/AlphaGenome/STATE/scGPT; OOD-gated; generative=candidate | v4.0 |
614
+ | **World-Model Graph** (v4.5) | `pen_stack.graph` | living knowledge graph; typed provenanced edges; gated propose-only loop | v4.5 |
615
+ | **The Verifier** (v3.3+) | `pen_stack.verify` | `verify(design) -> Verdict`: legality + **safety** + calibrated confidence + immune profile — the discriminator | v3.3 |
616
+ | **The Guardian** (v5.7) | `pen_stack.safety` | biosecurity / dual-use gate; runs first in `verify()`; refuse short-circuits; tamper-evident audit | v5.7 |
617
+ | **Generative Designer** (v5.8) | `pen_stack.design` | generate → verifier-as-discriminator (hazardous/illegal discarded); Pareto with grounded immune axis | v5.8 |
618
+ | **Digital Twin** (v5.9) | `pen_stack.twin` | calibrated, OOD-gated outcome prediction; immune-outcome from v5.6; phenotype-bounded | v5.9 |
619
+ | **Experiment Designer** (v5.10) | `pen_stack.active` | active learning (EIG + immune-VOI); retrospective active-vs-random (reps+CI) | v5.10 |
620
+ | **Build Interface** (v5.11) | `pen_stack.build` | safety-gated protocol export (DRAFT + immune metadata); gated ingestion; sim-lab | v5.11 |
621
+ | **The Closed Loop** (v5.12) | `pen_stack.loop` | one gated DBTL command; autonomy **Level 3**; drift-aware; versioned/reversible continual learning | v5.12 |
622
+ | **Co-Scientist + Challenge** (v5.13) | `pen_stack.agent.co_scientist`, `benchmarks/genome_writing_challenge` | the co-scientist drives the loop; the public held-out benchmark others build to | v5.13 |
558
623
  | **Genome-Writing Bench** (v3.1) | `benchmarks/`, `bench/run.py` | first writing-side benchmark; deterministic scorers, leaderboard | M2 |
559
624
  | **PEN-Agent** (v3.1) | `pen_stack.agent.pen_agent` | grounded write-planning state machine; zero fabrication | M2 |
560
625
  | **3D structural risk** (v3.1) | `pen_stack.wgenome.structure3d` | AlphaGenome contact-map deltas as a safety axis | M1 |
@@ -714,12 +779,14 @@ pen-stack/
714
779
  │ │ v5.11 protocol_safety (build-interface hard-gate: cleared exports w/ immune metadata · hazard+illegal blocked · sim loop completes) /
715
780
  │ │ v5.12 closed_loop (loop-integrity hard-gate: gated end-to-end run · Level-3 human-in-control · drift detection · versioned/reversible continual learning)
716
781
  │ ├── data/ ingestion (genome, chromatin, integration, TRIP, safety annotations)
717
- │ ├── server/api.py FastAPI REST (atlas, crosslink, writable, plan, bridge, ask)
782
+ │ ├── api/ v6.1 AI integration surface: manifest (capability_manifest + scope_manifest = machine-readable known-unknowns + oracle scope cards)
783
+ │ ├── server/api.py FastAPI REST (atlas, crosslink, writable, plan, bridge, ask; v3.3 verify; v6.1 /capabilities /scope /safety /immune /generate /predict /suggest /session + openapi.json 3.1)
718
784
  │ ├── ui/app.py Streamlit web app (16 pages; v3.2 PEN-Agent shows confidence + epistemic status)
719
785
  │ └── cli.py unified CLI
720
786
  ├── benchmarks/genome_writing_bench/ Genome-Writing Bench v0.3.8 (T1-T16 + co_scientist + safety_screening + generative_design + outcome_prediction + experiment_design + protocol_safety + closed_loop; tasks / harness / solvers / LEADERBOARD / SHAs)
721
787
  ├── benchmarks/genome_writing_challenge/ v5.13 the public Genome-Writing Challenge (held-out rounds + immune-risk task + submission API; harness / run / README / SUBMISSIONS)
722
788
  ├── bench/run.py one-command bench entrypoint (--agent, --verify)
789
+ ├── examples/ v6.1 runnable golden path: external_agent.py (REST) / mcp_client.py (MCP) / agent_tools.py (framework-agnostic tool specs from the live manifest + dispatcher)
723
790
  ├── scripts/ reproducible pipeline drivers (p1_*, p2_*, p4_*, p52/p53 delivery-immunology oracle builds, ws_*_report)
724
791
  ├── configs/ pinned datasets + thresholds + curation (YAML); v3.2 known_unknowns /
725
792
  │ target_sites / delivery_constraints; v5.1-5.6 delivery_vehicles immune_safety /
@@ -727,18 +794,25 @@ pen-stack/
727
794
  │ seroprevalence / antipeg + oracles/scope_cards (+ v5.6 known_unknowns:
728
795
  │ cd4_mhcii_help / preexisting_capsid_tcell / complement_carpa);
729
796
  │ v5.7 safety/{hazard_registry,policy,probes} (Guardian; function/family/taxon-level only)
730
- ├── prereg/ SHA-locked success criteria (paper1..4 + ws_a..ws_h + v3.2-v5.9 ws_{uq,ep,mc,ba,
797
+ ├── prereg/ SHA-locked success criteria (paper1..4 + ws_a..ws_h + v3.2-v6.0 ws_{uq,ep,mc,ba,
731
798
  │ r,v,route,env,bench,cal,o,wv,atlas,graph,mon,ct,plan,crit,cite,immune,
732
799
  │ genotox,epitope,innate,seroprev,peg,calib,profile,screen,policy,redteam,
733
800
  │ gen,pareto,orch,vcell,mech,outcome,twincal,acq,aldesign,alvalidate,
734
- │ proto,ingest,simlab,loop,continual,drift,challenge,cosci2} + SHA256 locks)
801
+ │ proto,ingest,simlab,loop,continual,drift,challenge,cosci2,
802
+ │ manifest,openapi,mcp} + SHA256 locks)
735
803
  ├── data/curated/ small committed tables (universe, gene coords, measured bridge profile,
736
804
  │ v3.2 bridge_offtarget_energetics.json)
737
805
  ├── data/llm_bench_cache/ 28 cached ungrounded-LLM transcripts (T7, offline/CI replay)
738
806
  ├── data/alphagenome_cache/ cached AlphaGenome predictions (tracks + contact maps; offline reproducibility)
739
807
  ├── tests/unit/ unit + regression + blind-validation suite
740
808
  ├── docs/ mkdocs site (cards, tutorials, INFRA, DEPLOY, MCP);
741
- │ v3.2: uncertainty.md / scope.md / mechanistic_constraints.md / BACKLOG.md
809
+ │ v3.2: uncertainty.md / scope.md / mechanistic_constraints.md / BACKLOG.md;
810
+ │ v4.0-4.5: oracles.md / writer_verification.md / world_model.md;
811
+ │ v5.0-5.6: co_scientist.md / delivery_immunology.md;
812
+ │ v5.7-v6.0 (the closed loop): responsible_use.md / biosecurity.md /
813
+ │ generative_design.md / digital_twin.md / experiment_design.md /
814
+ │ build_interface.md / closed_loop.md / autonomy.md / challenge.md /
815
+ │ co_scientist_loop.md / integrations.md / STABILITY.md (1.0 API freeze)
742
816
  ├── docker/ CUDA image + UI image + pinned requirements
743
817
  ├── tools/penctl.py laptop<->VM orchestrator (paramiko SSH/SFTP, Docker-only)
744
818
  ├── docker-compose.yml one-command self-hostable platform
@@ -15,8 +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-5.13.0-blue.svg)](CHANGELOG.md)
19
- [![Tests](https://img.shields.io/badge/tests-353%20passing-success.svg)](tests/)
18
+ [![Version](https://img.shields.io/badge/version-6.1.0-blue.svg)](CHANGELOG.md)
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-360%20passing-success.svg)](tests/)
20
21
  [![Lint: ruff](https://img.shields.io/badge/lint-ruff-purple.svg)](https://github.com/astral-sh/ruff)
21
22
  [![Runtime: Docker](https://img.shields.io/badge/runtime-docker-2496ED.svg)](docker/)
22
23
  [![Validation: pre-registered](https://img.shields.io/badge/validation-pre--registered-critical.svg)](prereg/)
@@ -59,6 +60,37 @@ Two questions gate every genome-writing project, and before PEN-STACK no resourc
59
60
  Everything is built on bulk-downloadable public data, runs on a single GPU, and is validated **blind** against
60
61
  a pre-registered, honest baseline before release.
61
62
 
63
+ ## 🎓 v6.0.0 — "1.0 — First Stable"
64
+
65
+ The **Closed-Loop arc is complete (7/7)** and PEN-STACK has graduated to **1.0 — First Stable**. The public API
66
+ exercised across every surface — `verify`, `safety`, generative `design`, the `twin`, `active` experiment design,
67
+ the `build` interface, the closed `loop`, the `co_scientist`, and the **Genome-Writing Challenge** — is documented
68
+ and **frozen** with a deprecation policy ([`docs/STABILITY.md`](docs/STABILITY.md)). `Development Status ::
69
+ 5 - Production/Stable`. "First Stable" is **earned, not declared** — cut only after the closed loop was
70
+ demonstrated (v5.12) and the benchmark went public (v5.13).
71
+
72
+ > "1.0 — First Stable" is a commitment to **API stability**, not a claim of solving genetic engineering. The
73
+ > unknown funnel remains — made legible (scope flags, known-unknowns, honest baselines, no fabrication), not
74
+ > hidden.
75
+
76
+ ## What is new in v6.1 — The AI Integration Surface
77
+
78
+ Post-1.0, the adoption surface for **AI builders**: PEN-STACK is now **self-describing** — an external agent can
79
+ ask, programmatically, *"what can you do, and what do you refuse to answer?"* and get a typed, honest answer it can
80
+ route on.
81
+
82
+ | Workstream | What it adds | Result |
83
+ |---|---|---|
84
+ | **MANIFEST** *(the differentiator)* | `pen_stack/api/manifest.py` | `capability_manifest()` (tools, all `fabricates=False`) + **`scope_manifest()`** — the known-unknowns + oracle scope cards as **machine-readable data** (what PEN-STACK *refuses* to answer) |
85
+ | **OPENAPI** | `server/api.py` | `GET /capabilities` + `GET /scope` + tool routes (`/verify /safety /immune /generate /predict /suggest /session`); auto **OpenAPI 3.1** at `/openapi.json` |
86
+ | **MCP** | `agent/mcp_server.py` | resources `pen-stack://capabilities` + `pen-stack://scope`; engine tools; a hazardous design returns a **structured refusal** |
87
+ | **EXAMPLE** | `examples/` | golden-path `external_agent.py` (REST), `mcp_client.py` (MCP), `agent_tools.py` (framework specs built from the live manifest + dispatcher) |
88
+
89
+ **Scope is data, not a disclaimer** — the honesty machinery becomes an API, the thing that makes trustworthy
90
+ autonomy something another system can build on. See [Integrate PEN-STACK in your AI](docs/integrations.md) and
91
+ `prereg/ws_{manifest,openapi,mcp}.yaml`. (Lowers the adoption barrier; outreach + a real result remain the
92
+ standing bottleneck — no new science.)
93
+
62
94
  ## What is new in v5.13 — The Standard (Genome-Writing Challenge + Co-Scientist II)
63
95
 
64
96
  v5.13 (**Closed-Loop arc, Cycle 7 of 7**) makes PEN-STACK the field's reference and its most useful face: the
@@ -431,45 +463,68 @@ benchmark with deterministic scorers and no circular labels. See
431
463
 
432
464
  ## Architecture
433
465
 
466
+ At **1.0**, PEN-STACK is a **closed design→build→test→learn loop** standing on two reference layers, the oracle
467
+ mesh, and the data foundation — with **the verifier at the centre as the discriminator**: nothing is generated,
468
+ built, or learned unless it passes *safe + legal + calibrated*, and no number is fabricated. The loop stops
469
+ deliberately at **autonomy Level 3** (a human in control at every gate).
470
+
434
471
  ```
435
- +-------------------------------------------+
436
- | WRITE PLANNER (engine) |
437
- | inverse design: destination x writer |
438
- | x cargo/guide x delivery -> ranked plan |
439
- +----------------^-------------^-------------+
440
- | |
441
- +-------------------------+--+ +---+------------------------+
442
- | WRITABLE GENOME (B) | | WRITER ATLAS (A) |
443
- | flagship reference |<---->| companion reference |
444
- | | reach| |
445
- | - Safety layer (learned) | ability - Family targeting KB |
446
- | - Durability layer (learned)| | - Measured scoring axes |
447
- | - Reachability layer -----+------+ - Mechanism classifier |
448
- | -> writability profile | | - DMS variant model |
449
- +-------------------------^--+ +---+------------------------+
450
- | |
451
- +----------------------------------+-------------+-------------------------+
452
- | DATA FOUNDATION (bulk-downloadable) |
453
- | hg38 . ENCODE/Roadmap chromatin . Hi-C/LADs . TRIP position effects . |
454
- | RID/VISDB/MLV integration sites . clinical genotoxic CIS . COSMIC . |
455
- | DepMap . gnomAD . GTEx . UniProt . Pfam/InterPro . bridge-recombinase |
456
- | off-target + DMS (Perry 2025) |
457
- +-------------------------------------------------------------------------+
458
-
459
- Delivery immunology (v5.1-5.6, feeds the planner): a safety<->efficacy balance over the 8-vehicle palette,
460
- with the immune/safety axes computed/grounded from data + sequence (genotoxicity = VISDB x COSMIC;
461
- adaptive/CD8 = MHCflurry over the capsid; innate = CpG/dsRNA of the cargo; pre-existing/NAb = serosurveys;
462
- anti-PEG = serosurveys, gates LNP re-dosing) -> a unified per-axis immune-risk PROFILE (Verdict.immune_profile),
463
- each axis labelled validated-or-proxy (WS-CALIB), never collapsed into one number; in-vivo magnitude + patient
464
- titer stay declared known-unknowns.
465
-
466
- Platform services (on top of the validated core): PEN-MONITOR (Europe PMC living database),
467
- grounded RAG/Q&A, a tool-using agent + MCP server, and a Streamlit web app.
472
+ +-----------------------------------------------------------------------+
473
+ | THE FACES (v5.13 / 1.0) |
474
+ | Co-Scientist (drives the loop) . Genome-Writing Challenge (held-out) |
475
+ | . MCP server . REST API . Streamlit web app |
476
+ +-----------------------------------^-----------------------------------+
477
+ |
478
+ +----------------------------------------------------+---------------------------------------------------+
479
+ | THE CLOSED LOOP (v5.12 - autonomy Level 3; a human in control at safety / build / belief-admission) |
480
+ | |
481
+ | GENERATE ----> PREDICT ----> DECIDE ----> [ SAFETY ] ----> BUILD ----> INGEST ----> LEARN |
482
+ | v5.8 v5.9 v5.10 v5.7 v5.11 v4.5 gate v5.12 |
483
+ | generative digital experiment GUARDIAN protocol (no auto- continual |
484
+ | designer twin designer gate export edit) + drift |
485
+ | (Pareto) (OOD-gated) (EIG+immVOI) (refuse=stop) (DRAFT) (versioned) |
486
+ | |
487
+ | Every candidate is DISCARDED unless it passes THE VERIFIER below. No number is fabricated. |
488
+ +----------------------------------------------------+---------------------------------------------------+
489
+ |
490
+ +-----------------------------------v-----------------------------------+
491
+ | THE VERIFIER verify(design) -> Verdict (the discriminator) |
492
+ | legality (v3.3 rules) . SAFETY gate (v5.7, runs first) . |
493
+ | calibrated confidence (v3.2) . per-axis immune-risk profile (v5.6) |
494
+ +-----------------------------------^-----------------------------------+
495
+ |
496
+ +--------------------------------+-------------------+----------------+--------------------------------+
497
+ | WRITABLE GENOME (Paper 1) | WRITER ATLAS (Paper 2) | ORACLE MESH (v4.0) |
498
+ | learned safety x durability | 33,370 systems on measured axes | AF3 . Boltz-2 . Chai-1 . ESM3 |
499
+ | x reachability | + Writer-Targeting KB (8 families)| . Evo2 . AlphaGenome . RFdiff. |
500
+ | -> writability profile | <----- reachability -----> | ProteinMPNN . v5.9 STATE/scGPT |
501
+ | + WRITE PLANNER (Paper 3) | + BRIDGE OFF-TARGET ENGINE (P4) | one OracleResult contract, |
502
+ | inverse design (edit_intent)| | OOD-gated, generative=candidate|
503
+ | + DELIVERY IMMUNOLOGY (v5.1-6) per-axis immune-risk profile (each axis validated-or-proxy, never collapsed) |
504
+ | + WORLD-MODEL GRAPH (v4.5) typed provenanced edges, gated living loop (propose-only) |
505
+ +--------------------------------+------------------------------------+--------------------------------+
506
+ +----------------------------------------------------------------------------------------------------+
507
+ | DATA FOUNDATION (bulk-downloadable, public) |
508
+ | hg38 . ENCODE/Roadmap chromatin . Hi-C/LADs . TRIP position effects . RID/VISDB/MLV integration . |
509
+ | clinical genotoxic CIS . COSMIC . DepMap . gnomAD . GTEx . UniProt . Pfam/InterPro . |
510
+ | bridge off-target + DMS (Perry 2025) . anti-vector + anti-PEG serosurveys (immunology) |
511
+ +----------------------------------------------------------------------------------------------------+
468
512
  ```
469
513
 
514
+ **Reading the loop.** A *goal* enters at the top. The **generative designer** (v5.8) proposes candidate
515
+ writing systems; the **twin** (v5.9) predicts their calibrated outcomes; the **experiment designer** (v5.10)
516
+ chooses the most informative ones to test; the **Guardian** (v5.7) refuses anything hazardous; the **build
517
+ interface** (v5.11) exports a safety-gated protocol DRAFT and ingests results through the v4.5 gate; and
518
+ **continual learning** (v5.12) recalibrates, drift-aware, versioned and reversible. Each stage is gated by the
519
+ **verifier** — the single discriminator that keeps the whole loop honest. Two **faces** sit on top: a
520
+ **co-scientist** that drives the loop for a working scientist, and the **Genome-Writing Challenge**, an open
521
+ held-out benchmark others build to.
522
+
470
523
  ## How it works
471
524
 
472
- PEN-STACK is organised as **two reference layers + one engine + a services layer**.
525
+ PEN-STACK is organised as **the data + reference layers, the oracle mesh, the verifier (the discriminator), the
526
+ closed loop, and the faces** — each layer below feeding the one above, with the verifier keeping the whole loop
527
+ honest.
473
528
 
474
529
  | Component | Module | Role | Status |
475
530
  |---|---|---|---|
@@ -480,6 +535,16 @@ PEN-STACK is organised as **two reference layers + one engine + a services layer
480
535
  | **Delivery immunology** (v5.1-5.6) | `pen_stack.planner.delivery_immunology` + `{genotoxicity,capsid_epitope,seroprevalence,antipeg}_oracle`, `innate_sensing`, `immune_profile`; `validate.immune_calibration` | safety↔efficacy balance over the 8-vehicle palette; immune axes **computed/grounded from data+sequence** + anti-PEG (gates LNP re-dosing) → a unified per-axis `Verdict.immune_profile` (each axis validated-or-proxy, never collapsed); magnitude + patient titer stay known-unknowns ([docs](docs/delivery_immunology.md)) | M2 |
481
536
  | **Agentic platform** | `pen_stack.agent` | goal to cited, auditable plan; MCP server; one-command deploy | Paper 3 |
482
537
  | **Bridge off-target engine** | `pen_stack.bridge` | "CRISPOR for bridge recombinases" + guide QC (v3.1) | Paper 4 |
538
+ | **Oracle Mesh** (v4.0) | `pen_stack.oracles` | one `OracleResult` contract over AF3/Boltz-2/Chai-1/ESM3/Evo2/AlphaGenome/STATE/scGPT; OOD-gated; generative=candidate | v4.0 |
539
+ | **World-Model Graph** (v4.5) | `pen_stack.graph` | living knowledge graph; typed provenanced edges; gated propose-only loop | v4.5 |
540
+ | **The Verifier** (v3.3+) | `pen_stack.verify` | `verify(design) -> Verdict`: legality + **safety** + calibrated confidence + immune profile — the discriminator | v3.3 |
541
+ | **The Guardian** (v5.7) | `pen_stack.safety` | biosecurity / dual-use gate; runs first in `verify()`; refuse short-circuits; tamper-evident audit | v5.7 |
542
+ | **Generative Designer** (v5.8) | `pen_stack.design` | generate → verifier-as-discriminator (hazardous/illegal discarded); Pareto with grounded immune axis | v5.8 |
543
+ | **Digital Twin** (v5.9) | `pen_stack.twin` | calibrated, OOD-gated outcome prediction; immune-outcome from v5.6; phenotype-bounded | v5.9 |
544
+ | **Experiment Designer** (v5.10) | `pen_stack.active` | active learning (EIG + immune-VOI); retrospective active-vs-random (reps+CI) | v5.10 |
545
+ | **Build Interface** (v5.11) | `pen_stack.build` | safety-gated protocol export (DRAFT + immune metadata); gated ingestion; sim-lab | v5.11 |
546
+ | **The Closed Loop** (v5.12) | `pen_stack.loop` | one gated DBTL command; autonomy **Level 3**; drift-aware; versioned/reversible continual learning | v5.12 |
547
+ | **Co-Scientist + Challenge** (v5.13) | `pen_stack.agent.co_scientist`, `benchmarks/genome_writing_challenge` | the co-scientist drives the loop; the public held-out benchmark others build to | v5.13 |
483
548
  | **Genome-Writing Bench** (v3.1) | `benchmarks/`, `bench/run.py` | first writing-side benchmark; deterministic scorers, leaderboard | M2 |
484
549
  | **PEN-Agent** (v3.1) | `pen_stack.agent.pen_agent` | grounded write-planning state machine; zero fabrication | M2 |
485
550
  | **3D structural risk** (v3.1) | `pen_stack.wgenome.structure3d` | AlphaGenome contact-map deltas as a safety axis | M1 |
@@ -639,12 +704,14 @@ pen-stack/
639
704
  │ │ v5.11 protocol_safety (build-interface hard-gate: cleared exports w/ immune metadata · hazard+illegal blocked · sim loop completes) /
640
705
  │ │ v5.12 closed_loop (loop-integrity hard-gate: gated end-to-end run · Level-3 human-in-control · drift detection · versioned/reversible continual learning)
641
706
  │ ├── data/ ingestion (genome, chromatin, integration, TRIP, safety annotations)
642
- │ ├── server/api.py FastAPI REST (atlas, crosslink, writable, plan, bridge, ask)
707
+ │ ├── api/ v6.1 AI integration surface: manifest (capability_manifest + scope_manifest = machine-readable known-unknowns + oracle scope cards)
708
+ │ ├── server/api.py FastAPI REST (atlas, crosslink, writable, plan, bridge, ask; v3.3 verify; v6.1 /capabilities /scope /safety /immune /generate /predict /suggest /session + openapi.json 3.1)
643
709
  │ ├── ui/app.py Streamlit web app (16 pages; v3.2 PEN-Agent shows confidence + epistemic status)
644
710
  │ └── cli.py unified CLI
645
711
  ├── benchmarks/genome_writing_bench/ Genome-Writing Bench v0.3.8 (T1-T16 + co_scientist + safety_screening + generative_design + outcome_prediction + experiment_design + protocol_safety + closed_loop; tasks / harness / solvers / LEADERBOARD / SHAs)
646
712
  ├── benchmarks/genome_writing_challenge/ v5.13 the public Genome-Writing Challenge (held-out rounds + immune-risk task + submission API; harness / run / README / SUBMISSIONS)
647
713
  ├── bench/run.py one-command bench entrypoint (--agent, --verify)
714
+ ├── examples/ v6.1 runnable golden path: external_agent.py (REST) / mcp_client.py (MCP) / agent_tools.py (framework-agnostic tool specs from the live manifest + dispatcher)
648
715
  ├── scripts/ reproducible pipeline drivers (p1_*, p2_*, p4_*, p52/p53 delivery-immunology oracle builds, ws_*_report)
649
716
  ├── configs/ pinned datasets + thresholds + curation (YAML); v3.2 known_unknowns /
650
717
  │ target_sites / delivery_constraints; v5.1-5.6 delivery_vehicles immune_safety /
@@ -652,18 +719,25 @@ pen-stack/
652
719
  │ seroprevalence / antipeg + oracles/scope_cards (+ v5.6 known_unknowns:
653
720
  │ cd4_mhcii_help / preexisting_capsid_tcell / complement_carpa);
654
721
  │ v5.7 safety/{hazard_registry,policy,probes} (Guardian; function/family/taxon-level only)
655
- ├── prereg/ SHA-locked success criteria (paper1..4 + ws_a..ws_h + v3.2-v5.9 ws_{uq,ep,mc,ba,
722
+ ├── prereg/ SHA-locked success criteria (paper1..4 + ws_a..ws_h + v3.2-v6.0 ws_{uq,ep,mc,ba,
656
723
  │ r,v,route,env,bench,cal,o,wv,atlas,graph,mon,ct,plan,crit,cite,immune,
657
724
  │ genotox,epitope,innate,seroprev,peg,calib,profile,screen,policy,redteam,
658
725
  │ gen,pareto,orch,vcell,mech,outcome,twincal,acq,aldesign,alvalidate,
659
- │ proto,ingest,simlab,loop,continual,drift,challenge,cosci2} + SHA256 locks)
726
+ │ proto,ingest,simlab,loop,continual,drift,challenge,cosci2,
727
+ │ manifest,openapi,mcp} + SHA256 locks)
660
728
  ├── data/curated/ small committed tables (universe, gene coords, measured bridge profile,
661
729
  │ v3.2 bridge_offtarget_energetics.json)
662
730
  ├── data/llm_bench_cache/ 28 cached ungrounded-LLM transcripts (T7, offline/CI replay)
663
731
  ├── data/alphagenome_cache/ cached AlphaGenome predictions (tracks + contact maps; offline reproducibility)
664
732
  ├── tests/unit/ unit + regression + blind-validation suite
665
733
  ├── docs/ mkdocs site (cards, tutorials, INFRA, DEPLOY, MCP);
666
- │ v3.2: uncertainty.md / scope.md / mechanistic_constraints.md / BACKLOG.md
734
+ │ v3.2: uncertainty.md / scope.md / mechanistic_constraints.md / BACKLOG.md;
735
+ │ v4.0-4.5: oracles.md / writer_verification.md / world_model.md;
736
+ │ v5.0-5.6: co_scientist.md / delivery_immunology.md;
737
+ │ v5.7-v6.0 (the closed loop): responsible_use.md / biosecurity.md /
738
+ │ generative_design.md / digital_twin.md / experiment_design.md /
739
+ │ build_interface.md / closed_loop.md / autonomy.md / challenge.md /
740
+ │ co_scientist_loop.md / integrations.md / STABILITY.md (1.0 API freeze)
667
741
  ├── docker/ CUDA image + UI image + pinned requirements
668
742
  ├── tools/penctl.py laptop<->VM orchestrator (paramiko SSH/SFTP, Docker-only)
669
743
  ├── docker-compose.yml one-command self-hostable platform
@@ -0,0 +1,51 @@
1
+ # API stability & deprecation policy (v6.0.0 — "1.0 — First Stable")
2
+
3
+ At **v6.0.0**, PEN-STACK graduates to **1.0 — First Stable**: the public API exercised across all surfaces is
4
+ documented and frozen, with a deprecation policy. "First Stable" is **earned, not declared** — it is cut only
5
+ after the closed loop is demonstrated (v5.12), the benchmark is public (v5.13), and the integration surface ships.
6
+
7
+ > "1.0 — First Stable" is a commitment to **API stability**, not a claim of solving genetic engineering. The
8
+ > unknown funnel remains — made legible (scope flags, known-unknowns, honest baselines), not hidden.
9
+
10
+ ## Versioning
11
+
12
+ PEN-STACK follows **semantic versioning** from 6.0.0:
13
+
14
+ - **MAJOR** (`x.0.0`) — backward-incompatible changes to the public API (below).
15
+ - **MINOR** (`6.x.0`) — backward-compatible additions.
16
+ - **PATCH** (`6.0.x`) — backward-compatible fixes.
17
+
18
+ ## The public API (frozen at 1.0)
19
+
20
+ These are the supported entry points. Their **signatures and return-shape keys** are stable across 6.x:
21
+
22
+ | Surface | Entry point |
23
+ |---|---|
24
+ | Verify a write | `pen_stack.verify.verify(design, question=None, *, actor=…) -> Verdict` (legal · safety · immune_profile · confidence · scope) |
25
+ | Safety gate | `pen_stack.safety.safety_gate(design, *, actor=…) -> SafetyVerdict` |
26
+ | Generative design | `pen_stack.design.generate_designs(...)`, `pen_stack.design.pareto_front(...)` |
27
+ | Digital twin | `pen_stack.twin.predict_outcome(design, cell_state)`, `pen_stack.twin.calibrate_outcome(...)` |
28
+ | Experiment design | `pen_stack.active.select_batch(...)`, `pen_stack.active.expected_information_gain(...)` |
29
+ | Build interface | `pen_stack.build.export_protocol(...)`, `pen_stack.build.ingest_result(...)`, `pen_stack.build.run_simulated(...)` |
30
+ | Closed loop | `pen_stack.loop.run_loop(goal, cell_state, …)` |
31
+ | Co-scientist | `pen_stack.agent.co_scientist.co_scientist_session(goal, cell_state)` |
32
+ | Challenge | `benchmarks.genome_writing_challenge.harness.evaluate(submission, round_id)` |
33
+ | CLI / MCP | `pen-stack` / `pen-bridge` console scripts; `pen_stack.agent.mcp_server` |
34
+
35
+ Internal helpers (underscore-prefixed names, modules under `pen_stack/*/_*`, the `data/`/`wgenome/` training
36
+ pipelines) are **not** part of the public API and may change in any release.
37
+
38
+ ## Deprecation policy
39
+
40
+ - A public API element is deprecated by a **`DeprecationWarning`** and a CHANGELOG note **at least one MINOR
41
+ release** before removal.
42
+ - Removal happens only in a **MAJOR** release.
43
+ - The `OracleResult` / `Verdict` / `SafetyVerdict` / immune-profile **contracts** (field names + invariants such as
44
+ `collapsed_score is None` and the no-fabrication guard) are stable across 6.x.
45
+
46
+ ## What stability does NOT promise
47
+
48
+ - Model **numbers** may change as oracles / data are updated (they are version-pinned + provenanced; results are
49
+ reproducible *given a pinned version*, not constant forever).
50
+ - **Scope** stays honest: out-of-scope questions are deferred, known-unknowns declared, baselines reported — at
51
+ 1.0 and beyond.