pen-stack 7.1.3__tar.gz → 7.1.4__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-7.1.3 → pen_stack-7.1.4}/CHANGELOG.md +25 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/CITATION.cff +2 -2
- {pen_stack-7.1.3 → pen_stack-7.1.4}/PKG-INFO +1 -1
- pen_stack-7.1.4/configs/rules/compliance.yaml +44 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/write_types.yaml +7 -7
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/rule_spec.md +2 -1
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/__init__.py +1 -1
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/rules/evaluators.py +90 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/rules/loader.py +1 -1
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/rules/schema.py +1 -1
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/verify/proof.py +7 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack.egg-info/PKG-INFO +1 -1
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack.egg-info/SOURCES.txt +1 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pyproject.toml +1 -1
- {pen_stack-7.1.3 → pen_stack-7.1.4}/LICENSE +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/MANIFEST.in +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/README.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/bench/run.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/chat_grounding/README.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/chat_grounding/SHA256SUMS +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/chat_headtohead/README.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/chat_routing/README.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/chat_routing/SHA256SUMS +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/chat_safety/README.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/chat_safety/SHA256SUMS +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/delivery/SHA256SUMS +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/genome_writing_bench/LEADERBOARD.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/genome_writing_bench/README.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/genome_writing_bench/SHA256SUMS +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/genome_writing_bench/SUBMISSIONS.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/genome_writing_bench/tasks.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/genome_writing_challenge/README.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/genome_writing_challenge/SUBMISSIONS.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/loop/SHA256SUMS +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/offtarget/SHA256SUMS +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/oracle/SHA256SUMS +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/position_effect/README.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/position_effect/SHA256SUMS +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/verify/SHA256SUMS +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/writer_efficiency/README.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/writer_efficiency/SHA256SUMS +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/benchmarks/writespec/SHA256SUMS +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/aav_serotype_tropism.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/antipeg.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/atlas_families.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/bridge_offtarget_profile.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/calibration/preexisting_nab_independent.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/capsid_epitope_oracle.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/capsid_sequences.fasta +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/cargo_polish.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/cell_types.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/datasets.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/delivery_constraints.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/delivery_rules.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/delivery_vehicles.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/expression/modifiers.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/expression/promoters.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/gates_v3.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/genotoxicity_oracle.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/gsh_validated_heldout.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/intent_weights.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/known_unknowns.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/llm.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/metric_guide.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/mhc_epitope_oracle.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/monitor_queries.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/oracles/execution.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/oracles/reliability.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/oracles/scope_cards.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/rules/delivery.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/rules/fold.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/rules/multiplex.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/rules/payload.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/rules/reachability.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/safety/hazard_registry.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/safety/policy.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/safety/probes.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/score_axes.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/seroprevalence.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/target_sites.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/universe_crosswalk.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/writer_sequences.fasta +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/configs/wtkb_curated.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/data/curated/bridge_offtarget_energetics.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/data/curated/bridge_offtarget_profile_measured.parquet +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/data/curated/gene_coords.parquet +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/data/curated/unified_editor_universe.parquet +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/BACKLOG.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/DEPLOY.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/INFRA.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/MCP.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/RELEASING.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/REPRO.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/STABILITY.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/agent.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/alphagenome_feasibility.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/autonomy.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/benchmark_circularity.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/biosecurity.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/build_interface.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/cards/atlas.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/cards/durability.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/cards/offtarget_data.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/cards/position_effect_data.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/cards/safety.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/cards/writer_efficiency_data.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/challenge.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/closed_loop.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/co_scientist.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/co_scientist_loop.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/delivery.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/delivery_immunology.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/delivery_recommender.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/digital_twin.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/dissemination.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/environment.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/experiment_design.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/generative_design.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/immune_profiler.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/index.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/integrations.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/live_oracles.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/mechanistic_constraints.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/offtarget.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/oracle_mesh.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/oracles.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/position_effect.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/positioning.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/private_data_formats.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/quickstart.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/responsible_use.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/rules.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/scope.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/scorecard.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/tpe_bench.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/tutorials/compare-families.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/tutorials/score-deliverability.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/tutorials/where-can-i-write.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/tutorials/which-writer-reaches-locus.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/uncertainty.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/verify.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/verify_service.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/world_model.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/writer_efficiency.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/writer_verification.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/writespec_bench.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/writespec_profile.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/docs/wtkb.md +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/_resources.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/active/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/active/acquire.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/active/brains.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/active/campaign.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/active/design.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/active/validate.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/adapt/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/adapt/finetune.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/adapt/ingest.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/adapt/pipeline.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/adapt/recalibrate.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/adapt/report.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/agent/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/agent/cite.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/agent/co_scientist.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/agent/epistemic.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/agent/guardrails.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/agent/mcp_server.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/agent/orchestrator.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/agent/orchestrator_live.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/agent/pen_agent.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/agent/scope.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/agent/tools.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/api/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/api/manifest.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/atlas/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/atlas/build_wtkb.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/atlas/crosslink.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/atlas/expand.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/atlas/guide_design.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/atlas/schema.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/atlas/scorecard.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/atlas/universe.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/atlas/variant_propose.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/atlas/writer_efficiency.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/atlas/writer_predict.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/atlas/writer_recommend.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/atlas/writer_verify.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/bridge/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/bridge/activity.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/bridge/cli.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/bridge/fold_qc.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/bridge/guide_qc.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/bridge/ingest.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/bridge/offtarget.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/bridge/offtarget_energetics.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/bridge/ortholog_screen.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/bridge/pipeline.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/build/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/build/cloudlab.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/build/ingest.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/build/protocol.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/build/simlab.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/cli.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/data/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/data/encode.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/data/genome.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/data/ingest_chromatin.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/data/ingest_integration.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/data/ingest_safety_annot.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/data/ingest_trip.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/design/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/design/capsid_generate.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/design/generate.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/design/pareto.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/design/space.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/design/writer_variants.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/env/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/env/genome_writing_env.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/env/policies.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/graph/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/graph/build.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/graph/cell_types.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/graph/ingest.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/graph/query.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/graph/schema.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/loop/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/loop/continual.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/loop/cycle.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/loop/drift.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/mech/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/mech/classify_atlas.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/mech/whitelist.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/monitor/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/monitor/europepmc.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/monitor/run.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/monitor/triage.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/oracles/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/oracles/affinity.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/oracles/cache.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/oracles/energetics.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/oracles/genome.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/oracles/protein_design.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/oracles/reliability.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/oracles/rna.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/oracles/schema.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/oracles/status.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/oracles/structure.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/oracles/structure_run.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/oracles/vcell.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/ada_risk.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/antipeg_oracle.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/capsid_epitope_oracle.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/cargo.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/cargo_polish.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/delivery.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/delivery_constraints.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/delivery_immune.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/delivery_immunology.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/delivery_predict.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/delivery_vehicles.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/genotoxicity_oracle.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/immune_mhc2.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/immune_profile.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/innate_sensing.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/multiplex.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/optimize.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/pipeline.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/report.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/router.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/seroprevalence_oracle.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/planner/target_site.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/rag/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/rag/corpus.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/rag/embed.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/rag/ground.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/rag/index.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/rag/llm.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/rag/qa.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/rag/retrieve.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/rules/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/rules/solver.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/rules/spec.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/safety/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/safety/audit.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/safety/gate.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/safety/policy.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/safety/redteam.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/safety/registry.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/safety/screen.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/safety/standards.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/score/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/score/recalibrate.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/score/therapeutic.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/server/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/server/api.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/spec/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/spec/clarify.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/spec/extract.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/spec/resolvers/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/spec/resolvers/cell.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/spec/resolvers/chem.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/spec/resolvers/feature.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/spec/resolvers/gene.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/spec/resolvers/locus.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/spec/resolvers/phenotype.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/spec/satisfy.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/spec/service.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/spec/writespec.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/twin/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/twin/calibrate.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/twin/data/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/twin/data/position_effect.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/twin/mechanistic.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/twin/outcome.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/twin/position_effect.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/ui/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/ui/app.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/adapt_demo.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/agent_eval.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/bench_adversarial_tasks.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/bench_coscientist_tasks.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/bench_graph_tasks.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/bench_rule_tasks.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/bench_trust_tasks.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/bench_writetype_tasks.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/blind_gsh_discovery.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/cargo_directionality.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/closed_loop.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/durability_baselines.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/experiment_design.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/expr_controls.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/forward_hypotheses.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/generative_design.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/guide_qc_demo.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/heldout_celltype_expr.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/immune_calibration.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/intent_specification.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/known_biology_expr.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/offtarget_energetics_eval.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/out_of_scope_refusal.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/outcome_calibration.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/outcome_prediction.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/paper3_benchmark.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/paper4_real_validation.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/paper4_validation.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/protocol_safety.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/safety_screening.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/selective_prediction.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/seq_vs_measured.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/target_site_controls.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/uncertainty_eval.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/ungrounded_baseline.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/within_locus_ranking.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/validate/writer_recovery.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/verify/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/verify/schema.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/verify/service.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/web/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/web/guide.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/web/llm.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/web/llm_provider.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/web/router.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/web/server.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/web/tools.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/wgenome/__init__.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/wgenome/chromatin_seq.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/wgenome/durability.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/wgenome/export_tracks.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/wgenome/features.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/wgenome/gsh_baseline.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/wgenome/mesh_features.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/wgenome/offtarget_assay.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/wgenome/offtarget_data.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/wgenome/offtarget_predict.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/wgenome/ood.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/wgenome/providers.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/wgenome/safety.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/wgenome/structure3d.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/wgenome/uncertainty.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack/wgenome/writability.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack.egg-info/dependency_links.txt +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack.egg-info/entry_points.txt +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack.egg-info/requires.txt +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/pen_stack.egg-info/top_level.txt +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_phase0.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_phase1_5.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_phase2.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_phase3.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_a.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_acq.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_aldesign.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_alvalidate.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_atlas.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_b.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_ba.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_ba_v33.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_ba_v45.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_bench.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_c.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_cal.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_calib.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_challenge.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_chat.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_cite.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_closedloop.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_continual.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_cosci2.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_crit.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_ct.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_d.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_delivery.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_drift.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_e.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_env.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_ep.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_epitope.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_expr2.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_f.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_frontend.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_g.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_gen.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_genotox.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_graph.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_h.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_hybrid.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_immune.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_immune2.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_ingest.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_innate.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_loop.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_manifest.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_mc.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_mcp.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_mech.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_mon.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_o.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_offtarget.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_openapi.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_oracle.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_orch.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_outcome.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_pareto.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_peg.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_penchat.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_plan.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_policy.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_profile.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_proto.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_r.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_redteam.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_route.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_screen.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_seroprev.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_simlab.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_twincal.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_uq.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_v.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_vcell.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_verify.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_writer.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_writespec.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/SHA256_LOCK_ws_wv.json +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/paper1.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/paper2.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/paper3.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/paper4.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/phase0.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_a.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_acq.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_aldesign.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_alvalidate.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_atlas.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_b.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_ba.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_ba_v33.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_ba_v45.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_bench.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_c.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_cal.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_calib.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_challenge.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_chat.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_cite.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_closedloop.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_continual.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_cosci2.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_crit.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_ct.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_d.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_delivery.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_drift.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_e.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_env.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_ep.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_epitope.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_expr2.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_f.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_frontend.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_g.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_gen.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_genotox.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_graph.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_h.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_hybrid.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_immune.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_immune2.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_ingest.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_innate.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_loop.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_manifest.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_mc.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_mcp.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_mech.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_mon.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_o.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_offtarget.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_openapi.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_oracle.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_orch.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_outcome.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_pareto.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_peg.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_penchat.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_plan.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_policy.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_profile.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_proto.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_r.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_redteam.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_route.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_screen.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_seroprev.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_simlab.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_twincal.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_uq.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_v.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_vcell.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_verify.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_writer.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_writespec.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/prereg/ws_wv.yaml +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/build_capsid_fitness.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/build_rag_corpus.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/calibrate_immune_axes.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/fetch_licensed_sources.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/offtarget_chromatin_incremental.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/offtarget_chromatin_matched.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/offtarget_chromatin_validation.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/p1_build_atlas.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/p1_build_durability.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/p1_build_position_effect.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/p1_build_writer_eff.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/p1_export_tracks.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/p1_safety_concordance.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/p1_train_safety.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/p1_validation_report.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/p2_build_atlas.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/p3_benchmark_report.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/p4_genome_scan.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/p52_build_genotox_oracle.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/p53_build_epitope_oracle.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/ws_b_report.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/scripts/ws_c_report.py +0 -0
- {pen_stack-7.1.3 → pen_stack-7.1.4}/setup.cfg +0 -0
|
@@ -3,6 +3,31 @@
|
|
|
3
3
|
All notable changes to PEN-STACK are documented here. This file follows
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/).
|
|
5
5
|
|
|
6
|
+
## [7.1.4] - 2026-06-29 - Germline-prohibition legality rule
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
- **Compliance rule category + `compliance.germline_prohibition` (hard_reject).** A heritable / germline edit
|
|
10
|
+
previously passed the Legality axis because no rule existed for it (the only germline handling was a
|
|
11
|
+
known-unknown scope matcher for *questions*, not *designs*). The new rule fails legality for: a reproductive
|
|
12
|
+
germline target cell (embryo / zygote / oocyte / sperm / gamete - unconditional), a declared reproductive-use
|
|
13
|
+
intent (gametes / assisted reproduction / implantation / "for reproduction"), a declared heritable intent
|
|
14
|
+
(germline / heritable / "transmitted to offspring"), or a germline-competent cell type (hESC / iPSC) edited in a
|
|
15
|
+
heritable context (in vivo, or a reproductive/heritable intent). It is cited (Lander et al. 2019 moratorium,
|
|
16
|
+
`10.1038/d41586-019-00726-5`; US National Academies 2017, `10.17226/24623`) and emits a proof-object repair hint
|
|
17
|
+
(restrict to somatic / ex-vivo editing). It is a scope-of-use legality bound, reported on the LEGALITY axis,
|
|
18
|
+
separate from the Biosecurity axis. The category is wired into every write type; `rule_spec.json` is now 11 rules.
|
|
19
|
+
- **Paraphrase + negation robustness** (red-team-hardened). The free-text intent match is NEGATION-aware
|
|
20
|
+
(negated-span detection), so a somatic design that explicitly says "somatic, not germline" / "no germline
|
|
21
|
+
transmission" / "NOT for reproduction or implantation" is not false-flagged, while paraphrased reproductive
|
|
22
|
+
intent (e.g. "generate gametes for assisted reproduction", "embryo intended for uterine transfer") with no
|
|
23
|
+
literal "germline"/"heritable" word still fails. Validated against a 30-design adversarial set: 0 evasions,
|
|
24
|
+
0 false positives.
|
|
25
|
+
|
|
26
|
+
### Fixed
|
|
27
|
+
- The Verify page's Legality description claimed it adjudicates "jurisdiction / list-agent / IP", which it does
|
|
28
|
+
not. Corrected to describe the actual legality axis (physical feasibility + germline scope-of-use compliance),
|
|
29
|
+
noting that dual-use hazard is the separate Biosecurity axis.
|
|
30
|
+
|
|
6
31
|
## [7.1.3] - 2026-06-26 - Designer correctness: Guardian biosecurity + calibrated confidence
|
|
7
32
|
|
|
8
33
|
### 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: 7.1.
|
|
5
|
-
date-released: 2026-06-
|
|
4
|
+
version: 7.1.4
|
|
5
|
+
date-released: 2026-06-29
|
|
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: 7.1.
|
|
3
|
+
Version: 7.1.4
|
|
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
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Compliance / scope-of-use legality (v7.1.4). PEN-STACK is a SOMATIC genome-writing design tool: it does not
|
|
2
|
+
# model germline transmission, embryonic development, or heritable outcomes, and it does not support designing a
|
|
3
|
+
# heritable human germline edit. A design that declares a heritable / germline-editing intent, OR that targets a
|
|
4
|
+
# reproductive germline cell, OR that edits a germline-competent cell type in vivo, is a HARD legality reject -
|
|
5
|
+
# heritable human germline genome editing is broadly prohibited / under international moratorium (it is NOT a
|
|
6
|
+
# biosecurity-hazard signature, so it must fail on the LEGALITY axis, leaving biosecurity to its own screen).
|
|
7
|
+
category: compliance
|
|
8
|
+
rules:
|
|
9
|
+
- id: compliance.germline_prohibition
|
|
10
|
+
kind: hard_reject
|
|
11
|
+
category: compliance
|
|
12
|
+
mechanism: "heritable human germline editing is out of scope for this somatic tool and broadly prohibited: a declared germline/heritable intent, a reproductive germline target cell, or an in-vivo edit of a germline-competent cell type is rejected"
|
|
13
|
+
evaluator: germline_prohibition
|
|
14
|
+
param:
|
|
15
|
+
# reproductive germline cells: editing these IS germline (always reject, any context; matched on the
|
|
16
|
+
# structured cell_type field, so no negation handling needed).
|
|
17
|
+
germline_cell_types: ["embryo", "zygote", "oocyte", "ovum", "egg cell", "sperm", "spermatozoa",
|
|
18
|
+
"spermatocyte", "spermatogonia", "spermatogonial", "gamete", "germ cell", "germline",
|
|
19
|
+
"primordial germ", "pgc", "blastocyst", "conceptus", "morula", "preimplantation"]
|
|
20
|
+
# germline-competent pluripotent cells: editing these in a HERITABLE context (in vivo, or a reproductive /
|
|
21
|
+
# heritable intent) is a germ-lineage edit; an ex-vivo SOMATIC use of the same research line is in scope.
|
|
22
|
+
germline_competent_cell_types: ["h1_hesc", "hesc", "embryonic stem", "ipsc", "ips cell", "ipscs",
|
|
23
|
+
"pluripotent stem", "epiblast", "inner cell mass"]
|
|
24
|
+
# STRONG reproductive-use intent: describes a reproductive PURPOSE; matched negation-aware in the free text.
|
|
25
|
+
reproductive_intent_terms: ["gamete", "gametes", "generate gametes", "derive gametes", "primordial germ",
|
|
26
|
+
"germ lineage", "germ-line", "germ line", "for reproduction", "reproductive use",
|
|
27
|
+
"reproductive purpose", "assisted reproduction", "ivf", "in vitro fertilization",
|
|
28
|
+
"implantation", "uterine transfer", "fertilized egg", "for pregnancy",
|
|
29
|
+
"destined for transfer", "slated for transfer", "scheduled for implantation",
|
|
30
|
+
"intended for pregnancy", "reproductive editing"]
|
|
31
|
+
# WEAKER heritable-transmission intent: can also appear inside a negated somatic disclaimer, so matched
|
|
32
|
+
# negation-aware (a design that says "not heritable" / "no germline transmission" does not fire on these).
|
|
33
|
+
heritable_terms: ["germline", "heritable", "inheritable", "inherited by", "inherit the", "heritably",
|
|
34
|
+
"pass to offspring", "passed to offspring", "passed down to", "transmit to offspring",
|
|
35
|
+
"transmit the fix to", "transmissible to progeny", "transmitted to the", "to progeny",
|
|
36
|
+
"to descendants", "to the patient's children", "to the man's offspring",
|
|
37
|
+
"future generations", "future generation", "next generation edit", "germ cell editing",
|
|
38
|
+
"embryo editing", "embryonic editing", "carried by the resulting child",
|
|
39
|
+
"inheritable by future"]
|
|
40
|
+
provenance:
|
|
41
|
+
doi: ["10.1038/d41586-019-00726-5", "10.17226/24623"]
|
|
42
|
+
note: "Heritable human germline genome editing is broadly prohibited / under moratorium: Lander et al. 2019 international call for a moratorium (Nature 567:165); US National Academies 2017 'Human Genome Editing: Science, Ethics, and Governance'; WHO Expert Advisory Committee framework (2021); US FDA is barred from considering heritable-germline clinical applications (Consolidated Appropriations Act rider); Council of Europe Oviedo Convention Art. 13. PEN-STACK is a SOMATIC tool and takes no position on germline editing beyond declaring it out of scope."
|
|
43
|
+
test_ref: "tests/unit/test_ws_r.py::test_germline_edit_fails_legality"
|
|
44
|
+
scope: "a scope-of-use / regulatory legality bound, not a biosecurity-hazard signature and not an efficacy claim"
|
|
@@ -9,35 +9,35 @@ write_types:
|
|
|
9
9
|
insertion:
|
|
10
10
|
status: supported
|
|
11
11
|
description: "insert a cargo at a safe/durable locus"
|
|
12
|
-
rule_categories: [reachability, fold, payload, delivery]
|
|
12
|
+
rule_categories: [reachability, fold, payload, delivery, compliance]
|
|
13
13
|
steps: [site_selection, writer_selection, cargo_design, offtarget, structural_risk, verify]
|
|
14
14
|
writer_classes: [bridge, cast, serine_integrase, pe_integrase]
|
|
15
15
|
|
|
16
16
|
excision:
|
|
17
17
|
status: coverage_only
|
|
18
18
|
description: "excise a segment (e.g. BCL11A enhancer, FXN GAA repeat) via a recombinase/nuclease pair"
|
|
19
|
-
rule_categories: [reachability, multiplex, delivery]
|
|
19
|
+
rule_categories: [reachability, multiplex, delivery, compliance]
|
|
20
20
|
steps: [breakpoint_reachability, pair_safety, delivery, verify]
|
|
21
21
|
writer_classes: [serine_integrase, recombinase, nuclease_pair]
|
|
22
22
|
|
|
23
23
|
inversion:
|
|
24
24
|
status: coverage_only
|
|
25
25
|
description: "invert a segment between two recombination sites"
|
|
26
|
-
rule_categories: [reachability, multiplex, delivery]
|
|
26
|
+
rule_categories: [reachability, multiplex, delivery, compliance]
|
|
27
27
|
steps: [site_pair_reachability, orientation_check, delivery, verify]
|
|
28
28
|
writer_classes: [serine_integrase, recombinase]
|
|
29
29
|
|
|
30
30
|
replacement:
|
|
31
31
|
status: coverage_only
|
|
32
32
|
description: "replace a segment (excise + insert)"
|
|
33
|
-
rule_categories: [reachability, fold, payload, multiplex, delivery]
|
|
33
|
+
rule_categories: [reachability, fold, payload, multiplex, delivery, compliance]
|
|
34
34
|
steps: [excision_reachability, insertion_reachability, payload, delivery, verify]
|
|
35
35
|
writer_classes: [pe_integrase, serine_integrase, cast]
|
|
36
36
|
|
|
37
37
|
regulatory_rewrite:
|
|
38
38
|
status: coverage_only
|
|
39
39
|
description: "edit a regulatory element (enhancer/silencer); routes to AlphaGenome variant-effect + scope"
|
|
40
|
-
rule_categories: [reachability, delivery]
|
|
40
|
+
rule_categories: [reachability, delivery, compliance]
|
|
41
41
|
steps: [variant_effect_oracle, regulatory_scope, delivery, verify]
|
|
42
42
|
writer_classes: [base_editor, pe, nuclease]
|
|
43
43
|
scope_note: "regulatory-element function change is partly out of scope (structure->phenotype); flagged"
|
|
@@ -45,13 +45,13 @@ write_types:
|
|
|
45
45
|
landing_pad_install:
|
|
46
46
|
status: coverage_only
|
|
47
47
|
description: "install an att landing pad (PE), then a deterministic integrase step"
|
|
48
|
-
rule_categories: [reachability, payload, delivery]
|
|
48
|
+
rule_categories: [reachability, payload, delivery, compliance]
|
|
49
49
|
steps: [pe_installability, integrase_step, payload, delivery, verify]
|
|
50
50
|
writer_classes: [pe_integrase]
|
|
51
51
|
|
|
52
52
|
multiplex:
|
|
53
53
|
status: supported
|
|
54
54
|
description: "multiple concurrent edits; routes to the translocation screen"
|
|
55
|
-
rule_categories: [reachability, multiplex, delivery]
|
|
55
|
+
rule_categories: [reachability, multiplex, delivery, compliance]
|
|
56
56
|
steps: [per_edit_reachability, translocation_screen, delivery, verify]
|
|
57
57
|
writer_classes: [any]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Genome-writing rule spec
|
|
2
2
|
|
|
3
|
-
Version 1.0.
|
|
3
|
+
Version 1.0. 11 rules across 6 categories (compliance, delivery, fold, multiplex, payload, reachability). A rule is data, not code: each record names the evaluator that executes it against a Design, so the rules are enumerable, queryable, and citation-backed without changing any decision (proven by the parity tests).
|
|
4
4
|
|
|
5
5
|
Generated from `pen_stack/rules/spec.py::export_spec`. Machine-readable form: `benchmarks/verify/rule_spec.json`.
|
|
6
6
|
|
|
@@ -16,3 +16,4 @@ Generated from `pen_stack/rules/spec.py::export_spec`. Machine-readable form: `b
|
|
|
16
16
|
| `delivery.sequence_constraints` | soft_penalty | vehicle-specific construct hazards (lentiviral internal poly(A), AAV inverted-repeat/homopolymer, recombinogenic direct repeats, GC extremes) lower titre/yield | 10.1128/JVI.79.15.9933-9944.2005 | labeled heuristic, directional; not a titre predictor |
|
|
17
17
|
| `delivery.aav_packaging_margin` | soft_penalty | AAV packaging efficiency / titre drops sharply as the cargo approaches the capsid limit (computable from cargo_bp vs vehicle capacity), even while still under capacity (v4.0 delivery-oracle refinement) | 10.1089/hum.2010.245 | computable efficiency margin, directional; not a titre predictor |
|
|
18
18
|
| `delivery.immunogenicity_magnitude` | scope_flag | the MAGNITUDE of immunogenicity and the precise in-vivo tropism of a vehicle are not modeled | known-unknown; surfaced, never predicted (Invariant 2) | declared out of scope; never a hard reject dressed as physics |
|
|
19
|
+
| `compliance.germline_prohibition` | hard_reject | heritable human germline editing is out of scope for this somatic tool and broadly prohibited: a declared germline/heritable intent, a reproductive germline target cell, or an in-vivo edit of a germline-competent cell type is rejected (somatic/ex-vivo use of a germline-competent research line is in scope) | 10.1038/d41586-019-00726-5, 10.17226/24623 | a scope-of-use / regulatory legality bound, not a biosecurity-hazard signature and not an efficacy claim |
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"""PEN-STACK v3.0 - open infrastructure for genome writing."""
|
|
2
|
-
__version__ = "7.1.
|
|
2
|
+
__version__ = "7.1.4"
|
|
@@ -11,6 +11,7 @@ YAML record + (if new) one evaluator here, never scattered ``if`` checks in the
|
|
|
11
11
|
"""
|
|
12
12
|
from __future__ import annotations
|
|
13
13
|
|
|
14
|
+
import re
|
|
14
15
|
from collections.abc import Callable
|
|
15
16
|
|
|
16
17
|
from pen_stack.rules.schema import Design, Rule, RuleResult
|
|
@@ -204,6 +205,95 @@ def delivery_immunogenicity_scope(design: Design, rule: Rule) -> RuleResult:
|
|
|
204
205
|
"(declared out of scope, never predicted)")
|
|
205
206
|
|
|
206
207
|
|
|
208
|
+
# --------------------------------------------------------------------------------------------------
|
|
209
|
+
# compliance / scope-of-use legality (v7.1.4): heritable human germline editing is out of scope + prohibited
|
|
210
|
+
# --------------------------------------------------------------------------------------------------
|
|
211
|
+
# A term in declared free text counts only if it is NOT inside a NEGATED span, so a somatic design that says
|
|
212
|
+
# "no germline transmission", "not heritable", "somatic, not germline", or "NOT for reproduction or implantation"
|
|
213
|
+
# (a distributed negation over a list) does not false-fire on the negated word. A negator opens a span that runs
|
|
214
|
+
# across list connectors (or / and / ,) until a clause break (. ; but however yet) or ~60 chars.
|
|
215
|
+
_NEGATOR = re.compile(r"\b(not|non|no|never|without|isn'?t|aren'?t|rather than|as opposed to)\b")
|
|
216
|
+
_CLAUSE_BREAK = re.compile(r"[;.]|\bbut\b|\bhowever\b|\byet\b|\bexcept\b")
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
def _negated_spans(text: str) -> list[tuple[int, int]]:
|
|
220
|
+
spans = []
|
|
221
|
+
for m in _NEGATOR.finditer(text):
|
|
222
|
+
rest = text[m.end():m.end() + 60]
|
|
223
|
+
brk = _CLAUSE_BREAK.search(rest)
|
|
224
|
+
spans.append((m.start(), m.end() + (brk.start() if brk else len(rest))))
|
|
225
|
+
return spans
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
def _intent_present(term: str, text: str, spans: list[tuple[int, int]]) -> bool:
|
|
229
|
+
t = str(term or "").strip().lower()
|
|
230
|
+
if not t:
|
|
231
|
+
return False
|
|
232
|
+
idx = text.find(t)
|
|
233
|
+
while idx != -1:
|
|
234
|
+
if not any(s <= idx < e for s, e in spans):
|
|
235
|
+
return True # a non-negated occurrence
|
|
236
|
+
idx = text.find(t, idx + 1)
|
|
237
|
+
return False
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
@evaluator("germline_prohibition")
|
|
241
|
+
def germline_prohibition(design: Design, rule: Rule) -> RuleResult:
|
|
242
|
+
"""Hard legality reject for a heritable / germline edit. Fires on (a) a reproductive germline TARGET cell
|
|
243
|
+
(embryo/zygote/oocyte/sperm/gamete - structured, unconditional), (b) a declared REPRODUCTIVE-USE intent
|
|
244
|
+
(gametes / assisted reproduction / implantation / 'for reproduction'), (c) a declared HERITABLE intent
|
|
245
|
+
(germline / heritable / transmitted to offspring), or (d) a germline-COMPETENT cell type (hESC/iPSC) in a
|
|
246
|
+
heritable context (in vivo, or a reproductive/heritable intent). The free-text intent matches are NEGATION-
|
|
247
|
+
aware, so a SOMATIC design that explicitly says 'somatic, not germline' / 'no germline transmission' / 'not
|
|
248
|
+
heritable' is NOT false-flagged, and an ex-vivo somatic use of a germline-competent research line stays in
|
|
249
|
+
scope. The screen reads the declared design artifact only (not any free-text justification)."""
|
|
250
|
+
extra = design.model_extra or {}
|
|
251
|
+
|
|
252
|
+
def _norm(x) -> str:
|
|
253
|
+
return str(x or "").strip().lower()
|
|
254
|
+
|
|
255
|
+
text = " ".join(_norm(x) for x in (design.edit_intent, extra.get("cargo_function"),
|
|
256
|
+
extra.get("goal_function"), extra.get("function_annotation"),
|
|
257
|
+
extra.get("notes")) if x)
|
|
258
|
+
ct = _norm(design.cell_type)
|
|
259
|
+
in_vivo = bool(extra.get("in_vivo")) and _norm(extra.get("in_vivo")) not in ("false", "0", "no")
|
|
260
|
+
p = rule.param
|
|
261
|
+
|
|
262
|
+
spans = _negated_spans(text)
|
|
263
|
+
repro_ct = [c for c in p.get("germline_cell_types", []) if _norm(c) in ct]
|
|
264
|
+
competent_ct = [c for c in p.get("germline_competent_cell_types", []) if _norm(c) in ct]
|
|
265
|
+
repro_intent = [t for t in p.get("reproductive_intent_terms", []) if _intent_present(_norm(t), text, spans)]
|
|
266
|
+
heritable = [t for t in p.get("heritable_terms", []) if _intent_present(_norm(t), text, spans)]
|
|
267
|
+
|
|
268
|
+
triggers = []
|
|
269
|
+
if repro_ct:
|
|
270
|
+
triggers.append(f"a reproductive germline target cell ('{repro_ct[0]}')")
|
|
271
|
+
if repro_intent:
|
|
272
|
+
triggers.append(f"a declared reproductive-use intent ('{repro_intent[0]}')")
|
|
273
|
+
if heritable:
|
|
274
|
+
triggers.append(f"a declared heritable/germline-editing intent ('{heritable[0]}')")
|
|
275
|
+
if competent_ct and (in_vivo or repro_intent or heritable):
|
|
276
|
+
ctx = "in vivo" if in_vivo else (repro_intent or heritable)[0]
|
|
277
|
+
triggers.append(f"a germline-competent cell type ('{competent_ct[0]}') edited in a heritable context "
|
|
278
|
+
f"('{ctx}')")
|
|
279
|
+
if triggers:
|
|
280
|
+
# de-duplicate while preserving order, then report
|
|
281
|
+
seen, uniq = set(), []
|
|
282
|
+
for t in triggers:
|
|
283
|
+
if t not in seen:
|
|
284
|
+
seen.add(t)
|
|
285
|
+
uniq.append(t)
|
|
286
|
+
return _result(rule, "violate",
|
|
287
|
+
"heritable human germline editing is out of scope for this somatic tool and is broadly "
|
|
288
|
+
"prohibited (international moratorium): " + "; ".join(uniq)
|
|
289
|
+
+ ". Restrict to somatic editing (ex vivo, or a somatic cell type / somatic context).")
|
|
290
|
+
note = ""
|
|
291
|
+
if competent_ct:
|
|
292
|
+
note = (f" (cell type '{competent_ct[0]}' is germline-competent; somatic/ex-vivo editing of it is in "
|
|
293
|
+
"scope, but an in-vivo or reproductive heritable edit would not be)")
|
|
294
|
+
return _result(rule, "pass", "no heritable/germline-editing intent or germline target declared" + note)
|
|
295
|
+
|
|
296
|
+
|
|
207
297
|
# --------------------------------------------------------------------------------------------------
|
|
208
298
|
# multiplex translocation (delegates to planner.multiplex, soft penalty)
|
|
209
299
|
# --------------------------------------------------------------------------------------------------
|
|
@@ -10,7 +10,7 @@ from pen_stack._resources import resource
|
|
|
10
10
|
from pen_stack.rules.schema import Rule, Ruleset
|
|
11
11
|
|
|
12
12
|
RULES_VERSION = "1.0"
|
|
13
|
-
_CATEGORIES = ("reachability", "fold", "payload", "multiplex", "delivery")
|
|
13
|
+
_CATEGORIES = ("reachability", "fold", "payload", "multiplex", "delivery", "compliance")
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
@lru_cache(maxsize=1)
|
|
@@ -18,7 +18,7 @@ from pydantic import BaseModel, Field
|
|
|
18
18
|
|
|
19
19
|
RuleKind = Literal["hard_reject", "soft_penalty", "scope_flag"]
|
|
20
20
|
RuleStatus = Literal["pass", "violate", "flag", "scope", "not_applicable"]
|
|
21
|
-
RuleCategory = Literal["reachability", "fold", "payload", "multiplex", "delivery"]
|
|
21
|
+
RuleCategory = Literal["reachability", "fold", "payload", "multiplex", "delivery", "compliance"]
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
class Rule(BaseModel):
|
|
@@ -88,6 +88,13 @@ def _repair_for_violation(d: Design, rule_id: str) -> dict[str, Any] | None:
|
|
|
88
88
|
return {"text": "the writer cannot reach the target as specified; declare a pre-installed landing pad "
|
|
89
89
|
"(installed_att) or choose a writer family whose target element is present.",
|
|
90
90
|
"repair": {"field": "installed_att", "set_to": True}}
|
|
91
|
+
if rule_id == "compliance.germline_prohibition":
|
|
92
|
+
return {"text": "this is a heritable / germline edit, which is out of scope for this somatic-editing "
|
|
93
|
+
"tool and is broadly prohibited (international moratorium); restrict to SOMATIC editing - "
|
|
94
|
+
"move to ex vivo (in_vivo = false) and/or a somatic cell type (e.g. hepatocytes / HepG2, "
|
|
95
|
+
"HSPCs), and drop any germline/heritable intent. (Not auto-repairable: a germline edit is "
|
|
96
|
+
"a change of intent, not a field fix.)",
|
|
97
|
+
"repair": None}
|
|
91
98
|
return None
|
|
92
99
|
|
|
93
100
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pen-stack
|
|
3
|
-
Version: 7.1.
|
|
3
|
+
Version: 7.1.4
|
|
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
|
|
@@ -63,6 +63,7 @@ configs/expression/promoters.yaml
|
|
|
63
63
|
configs/oracles/execution.yaml
|
|
64
64
|
configs/oracles/reliability.yaml
|
|
65
65
|
configs/oracles/scope_cards.yaml
|
|
66
|
+
configs/rules/compliance.yaml
|
|
66
67
|
configs/rules/delivery.yaml
|
|
67
68
|
configs/rules/fold.yaml
|
|
68
69
|
configs/rules/multiplex.yaml
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pen-stack"
|
|
7
|
-
version = "7.1.
|
|
7
|
+
version = "7.1.4"
|
|
8
8
|
description = "Open infrastructure for genome writing: the Writable Genome atlas, the Writer Atlas, and the Write Planner."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|