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