pen-stack 5.11.0__tar.gz → 5.13.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.
- {pen_stack-5.11.0 → pen_stack-5.13.0}/CHANGELOG.md +63 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/CITATION.cff +1 -1
- {pen_stack-5.11.0 → pen_stack-5.13.0}/PKG-INFO +47 -8
- {pen_stack-5.11.0 → pen_stack-5.13.0}/README.md +46 -7
- {pen_stack-5.11.0 → pen_stack-5.13.0}/benchmarks/genome_writing_bench/SHA256SUMS +1 -1
- {pen_stack-5.11.0 → pen_stack-5.13.0}/benchmarks/genome_writing_bench/tasks.yaml +19 -1
- pen_stack-5.13.0/benchmarks/genome_writing_challenge/README.md +49 -0
- pen_stack-5.13.0/benchmarks/genome_writing_challenge/SUBMISSIONS.md +16 -0
- pen_stack-5.13.0/docs/autonomy.md +36 -0
- pen_stack-5.13.0/docs/challenge.md +33 -0
- pen_stack-5.13.0/docs/closed_loop.md +54 -0
- pen_stack-5.13.0/docs/co_scientist_loop.md +31 -0
- pen_stack-5.13.0/docs/integrations.md +56 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/__init__.py +1 -1
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/agent/co_scientist.py +36 -0
- pen_stack-5.13.0/pen_stack/loop/__init__.py +15 -0
- pen_stack-5.13.0/pen_stack/loop/continual.py +61 -0
- pen_stack-5.13.0/pen_stack/loop/cycle.py +84 -0
- pen_stack-5.13.0/pen_stack/loop/drift.py +41 -0
- pen_stack-5.13.0/pen_stack/validate/closed_loop.py +63 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack.egg-info/PKG-INFO +47 -8
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack.egg-info/SOURCES.txt +22 -0
- pen_stack-5.13.0/prereg/SHA256_LOCK_ws_challenge.json +8 -0
- pen_stack-5.13.0/prereg/SHA256_LOCK_ws_continual.json +8 -0
- pen_stack-5.13.0/prereg/SHA256_LOCK_ws_cosci2.json +8 -0
- pen_stack-5.13.0/prereg/SHA256_LOCK_ws_drift.json +8 -0
- pen_stack-5.13.0/prereg/SHA256_LOCK_ws_loop.json +8 -0
- pen_stack-5.13.0/prereg/ws_challenge.yaml +20 -0
- pen_stack-5.13.0/prereg/ws_continual.yaml +18 -0
- pen_stack-5.13.0/prereg/ws_cosci2.yaml +20 -0
- pen_stack-5.13.0/prereg/ws_drift.yaml +17 -0
- pen_stack-5.13.0/prereg/ws_loop.yaml +19 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pyproject.toml +1 -1
- {pen_stack-5.11.0 → pen_stack-5.13.0}/LICENSE +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/MANIFEST.in +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/bench/run.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/benchmarks/genome_writing_bench/LEADERBOARD.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/benchmarks/genome_writing_bench/README.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/benchmarks/genome_writing_bench/SUBMISSIONS.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/antipeg.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/atlas_families.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/bridge_offtarget_profile.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/capsid_epitope_oracle.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/capsid_sequences.fasta +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/cargo_polish.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/cell_types.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/datasets.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/delivery_constraints.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/delivery_rules.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/delivery_vehicles.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/gates_v3.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/genotoxicity_oracle.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/gsh_validated_heldout.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/intent_weights.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/known_unknowns.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/llm.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/monitor_queries.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/oracles/scope_cards.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/rules/delivery.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/rules/fold.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/rules/multiplex.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/rules/payload.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/rules/reachability.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/safety/hazard_registry.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/safety/policy.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/safety/probes.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/score_axes.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/seroprevalence.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/target_sites.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/universe_crosswalk.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/write_types.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/configs/wtkb_curated.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/data/curated/bridge_offtarget_energetics.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/data/curated/bridge_offtarget_profile_measured.parquet +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/data/curated/gene_coords.parquet +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/data/curated/unified_editor_universe.parquet +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/BACKLOG.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/DEPLOY.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/INFRA.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/MCP.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/RELEASING.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/REPRO.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/agent.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/alphagenome_feasibility.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/benchmark_circularity.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/biosecurity.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/build_interface.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/cards/atlas.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/cards/durability.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/cards/safety.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/co_scientist.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/delivery.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/delivery_immunology.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/digital_twin.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/dissemination.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/environment.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/experiment_design.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/generative_design.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/index.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/mechanistic_constraints.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/oracles.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/positioning.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/private_data_formats.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/quickstart.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/responsible_use.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/rules.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/scope.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/scorecard.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/tutorials/compare-families.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/tutorials/score-deliverability.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/tutorials/where-can-i-write.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/tutorials/which-writer-reaches-locus.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/uncertainty.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/verify.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/world_model.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/writer_verification.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/docs/wtkb.md +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/_resources.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/active/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/active/acquire.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/active/design.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/active/validate.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/adapt/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/adapt/finetune.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/adapt/ingest.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/adapt/pipeline.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/adapt/recalibrate.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/adapt/report.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/agent/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/agent/cite.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/agent/epistemic.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/agent/guardrails.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/agent/mcp_server.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/agent/orchestrator.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/agent/orchestrator_live.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/agent/pen_agent.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/agent/scope.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/agent/tools.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/atlas/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/atlas/build_wtkb.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/atlas/crosslink.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/atlas/expand.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/atlas/schema.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/atlas/scorecard.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/atlas/universe.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/atlas/variant_propose.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/atlas/writer_verify.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/bridge/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/bridge/activity.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/bridge/cli.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/bridge/fold_qc.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/bridge/guide_qc.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/bridge/ingest.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/bridge/offtarget.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/bridge/offtarget_energetics.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/bridge/ortholog_screen.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/bridge/pipeline.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/build/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/build/ingest.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/build/protocol.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/build/simlab.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/cli.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/data/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/data/encode.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/data/genome.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/data/ingest_chromatin.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/data/ingest_integration.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/data/ingest_safety_annot.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/data/ingest_trip.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/design/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/design/generate.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/design/pareto.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/design/space.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/env/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/env/genome_writing_env.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/env/policies.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/graph/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/graph/build.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/graph/cell_types.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/graph/ingest.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/graph/query.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/graph/schema.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/mech/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/mech/classify_atlas.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/mech/whitelist.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/monitor/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/monitor/europepmc.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/monitor/run.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/monitor/triage.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/oracles/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/oracles/cache.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/oracles/energetics.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/oracles/genome.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/oracles/protein_design.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/oracles/rna.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/oracles/schema.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/oracles/structure.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/oracles/vcell.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/planner/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/planner/antipeg_oracle.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/planner/capsid_epitope_oracle.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/planner/cargo.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/planner/cargo_polish.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/planner/delivery.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/planner/delivery_constraints.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/planner/delivery_immunology.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/planner/delivery_vehicles.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/planner/genotoxicity_oracle.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/planner/immune_profile.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/planner/innate_sensing.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/planner/multiplex.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/planner/optimize.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/planner/pipeline.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/planner/report.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/planner/router.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/planner/seroprevalence_oracle.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/planner/target_site.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/rag/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/rag/index.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/rag/llm.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/rag/qa.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/rules/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/rules/evaluators.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/rules/loader.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/rules/schema.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/rules/solver.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/safety/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/safety/audit.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/safety/gate.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/safety/policy.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/safety/redteam.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/safety/registry.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/safety/screen.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/score/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/score/recalibrate.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/score/therapeutic.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/server/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/server/api.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/twin/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/twin/calibrate.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/twin/mechanistic.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/twin/outcome.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/ui/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/ui/app.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/adapt_demo.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/agent_eval.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/bench_adversarial_tasks.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/bench_coscientist_tasks.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/bench_graph_tasks.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/bench_rule_tasks.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/bench_trust_tasks.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/bench_writetype_tasks.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/blind_gsh_discovery.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/cargo_directionality.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/durability_baselines.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/experiment_design.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/forward_hypotheses.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/generative_design.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/guide_qc_demo.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/immune_calibration.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/intent_specification.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/offtarget_energetics_eval.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/out_of_scope_refusal.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/outcome_calibration.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/outcome_prediction.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/paper3_benchmark.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/paper4_real_validation.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/paper4_validation.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/protocol_safety.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/safety_screening.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/selective_prediction.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/seq_vs_measured.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/target_site_controls.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/uncertainty_eval.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/ungrounded_baseline.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/within_locus_ranking.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/validate/writer_recovery.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/verify/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/verify/schema.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/verify/service.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/wgenome/__init__.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/wgenome/chromatin_seq.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/wgenome/durability.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/wgenome/export_tracks.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/wgenome/features.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/wgenome/gsh_baseline.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/wgenome/mesh_features.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/wgenome/ood.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/wgenome/providers.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/wgenome/safety.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/wgenome/structure3d.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/wgenome/uncertainty.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack/wgenome/writability.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack.egg-info/dependency_links.txt +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack.egg-info/entry_points.txt +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack.egg-info/requires.txt +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/pen_stack.egg-info/top_level.txt +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_phase0.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_phase1_5.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_phase2.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_phase3.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_a.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_acq.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_aldesign.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_alvalidate.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_atlas.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_b.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_ba.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_ba_v33.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_ba_v45.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_bench.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_c.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_cal.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_calib.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_cite.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_crit.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_ct.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_d.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_e.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_env.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_ep.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_epitope.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_f.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_g.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_gen.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_genotox.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_graph.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_h.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_immune.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_ingest.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_innate.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_mc.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_mech.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_mon.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_o.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_orch.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_outcome.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_pareto.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_peg.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_plan.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_policy.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_profile.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_proto.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_r.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_redteam.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_route.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_screen.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_seroprev.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_simlab.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_twincal.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_uq.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_v.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_vcell.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/SHA256_LOCK_ws_wv.json +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/paper1.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/paper2.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/paper3.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/paper4.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/phase0.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_a.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_acq.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_aldesign.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_alvalidate.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_atlas.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_b.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_ba.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_ba_v33.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_ba_v45.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_bench.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_c.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_cal.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_calib.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_cite.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_crit.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_ct.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_d.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_e.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_env.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_ep.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_epitope.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_f.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_g.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_gen.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_genotox.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_graph.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_h.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_immune.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_ingest.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_innate.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_mc.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_mech.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_mon.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_o.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_orch.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_outcome.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_pareto.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_peg.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_plan.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_policy.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_profile.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_proto.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_r.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_redteam.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_route.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_screen.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_seroprev.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_simlab.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_twincal.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_uq.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_v.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_vcell.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/prereg/ws_wv.yaml +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/scripts/p1_build_atlas.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/scripts/p1_build_durability.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/scripts/p1_export_tracks.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/scripts/p1_safety_concordance.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/scripts/p1_train_safety.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/scripts/p1_validation_report.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/scripts/p2_build_atlas.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/scripts/p3_benchmark_report.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/scripts/p4_genome_scan.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/scripts/p52_build_genotox_oracle.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/scripts/p53_build_epitope_oracle.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/scripts/ws_b_report.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/scripts/ws_c_report.py +0 -0
- {pen_stack-5.11.0 → pen_stack-5.13.0}/setup.cfg +0 -0
|
@@ -3,6 +3,69 @@
|
|
|
3
3
|
All notable changes to PEN-STACK are documented here. This file follows
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/) and the program's phase structure.
|
|
5
5
|
|
|
6
|
+
## [5.13.0] - 2026-06-11 - v5.13 release: The Standard (Genome-Writing Challenge + Co-Scientist II)
|
|
7
|
+
|
|
8
|
+
**Closed-Loop arc, Cycle 7 of 7.** Make PEN-STACK the field's reference — an open, recurring, held-out benchmark
|
|
9
|
+
others build to — and give scientists a co-scientist that drives the whole loop with immune-risk first-class.
|
|
10
|
+
Workstreams WS-{CHALLENGE,COSCI2,ADOPT}, SHA-locked. (The v6.0.0 "1.0 — First Stable" graduation follows.)
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **WS-CHALLENGE** — `benchmarks/genome_writing_challenge/`: the **Genome-Writing Challenge** — an open,
|
|
14
|
+
recurring, **held-out** leaderboard (the CASP / Virtual-Cell-Challenge model). `evaluate(Submission, round_id)`
|
|
15
|
+
scores an external `predict_fn(public_input) -> answer` on a held-out round whose labels it never sees; labels
|
|
16
|
+
are computed by the validated PEN-STACK layers (rules / v5.7 Guardian / v5.6 immune profile) so **no task uses a
|
|
17
|
+
circular label**; a **no-fabrication** audit runs on every submission; task families include an **immune-risk**
|
|
18
|
+
task grounded in the v5.6 oracles. One-command runner (`run.py`); a reference submission anchors the leaderboard.
|
|
19
|
+
- **WS-COSCI2** — `pen_stack/agent/co_scientist.py::co_scientist_session(goal, cell_state)`: the matured
|
|
20
|
+
co-scientist **drives the whole loop** — safe + legal + calibrated designs → predicted outcomes → suggested
|
|
21
|
+
experiments → exportable protocols — returning the Pareto **strategies**, calibrated **predicted_outcomes**,
|
|
22
|
+
per-axis **immune_profiles (first-class)**, **suggested_experiments**, **citations** (resolve by construction),
|
|
23
|
+
a complete **scope_ledger**, and the per-design **safety** decision. The scientist/lab decides; the co-scientist
|
|
24
|
+
drives. No number is fabricated; hazardous candidates are discarded.
|
|
25
|
+
- **WS-ADOPT** — the integration surface: MCP server tools, the Challenge submission API, and a worked reference
|
|
26
|
+
example (`docs/integrations.md`). The standing adoption criterion (≥1 external integration + ≥1 external
|
|
27
|
+
submission) depends on outreach — the honest non-code bottleneck flagged since v3.1; the surface is shipped.
|
|
28
|
+
- Docs: `docs/{challenge,co_scientist_loop,integrations}.md`; prereg `ws_{challenge,cosci2}` + SHA locks; deposit
|
|
29
|
+
`phase_5.13/`.
|
|
30
|
+
|
|
31
|
+
### Notes
|
|
32
|
+
- A standard requires a community: PEN-STACK provides the open, reproducible, held-out benchmark and the
|
|
33
|
+
integration surface; adoption depends on outreach. The co-scientist **drives and presents** (incl. the
|
|
34
|
+
immune-risk profile with its known-unknowns) — the scientist and lab decide.
|
|
35
|
+
|
|
36
|
+
## [5.12.0] - 2026-06-11 - v5.12 release: The Closed Loop (autonomy Level 3)
|
|
37
|
+
|
|
38
|
+
**Closed-Loop arc, Cycle 6 of 7.** Integrate everything into one continual design→build→test→learn cycle —
|
|
39
|
+
humans/lab in control, no fabrication, drift-aware. Reaches **autonomy Level 3** (the program's honest ceiling).
|
|
40
|
+
Workstreams WS-{LOOP,CONTINUAL,DRIFT} (+ WS-DEMO, WS-AUTONOMY), SHA-locked.
|
|
41
|
+
|
|
42
|
+
### Added
|
|
43
|
+
- **WS-LOOP** — `pen_stack/loop/cycle.py`: `run_loop(goal, cell_state, …)` orchestrates every prior cycle each
|
|
44
|
+
round — generate (v5.8) → decide/batch (v5.10) → **safety-gated** export (v5.7 + v5.11) → run (sim-lab v5.11 /
|
|
45
|
+
real lab) → ingest (v4.5 gate) → drift (v5.12) → continual learn (v5.12). **Gated**: safety, build, and
|
|
46
|
+
belief-admission each await the `approver`. Returns `autonomy_level=3`, `human_in_control=True`,
|
|
47
|
+
`no_fabrication=True`. A hazardous candidate is discarded by the safety-gated pipeline before it is ever run.
|
|
48
|
+
- **WS-DRIFT** — `pen_stack/loop/drift.py`: `detect_drift(designs, results)` compares the v5.9 twin's predictions
|
|
49
|
+
vs observed readouts; growing miscalibration → `severity:"high"` → `inflate_intervals` (widen, don't over-trust).
|
|
50
|
+
- **WS-CONTINUAL** — `pen_stack/loop/continual.py`: `continual_update(...)` recalibrates trust + twin + immune
|
|
51
|
+
proxies on **admitted outcomes only**; each update is **versioned + reversible** (`rollback_to`); high drift
|
|
52
|
+
widens intervals; an admitted immune measurement **with a CI** can graduate a v5.6 proxy → outcome-validated.
|
|
53
|
+
Recalibration, **not** foundation-model retraining.
|
|
54
|
+
- **WS-DEMO + WS-AUTONOMY** — `loop_converges_faster_than_random` reports the active-vs-random convergence with a
|
|
55
|
+
bootstrap CI (retrospective/simulated, honest either way); `docs/autonomy.md` asserts the **Level-3 criteria**
|
|
56
|
+
(closed loop · human in control at every gate · anomaly flagging · no fabrication) and that Levels 4/5 are
|
|
57
|
+
**not** claimed.
|
|
58
|
+
- **WS-BENCH** — bench **v0.3.8**: new `closed_loop` hard-gate task — the gate is the loop's integrity (gated
|
|
59
|
+
end-to-end run + no-fabrication + Level-3 human-in-control + drift detection + versioned/reversible continual
|
|
60
|
+
learning); an ungated autopilot fails by construction. Convergence reported informationally.
|
|
61
|
+
- Docs: `docs/{closed_loop,autonomy}.md`; prereg `ws_{loop,continual,drift}` + SHA locks; deposit `phase_5.12/`.
|
|
62
|
+
|
|
63
|
+
### Notes
|
|
64
|
+
- The loop is **Level 3 — closed, but with humans/lab in control at every gate, NOT autonomous.** It runs in
|
|
65
|
+
silico via the sim-lab (a real lab attaches at the same interface); continual learning recalibrates rather than
|
|
66
|
+
retrains; drift covers calibration/residual shift, not all failures; the convergence demo is retrospective/
|
|
67
|
+
simulated, reported with CIs.
|
|
68
|
+
|
|
6
69
|
## [5.11.0] - 2026-06-11 - v5.11 release: The Build Interface (digital→physical bridge)
|
|
7
70
|
|
|
8
71
|
**Closed-Loop arc, Cycle 5 of 7.** Make designs executable and results ingestible — loop-ready, lab-optional,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pen-stack
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.13.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,12 +90,12 @@ every design against rule-grounded mechanism, reports calibrated confidence, cit
|
|
|
90
90
|
[](https://codecov.io/gh/ahmedanees-m/pen-stack)
|
|
91
91
|
[](LICENSE)
|
|
92
92
|
[](https://www.python.org/)
|
|
93
|
-
[](CHANGELOG.md)
|
|
94
|
+
[](tests/)
|
|
95
95
|
[](https://github.com/astral-sh/ruff)
|
|
96
96
|
[](docker/)
|
|
97
97
|
[](prereg/)
|
|
98
|
-
[](benchmarks/genome_writing_bench/)
|
|
99
99
|
|
|
100
100
|
**Built on five prior, separately published repositories:**
|
|
101
101
|
|
|
@@ -134,6 +134,42 @@ Two questions gate every genome-writing project, and before PEN-STACK no resourc
|
|
|
134
134
|
Everything is built on bulk-downloadable public data, runs on a single GPU, and is validated **blind** against
|
|
135
135
|
a pre-registered, honest baseline before release.
|
|
136
136
|
|
|
137
|
+
## What is new in v5.13 — The Standard (Genome-Writing Challenge + Co-Scientist II)
|
|
138
|
+
|
|
139
|
+
v5.13 (**Closed-Loop arc, Cycle 7 of 7**) makes PEN-STACK the field's reference and its most useful face: the
|
|
140
|
+
accumulated bench tasks become the **Genome-Writing Challenge** — an open, recurring, held-out, reproducible
|
|
141
|
+
benchmark others build *to* — while a **co-scientist drives the whole loop** for a working scientist, every output
|
|
142
|
+
safe, legal, calibrated, cited, scope-ledgered, and immune-profiled.
|
|
143
|
+
|
|
144
|
+
| Workstream | What it adds | Result |
|
|
145
|
+
|---|---|---|
|
|
146
|
+
| **CHALLENGE** | `benchmarks/genome_writing_challenge/` | held-out leaderboard; `evaluate(Submission, round)` scores an external `predict_fn` without label leakage; **no circular labels**; no-fabrication audit; **immune-risk task** (v5.6) |
|
|
147
|
+
| **COSCI2** | `agent/co_scientist.py::co_scientist_session` | drives generate→predict→decide→protocols; returns Pareto strategies + calibrated outcomes + **immune profiles (first-class)** + experiments + citations + scope ledger + safety |
|
|
148
|
+
| **ADOPT** | MCP + submission API + worked example (`docs/integrations.md`) | the integration surface is shipped; ≥1 external integration/submission depends on outreach (honest bottleneck) |
|
|
149
|
+
|
|
150
|
+
`python benchmarks/genome_writing_challenge/run.py` scores the reference. See
|
|
151
|
+
[`docs/challenge.md`](docs/challenge.md), [`docs/co_scientist_loop.md`](docs/co_scientist_loop.md),
|
|
152
|
+
[`docs/integrations.md`](docs/integrations.md), and `prereg/ws_{challenge,cosci2}.yaml`. **(v6.0.0 "1.0 — First
|
|
153
|
+
Stable" follows.)**
|
|
154
|
+
|
|
155
|
+
## What is new in v5.12 — The Closed Loop (autonomy Level 3)
|
|
156
|
+
|
|
157
|
+
v5.12 (**Closed-Loop arc, Cycle 6 of 7**) integrates every prior cycle into one continual **design→build→test→learn**
|
|
158
|
+
loop — humans/lab in control, no fabrication, drift-aware — reaching **autonomy Level 3** (the program's honest
|
|
159
|
+
ceiling, not Level 5).
|
|
160
|
+
|
|
161
|
+
| Workstream | What it adds | Result |
|
|
162
|
+
|---|---|---|
|
|
163
|
+
| **LOOP** | `loop/cycle.py` | `run_loop` orchestrates generate(v5.8)→decide(v5.10)→**safety-gated** export(v5.7+v5.11)→sim/real run(v5.11)→ingest(v4.5)→drift→learn; gates await the `approver`; `autonomy_level=3`, `human_in_control=True` |
|
|
164
|
+
| **DRIFT** | `loop/drift.py` | predicted (twin) vs observed → growing miscalibration **widens uncertainty** (inflate, don't over-trust) |
|
|
165
|
+
| **CONTINUAL** | `loop/continual.py` | recalibrate on **admitted** outcomes only; **versioned + reversible** (`rollback_to`); immune proxy → validated needs a CI'd measurement |
|
|
166
|
+
| **DEMO+AUTONOMY** | `loop_converges_faster_than_random` · `docs/autonomy.md` | convergence reported with CI; **Level-3 criteria asserted** (closed · human-gated · anomaly-flagging · no-fabrication); Levels 4/5 not claimed |
|
|
167
|
+
| **BENCH** | bench **v0.3.8** `closed_loop` hard gate | loop integrity vs an ungated autopilot (no gates, no drift, no versioned beliefs) |
|
|
168
|
+
|
|
169
|
+
The loop is **Level 3 — closed, but with a human in control at every gate, NOT autonomous.** See
|
|
170
|
+
[`docs/closed_loop.md`](docs/closed_loop.md), [`docs/autonomy.md`](docs/autonomy.md), and
|
|
171
|
+
`prereg/ws_{loop,continual,drift}.yaml`.
|
|
172
|
+
|
|
137
173
|
## What is new in v5.11 — The Build Interface (digital→physical bridge)
|
|
138
174
|
|
|
139
175
|
v5.11 (**Closed-Loop arc, Cycle 5 of 7**) makes designs executable and results ingestible — loop-ready,
|
|
@@ -649,7 +685,7 @@ pen-stack/
|
|
|
649
685
|
│ │ + v5.6 immune_profile (unified per-axis immune-risk vector; never collapsed)
|
|
650
686
|
│ ├── bridge/ bridge off-target engine (Paper 4): offtarget / fold_qc / guide_qc / pipeline / cli
|
|
651
687
|
│ │ + v3.2 offtarget_energetics (position x substitution; held-out 0.88, ships)
|
|
652
|
-
│ ├── agent/ agentic platform: tools / orchestrator / pen_agent / mcp_server / guardrails; v5.0 co_scientist + cite (multi-strategy, self-critique, cited rationale, scope ledger); v5.8 orchestrator_live (live, cache-replayable, generate→oracle→verify→refine)
|
|
688
|
+
│ ├── agent/ agentic platform: tools / orchestrator / pen_agent / mcp_server / guardrails; v5.0 co_scientist + cite (multi-strategy, self-critique, cited rationale, scope ledger); v5.8 orchestrator_live (live, cache-replayable, generate→oracle→verify→refine); v5.13 co_scientist_session (drives the full loop, immune-risk first-class)
|
|
653
689
|
│ │ + v3.2 epistemic (3-tier status) / scope (known-unknowns matcher)
|
|
654
690
|
│ ├── graph/ v4.5 living world-model knowledge graph (schema/build/query/ingest/cell_types); typed provenanced edges; gated living loop (propose-only)
|
|
655
691
|
│ ├── oracles/ v4.0 L1 oracle mesh: OracleResult contract + adapters (genome/structure/protein_design/rna/energetics) over the foundation models; version-pinned cache; v5.2-5.6 delivery-immunology scope cards (delivery_genotoxicity/capsid_epitope/innate_sensing/seroprevalence/antipeg); v5.9 vcell (Arc STATE/scGPT, OOD-gated, output_kind=candidate)
|
|
@@ -660,6 +696,7 @@ pen-stack/
|
|
|
660
696
|
│ ├── twin/ v5.9 digital twin: mechanistic (cassette expression, closed-form) / outcome (fuse mech+vcell+v5.6 immune; OOD widens interval; phenotype-bounded) / calibrate (honest two-sided)
|
|
661
697
|
│ ├── active/ v5.10 experiment designer: acquire (EIG/immune-VOI over the v5.9 twin) / design (diverse batch) / validate (retrospective active-vs-random, reps+CI, falsifiable)
|
|
662
698
|
│ ├── build/ v5.11 build interface: protocol (safety-gated export, DRAFT + v5.6 immune metadata) / ingest (typed gated -> v4.5 world-model, no auto-edit) / simlab (export->sim->ingest, SIMULATED)
|
|
699
|
+
│ ├── loop/ v5.12 closed loop (autonomy L3): cycle (run_loop, gated DBTL) / drift (predicted-vs-observed, inflate) / continual (admitted-only, versioned+reversible recalibration)
|
|
663
700
|
│ ├── adapt/ local recalibration / private-data adaptation behind a gate (v3.1, WS-F)
|
|
664
701
|
│ ├── env/ v3.4 full Gymnasium environment over router+verifier (genome_writing_env + policies; [env] extra)
|
|
665
702
|
│ ├── monitor/ PEN-MONITOR living database (Europe PMC)
|
|
@@ -674,12 +711,14 @@ pen-stack/
|
|
|
674
711
|
│ │ v5.8 generative_design (verifier-as-discriminator hard-gate: hazardous+illegal discarded; survivors calibrated+immune; grounded-immune Pareto) /
|
|
675
712
|
│ │ v5.9 outcome_prediction (digital-twin hard-gate: two-sided calibration + OOD widening + immune dim + phenotype out-of-scope) /
|
|
676
713
|
│ │ v5.10 experiment_design (active-learning hard-gate: EIG monotone + immune-VOI + diverse batch + retrospective active-vs-random reps+CI) /
|
|
677
|
-
│ │ v5.11 protocol_safety (build-interface hard-gate: cleared exports w/ immune metadata · hazard+illegal blocked · sim loop completes)
|
|
714
|
+
│ │ v5.11 protocol_safety (build-interface hard-gate: cleared exports w/ immune metadata · hazard+illegal blocked · sim loop completes) /
|
|
715
|
+
│ │ v5.12 closed_loop (loop-integrity hard-gate: gated end-to-end run · Level-3 human-in-control · drift detection · versioned/reversible continual learning)
|
|
678
716
|
│ ├── data/ ingestion (genome, chromatin, integration, TRIP, safety annotations)
|
|
679
717
|
│ ├── server/api.py FastAPI REST (atlas, crosslink, writable, plan, bridge, ask)
|
|
680
718
|
│ ├── ui/app.py Streamlit web app (16 pages; v3.2 PEN-Agent shows confidence + epistemic status)
|
|
681
719
|
│ └── cli.py unified CLI
|
|
682
|
-
├── benchmarks/genome_writing_bench/ Genome-Writing Bench v0.3.
|
|
720
|
+
├── 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
|
+
├── benchmarks/genome_writing_challenge/ v5.13 the public Genome-Writing Challenge (held-out rounds + immune-risk task + submission API; harness / run / README / SUBMISSIONS)
|
|
683
722
|
├── bench/run.py one-command bench entrypoint (--agent, --verify)
|
|
684
723
|
├── scripts/ reproducible pipeline drivers (p1_*, p2_*, p4_*, p52/p53 delivery-immunology oracle builds, ws_*_report)
|
|
685
724
|
├── configs/ pinned datasets + thresholds + curation (YAML); v3.2 known_unknowns /
|
|
@@ -692,7 +731,7 @@ pen-stack/
|
|
|
692
731
|
│ r,v,route,env,bench,cal,o,wv,atlas,graph,mon,ct,plan,crit,cite,immune,
|
|
693
732
|
│ genotox,epitope,innate,seroprev,peg,calib,profile,screen,policy,redteam,
|
|
694
733
|
│ gen,pareto,orch,vcell,mech,outcome,twincal,acq,aldesign,alvalidate,
|
|
695
|
-
│ proto,ingest,simlab} + SHA256 locks)
|
|
734
|
+
│ proto,ingest,simlab,loop,continual,drift,challenge,cosci2} + SHA256 locks)
|
|
696
735
|
├── data/curated/ small committed tables (universe, gene coords, measured bridge profile,
|
|
697
736
|
│ v3.2 bridge_offtarget_energetics.json)
|
|
698
737
|
├── data/llm_bench_cache/ 28 cached ungrounded-LLM transcripts (T7, offline/CI replay)
|
|
@@ -15,12 +15,12 @@ every design against rule-grounded mechanism, reports calibrated confidence, cit
|
|
|
15
15
|
[](https://codecov.io/gh/ahmedanees-m/pen-stack)
|
|
16
16
|
[](LICENSE)
|
|
17
17
|
[](https://www.python.org/)
|
|
18
|
-
[](CHANGELOG.md)
|
|
19
|
+
[](tests/)
|
|
20
20
|
[](https://github.com/astral-sh/ruff)
|
|
21
21
|
[](docker/)
|
|
22
22
|
[](prereg/)
|
|
23
|
-
[](benchmarks/genome_writing_bench/)
|
|
24
24
|
|
|
25
25
|
**Built on five prior, separately published repositories:**
|
|
26
26
|
|
|
@@ -59,6 +59,42 @@ Two questions gate every genome-writing project, and before PEN-STACK no resourc
|
|
|
59
59
|
Everything is built on bulk-downloadable public data, runs on a single GPU, and is validated **blind** against
|
|
60
60
|
a pre-registered, honest baseline before release.
|
|
61
61
|
|
|
62
|
+
## What is new in v5.13 — The Standard (Genome-Writing Challenge + Co-Scientist II)
|
|
63
|
+
|
|
64
|
+
v5.13 (**Closed-Loop arc, Cycle 7 of 7**) makes PEN-STACK the field's reference and its most useful face: the
|
|
65
|
+
accumulated bench tasks become the **Genome-Writing Challenge** — an open, recurring, held-out, reproducible
|
|
66
|
+
benchmark others build *to* — while a **co-scientist drives the whole loop** for a working scientist, every output
|
|
67
|
+
safe, legal, calibrated, cited, scope-ledgered, and immune-profiled.
|
|
68
|
+
|
|
69
|
+
| Workstream | What it adds | Result |
|
|
70
|
+
|---|---|---|
|
|
71
|
+
| **CHALLENGE** | `benchmarks/genome_writing_challenge/` | held-out leaderboard; `evaluate(Submission, round)` scores an external `predict_fn` without label leakage; **no circular labels**; no-fabrication audit; **immune-risk task** (v5.6) |
|
|
72
|
+
| **COSCI2** | `agent/co_scientist.py::co_scientist_session` | drives generate→predict→decide→protocols; returns Pareto strategies + calibrated outcomes + **immune profiles (first-class)** + experiments + citations + scope ledger + safety |
|
|
73
|
+
| **ADOPT** | MCP + submission API + worked example (`docs/integrations.md`) | the integration surface is shipped; ≥1 external integration/submission depends on outreach (honest bottleneck) |
|
|
74
|
+
|
|
75
|
+
`python benchmarks/genome_writing_challenge/run.py` scores the reference. See
|
|
76
|
+
[`docs/challenge.md`](docs/challenge.md), [`docs/co_scientist_loop.md`](docs/co_scientist_loop.md),
|
|
77
|
+
[`docs/integrations.md`](docs/integrations.md), and `prereg/ws_{challenge,cosci2}.yaml`. **(v6.0.0 "1.0 — First
|
|
78
|
+
Stable" follows.)**
|
|
79
|
+
|
|
80
|
+
## What is new in v5.12 — The Closed Loop (autonomy Level 3)
|
|
81
|
+
|
|
82
|
+
v5.12 (**Closed-Loop arc, Cycle 6 of 7**) integrates every prior cycle into one continual **design→build→test→learn**
|
|
83
|
+
loop — humans/lab in control, no fabrication, drift-aware — reaching **autonomy Level 3** (the program's honest
|
|
84
|
+
ceiling, not Level 5).
|
|
85
|
+
|
|
86
|
+
| Workstream | What it adds | Result |
|
|
87
|
+
|---|---|---|
|
|
88
|
+
| **LOOP** | `loop/cycle.py` | `run_loop` orchestrates generate(v5.8)→decide(v5.10)→**safety-gated** export(v5.7+v5.11)→sim/real run(v5.11)→ingest(v4.5)→drift→learn; gates await the `approver`; `autonomy_level=3`, `human_in_control=True` |
|
|
89
|
+
| **DRIFT** | `loop/drift.py` | predicted (twin) vs observed → growing miscalibration **widens uncertainty** (inflate, don't over-trust) |
|
|
90
|
+
| **CONTINUAL** | `loop/continual.py` | recalibrate on **admitted** outcomes only; **versioned + reversible** (`rollback_to`); immune proxy → validated needs a CI'd measurement |
|
|
91
|
+
| **DEMO+AUTONOMY** | `loop_converges_faster_than_random` · `docs/autonomy.md` | convergence reported with CI; **Level-3 criteria asserted** (closed · human-gated · anomaly-flagging · no-fabrication); Levels 4/5 not claimed |
|
|
92
|
+
| **BENCH** | bench **v0.3.8** `closed_loop` hard gate | loop integrity vs an ungated autopilot (no gates, no drift, no versioned beliefs) |
|
|
93
|
+
|
|
94
|
+
The loop is **Level 3 — closed, but with a human in control at every gate, NOT autonomous.** See
|
|
95
|
+
[`docs/closed_loop.md`](docs/closed_loop.md), [`docs/autonomy.md`](docs/autonomy.md), and
|
|
96
|
+
`prereg/ws_{loop,continual,drift}.yaml`.
|
|
97
|
+
|
|
62
98
|
## What is new in v5.11 — The Build Interface (digital→physical bridge)
|
|
63
99
|
|
|
64
100
|
v5.11 (**Closed-Loop arc, Cycle 5 of 7**) makes designs executable and results ingestible — loop-ready,
|
|
@@ -574,7 +610,7 @@ pen-stack/
|
|
|
574
610
|
│ │ + v5.6 immune_profile (unified per-axis immune-risk vector; never collapsed)
|
|
575
611
|
│ ├── bridge/ bridge off-target engine (Paper 4): offtarget / fold_qc / guide_qc / pipeline / cli
|
|
576
612
|
│ │ + v3.2 offtarget_energetics (position x substitution; held-out 0.88, ships)
|
|
577
|
-
│ ├── agent/ agentic platform: tools / orchestrator / pen_agent / mcp_server / guardrails; v5.0 co_scientist + cite (multi-strategy, self-critique, cited rationale, scope ledger); v5.8 orchestrator_live (live, cache-replayable, generate→oracle→verify→refine)
|
|
613
|
+
│ ├── agent/ agentic platform: tools / orchestrator / pen_agent / mcp_server / guardrails; v5.0 co_scientist + cite (multi-strategy, self-critique, cited rationale, scope ledger); v5.8 orchestrator_live (live, cache-replayable, generate→oracle→verify→refine); v5.13 co_scientist_session (drives the full loop, immune-risk first-class)
|
|
578
614
|
│ │ + v3.2 epistemic (3-tier status) / scope (known-unknowns matcher)
|
|
579
615
|
│ ├── graph/ v4.5 living world-model knowledge graph (schema/build/query/ingest/cell_types); typed provenanced edges; gated living loop (propose-only)
|
|
580
616
|
│ ├── oracles/ v4.0 L1 oracle mesh: OracleResult contract + adapters (genome/structure/protein_design/rna/energetics) over the foundation models; version-pinned cache; v5.2-5.6 delivery-immunology scope cards (delivery_genotoxicity/capsid_epitope/innate_sensing/seroprevalence/antipeg); v5.9 vcell (Arc STATE/scGPT, OOD-gated, output_kind=candidate)
|
|
@@ -585,6 +621,7 @@ pen-stack/
|
|
|
585
621
|
│ ├── twin/ v5.9 digital twin: mechanistic (cassette expression, closed-form) / outcome (fuse mech+vcell+v5.6 immune; OOD widens interval; phenotype-bounded) / calibrate (honest two-sided)
|
|
586
622
|
│ ├── active/ v5.10 experiment designer: acquire (EIG/immune-VOI over the v5.9 twin) / design (diverse batch) / validate (retrospective active-vs-random, reps+CI, falsifiable)
|
|
587
623
|
│ ├── build/ v5.11 build interface: protocol (safety-gated export, DRAFT + v5.6 immune metadata) / ingest (typed gated -> v4.5 world-model, no auto-edit) / simlab (export->sim->ingest, SIMULATED)
|
|
624
|
+
│ ├── loop/ v5.12 closed loop (autonomy L3): cycle (run_loop, gated DBTL) / drift (predicted-vs-observed, inflate) / continual (admitted-only, versioned+reversible recalibration)
|
|
588
625
|
│ ├── adapt/ local recalibration / private-data adaptation behind a gate (v3.1, WS-F)
|
|
589
626
|
│ ├── env/ v3.4 full Gymnasium environment over router+verifier (genome_writing_env + policies; [env] extra)
|
|
590
627
|
│ ├── monitor/ PEN-MONITOR living database (Europe PMC)
|
|
@@ -599,12 +636,14 @@ pen-stack/
|
|
|
599
636
|
│ │ v5.8 generative_design (verifier-as-discriminator hard-gate: hazardous+illegal discarded; survivors calibrated+immune; grounded-immune Pareto) /
|
|
600
637
|
│ │ v5.9 outcome_prediction (digital-twin hard-gate: two-sided calibration + OOD widening + immune dim + phenotype out-of-scope) /
|
|
601
638
|
│ │ v5.10 experiment_design (active-learning hard-gate: EIG monotone + immune-VOI + diverse batch + retrospective active-vs-random reps+CI) /
|
|
602
|
-
│ │ v5.11 protocol_safety (build-interface hard-gate: cleared exports w/ immune metadata · hazard+illegal blocked · sim loop completes)
|
|
639
|
+
│ │ v5.11 protocol_safety (build-interface hard-gate: cleared exports w/ immune metadata · hazard+illegal blocked · sim loop completes) /
|
|
640
|
+
│ │ v5.12 closed_loop (loop-integrity hard-gate: gated end-to-end run · Level-3 human-in-control · drift detection · versioned/reversible continual learning)
|
|
603
641
|
│ ├── data/ ingestion (genome, chromatin, integration, TRIP, safety annotations)
|
|
604
642
|
│ ├── server/api.py FastAPI REST (atlas, crosslink, writable, plan, bridge, ask)
|
|
605
643
|
│ ├── ui/app.py Streamlit web app (16 pages; v3.2 PEN-Agent shows confidence + epistemic status)
|
|
606
644
|
│ └── cli.py unified CLI
|
|
607
|
-
├── benchmarks/genome_writing_bench/ Genome-Writing Bench v0.3.
|
|
645
|
+
├── 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
|
+
├── benchmarks/genome_writing_challenge/ v5.13 the public Genome-Writing Challenge (held-out rounds + immune-risk task + submission API; harness / run / README / SUBMISSIONS)
|
|
608
647
|
├── bench/run.py one-command bench entrypoint (--agent, --verify)
|
|
609
648
|
├── scripts/ reproducible pipeline drivers (p1_*, p2_*, p4_*, p52/p53 delivery-immunology oracle builds, ws_*_report)
|
|
610
649
|
├── configs/ pinned datasets + thresholds + curation (YAML); v3.2 known_unknowns /
|
|
@@ -617,7 +656,7 @@ pen-stack/
|
|
|
617
656
|
│ r,v,route,env,bench,cal,o,wv,atlas,graph,mon,ct,plan,crit,cite,immune,
|
|
618
657
|
│ genotox,epitope,innate,seroprev,peg,calib,profile,screen,policy,redteam,
|
|
619
658
|
│ gen,pareto,orch,vcell,mech,outcome,twincal,acq,aldesign,alvalidate,
|
|
620
|
-
│ proto,ingest,simlab} + SHA256 locks)
|
|
659
|
+
│ proto,ingest,simlab,loop,continual,drift,challenge,cosci2} + SHA256 locks)
|
|
621
660
|
├── data/curated/ small committed tables (universe, gene coords, measured bridge profile,
|
|
622
661
|
│ v3.2 bridge_offtarget_energetics.json)
|
|
623
662
|
├── data/llm_bench_cache/ 28 cached ungrounded-LLM transcripts (T7, offline/CI replay)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
757da90182c83025a1dc4da7075b4f378a311f03db23be29145a23356e95ea9a benchmarks/genome_writing_bench/tasks.yaml
|
|
2
2
|
5ca511c6763b4e3703e8009031ff8dc385c2a99540e2731d875a9fbbb16f5ecd configs/gsh_validated_heldout.yaml
|
|
3
3
|
758817c1e46c7db10f7f942316663367c5f297cac0cf2f59947a90638a256718 data/writer_panel.csv
|
|
4
4
|
865b18ff23d140c3df6f3b5f25398581ebdfe3534e1cecf6f512afb540ab5ede data/gsh_matched_controls.parquet
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
# A task names a `scorer` (module.function in pen_stack.validate / pen_stack.bridge) and a `metric` key to
|
|
9
9
|
# read from its report. Solvers (deterministic planner, naive baseline, LLM agent) are compared on the same
|
|
10
10
|
# tasks; a solver that cannot ground a number must refuse, not invent (no-fabrication is a hard gate).
|
|
11
|
-
version: "0.3.
|
|
11
|
+
version: "0.3.8"
|
|
12
12
|
prepared: "2026-06-11"
|
|
13
13
|
|
|
14
14
|
taxonomy:
|
|
@@ -47,6 +47,8 @@ taxonomy:
|
|
|
47
47
|
ED_experiment_design: "choose the experiment(s) that most reduce model uncertainty: EIG from the calibrated twin (monotone in uncertainty), immune-VOI rewarding proxy-validating experiments, a diverse batch, and a RETROSPECTIVE active-vs-random validation with reps + bootstrap CI (vs a random selector with no acquisition signal and no falsifiable curve)"
|
|
48
48
|
# v0.3.7 (v5.11): the build interface - safety-gated protocol export + gated ingestion + simulated loop.
|
|
49
49
|
PS_protocol_safety: "export a cleared design as a runnable protocol DRAFT carrying its v5.6 immune profile, BLOCK any safety-refused/illegal design (ProtocolExportError), and complete the simulated loop export->sim->ingest with results quarantined (no auto-edit) + labelled SIMULATED (vs an ungated exporter that would emit the hazardous protocol)"
|
|
50
|
+
# v0.3.8 (v5.12): the closed loop - one gated, drift-aware DBTL cycle at autonomy Level 3.
|
|
51
|
+
CL_closed_loop: "run the full generate->predict->decide->safety->build->ingest->learn loop end-to-end (sim-lab) with a human in control at every gate, drift detection that widens uncertainty, and versioned+reversible continual learning - autonomy Level 3, no fabrication (vs an ungated autopilot with no human gates, no drift, no versioned beliefs)"
|
|
50
52
|
|
|
51
53
|
tasks:
|
|
52
54
|
- id: site_selection_blind_gsh
|
|
@@ -315,3 +317,19 @@ tasks:
|
|
|
315
317
|
note: "v5.11 the build interface: a cleared design exports a DRAFT carrying its immune profile; a safety-refused
|
|
316
318
|
or illegal design raises ProtocolExportError; the simulated loop completes with quarantined, SIMULATED-labelled
|
|
317
319
|
results. An ungated exporter would emit the hazardous protocol and fails by construction."
|
|
320
|
+
|
|
321
|
+
- id: closed_loop
|
|
322
|
+
family: CL_closed_loop
|
|
323
|
+
scorer: "pen_stack.validate.closed_loop:run"
|
|
324
|
+
metric: "closed_loop_honest"
|
|
325
|
+
baseline_metric: "ungated_autopilot_honest"
|
|
326
|
+
higher_is_better: true
|
|
327
|
+
hard_gate: true
|
|
328
|
+
gate_rule: "closed_loop_honest == True (gated end-to-end run + no-fabrication + Level-3 human-in-control + drift detection + versioned/reversible continual learning)"
|
|
329
|
+
ground_truth: "structural integrity properties of a Level-3 DBTL loop (gated end-to-end run, human-in-control,
|
|
330
|
+
drift detection, versioned + reversible continual learning), NOT a beat-the-world claim - non-circular; the
|
|
331
|
+
active-vs-random convergence is reported with a CI either way (retrospective/simulated)"
|
|
332
|
+
circular: false
|
|
333
|
+
note: "v5.12 the closed loop: one command runs generate->predict->decide->safety->build->ingest->learn with a
|
|
334
|
+
human in control at every gate; drift widens uncertainty; continual learning is versioned + reversible.
|
|
335
|
+
Stops deliberately at autonomy Level 3. An ungated autopilot fails by construction."
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# The Genome-Writing Challenge
|
|
2
|
+
|
|
3
|
+
An **open, recurring, held-out** benchmark for the *writing* side of genome engineering — the CASP /
|
|
4
|
+
Virtual-Cell-Challenge model, applied to *where / what / how to write*. Anyone can submit an agent; it is scored
|
|
5
|
+
on a held-out round whose labels it never sees.
|
|
6
|
+
|
|
7
|
+
## Why
|
|
8
|
+
|
|
9
|
+
Editing-side tooling has benchmarks; the **writing** side did not have an open, externally-submittable one.
|
|
10
|
+
PEN-STACK's internal Genome-Writing Bench (v0.3.x) became the seed; the Challenge generalises it into a public
|
|
11
|
+
leaderboard others can build *to*.
|
|
12
|
+
|
|
13
|
+
## How to submit
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
from benchmarks.genome_writing_challenge.harness import Submission, evaluate
|
|
17
|
+
|
|
18
|
+
def my_predict(public_input: dict):
|
|
19
|
+
# public_input = {"task_id", "family", "design", "instructions"} — the label is NOT included
|
|
20
|
+
if public_input["family"] == "legality": return True # is this design legal?
|
|
21
|
+
if public_input["family"] == "safety": return "clear" # clear/flag/escalate/refuse
|
|
22
|
+
if public_input["family"] == "immune_risk":return "genotoxicity" # highest-risk v5.6 axis
|
|
23
|
+
return None # abstaining is allowed (scores 0)
|
|
24
|
+
|
|
25
|
+
result = evaluate(Submission(name="my-agent", predict_fn=my_predict), round_id="2026R1")
|
|
26
|
+
print(result["aggregate"], result["by_family"])
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Run the reference: `python benchmarks/genome_writing_challenge/run.py`.
|
|
30
|
+
|
|
31
|
+
## Task families (this round)
|
|
32
|
+
|
|
33
|
+
| Family | Public input | Held-out label (released after the round) |
|
|
34
|
+
|---|---|---|
|
|
35
|
+
| `legality` | a design | legal/illegal (from the validated v3.3 rules) |
|
|
36
|
+
| `safety` | a design | clear/flag/escalate/refuse (from the v5.7 Guardian) |
|
|
37
|
+
| `immune_risk` | a design | the highest-risk immune axis (from the v5.6 profile) |
|
|
38
|
+
|
|
39
|
+
*(Future rounds add write-types, adversarial, outcome, experiment-design, and closed-loop families.)*
|
|
40
|
+
|
|
41
|
+
## Rules
|
|
42
|
+
|
|
43
|
+
- **Held-out.** Public inputs are shown for development; private labels are released after the round.
|
|
44
|
+
- **No circular labels.** Every label comes from the validated PEN-STACK layers (verifier / oracles), never the
|
|
45
|
+
submitter's own claim — so a fabricated answer simply scores 0.
|
|
46
|
+
- **No fabrication.** A submission may answer or abstain; it must not crash. Grounding is enforced by the labels.
|
|
47
|
+
- **Reproducible.** Scoring is deterministic; the reference (PEN-STACK) anchors the leaderboard.
|
|
48
|
+
|
|
49
|
+
See `SUBMISSIONS.md` and [`docs/integrations.md`](../../docs/integrations.md).
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Genome-Writing Challenge — Leaderboard (round 2026R1)
|
|
2
|
+
|
|
3
|
+
| Rank | Submission | Aggregate | legality | safety | immune_risk | No-fabrication |
|
|
4
|
+
|---|---|---|---|---|---|---|
|
|
5
|
+
| — | **pen-stack-reference** (anchor) | 1.00 | 1.00 | 1.00 | 1.00 | ✓ |
|
|
6
|
+
|
|
7
|
+
*The reference (PEN-STACK itself) is the leaderboard anchor — it answers from the same validated layers the
|
|
8
|
+
held-out labels come from, so it scores 1.00 by construction. External submissions are scored on the held-out
|
|
9
|
+
private labels released after the round.*
|
|
10
|
+
|
|
11
|
+
**Standing adoption criterion (the honest non-code bottleneck since v3.1):** ≥1 external integration + ≥1
|
|
12
|
+
external submission. The submission surface, the runner, and the MCP integration are shipped and documented
|
|
13
|
+
(`docs/integrations.md`); landing an external participant depends on outreach. This file is updated as external
|
|
14
|
+
submissions arrive.
|
|
15
|
+
|
|
16
|
+
To submit, see [README.md](README.md) and [`docs/integrations.md`](../../docs/integrations.md).
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Autonomy levels — PEN-STACK stops at Level 3 (v5.12, WS-AUTONOMY)
|
|
2
|
+
|
|
3
|
+
PEN-STACK's closed loop (v5.12) is a **Level-3** design→build→test→learn engine: closed, but with **humans/lab in
|
|
4
|
+
control at every gate**. This is the program's deliberate, honest ceiling — not Level 5.
|
|
5
|
+
|
|
6
|
+
## The levels (for self-driving labs)
|
|
7
|
+
|
|
8
|
+
| Level | Description | PEN-STACK |
|
|
9
|
+
|---|---|---|
|
|
10
|
+
| 0 | Manual — a human does everything | — |
|
|
11
|
+
| 1 | Assisted — tools score/check, human decides each step | v3.3 verifier |
|
|
12
|
+
| 2 | Partial — the system proposes designs + experiments; human runs + decides | v5.8–v5.11 |
|
|
13
|
+
| **3** | **Closed loop with human control at every gate** — the system runs the full cycle, but pauses for human approval at safety, build, and belief-admission, and flags anomalies | **v5.12 (here)** |
|
|
14
|
+
| 4 | Supervised autonomy — runs many cycles with human oversight, escalating exceptions | not claimed |
|
|
15
|
+
| 5 | Full autonomy — no human in the loop | **not claimed; not a goal** |
|
|
16
|
+
|
|
17
|
+
## What "Level 3" means here (asserted criteria)
|
|
18
|
+
|
|
19
|
+
1. **Closed loop.** One command runs generate → predict → decide → safety → build → ingest → learn end-to-end
|
|
20
|
+
(`run_loop`), in silico (sim-lab) or with a real lab at the same interface.
|
|
21
|
+
2. **Human in control at every gate.** The loop pauses for the `approver` at **safety** (export is refused for a
|
|
22
|
+
flagged design), **build** (protocols are DRAFTs requiring human/lab review), and **belief-admission** (results
|
|
23
|
+
enter the curated world-model only via the v4.5 gate with explicit approval).
|
|
24
|
+
3. **Anomaly flagging.** Drift between predictions and observations is detected and **widens uncertainty** rather
|
|
25
|
+
than over-trusting a stale model; continual updates are versioned + reversible.
|
|
26
|
+
4. **No fabrication.** Every number is tool-sourced; no stage invents a value.
|
|
27
|
+
|
|
28
|
+
## What PEN-STACK deliberately does NOT do
|
|
29
|
+
|
|
30
|
+
- It does **not** run experiments autonomously (protocols are drafts; a human/lab runs them).
|
|
31
|
+
- It does **not** auto-edit the curated world-model (admission requires human approval).
|
|
32
|
+
- It does **not** retrain the foundation models (continual learning is recalibration).
|
|
33
|
+
- It does **not** claim Level 4 or 5. The human is in the loop by design.
|
|
34
|
+
|
|
35
|
+
> Level 3 is a trustworthy ceiling: a closed, gated, drift-aware loop that a scientist drives — not an autonomous
|
|
36
|
+
> agent acting in the world. The convergence demonstration is retrospective/simulated, reported with CIs.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# The Genome-Writing Challenge (v5.13)
|
|
2
|
+
|
|
3
|
+
PEN-STACK's accumulated bench tasks (v3.4→v5.12) become an **open, recurring, held-out** benchmark others build
|
|
4
|
+
*to* — the CASP / Virtual-Cell-Challenge model for the *writing* side of genome engineering.
|
|
5
|
+
|
|
6
|
+
```bash
|
|
7
|
+
python benchmarks/genome_writing_challenge/run.py # score the PEN-STACK reference on the current round
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## How it works (`benchmarks/genome_writing_challenge/harness.py`)
|
|
11
|
+
|
|
12
|
+
An external agent submits a `Submission(name, predict_fn)`. `evaluate(submission, round_id)` scores
|
|
13
|
+
`predict_fn(public_input) -> answer` on a **held-out** round:
|
|
14
|
+
|
|
15
|
+
- each `public_input` names its `family` + `task_id` + `design` + `instructions` — **never the label**;
|
|
16
|
+
- the private label is computed by the **validated PEN-STACK layers** (the v3.3 rules, the v5.7 Guardian, the
|
|
17
|
+
v5.6 immune profile) — so **no task uses a circular label**; a fabricated answer cannot match an invented label
|
|
18
|
+
and simply scores 0;
|
|
19
|
+
- a **no-fabrication** audit runs on every submission;
|
|
20
|
+
- task families generalise the internal bench: `legality`, `safety`, and an **immune-risk** task grounded in the
|
|
21
|
+
v5.6 oracles (future rounds add write-types, adversarial, outcome, experiment-design, closed-loop).
|
|
22
|
+
|
|
23
|
+
The **reference** submission (PEN-STACK itself) anchors the leaderboard at 1.0 by construction.
|
|
24
|
+
|
|
25
|
+
## Why it is honest
|
|
26
|
+
|
|
27
|
+
- **Held-out + private labels** released after a round — you cannot reverse-fit.
|
|
28
|
+
- **No circular labels** — labels are mechanistic/verifier facts, not the agent's own claim.
|
|
29
|
+
- **Reproducible** — deterministic scoring, version-pinned.
|
|
30
|
+
- **Immune-risk first-class** — an immune-risk task draws directly on the v5.6 profile.
|
|
31
|
+
|
|
32
|
+
See [`benchmarks/genome_writing_challenge/README.md`](../benchmarks/genome_writing_challenge/README.md),
|
|
33
|
+
`SUBMISSIONS.md`, and [Integrations](integrations.md).
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# The closed loop (v5.12)
|
|
2
|
+
|
|
3
|
+
From v5.12, PEN-STACK integrates every prior cycle into one continual **design→build→test→learn** loop — humans/lab
|
|
4
|
+
in control at every gate, no fabrication, drift-aware. One command runs it end-to-end.
|
|
5
|
+
|
|
6
|
+
```python
|
|
7
|
+
from pen_stack.loop import run_loop
|
|
8
|
+
result = run_loop(goal, cell_state="k562", candidates=pool, rounds=5, approver="human")
|
|
9
|
+
result["autonomy_level"] # 3
|
|
10
|
+
result["human_in_control"] # True
|
|
11
|
+
result["history"] # per-round: n, blocked, best_readout, drift, versioned update
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## The DBTL orchestrator (`pen_stack/loop/cycle.py`)
|
|
15
|
+
|
|
16
|
+
Each round composes the whole stack:
|
|
17
|
+
|
|
18
|
+
1. **generate** (v5.8) — safe + legal + calibrated + immune-profiled candidates (the verifier-as-discriminator
|
|
19
|
+
discards hazardous/illegal proposals);
|
|
20
|
+
2. **decide** (v5.10) — `select_batch` picks a diverse, informative batch (EIG + immune-VOI);
|
|
21
|
+
3. **safety + build** (v5.7 + v5.11) — `export_protocol` is **safety-gated** (a flagged design is blocked);
|
|
22
|
+
4. **test** (v5.11) — `run_simulated` (sim-lab) or a real lab at the same interface;
|
|
23
|
+
5. **ingest** (v4.5) — results enter as candidate evidence, admitted only through the gate;
|
|
24
|
+
6. **drift** (v5.12) — predicted vs observed;
|
|
25
|
+
7. **learn** (v5.12) — `continual_update` recalibrates, versioned + reversible.
|
|
26
|
+
|
|
27
|
+
The loop **pauses for the approver at safety, build, and belief-admission** — it is not autonomous.
|
|
28
|
+
|
|
29
|
+
## Drift detection (`pen_stack/loop/drift.py`)
|
|
30
|
+
|
|
31
|
+
`detect_drift(designs, results)` compares the twin's predictions against observed readouts. Growing
|
|
32
|
+
miscalibration → `severity: "high"` → `action: "inflate_intervals"` — widen uncertainty rather than over-trust a
|
|
33
|
+
stale model. Covers calibration/residual shift, not every failure mode.
|
|
34
|
+
|
|
35
|
+
## Continual learning (`pen_stack/loop/continual.py`)
|
|
36
|
+
|
|
37
|
+
`continual_update(admitted_results, drift=…, approver=…, prev_version=…)` recalibrates the trust layer, the v5.9
|
|
38
|
+
twin, and the v5.6 immune proxies **on admitted outcomes only**. Every update is **versioned** (evidence digest)
|
|
39
|
+
and **reversible** (`rollback_to` the prior version), attributable to the approver. High drift widens intervals.
|
|
40
|
+
An admitted immune measurement **with a CI** can move a v5.6 axis proxy → outcome-validated. This is
|
|
41
|
+
**recalibration, not foundation-model retraining**.
|
|
42
|
+
|
|
43
|
+
## Convergence demonstration
|
|
44
|
+
|
|
45
|
+
`loop_converges_faster_than_random` reports — retrospectively, with a bootstrap CI — whether the loop's active
|
|
46
|
+
Learn stage reaches a target model quality in fewer rounds than random selection (the v5.10 validation). It is
|
|
47
|
+
reported honestly either way; the demonstration is retrospective/simulated.
|
|
48
|
+
|
|
49
|
+
## Honest scope
|
|
50
|
+
|
|
51
|
+
The loop is **Level 3** — closed, but with humans/lab in control at every gate, **not autonomous**. It runs in
|
|
52
|
+
silico via the sim-lab (a real lab attaches at the same interface); continual learning recalibrates rather than
|
|
53
|
+
retrains; drift detection covers calibration/residual shift, not all failures; immune-proxy graduation requires an
|
|
54
|
+
admitted measurement with a CI. See [Autonomy levels](autonomy.md).
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# The co-scientist over the loop (v5.13)
|
|
2
|
+
|
|
3
|
+
The matured co-scientist drives the whole Series-II loop for a working scientist — every output safe, legal,
|
|
4
|
+
calibrated, cited, scope-ledgered, and **immune-profiled**, and never fabricated. **The co-scientist drives and
|
|
5
|
+
presents; the scientist/lab decides.**
|
|
6
|
+
|
|
7
|
+
```python
|
|
8
|
+
from pen_stack.agent.co_scientist import co_scientist_session
|
|
9
|
+
session = co_scientist_session(goal, cell_state="k562")
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Returns, for a documented goal:
|
|
13
|
+
|
|
14
|
+
| Key | From | What |
|
|
15
|
+
|---|---|---|
|
|
16
|
+
| `strategies` | v5.8 | the Pareto frontier of designs (incl. the grounded immune-risk axis) |
|
|
17
|
+
| `predicted_outcomes` | v5.9 | calibrated outcomes with intervals + scope flags |
|
|
18
|
+
| `immune_profiles` | v5.6 | the per-axis immune-risk vector, **first-class** (`collapsed_score is None`) |
|
|
19
|
+
| `suggested_experiments` | v5.10 | the diverse, informative batch to run next (EIG + immune-VOI) |
|
|
20
|
+
| `protocols_available` | v5.11 | safety-gated protocol export on request (DRAFT) |
|
|
21
|
+
| `citations` | v5.0 | a literature-cited rationale (citations resolve by construction) |
|
|
22
|
+
| `scope_ledger` | v5.0 | what was assessed vs not (the known-unknowns made legible) |
|
|
23
|
+
| `safety` | v5.7 | the per-design safety decision (cleared / flagged) |
|
|
24
|
+
|
|
25
|
+
Hazardous candidates are discarded by the safety-gated pipeline before they ever appear. No number is
|
|
26
|
+
fabricated; the immune-risk profile is presented **with its known-unknowns**, never as a patient prediction.
|
|
27
|
+
|
|
28
|
+
## Honest scope
|
|
29
|
+
|
|
30
|
+
The co-scientist runs the loop and **presents options** — it does not decide. Safety, no-fabrication, calibration,
|
|
31
|
+
and the scope ledger hold throughout. It is the most useful *face* of the substrate, not an autonomous agent.
|