pen-stack 6.0.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-6.0.0 → pen_stack-6.1.0}/CHANGELOG.md +29 -0
  2. {pen_stack-6.0.0 → pen_stack-6.1.0}/CITATION.cff +1 -1
  3. {pen_stack-6.0.0 → pen_stack-6.1.0}/PKG-INFO +101 -41
  4. {pen_stack-6.0.0 → pen_stack-6.1.0}/README.md +100 -40
  5. pen_stack-6.1.0/docs/integrations.md +87 -0
  6. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/__init__.py +1 -1
  7. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/mcp_server.py +65 -0
  8. pen_stack-6.1.0/pen_stack/api/__init__.py +12 -0
  9. pen_stack-6.1.0/pen_stack/api/manifest.py +93 -0
  10. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/server/api.py +66 -0
  11. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack.egg-info/PKG-INFO +101 -41
  12. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack.egg-info/SOURCES.txt +8 -0
  13. pen_stack-6.1.0/prereg/SHA256_LOCK_ws_manifest.json +8 -0
  14. pen_stack-6.1.0/prereg/SHA256_LOCK_ws_mcp.json +8 -0
  15. pen_stack-6.1.0/prereg/SHA256_LOCK_ws_openapi.json +8 -0
  16. pen_stack-6.1.0/prereg/ws_manifest.yaml +20 -0
  17. pen_stack-6.1.0/prereg/ws_mcp.yaml +14 -0
  18. pen_stack-6.1.0/prereg/ws_openapi.yaml +13 -0
  19. {pen_stack-6.0.0 → pen_stack-6.1.0}/pyproject.toml +1 -1
  20. pen_stack-6.0.0/docs/integrations.md +0 -56
  21. {pen_stack-6.0.0 → pen_stack-6.1.0}/LICENSE +0 -0
  22. {pen_stack-6.0.0 → pen_stack-6.1.0}/MANIFEST.in +0 -0
  23. {pen_stack-6.0.0 → pen_stack-6.1.0}/bench/run.py +0 -0
  24. {pen_stack-6.0.0 → pen_stack-6.1.0}/benchmarks/genome_writing_bench/LEADERBOARD.md +0 -0
  25. {pen_stack-6.0.0 → pen_stack-6.1.0}/benchmarks/genome_writing_bench/README.md +0 -0
  26. {pen_stack-6.0.0 → pen_stack-6.1.0}/benchmarks/genome_writing_bench/SHA256SUMS +0 -0
  27. {pen_stack-6.0.0 → pen_stack-6.1.0}/benchmarks/genome_writing_bench/SUBMISSIONS.md +0 -0
  28. {pen_stack-6.0.0 → pen_stack-6.1.0}/benchmarks/genome_writing_bench/tasks.yaml +0 -0
  29. {pen_stack-6.0.0 → pen_stack-6.1.0}/benchmarks/genome_writing_challenge/README.md +0 -0
  30. {pen_stack-6.0.0 → pen_stack-6.1.0}/benchmarks/genome_writing_challenge/SUBMISSIONS.md +0 -0
  31. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/antipeg.yaml +0 -0
  32. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/atlas_families.yaml +0 -0
  33. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/bridge_offtarget_profile.yaml +0 -0
  34. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/capsid_epitope_oracle.yaml +0 -0
  35. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/capsid_sequences.fasta +0 -0
  36. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/cargo_polish.yaml +0 -0
  37. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/cell_types.yaml +0 -0
  38. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/datasets.yaml +0 -0
  39. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/delivery_constraints.yaml +0 -0
  40. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/delivery_rules.yaml +0 -0
  41. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/delivery_vehicles.yaml +0 -0
  42. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/gates_v3.yaml +0 -0
  43. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/genotoxicity_oracle.yaml +0 -0
  44. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/gsh_validated_heldout.yaml +0 -0
  45. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/intent_weights.yaml +0 -0
  46. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/known_unknowns.yaml +0 -0
  47. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/llm.yaml +0 -0
  48. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/monitor_queries.yaml +0 -0
  49. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/oracles/scope_cards.yaml +0 -0
  50. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/rules/delivery.yaml +0 -0
  51. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/rules/fold.yaml +0 -0
  52. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/rules/multiplex.yaml +0 -0
  53. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/rules/payload.yaml +0 -0
  54. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/rules/reachability.yaml +0 -0
  55. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/safety/hazard_registry.yaml +0 -0
  56. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/safety/policy.yaml +0 -0
  57. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/safety/probes.yaml +0 -0
  58. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/score_axes.yaml +0 -0
  59. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/seroprevalence.yaml +0 -0
  60. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/target_sites.yaml +0 -0
  61. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/universe_crosswalk.yaml +0 -0
  62. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/write_types.yaml +0 -0
  63. {pen_stack-6.0.0 → pen_stack-6.1.0}/configs/wtkb_curated.yaml +0 -0
  64. {pen_stack-6.0.0 → pen_stack-6.1.0}/data/curated/bridge_offtarget_energetics.json +0 -0
  65. {pen_stack-6.0.0 → pen_stack-6.1.0}/data/curated/bridge_offtarget_profile_measured.parquet +0 -0
  66. {pen_stack-6.0.0 → pen_stack-6.1.0}/data/curated/gene_coords.parquet +0 -0
  67. {pen_stack-6.0.0 → pen_stack-6.1.0}/data/curated/unified_editor_universe.parquet +0 -0
  68. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/BACKLOG.md +0 -0
  69. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/DEPLOY.md +0 -0
  70. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/INFRA.md +0 -0
  71. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/MCP.md +0 -0
  72. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/RELEASING.md +0 -0
  73. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/REPRO.md +0 -0
  74. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/STABILITY.md +0 -0
  75. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/agent.md +0 -0
  76. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/alphagenome_feasibility.md +0 -0
  77. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/autonomy.md +0 -0
  78. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/benchmark_circularity.md +0 -0
  79. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/biosecurity.md +0 -0
  80. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/build_interface.md +0 -0
  81. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/cards/atlas.md +0 -0
  82. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/cards/durability.md +0 -0
  83. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/cards/safety.md +0 -0
  84. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/challenge.md +0 -0
  85. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/closed_loop.md +0 -0
  86. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/co_scientist.md +0 -0
  87. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/co_scientist_loop.md +0 -0
  88. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/delivery.md +0 -0
  89. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/delivery_immunology.md +0 -0
  90. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/digital_twin.md +0 -0
  91. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/dissemination.md +0 -0
  92. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/environment.md +0 -0
  93. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/experiment_design.md +0 -0
  94. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/generative_design.md +0 -0
  95. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/index.md +0 -0
  96. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/mechanistic_constraints.md +0 -0
  97. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/oracles.md +0 -0
  98. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/positioning.md +0 -0
  99. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/private_data_formats.md +0 -0
  100. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/quickstart.md +0 -0
  101. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/responsible_use.md +0 -0
  102. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/rules.md +0 -0
  103. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/scope.md +0 -0
  104. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/scorecard.md +0 -0
  105. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/tutorials/compare-families.md +0 -0
  106. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/tutorials/score-deliverability.md +0 -0
  107. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/tutorials/where-can-i-write.md +0 -0
  108. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/tutorials/which-writer-reaches-locus.md +0 -0
  109. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/uncertainty.md +0 -0
  110. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/verify.md +0 -0
  111. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/world_model.md +0 -0
  112. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/writer_verification.md +0 -0
  113. {pen_stack-6.0.0 → pen_stack-6.1.0}/docs/wtkb.md +0 -0
  114. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/_resources.py +0 -0
  115. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/active/__init__.py +0 -0
  116. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/active/acquire.py +0 -0
  117. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/active/design.py +0 -0
  118. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/active/validate.py +0 -0
  119. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/adapt/__init__.py +0 -0
  120. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/adapt/finetune.py +0 -0
  121. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/adapt/ingest.py +0 -0
  122. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/adapt/pipeline.py +0 -0
  123. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/adapt/recalibrate.py +0 -0
  124. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/adapt/report.py +0 -0
  125. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/__init__.py +0 -0
  126. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/cite.py +0 -0
  127. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/co_scientist.py +0 -0
  128. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/epistemic.py +0 -0
  129. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/guardrails.py +0 -0
  130. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/orchestrator.py +0 -0
  131. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/orchestrator_live.py +0 -0
  132. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/pen_agent.py +0 -0
  133. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/scope.py +0 -0
  134. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/agent/tools.py +0 -0
  135. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/atlas/__init__.py +0 -0
  136. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/atlas/build_wtkb.py +0 -0
  137. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/atlas/crosslink.py +0 -0
  138. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/atlas/expand.py +0 -0
  139. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/atlas/schema.py +0 -0
  140. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/atlas/scorecard.py +0 -0
  141. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/atlas/universe.py +0 -0
  142. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/atlas/variant_propose.py +0 -0
  143. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/atlas/writer_verify.py +0 -0
  144. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/bridge/__init__.py +0 -0
  145. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/bridge/activity.py +0 -0
  146. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/bridge/cli.py +0 -0
  147. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/bridge/fold_qc.py +0 -0
  148. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/bridge/guide_qc.py +0 -0
  149. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/bridge/ingest.py +0 -0
  150. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/bridge/offtarget.py +0 -0
  151. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/bridge/offtarget_energetics.py +0 -0
  152. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/bridge/ortholog_screen.py +0 -0
  153. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/bridge/pipeline.py +0 -0
  154. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/build/__init__.py +0 -0
  155. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/build/ingest.py +0 -0
  156. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/build/protocol.py +0 -0
  157. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/build/simlab.py +0 -0
  158. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/cli.py +0 -0
  159. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/data/__init__.py +0 -0
  160. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/data/encode.py +0 -0
  161. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/data/genome.py +0 -0
  162. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/data/ingest_chromatin.py +0 -0
  163. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/data/ingest_integration.py +0 -0
  164. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/data/ingest_safety_annot.py +0 -0
  165. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/data/ingest_trip.py +0 -0
  166. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/design/__init__.py +0 -0
  167. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/design/generate.py +0 -0
  168. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/design/pareto.py +0 -0
  169. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/design/space.py +0 -0
  170. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/env/__init__.py +0 -0
  171. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/env/genome_writing_env.py +0 -0
  172. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/env/policies.py +0 -0
  173. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/graph/__init__.py +0 -0
  174. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/graph/build.py +0 -0
  175. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/graph/cell_types.py +0 -0
  176. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/graph/ingest.py +0 -0
  177. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/graph/query.py +0 -0
  178. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/graph/schema.py +0 -0
  179. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/loop/__init__.py +0 -0
  180. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/loop/continual.py +0 -0
  181. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/loop/cycle.py +0 -0
  182. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/loop/drift.py +0 -0
  183. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/mech/__init__.py +0 -0
  184. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/mech/classify_atlas.py +0 -0
  185. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/mech/whitelist.py +0 -0
  186. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/monitor/__init__.py +0 -0
  187. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/monitor/europepmc.py +0 -0
  188. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/monitor/run.py +0 -0
  189. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/monitor/triage.py +0 -0
  190. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/oracles/__init__.py +0 -0
  191. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/oracles/cache.py +0 -0
  192. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/oracles/energetics.py +0 -0
  193. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/oracles/genome.py +0 -0
  194. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/oracles/protein_design.py +0 -0
  195. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/oracles/rna.py +0 -0
  196. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/oracles/schema.py +0 -0
  197. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/oracles/structure.py +0 -0
  198. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/oracles/vcell.py +0 -0
  199. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/__init__.py +0 -0
  200. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/antipeg_oracle.py +0 -0
  201. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/capsid_epitope_oracle.py +0 -0
  202. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/cargo.py +0 -0
  203. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/cargo_polish.py +0 -0
  204. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/delivery.py +0 -0
  205. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/delivery_constraints.py +0 -0
  206. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/delivery_immunology.py +0 -0
  207. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/delivery_vehicles.py +0 -0
  208. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/genotoxicity_oracle.py +0 -0
  209. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/immune_profile.py +0 -0
  210. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/innate_sensing.py +0 -0
  211. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/multiplex.py +0 -0
  212. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/optimize.py +0 -0
  213. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/pipeline.py +0 -0
  214. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/report.py +0 -0
  215. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/router.py +0 -0
  216. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/seroprevalence_oracle.py +0 -0
  217. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/planner/target_site.py +0 -0
  218. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/rag/__init__.py +0 -0
  219. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/rag/index.py +0 -0
  220. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/rag/llm.py +0 -0
  221. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/rag/qa.py +0 -0
  222. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/rules/__init__.py +0 -0
  223. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/rules/evaluators.py +0 -0
  224. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/rules/loader.py +0 -0
  225. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/rules/schema.py +0 -0
  226. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/rules/solver.py +0 -0
  227. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/safety/__init__.py +0 -0
  228. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/safety/audit.py +0 -0
  229. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/safety/gate.py +0 -0
  230. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/safety/policy.py +0 -0
  231. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/safety/redteam.py +0 -0
  232. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/safety/registry.py +0 -0
  233. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/safety/screen.py +0 -0
  234. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/score/__init__.py +0 -0
  235. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/score/recalibrate.py +0 -0
  236. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/score/therapeutic.py +0 -0
  237. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/server/__init__.py +0 -0
  238. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/twin/__init__.py +0 -0
  239. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/twin/calibrate.py +0 -0
  240. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/twin/mechanistic.py +0 -0
  241. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/twin/outcome.py +0 -0
  242. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/ui/__init__.py +0 -0
  243. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/ui/app.py +0 -0
  244. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/__init__.py +0 -0
  245. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/adapt_demo.py +0 -0
  246. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/agent_eval.py +0 -0
  247. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/bench_adversarial_tasks.py +0 -0
  248. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/bench_coscientist_tasks.py +0 -0
  249. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/bench_graph_tasks.py +0 -0
  250. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/bench_rule_tasks.py +0 -0
  251. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/bench_trust_tasks.py +0 -0
  252. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/bench_writetype_tasks.py +0 -0
  253. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/blind_gsh_discovery.py +0 -0
  254. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/cargo_directionality.py +0 -0
  255. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/closed_loop.py +0 -0
  256. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/durability_baselines.py +0 -0
  257. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/experiment_design.py +0 -0
  258. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/forward_hypotheses.py +0 -0
  259. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/generative_design.py +0 -0
  260. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/guide_qc_demo.py +0 -0
  261. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/immune_calibration.py +0 -0
  262. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/intent_specification.py +0 -0
  263. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/offtarget_energetics_eval.py +0 -0
  264. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/out_of_scope_refusal.py +0 -0
  265. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/outcome_calibration.py +0 -0
  266. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/outcome_prediction.py +0 -0
  267. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/paper3_benchmark.py +0 -0
  268. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/paper4_real_validation.py +0 -0
  269. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/paper4_validation.py +0 -0
  270. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/protocol_safety.py +0 -0
  271. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/safety_screening.py +0 -0
  272. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/selective_prediction.py +0 -0
  273. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/seq_vs_measured.py +0 -0
  274. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/target_site_controls.py +0 -0
  275. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/uncertainty_eval.py +0 -0
  276. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/ungrounded_baseline.py +0 -0
  277. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/within_locus_ranking.py +0 -0
  278. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/validate/writer_recovery.py +0 -0
  279. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/verify/__init__.py +0 -0
  280. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/verify/schema.py +0 -0
  281. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/verify/service.py +0 -0
  282. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/__init__.py +0 -0
  283. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/chromatin_seq.py +0 -0
  284. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/durability.py +0 -0
  285. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/export_tracks.py +0 -0
  286. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/features.py +0 -0
  287. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/gsh_baseline.py +0 -0
  288. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/mesh_features.py +0 -0
  289. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/ood.py +0 -0
  290. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/providers.py +0 -0
  291. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/safety.py +0 -0
  292. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/structure3d.py +0 -0
  293. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/uncertainty.py +0 -0
  294. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack/wgenome/writability.py +0 -0
  295. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack.egg-info/dependency_links.txt +0 -0
  296. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack.egg-info/entry_points.txt +0 -0
  297. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack.egg-info/requires.txt +0 -0
  298. {pen_stack-6.0.0 → pen_stack-6.1.0}/pen_stack.egg-info/top_level.txt +0 -0
  299. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_phase0.json +0 -0
  300. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_phase1_5.json +0 -0
  301. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_phase2.json +0 -0
  302. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_phase3.json +0 -0
  303. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_a.json +0 -0
  304. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_acq.json +0 -0
  305. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_aldesign.json +0 -0
  306. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_alvalidate.json +0 -0
  307. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_atlas.json +0 -0
  308. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_b.json +0 -0
  309. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_ba.json +0 -0
  310. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_ba_v33.json +0 -0
  311. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_ba_v45.json +0 -0
  312. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_bench.json +0 -0
  313. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_c.json +0 -0
  314. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_cal.json +0 -0
  315. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_calib.json +0 -0
  316. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_challenge.json +0 -0
  317. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_cite.json +0 -0
  318. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_continual.json +0 -0
  319. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_cosci2.json +0 -0
  320. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_crit.json +0 -0
  321. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_ct.json +0 -0
  322. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_d.json +0 -0
  323. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_drift.json +0 -0
  324. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_e.json +0 -0
  325. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_env.json +0 -0
  326. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_ep.json +0 -0
  327. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_epitope.json +0 -0
  328. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_f.json +0 -0
  329. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_g.json +0 -0
  330. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_gen.json +0 -0
  331. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_genotox.json +0 -0
  332. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_graph.json +0 -0
  333. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_h.json +0 -0
  334. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_immune.json +0 -0
  335. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_ingest.json +0 -0
  336. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_innate.json +0 -0
  337. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_loop.json +0 -0
  338. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_mc.json +0 -0
  339. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_mech.json +0 -0
  340. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_mon.json +0 -0
  341. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_o.json +0 -0
  342. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_orch.json +0 -0
  343. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_outcome.json +0 -0
  344. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_pareto.json +0 -0
  345. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_peg.json +0 -0
  346. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_plan.json +0 -0
  347. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_policy.json +0 -0
  348. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_profile.json +0 -0
  349. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_proto.json +0 -0
  350. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_r.json +0 -0
  351. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_redteam.json +0 -0
  352. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_route.json +0 -0
  353. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_screen.json +0 -0
  354. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_seroprev.json +0 -0
  355. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_simlab.json +0 -0
  356. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_twincal.json +0 -0
  357. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_uq.json +0 -0
  358. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_v.json +0 -0
  359. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_vcell.json +0 -0
  360. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/SHA256_LOCK_ws_wv.json +0 -0
  361. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/paper1.yaml +0 -0
  362. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/paper2.yaml +0 -0
  363. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/paper3.yaml +0 -0
  364. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/paper4.yaml +0 -0
  365. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/phase0.yaml +0 -0
  366. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_a.yaml +0 -0
  367. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_acq.yaml +0 -0
  368. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_aldesign.yaml +0 -0
  369. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_alvalidate.yaml +0 -0
  370. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_atlas.yaml +0 -0
  371. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_b.yaml +0 -0
  372. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_ba.yaml +0 -0
  373. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_ba_v33.yaml +0 -0
  374. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_ba_v45.yaml +0 -0
  375. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_bench.yaml +0 -0
  376. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_c.yaml +0 -0
  377. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_cal.yaml +0 -0
  378. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_calib.yaml +0 -0
  379. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_challenge.yaml +0 -0
  380. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_cite.yaml +0 -0
  381. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_continual.yaml +0 -0
  382. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_cosci2.yaml +0 -0
  383. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_crit.yaml +0 -0
  384. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_ct.yaml +0 -0
  385. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_d.yaml +0 -0
  386. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_drift.yaml +0 -0
  387. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_e.yaml +0 -0
  388. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_env.yaml +0 -0
  389. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_ep.yaml +0 -0
  390. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_epitope.yaml +0 -0
  391. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_f.yaml +0 -0
  392. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_g.yaml +0 -0
  393. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_gen.yaml +0 -0
  394. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_genotox.yaml +0 -0
  395. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_graph.yaml +0 -0
  396. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_h.yaml +0 -0
  397. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_immune.yaml +0 -0
  398. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_ingest.yaml +0 -0
  399. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_innate.yaml +0 -0
  400. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_loop.yaml +0 -0
  401. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_mc.yaml +0 -0
  402. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_mech.yaml +0 -0
  403. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_mon.yaml +0 -0
  404. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_o.yaml +0 -0
  405. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_orch.yaml +0 -0
  406. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_outcome.yaml +0 -0
  407. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_pareto.yaml +0 -0
  408. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_peg.yaml +0 -0
  409. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_plan.yaml +0 -0
  410. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_policy.yaml +0 -0
  411. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_profile.yaml +0 -0
  412. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_proto.yaml +0 -0
  413. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_r.yaml +0 -0
  414. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_redteam.yaml +0 -0
  415. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_route.yaml +0 -0
  416. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_screen.yaml +0 -0
  417. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_seroprev.yaml +0 -0
  418. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_simlab.yaml +0 -0
  419. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_twincal.yaml +0 -0
  420. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_uq.yaml +0 -0
  421. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_v.yaml +0 -0
  422. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_vcell.yaml +0 -0
  423. {pen_stack-6.0.0 → pen_stack-6.1.0}/prereg/ws_wv.yaml +0 -0
  424. {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p1_build_atlas.py +0 -0
  425. {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p1_build_durability.py +0 -0
  426. {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p1_export_tracks.py +0 -0
  427. {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p1_safety_concordance.py +0 -0
  428. {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p1_train_safety.py +0 -0
  429. {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p1_validation_report.py +0 -0
  430. {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p2_build_atlas.py +0 -0
  431. {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p3_benchmark_report.py +0 -0
  432. {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p4_genome_scan.py +0 -0
  433. {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p52_build_genotox_oracle.py +0 -0
  434. {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/p53_build_epitope_oracle.py +0 -0
  435. {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/ws_b_report.py +0 -0
  436. {pen_stack-6.0.0 → pen_stack-6.1.0}/scripts/ws_c_report.py +0 -0
  437. {pen_stack-6.0.0 → pen_stack-6.1.0}/setup.cfg +0 -0
@@ -3,6 +3,35 @@
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
+
6
35
  ## [6.0.0] - 2026-06-11 - 1.0 — First Stable (the graduation)
7
36
 
8
37
  **The Closed-Loop arc is complete (7/7), and PEN-STACK graduates to "1.0 — First Stable."** The public API
@@ -1,7 +1,7 @@
1
1
  cff-version: 1.2.0
2
2
  message: "If you use PEN-STACK, please cite it as below."
3
3
  title: "PEN-STACK: open infrastructure for genome writing"
4
- version: 6.0.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: 6.0.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
@@ -90,9 +90,9 @@ every design against rule-grounded mechanism, reports calibrated confidence, cit
90
90
  [![codecov](https://codecov.io/gh/ahmedanees-m/pen-stack/branch/main/graph/badge.svg)](https://codecov.io/gh/ahmedanees-m/pen-stack)
91
91
  [![License: MIT](https://img.shields.io/badge/License-MIT-informational.svg)](LICENSE)
92
92
  [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/)
93
- [![Version](https://img.shields.io/badge/version-6.0.0-blue.svg)](CHANGELOG.md)
93
+ [![Version](https://img.shields.io/badge/version-6.1.0-blue.svg)](CHANGELOG.md)
94
94
  [![Status](https://img.shields.io/badge/status-1.0%20First%20Stable-success.svg)](docs/STABILITY.md)
95
- [![Tests](https://img.shields.io/badge/tests-354%20passing-success.svg)](tests/)
95
+ [![Tests](https://img.shields.io/badge/tests-360%20passing-success.svg)](tests/)
96
96
  [![Lint: ruff](https://img.shields.io/badge/lint-ruff-purple.svg)](https://github.com/astral-sh/ruff)
97
97
  [![Runtime: Docker](https://img.shields.io/badge/runtime-docker-2496ED.svg)](docker/)
98
98
  [![Validation: pre-registered](https://img.shields.io/badge/validation-pre--registered-critical.svg)](prereg/)
@@ -148,6 +148,24 @@ demonstrated (v5.12) and the benchmark went public (v5.13).
148
148
  > unknown funnel remains — made legible (scope flags, known-unknowns, honest baselines, no fabrication), not
149
149
  > hidden.
150
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
+
151
169
  ## What is new in v5.13 — The Standard (Genome-Writing Challenge + Co-Scientist II)
152
170
 
153
171
  v5.13 (**Closed-Loop arc, Cycle 7 of 7**) makes PEN-STACK the field's reference and its most useful face: the
@@ -520,45 +538,68 @@ benchmark with deterministic scorers and no circular labels. See
520
538
 
521
539
  ## Architecture
522
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
+
523
546
  ```
524
- +-------------------------------------------+
525
- | WRITE PLANNER (engine) |
526
- | inverse design: destination x writer |
527
- | x cargo/guide x delivery -> ranked plan |
528
- +----------------^-------------^-------------+
529
- | |
530
- +-------------------------+--+ +---+------------------------+
531
- | WRITABLE GENOME (B) | | WRITER ATLAS (A) |
532
- | flagship reference |<---->| companion reference |
533
- | | reach| |
534
- | - Safety layer (learned) | ability - Family targeting KB |
535
- | - Durability layer (learned)| | - Measured scoring axes |
536
- | - Reachability layer -----+------+ - Mechanism classifier |
537
- | -> writability profile | | - DMS variant model |
538
- +-------------------------^--+ +---+------------------------+
539
- | |
540
- +----------------------------------+-------------+-------------------------+
541
- | DATA FOUNDATION (bulk-downloadable) |
542
- | hg38 . ENCODE/Roadmap chromatin . Hi-C/LADs . TRIP position effects . |
543
- | RID/VISDB/MLV integration sites . clinical genotoxic CIS . COSMIC . |
544
- | DepMap . gnomAD . GTEx . UniProt . Pfam/InterPro . bridge-recombinase |
545
- | off-target + DMS (Perry 2025) |
546
- +-------------------------------------------------------------------------+
547
-
548
- Delivery immunology (v5.1-5.6, feeds the planner): a safety<->efficacy balance over the 8-vehicle palette,
549
- with the immune/safety axes computed/grounded from data + sequence (genotoxicity = VISDB x COSMIC;
550
- adaptive/CD8 = MHCflurry over the capsid; innate = CpG/dsRNA of the cargo; pre-existing/NAb = serosurveys;
551
- anti-PEG = serosurveys, gates LNP re-dosing) -> a unified per-axis immune-risk PROFILE (Verdict.immune_profile),
552
- each axis labelled validated-or-proxy (WS-CALIB), never collapsed into one number; in-vivo magnitude + patient
553
- titer stay declared known-unknowns.
554
-
555
- Platform services (on top of the validated core): PEN-MONITOR (Europe PMC living database),
556
- 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
+ +----------------------------------------------------------------------------------------------------+
557
587
  ```
558
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
+
559
598
  ## How it works
560
599
 
561
- 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.
562
603
 
563
604
  | Component | Module | Role | Status |
564
605
  |---|---|---|---|
@@ -569,6 +610,16 @@ PEN-STACK is organised as **two reference layers + one engine + a services layer
569
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 |
570
611
  | **Agentic platform** | `pen_stack.agent` | goal to cited, auditable plan; MCP server; one-command deploy | Paper 3 |
571
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 |
572
623
  | **Genome-Writing Bench** (v3.1) | `benchmarks/`, `bench/run.py` | first writing-side benchmark; deterministic scorers, leaderboard | M2 |
573
624
  | **PEN-Agent** (v3.1) | `pen_stack.agent.pen_agent` | grounded write-planning state machine; zero fabrication | M2 |
574
625
  | **3D structural risk** (v3.1) | `pen_stack.wgenome.structure3d` | AlphaGenome contact-map deltas as a safety axis | M1 |
@@ -728,12 +779,14 @@ pen-stack/
728
779
  │ │ v5.11 protocol_safety (build-interface hard-gate: cleared exports w/ immune metadata · hazard+illegal blocked · sim loop completes) /
729
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)
730
781
  │ ├── data/ ingestion (genome, chromatin, integration, TRIP, safety annotations)
731
- │ ├── 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)
732
784
  │ ├── ui/app.py Streamlit web app (16 pages; v3.2 PEN-Agent shows confidence + epistemic status)
733
785
  │ └── cli.py unified CLI
734
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)
735
787
  ├── benchmarks/genome_writing_challenge/ v5.13 the public Genome-Writing Challenge (held-out rounds + immune-risk task + submission API; harness / run / README / SUBMISSIONS)
736
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)
737
790
  ├── scripts/ reproducible pipeline drivers (p1_*, p2_*, p4_*, p52/p53 delivery-immunology oracle builds, ws_*_report)
738
791
  ├── configs/ pinned datasets + thresholds + curation (YAML); v3.2 known_unknowns /
739
792
  │ target_sites / delivery_constraints; v5.1-5.6 delivery_vehicles immune_safety /
@@ -741,18 +794,25 @@ pen-stack/
741
794
  │ seroprevalence / antipeg + oracles/scope_cards (+ v5.6 known_unknowns:
742
795
  │ cd4_mhcii_help / preexisting_capsid_tcell / complement_carpa);
743
796
  │ v5.7 safety/{hazard_registry,policy,probes} (Guardian; function/family/taxon-level only)
744
- ├── 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,
745
798
  │ r,v,route,env,bench,cal,o,wv,atlas,graph,mon,ct,plan,crit,cite,immune,
746
799
  │ genotox,epitope,innate,seroprev,peg,calib,profile,screen,policy,redteam,
747
800
  │ gen,pareto,orch,vcell,mech,outcome,twincal,acq,aldesign,alvalidate,
748
- │ 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)
749
803
  ├── data/curated/ small committed tables (universe, gene coords, measured bridge profile,
750
804
  │ v3.2 bridge_offtarget_energetics.json)
751
805
  ├── data/llm_bench_cache/ 28 cached ungrounded-LLM transcripts (T7, offline/CI replay)
752
806
  ├── data/alphagenome_cache/ cached AlphaGenome predictions (tracks + contact maps; offline reproducibility)
753
807
  ├── tests/unit/ unit + regression + blind-validation suite
754
808
  ├── docs/ mkdocs site (cards, tutorials, INFRA, DEPLOY, MCP);
755
- │ 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)
756
816
  ├── docker/ CUDA image + UI image + pinned requirements
757
817
  ├── tools/penctl.py laptop<->VM orchestrator (paramiko SSH/SFTP, Docker-only)
758
818
  ├── docker-compose.yml one-command self-hostable platform
@@ -15,9 +15,9 @@ every design against rule-grounded mechanism, reports calibrated confidence, cit
15
15
  [![codecov](https://codecov.io/gh/ahmedanees-m/pen-stack/branch/main/graph/badge.svg)](https://codecov.io/gh/ahmedanees-m/pen-stack)
16
16
  [![License: MIT](https://img.shields.io/badge/License-MIT-informational.svg)](LICENSE)
17
17
  [![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue.svg)](https://www.python.org/)
18
- [![Version](https://img.shields.io/badge/version-6.0.0-blue.svg)](CHANGELOG.md)
18
+ [![Version](https://img.shields.io/badge/version-6.1.0-blue.svg)](CHANGELOG.md)
19
19
  [![Status](https://img.shields.io/badge/status-1.0%20First%20Stable-success.svg)](docs/STABILITY.md)
20
- [![Tests](https://img.shields.io/badge/tests-354%20passing-success.svg)](tests/)
20
+ [![Tests](https://img.shields.io/badge/tests-360%20passing-success.svg)](tests/)
21
21
  [![Lint: ruff](https://img.shields.io/badge/lint-ruff-purple.svg)](https://github.com/astral-sh/ruff)
22
22
  [![Runtime: Docker](https://img.shields.io/badge/runtime-docker-2496ED.svg)](docker/)
23
23
  [![Validation: pre-registered](https://img.shields.io/badge/validation-pre--registered-critical.svg)](prereg/)
@@ -73,6 +73,24 @@ demonstrated (v5.12) and the benchmark went public (v5.13).
73
73
  > unknown funnel remains — made legible (scope flags, known-unknowns, honest baselines, no fabrication), not
74
74
  > hidden.
75
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
+
76
94
  ## What is new in v5.13 — The Standard (Genome-Writing Challenge + Co-Scientist II)
77
95
 
78
96
  v5.13 (**Closed-Loop arc, Cycle 7 of 7**) makes PEN-STACK the field's reference and its most useful face: the
@@ -445,45 +463,68 @@ benchmark with deterministic scorers and no circular labels. See
445
463
 
446
464
  ## Architecture
447
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
+
448
471
  ```
449
- +-------------------------------------------+
450
- | WRITE PLANNER (engine) |
451
- | inverse design: destination x writer |
452
- | x cargo/guide x delivery -> ranked plan |
453
- +----------------^-------------^-------------+
454
- | |
455
- +-------------------------+--+ +---+------------------------+
456
- | WRITABLE GENOME (B) | | WRITER ATLAS (A) |
457
- | flagship reference |<---->| companion reference |
458
- | | reach| |
459
- | - Safety layer (learned) | ability - Family targeting KB |
460
- | - Durability layer (learned)| | - Measured scoring axes |
461
- | - Reachability layer -----+------+ - Mechanism classifier |
462
- | -> writability profile | | - DMS variant model |
463
- +-------------------------^--+ +---+------------------------+
464
- | |
465
- +----------------------------------+-------------+-------------------------+
466
- | DATA FOUNDATION (bulk-downloadable) |
467
- | hg38 . ENCODE/Roadmap chromatin . Hi-C/LADs . TRIP position effects . |
468
- | RID/VISDB/MLV integration sites . clinical genotoxic CIS . COSMIC . |
469
- | DepMap . gnomAD . GTEx . UniProt . Pfam/InterPro . bridge-recombinase |
470
- | off-target + DMS (Perry 2025) |
471
- +-------------------------------------------------------------------------+
472
-
473
- Delivery immunology (v5.1-5.6, feeds the planner): a safety<->efficacy balance over the 8-vehicle palette,
474
- with the immune/safety axes computed/grounded from data + sequence (genotoxicity = VISDB x COSMIC;
475
- adaptive/CD8 = MHCflurry over the capsid; innate = CpG/dsRNA of the cargo; pre-existing/NAb = serosurveys;
476
- anti-PEG = serosurveys, gates LNP re-dosing) -> a unified per-axis immune-risk PROFILE (Verdict.immune_profile),
477
- each axis labelled validated-or-proxy (WS-CALIB), never collapsed into one number; in-vivo magnitude + patient
478
- titer stay declared known-unknowns.
479
-
480
- Platform services (on top of the validated core): PEN-MONITOR (Europe PMC living database),
481
- 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
+ +----------------------------------------------------------------------------------------------------+
482
512
  ```
483
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
+
484
523
  ## How it works
485
524
 
486
- 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.
487
528
 
488
529
  | Component | Module | Role | Status |
489
530
  |---|---|---|---|
@@ -494,6 +535,16 @@ PEN-STACK is organised as **two reference layers + one engine + a services layer
494
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 |
495
536
  | **Agentic platform** | `pen_stack.agent` | goal to cited, auditable plan; MCP server; one-command deploy | Paper 3 |
496
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 |
497
548
  | **Genome-Writing Bench** (v3.1) | `benchmarks/`, `bench/run.py` | first writing-side benchmark; deterministic scorers, leaderboard | M2 |
498
549
  | **PEN-Agent** (v3.1) | `pen_stack.agent.pen_agent` | grounded write-planning state machine; zero fabrication | M2 |
499
550
  | **3D structural risk** (v3.1) | `pen_stack.wgenome.structure3d` | AlphaGenome contact-map deltas as a safety axis | M1 |
@@ -653,12 +704,14 @@ pen-stack/
653
704
  │ │ v5.11 protocol_safety (build-interface hard-gate: cleared exports w/ immune metadata · hazard+illegal blocked · sim loop completes) /
654
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)
655
706
  │ ├── data/ ingestion (genome, chromatin, integration, TRIP, safety annotations)
656
- │ ├── 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)
657
709
  │ ├── ui/app.py Streamlit web app (16 pages; v3.2 PEN-Agent shows confidence + epistemic status)
658
710
  │ └── cli.py unified CLI
659
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)
660
712
  ├── benchmarks/genome_writing_challenge/ v5.13 the public Genome-Writing Challenge (held-out rounds + immune-risk task + submission API; harness / run / README / SUBMISSIONS)
661
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)
662
715
  ├── scripts/ reproducible pipeline drivers (p1_*, p2_*, p4_*, p52/p53 delivery-immunology oracle builds, ws_*_report)
663
716
  ├── configs/ pinned datasets + thresholds + curation (YAML); v3.2 known_unknowns /
664
717
  │ target_sites / delivery_constraints; v5.1-5.6 delivery_vehicles immune_safety /
@@ -666,18 +719,25 @@ pen-stack/
666
719
  │ seroprevalence / antipeg + oracles/scope_cards (+ v5.6 known_unknowns:
667
720
  │ cd4_mhcii_help / preexisting_capsid_tcell / complement_carpa);
668
721
  │ v5.7 safety/{hazard_registry,policy,probes} (Guardian; function/family/taxon-level only)
669
- ├── 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,
670
723
  │ r,v,route,env,bench,cal,o,wv,atlas,graph,mon,ct,plan,crit,cite,immune,
671
724
  │ genotox,epitope,innate,seroprev,peg,calib,profile,screen,policy,redteam,
672
725
  │ gen,pareto,orch,vcell,mech,outcome,twincal,acq,aldesign,alvalidate,
673
- │ 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)
674
728
  ├── data/curated/ small committed tables (universe, gene coords, measured bridge profile,
675
729
  │ v3.2 bridge_offtarget_energetics.json)
676
730
  ├── data/llm_bench_cache/ 28 cached ungrounded-LLM transcripts (T7, offline/CI replay)
677
731
  ├── data/alphagenome_cache/ cached AlphaGenome predictions (tracks + contact maps; offline reproducibility)
678
732
  ├── tests/unit/ unit + regression + blind-validation suite
679
733
  ├── docs/ mkdocs site (cards, tutorials, INFRA, DEPLOY, MCP);
680
- │ 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)
681
741
  ├── docker/ CUDA image + UI image + pinned requirements
682
742
  ├── tools/penctl.py laptop<->VM orchestrator (paramiko SSH/SFTP, Docker-only)
683
743
  ├── docker-compose.yml one-command self-hostable platform
@@ -0,0 +1,87 @@
1
+ # Integrate PEN-STACK in your AI (v6.1)
2
+
3
+ PEN-STACK is a **grounding substrate** an AI agent can depend on. From v6.1 the AI-facing surface is
4
+ **self-describing**: an agent can ask, programmatically, *"what can you do, and what do you refuse to answer?"* —
5
+ and get a typed, honest answer it can route on. Integrate in minutes over REST or MCP.
6
+
7
+ ## The four guarantees
8
+
9
+ When your agent calls PEN-STACK, every answer carries:
10
+
11
+ 1. **Rule-grounded legality** — a design is legal/illegal per machine-readable rules, with the *named* rule cited.
12
+ 2. **Calibrated confidence** — soft scores come with conformal intervals; out-of-distribution is flagged.
13
+ 3. **Explicit scope** — what PEN-STACK *cannot* tell you is returned as data (`out_of_scope` / `extrapolating`), never guessed.
14
+ 4. **Biosecurity safety** — a dual-use/hazardous design is refused or escalated, as a structured verdict.
15
+
16
+ …and **no fabrication**: every number is computed by a validated tool.
17
+
18
+ ## Discover capabilities — and scope (the differentiator)
19
+
20
+ ```bash
21
+ GET /capabilities # machine-readable: the tools, inputs, outputs, stability
22
+ GET /scope # machine-readable: the known-unknowns + every oracle's in-distribution envelope
23
+ ```
24
+
25
+ `/scope` is the contract that makes depending on PEN-STACK safe: it lists, as data, the questions PEN-STACK
26
+ **refuses** to answer (phenotype, in-vivo immunogenicity magnitude, long-term clinical durability, …) and what
27
+ each wrapped model is *not* valid for. Your agent reads it and never builds on a non-answer.
28
+
29
+ ```python
30
+ from pen_stack.api import capability_manifest, scope_manifest # in-process
31
+ caps = capability_manifest() # {"tools": [...], "guarantees": [...], "stability": "stable"}
32
+ scope = scope_manifest() # {"known_unknowns": [...], "oracle_scope_cards": [...], "policy": "..."}
33
+ ```
34
+
35
+ ## REST — the golden path
36
+
37
+ ```python
38
+ import requests
39
+ BASE = "http://localhost:8000" # uvicorn pen_stack.server.api:app
40
+
41
+ scope = requests.get(f"{BASE}/scope").json()
42
+ v = requests.post(f"{BASE}/verify", json=design).json()
43
+ if v["safety"]["decision"] == "refuse": # safety branch — halt
44
+ ...
45
+ elif not v["legal"]: # legality branch — revise
46
+ ...
47
+ else: # proceed, with calibrated confidence + immune profile
48
+ use(v["confidence"], v["immune_profile"])
49
+ ```
50
+
51
+ Tool routes: `/verify · /safety · /immune · /generate · /predict · /suggest · /session` + `/capabilities · /scope`.
52
+ The full typed contract is the auto-generated **OpenAPI 3.1** spec at `/openapi.json`. Runnable example:
53
+ [`examples/external_agent.py`](../examples/external_agent.py).
54
+
55
+ ## MCP — call PEN-STACK from any MCP client
56
+
57
+ ```bash
58
+ python -m pen_stack.agent.mcp_server # fastmcp; tools + the capabilities/scope resources
59
+ ```
60
+
61
+ Tools: `verify_write · safety_screen · immune_profile · generate_designs · predict_outcome · suggest_experiment
62
+ · co_scientist_session · graph_query · plan_write · …`. Resources: `pen-stack://capabilities`,
63
+ `pen-stack://scope`. A hazardous design returns a **structured refusal** (`safety.decision == "refuse"`) an agent
64
+ branches on. Runnable example: [`examples/mcp_client.py`](../examples/mcp_client.py).
65
+
66
+ ## Drop into any tool-calling framework
67
+
68
+ [`examples/agent_tools.py`](../examples/agent_tools.py) builds OpenAI/Anthropic-shaped tool specs **from the live
69
+ capability manifest** (so they never drift from the code) and dispatches to the validated engine in-process:
70
+
71
+ ```python
72
+ from examples.agent_tools import tool_specs, dispatch
73
+ specs = tool_specs() # hand to LangChain / the OpenAI or Anthropic SDK
74
+ result = dispatch("verify_write", {"payload": {...}}) # numbers come only from the engine
75
+ ```
76
+
77
+ ## Stability
78
+
79
+ All exposed contracts (the manifests, the OpenAPI schemas, the MCP tool/resource shapes) are versioned and
80
+ deprecation-policed under the **1.0 commitment** — see [API stability](STABILITY.md). The
81
+ `OracleResult`/`Verdict`/`SafetyVerdict`/immune-profile contracts and invariants are stable across 6.x.
82
+
83
+ ## The honest bottleneck
84
+
85
+ This surface makes integration **easy and dependable**; it does not, by itself, create adoption — landing a first
86
+ external integration and a demonstrated real-world result remain the standing outreach work. The surface is
87
+ shipped; `benchmarks/genome_writing_challenge/SUBMISSIONS.md` records external entries as they arrive.
@@ -1,2 +1,2 @@
1
1
  """PEN-STACK v3.0 - open infrastructure for genome writing."""
2
- __version__ = "6.0.0"
2
+ __version__ = "6.1.0"