Start from docs/README.md, then use the relevant domain hub. For scientific
work, read the current truth source docs/evidence/METRICS_CURRENT.md, then
docs/research/ROADMAP.md, then AGENTS.md. Treat computational scores as triage only.
Do not describe candidates as active, safe, therapeutic, or validated without
qualified lab evidence.
src/openamp_foundry/pipeline.py: rank candidates and emit evidence.src/openamp_foundry/scoring/: activity, safety, hemolysis, novelty, synthesis, expert, and rich selectivity scorers.src/openamp_foundry/selection/: ensemble/expert ranking, diversity, pilot panel selection, and structural-class floors.src/openamp_foundry/benchmark/plusscripts/benchmarks/: benchmark honesty checks and regression entrypoints.src/openamp_foundry/calibration/: lab-result intake, gate, and proposal-only recalibration.
flowchart TD
A["Candidate sequences"] --> B["Validate + feature extraction"]
B --> C["Independent scorers"]
C --> D["Ranking + diversity selection"]
D --> E["Evidence certificates"]
E --> F["Human review"]
F --> G["Qualified external assay"]
G --> H["Calibration intake + gate"]
flowchart LR
Data["data"] --> Pipeline["pipeline"]
Features["features"] --> Scoring["scoring"]
Scoring --> Selection["selection"]
Selection --> Evidence["evidence"]
Evidence --> Reports["reports"]
Reports --> Calibration["calibration"]
Benchmark["benchmark"] --> Scoring
Benchmark --> Selection
sequenceDiagram
participant Agent
participant CLI
participant Scoring
participant Selection
participant Evidence
Agent->>CLI: rank / pilot-panel
CLI->>Scoring: compute raw scores
CLI->>Selection: rank, diversify, optional class floor
Selection-->>CLI: selected candidates
CLI->>Evidence: write certificates
Evidence-->>Agent: reviewable artifacts
- Read
AGENTS.md,CLAUDE.md,MISSION.md, anddocs/evidence/METRICS_CURRENT.md. - Treat
docs/evidence/METRICS_CURRENT.mdplusoutputs/metrics_snapshot.jsonas the current benchmark truth when docs disagree. - For the required disconfirming pass, use
docs/evidence/DISCONFIRMING_TEST_RECORD_GUIDE.mdwhen recording a challenge. - Preserve the safety boundary: dry-lab scoring and evidence only. No wet-lab protocols, pathogen enablement, toxicity-maximizing objectives, or biological proof claims.
make bench-500: broad AMP-vs-decoy discrimination.
Phase AC records are two-layered: disconfirming_test_record.py stores one
attempt to break a claim, while phase_ac_disconfirming_gate.py aggregates
those records. A refuted record requires an explicit claim downgrade and an
inconclusive record requires investigation. An empty aggregate is
not_established, not a pass. Run
openamp-foundry phase-ac-disconfirming-gate-check --entry-json ... or
make phase-ac-disconfirming-gate-check to exercise the aggregate workflow;
the command exits nonzero until the aggregate is verified. Neither artifact is
biological validation.
The Phase AA reproducibility gate is also available as a normal review-loop
command: openamp-foundry phase-aa-reproducibility-gate-check --entry-json ...
or make phase-aa-reproducibility-gate-check. It returns success only when
RMC, DCR, CFP, and SBW artifact IDs are all present. This is a structural
provenance check, not proof that the underlying run is scientifically correct
or biologically valid.
External-result intake is also fail-closed at the review boundary. Use the
structured loader/report fields invalid_lab_result_files and
input_validation_status to preserve schema-invalid returns; the
calibration-intake command exits nonzero and the recalibration gate refuses
to proceed while any invalid file is excluded. Missing or non-directory result
paths return an input error before a report is written. An existing empty
directory is the only valid zero-result state. Duplicate result IDs and
duplicate panel candidate IDs are also preserved as input_integrity_issues and
block clean intake. These controls catch incomplete or ambiguous input, not
assay-quality or biological-validity problems. Control-failed assay observations
remain visible for audit but are excluded from per-assay actual predicates,
cohort metrics, and interpretable per-candidate outcome flags. Raw outcome fields
and failed-result IDs remain available for audit; failed controls still block
recalibration.
make bench-easy-baseline: trivial length/charge baselines.make bench-charge-matched: adversarial check that removes charge-density separation before comparing ensemble vs charge alone.make bench-per-family: structural-class blind spots.make bench-selectivity: hemolytic-vs-selective AMP ranking.make metrics-snapshot: regenerate the machine-readable source of truth.
The charge-matched decoy benchmark is an honesty check, not a win claim. Correct
pH-7.4 charge-density matching remains imperfect with the current decoy pool
(mean_abs_charge_density_delta=0.1296), and charge density still beats the
ensemble (0.8166 vs 0.7792). Treat raw AMP-vs-decoy AUROC as charge-inflated
until a better charge-balanced negative set exists.