Skip to content

Loop 75: Phase F F5 — Safe-Publication Filter - #760

Merged
cschanhniem merged 1 commit into
mainfrom
feat/loop-75-safe-publication-filter
Jul 9, 2026
Merged

cschanhniem merged 1 commit into
mainfrom
feat/loop-75-safe-publication-filter

Conversation

@cschanhniem

Copy link
Copy Markdown
Collaborator

Change

Safe-publication filter (Phase F F5) — CLI that reads a candidate panel with safety metadata and checks each candidate against publication safety constraints before external release. FAIL-CLOSED: defaults to reject unless all checks pass.

Why

Phase F is about making failure useful. F5 closes a real safety gap: before any candidate panel or negative-result report is published, the filter ensures structural publication safety requirements are met (dry_lab_only attestation, proof_ladder_level ≤ 4, safety checks completed).

Checks

  • Global: dry_lab_only (must be true), proof_ladder_level (≤ 4), toxicity_screened, hemolysis_screened, dual_use_reviewed (all must be true)
  • Per-candidate: proof_ladder_level (≤ 4), with WARN at boundary (== 4)
  • Fail-closed: any check failure → exit code 1

Evidence

  • 33 tests: global checks (all pass, each failure path), candidate checks (valid, missing, too-high, boundary/warn), mixed results, summary counts, CLI exit codes (0/1/2), markdown output, example input round-trip

tests/evidence/test_safe_publication_filter.py .............. 33 passed


### Safety impact
Positive — this adds a structural gate against unsafe publication of dry-lab artifacts.

### Proof level
Level 1 (informational infrastructure). No claims about biological activity.

### Limitations
- Checks structural safety constraints, not scientific validity
- dry_lab_only attestation relies on generator honesty
- Proof ladder levels are self-reported
- Safety checks are computational, not biological

### Human review needed
No — infrastructure only, no claim changes, no release decisions.

Safe-publication filter: CLI that reads candidate panel data with safety
metadata and checks each candidate against publication safety constraints
before external release. FAIL-CLOSED: defaults to reject unless all checks
pass.

Checks:
- dry_lab_only must be true
- global proof_ladder_level <= 4
- toxicity_screened, hemolysis_screened, dual_use_reviewed all true
- per-candidate proof_ladder_level <= 4

Changes:
- scripts/safe_publication_filter.py (F5) — standalone CLI
- schemas/safe_publication_filter.schema.json (F5) — output JSON Schema
- examples/safe_publication_filter_example_input.json (F5) — toy input
- tests/evidence/test_safe_publication_filter.py — 33 tests
- Makefile — safe-publication-filter target
- docs/evidence/METRICS_CURRENT.md — v0.5.76 changelog
- docs/research/ROADMAP.md — Loop 75 entry
- tests/test_test_count_regression.py — baseline 2758
@cschanhniem
cschanhniem merged commit 8434fab into main Jul 9, 2026
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant