Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.PHONY: help demo test lint ci clean bench-leakage bench-multi-negatives bench-baseline bench-hidden-active bench-cluster-split bench-expert-ablation bench-expert-ablation-500 bench-selectivity bench-feature-decomp bench-gate bench-easy-baseline bench-charge-matched bench-order-dependent bench-precision-at-k bench-per-family bench-simulation-ablation bench-simulation-ablation-within-amp simulation-gate bench-strategy-compare regenerate-all generate phase3 pilot validate-scoring validate-scoring-phase3 validate-scoring-strict external-pilot pilot-confident presynth-qc gold-standard diversity synthesis-order novelty-broad external-consensus questionnaire gate-check ip-report benchmark-card wave0-5-gate-check wave0-5-novelty-audit wave0-5-novelty-audit-v2 wave0-5-panel wave0-5-evidence wave0-5-fill-external wave0-5b-generate wave0-5b-filter recalibration-engine recalibration-engine-dry-run validate-policy-version generate-synthetic-lab-results bump-policy-version generate-review-packet failed-candidate-report safe-publication-filter classify-negative-informativeness validate-rejection-events negative-result-dashboard calibration-audit calibration-audit-example calibration-overfit-check result-quality-filter synthetic-result-policy-check calibration-decision-checklist calibration-rollback-plan simulation-registry validate-simulation-result-schema simulation-baseline-check adapter-gate-check simulation-provenance simulation-ensemble-check simulation-ci-report simulation-deprecation-check simulation-scope-check simulation-evidence-packet artifact-version candidate-manifest artifact-changelog integration-check adapter-author-check license-check artifact-compat-check contribution-check adoption-scorecard release-gate-check decision-log release-request-check coi-check
.PHONY: help demo test lint ci clean bench-leakage bench-multi-negatives bench-baseline bench-hidden-active bench-cluster-split bench-expert-ablation bench-expert-ablation-500 bench-selectivity bench-feature-decomp bench-gate bench-easy-baseline bench-charge-matched bench-order-dependent bench-precision-at-k bench-per-family bench-simulation-ablation bench-simulation-ablation-within-amp simulation-gate bench-strategy-compare regenerate-all generate phase3 pilot validate-scoring validate-scoring-phase3 validate-scoring-strict external-pilot pilot-confident presynth-qc gold-standard diversity synthesis-order novelty-broad external-consensus questionnaire gate-check ip-report benchmark-card wave0-5-gate-check wave0-5-novelty-audit wave0-5-novelty-audit-v2 wave0-5-panel wave0-5-evidence wave0-5-fill-external wave0-5b-generate wave0-5b-filter recalibration-engine recalibration-engine-dry-run validate-policy-version generate-synthetic-lab-results bump-policy-version generate-review-packet failed-candidate-report safe-publication-filter classify-negative-informativeness validate-rejection-events negative-result-dashboard calibration-audit calibration-audit-example calibration-overfit-check result-quality-filter synthetic-result-policy-check calibration-decision-checklist calibration-rollback-plan simulation-registry validate-simulation-result-schema simulation-baseline-check adapter-gate-check simulation-provenance simulation-ensemble-check simulation-ci-report simulation-deprecation-check simulation-scope-check simulation-evidence-packet artifact-version candidate-manifest artifact-changelog integration-check adapter-author-check license-check artifact-compat-check contribution-check adoption-scorecard release-gate-check decision-log release-request-check coi-check rotation-plan-check rotation-plan-check

PYTHON := $(shell [ -f .venv/bin/python ] && echo .venv/bin/python || echo python3)
PYTEST := $(shell [ -f .venv/bin/pytest ] && echo .venv/bin/pytest || echo pytest)
Expand Down Expand Up @@ -855,3 +855,8 @@ coi-check:
.venv/bin/openamp-foundry coi-check \
--disclosure-json '{"disclosure_id":"COI-2026-001","disclosure_type":"reviewer","subject":"maintainer","related_artifact":"REL-2026-001","relationship_type":"none","description":"","disclosure_date":"2026-07-09","recusal_required":false,"reviewer":"lead-maintainer","review_status":"acknowledged"}'
@echo "COI check complete."

rotation-plan-check:
.venv/bin/openamp-foundry rotation-plan-check \
--plan-json '{"entries":[{"github_handle":"maintainer","role":"primary_maintainer","backup_handle":"backup-maintainer","responsibilities":["releases","safety-policy","final-approvals"],"status":"active"},{"github_handle":"backup-maintainer","role":"secondary_maintainer","backup_handle":"maintainer","responsibilities":["day-to-day-reviews","issue-triage"],"status":"active"}]}'
@echo "Rotation plan check complete."
5 changes: 3 additions & 2 deletions docs/evidence/METRICS_CURRENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ Machine-readable snapshot: `outputs/metrics_snapshot.json` regenerated with `mak
> **Purpose:** One authoritative table of current pipeline metrics. If any doc disagrees
> with this file, this file wins. Updated whenever benchmark/benchmark config changes.
>
> **Last updated:** 2026-07-09 (Phase J J4 — COI disclosure template — v0.7.2)
> **Last updated:** 2026-07-09 (Phase J J5 — maintainer rotation plan — v0.7.3)
> **New in v0.7.3:** Maintainer rotation plan (J5 — Loop 113) — `docs/governance/MAINTAINER_ROTATION_PLAN.md` with purpose, current maintainers table (3 entries covering primary, secondary, external_advisor), role definitions (4 roles: primary_maintainer, secondary_maintainer, external_advisor, contributor), bus-factor assessment (target >=2 for every critical function, CI maintenance and domain expertise currently at 1), rotation schedule (every 6 months), onboarding and offboarding checklists, linked policies. `src/openamp_foundry/governance/maintainer_rotation.py` with `MaintainerEntry` dataclass (6 fields: github_handle, role, backup_handle, responsibilities, status, dry_lab_only), `RotationPlanValidationResult` dataclass (7 fields: passed, errors, warnings, maintainer_count, critical_role_coverage, bus_factor_sufficient, dry_lab_only), `VALID_ROLES` (4: primary_maintainer, secondary_maintainer, external_advisor, contributor), `CRITICAL_ROLES` (2: primary_maintainer, secondary_maintainer), `VALID_STATUSES` (4: active, on_leave, emeritus, departing), `validate_maintainer_entry()` (6 checks), `validate_rotation_plan()` (aggregates entry validation + bus-factor coverage: missing critical role is error, single coverage is warning), `validate_rotation_plan_dict()` (dict input with missing-entries-fields guard). CLI (`openamp-foundry rotation-plan-check`) with `--plan-json`, `--format text|json`. `make rotation-plan-check` target. 21 tests. Dry-lab only. Project durability is now machine-validated.
> **New in v0.7.2:** COI disclosure template (J4 — Loop 112) — `docs/governance/COI_DISCLOSURE_TEMPLATE.md` with structured COI disclosure template (purpose, fill-in-the-blank template with 10 fields: Disclosure ID, disclosure type (reviewer|contributor|maintainer|external_advisor), subject, related artifact, relationship type (financial|institutional|competitive|personal|none), description (conditional), date, recusal required, reviewer, review status (pending|acknowledged|resolved); when to disclose section covering financial/institutional/competitive/personal relationships; process with machine validation and escalation; linked policies). `src/openamp_foundry/governance/coi_disclosure.py` with `COIDisclosure` dataclass (10 fields), `COIValidationResult` dataclass (6 fields, dry_lab_only=True), `VALID_DISCLOSURE_TYPES` (4: contributor, external_advisor, maintainer, reviewer), `VALID_RELATIONSHIP_TYPES` (5: competitive, financial, institutional, none, personal), `VALID_REVIEW_STATUSES` (3: acknowledged, pending, resolved), `validate_coi_disclosure()` (10 checks including disclosure_id COI- prefix, valid disclosure_type, non-empty subject/related_artifact, valid relationship_type, description required unless none, YYYY-MM-DD date, non-empty reviewer, valid review_status, dry_lab_only must be True; financial without recusal warning), `validate_coi_dict()` (dict input with 10 required fields guard, missing fields returns passed=False early). CLI (`openamp-foundry coi-check`) with `--disclosure-json`, `--format text|json`. `make coi-check` target. 20 tests. Dry-lab only. COI disclosures now have a validated structure that builds institutional trust.
> **New in v0.7.1:** Release request template (J3 — Loop 111) — `docs/governance/RELEASE_REQUEST_TEMPLATE.md` with structured release request template (purpose, fill-in-the-blank template with 17 fields: Release ID, release type, artifact ID/version, requestor name/institution, request date, evidence level 1-6, dry_lab_only, safety_review_status, benchmark_summary, known_limitations, intended_use, data_license, human_reviewer, review_class, approval_status; review criteria with 8 checks; process with classes A-D timelines and escalation path). `src/openamp_foundry/governance/release_request.py` with `ReleaseRequest` dataclass (17 fields), `ReleaseRequestValidationResult` dataclass (6 fields, dry_lab_only=True), `VALID_RELEASE_TYPES` (5), `VALID_SAFETY_STATUSES` (3), `VALID_INTENDED_USES` (4), `VALID_APPROVAL_STATUSES` (4), `VALID_REVIEW_CLASSES` (4), `validate_release_request()` (17 checks including dry_lab_only+evidence_level>4 error, public+safety_pending error, model+review_class warning), `validate_request_dict()` (dict input with missing-fields guard). CLI (`openamp-foundry release-request-check`) with `--request-json`, `--format text|json`. `make release-request-check` target. 25 tests. **3516 total.** Formal release requests now have a validated structure before entering human review.
> **New in v0.7.0:** Governance decision log index (J2 — Loop 110, Phase J milestone) — `docs/governance/DECISION_LOG.md` with structured decision log (purpose, decision index with 8 entries GOV-001 through GOV-008 covering safety/benchmark/release/evidence/data/adapter/contribution/docs scopes, how to add entries, linked policies). `src/openamp_foundry/governance/decision_log.py` with `VALID_SCOPES` (8 entries: safety, benchmark, release, evidence, data, adapter, contribution, docs), `VALID_STATUSES` (4 entries: active, superseded, under_review, proposed), `VALID_REVIEW_CLASSES` (4 entries: A, B, C, D), `GovernanceDecision` dataclass (8 fields: decision_id, date, scope, decision, status, rationale, review_class, dry_lab_only=True), `DecisionValidationResult` dataclass (5 fields: decision_id, passed, errors, warnings, dry_lab_only=True), `GOVERNANCE_DECISIONS` list (8 entries: GOV-001 through GOV-008), `validate_governance_decision()` (9 checks: decision_id format, date format, valid scope, non-empty decision, valid status, non-empty rationale, valid review_class, dry_lab_only must be True, superseded warning), `validate_all_decisions()` (aggregates total/passed/failed/all_passed/results/dry_lab_only), `get_decisions_by_scope()` (filters by scope), `get_decisions_by_status()` (filters by status). CLI (`openamp-foundry decision-log`) with `--validate`, `--scope`, `--format text|json`. `make decision-log` target. 27 tests. **3505 total.** **Phase J milestone: v0.7.0** — governance decisions are now discoverable and machine-validated.
Expand Down Expand Up @@ -100,7 +101,7 @@ Machine-readable snapshot: `outputs/metrics_snapshot.json` regenerated with `mak
> **New in v0.5.31:** Added dipeptide-order features for sequence-order awareness. `dipeptide_order_score` achieves AUROC 0.7861 on AMP-vs-scrambled discrimination — the strongest order-dependent feature in the pipeline. Only 7/31 features survive scrambling (amphipathicity/helix-wheel + dipeptide). All composition features are purely position-independent (exactly 0.5000 AUROC on scrambled test).
> **New in v0.5.30:** Easy baseline benchmark added — charge density alone (AUROC 0.8166) outperforms the full pipeline ensemble (0.7792) on AMP-vs-Swiss-Prot-decoy discrimination. Honest finding documented: expected because pipeline optimizes for safety, not raw discrimination.
> **New in v0.5.29:** Expanded benchmark to 500 AMPs + 500 composition-matched decoys (n=1000). AUROC 0.7792 (CI₉₅: 0.7505–0.8065) confirms signal generalizes. Cluster-aware CI: 0.746–0.8102. Representative AUROC: 0.778. Standard benchmark (n=191) retained for backward comparison.
> **Pipeline version:** v0.7.2 (J4 — COI disclosure template)
> **Pipeline version:** v0.7.3 (J5 — maintainer rotation plan)
> **Branch:** main

---
Expand Down
120 changes: 120 additions & 0 deletions docs/governance/MAINTAINER_ROTATION_PLAN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# Maintainer Rotation and Bus-Factor Plan

## Purpose

OpenAMP Foundry's project durability depends on **bus-factor coverage** — the number of maintainers who must be lost before project operations stop. Every critical function must have at least two capable people.

This document:

- Lists current maintainers, their roles, and their backups.
- Defines what each role requires and is responsible for.
- Assesses bus-factor risk for every critical function (target: >=2).
- Describes the rotation schedule for reviewing assignments.
- Provides onboarding and offboarding checklists.

**Who should read this:** all current maintainers, contributors considering a maintainer role, and downstream consumers who need to know the project is durable.

**How to use:** Keep this document in the repo. Update it whenever a maintainer joins, leaves, or changes responsibilities. Review at least every 6 months.

## Current Maintainers

| GitHub handle | Role | Backup | Responsibilities |
|---|---|---|---|
| `lead-maintainer` | primary_maintainer | `backup-maintainer` | Release approvals, safety policy ownership, final PR approvals, phase planning, external liaison |
| `backup-maintainer` | secondary_maintainer | `lead-maintainer` | Day-to-day PR reviews, issue triage, CI maintenance, onboarding new contributors |
| `domain-advisor` | external_advisor | — | Domain-expertise consultation, D-class review participation, benchmark design input |

## Role Definitions

### primary_maintainer

- Owns the release process and safety policy.
- Provides final approval on PRs after at least one other review.
- Represents the project externally (partner discussions, governance).
- **Requires:** full commit access, safety-policy familiarity, release-checklist fluency, at least 6 months as secondary.

### secondary_maintainer

- Covers for primary during absences (up to full release authority on pre-planned leave).
- Owns day-to-day PR review queue and issue triage.
- Maintains CI, documentation, and onboarding processes.
- **Requires:** PR review experience, CI troubleshooting skills, governance-doc familiarity.

### external_advisor

- Provides domain expertise (antimicrobial peptide biology, assay design, computational chemistry).
- Participates in D-class (safety-significant) reviews.
- Does not hold commit access or release authority.
- **Requires:** relevant domain expertise; no commit access needed.

### contributor

- Submits PRs, participates in reviews, reports issues.
- Does not hold release keys or have offboarding responsibilities.
- **Requires:** familiarity with contribution guide and safety policy.

## Bus-Factor Assessment

| Function | Responsible | Backup | Bus factor |
|---|---|---|---|
| Release approval | `lead-maintainer` | `backup-maintainer` | 2 |
| Safety policy | `lead-maintainer` | `backup-maintainer` | 2 |
| PR review (final) | `lead-maintainer` | `backup-maintainer` | 2 |
| PR review (day-to-day) | `backup-maintainer` | `lead-maintainer` | 2 |
| Issue triage | `backup-maintainer` | `lead-maintainer` | 2 |
| CI maintenance | `backup-maintainer` | — | **1** |
| Domain expertise | `domain-advisor` | — | **1** |

**Target:** >= 2 for every critical function. CI maintenance and domain expertise currently have bus-factor 1 and should be improved when new maintainers join.

## Rotation Schedule

Roles are reviewed every **6 months** (March and September). The review process:

1. Primary sends a rotation-review thread to the maintainer mailing list.
2. Each maintainer confirms they want to continue in their current role or proposes a change.
3. Changes are documented in this file as a PR.
4. If the primary maintainer steps down, the secondary takes over and a new secondary is recruited.

Emergency handoffs (unexpected departure) follow the backup chain immediately. The offboarding checklist (below) must be completed within 14 days.

## Onboarding Checklist

A new maintainer must complete the following before taking a role:

- [ ] Read `docs/governance/GOVERNANCE.md`.
- [ ] Read `docs/governance/RELEASE_CHECKLIST.md`.
- [ ] Read `docs/governance/COI_DISCLOSURE_TEMPLATE.md`.
- [ ] Read `docs/governance/DECISION_LOG.md`.
- [ ] Read `docs/governance/RELEASE_REQUEST_TEMPLATE.md`.
- [ ] Read `docs/governance/MAINTAINER_ROTATION_PLAN.md` (this document).
- [ ] Read `SAFETY.md`.
- [ ] Read `RESPONSIBLE_USE.md`.
- [ ] Confirm they have read and agree to the project's safety and responsible-use policies.
- [ ] Add their GitHub handle, role, and backup to the Current Maintainers table in this file.
- [ ] Open a PR, get approval from at least one existing maintainer.

## Offboarding Checklist

A departing maintainer must:

- [ ] Notify the maintainer mailing list at least 14 days before departure (or as soon as practical for emergencies).
- [ ] Rotate any shared secrets, SSH keys, or service credentials they held.
- [ ] Document their current in-progress work (open PRs, issues assigned, CI state).
- [ ] Update the Current Maintainers table: set their status to "departing" and remove or reassign their responsibilities.
- [ ] Transfer any domain-specific knowledge to their backup (if one exists).
- [ ] Ensure this file is updated before they lose access.

## Scope

This document is a governance artifact, not a legal determination. Maintainer roles are project responsibilities, not employment relationships. Bus-factor assessment is a project-durability estimate, not a security guarantee.

## Linked Policies

- `docs/governance/GOVERNANCE.md`
- `docs/governance/RELEASE_CHECKLIST.md`
- `docs/governance/COI_DISCLOSURE_TEMPLATE.md`
- `docs/governance/DECISION_LOG.md`
- `docs/governance/RELEASE_REQUEST_TEMPLATE.md`
- `SAFETY.md`
- `RESPONSIBLE_USE.md`
Loading
Loading