diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ba3265bf..1f54dcc5 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -21,7 +21,7 @@ docs/review/PRE_REGISTERED_PILOT_TEMPLATE.md @Open-Problem-Lab/maintainers # Benchmarks, calibration, data, and model release need responsible review. docs/evidence/BENCHMARK_GOVERNANCE.md @Open-Problem-Lab/maintainers -docs/CALIBRATION_POLICY.md @Open-Problem-Lab/maintainers -docs/DATA_GOVERNANCE.md @Open-Problem-Lab/maintainers -docs/MODEL_CARD_TEMPLATE.md @Open-Problem-Lab/maintainers +docs/evidence/CALIBRATION_POLICY.md @Open-Problem-Lab/maintainers +docs/trust/DATA_GOVERNANCE.md @Open-Problem-Lab/maintainers +docs/trust/MODEL_CARD_TEMPLATE.md @Open-Problem-Lab/maintainers configs/recalibration_policy.yaml @Open-Problem-Lab/maintainers diff --git a/.github/ISSUE_TEMPLATE/claim_review.md b/.github/ISSUE_TEMPLATE/claim_review.md index 5804835c..ec1051b4 100644 --- a/.github/ISSUE_TEMPLATE/claim_review.md +++ b/.github/ISSUE_TEMPLATE/claim_review.md @@ -60,7 +60,7 @@ body: attributes: label: Checks options: - - label: `docs/PROOF_LADDER.md` reviewed. + - label: `docs/evidence/PROOF_LADDER.md` reviewed. required: true - label: `docs/evidence/CLAIM_REVIEW_CHECKLIST.md` reviewed. required: true diff --git a/.github/ISSUE_TEMPLATE/data_contribution.md b/.github/ISSUE_TEMPLATE/data_contribution.md index feb24221..61ac8c50 100644 --- a/.github/ISSUE_TEMPLATE/data_contribution.md +++ b/.github/ISSUE_TEMPLATE/data_contribution.md @@ -7,7 +7,7 @@ body: - type: markdown attributes: value: | - Use this template for non-toy data contributions or dataset review. Read `DATA_LICENSE_NOTICE.md` and `docs/DATA_GOVERNANCE.md` first. + Use this template for non-toy data contributions or dataset review. Read `DATA_LICENSE_NOTICE.md` and `docs/trust/DATA_GOVERNANCE.md` first. - type: textarea id: dataset attributes: diff --git a/.github/ISSUE_TEMPLATE/model_release_review.md b/.github/ISSUE_TEMPLATE/model_release_review.md index 42ff1e9e..17a5f51a 100644 --- a/.github/ISSUE_TEMPLATE/model_release_review.md +++ b/.github/ISSUE_TEMPLATE/model_release_review.md @@ -82,8 +82,8 @@ body: - MODEL_RELEASE_POLICY.md - SAFETY.md - RESPONSIBLE_USE.md - - docs/MODEL_CARD_TEMPLATE.md - - docs/RELEASE_CHECKLIST.md + - docs/trust/MODEL_CARD_TEMPLATE.md + - docs/trust/RELEASE_CHECKLIST.md validations: required: true - type: checkboxes diff --git a/.github/ISSUE_TEMPLATE/safety_review.md b/.github/ISSUE_TEMPLATE/safety_review.md index df30184f..1ebd8b1e 100644 --- a/.github/ISSUE_TEMPLATE/safety_review.md +++ b/.github/ISSUE_TEMPLATE/safety_review.md @@ -45,7 +45,7 @@ body: - SAFETY.md - RESPONSIBLE_USE.md - MODEL_RELEASE_POLICY.md - - docs/PROOF_LADDER.md + - docs/evidence/PROOF_LADDER.md - docs/review/EXTERNAL_REVIEW_PACKET.md validations: required: true diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 36a5a5f0..06aa5cc4 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -37,7 +37,7 @@ See `docs/getting-started/MAINTAINER_GUIDE.md`. ## Claim discipline -- [ ] Claims are mapped to `docs/PROOF_LADDER.md` +- [ ] Claims are mapped to `docs/evidence/PROOF_LADDER.md` - [ ] Dry-lab outputs are not described as biological proof - [ ] No “AI discovered an antibiotic” / “drug candidate” / “safe” / “clinically useful” language unless evidence level supports it - [ ] Unsupported claims are explicitly listed or avoided diff --git a/AGENTS.md b/AGENTS.md index 4fc8fc80..a06cd1db 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -34,10 +34,10 @@ Before making nontrivial changes, agents should read: 2. [`SAFETY.md`](SAFETY.md) — safety policy. 3. [`RESPONSIBLE_USE.md`](RESPONSIBLE_USE.md) — allowed and disallowed uses. 4. [`docs/getting-started/AGENT_ONBOARDING.md`](docs/getting-started/AGENT_ONBOARDING.md) — task workflow. -5. [`docs/PROOF_LADDER.md`](docs/PROOF_LADDER.md) — claim levels. +5. [`docs/evidence/PROOF_LADDER.md`](docs/evidence/PROOF_LADDER.md) — claim levels. 6. [`docs/operations/HIGH_LEVERAGE_TASKS.md`](docs/operations/HIGH_LEVERAGE_TASKS.md) — task priority map. 7. [`docs/research/NEXT_100_PR_MAP.md`](docs/research/NEXT_100_PR_MAP.md) — PR-sized backlog. -8. [`docs/TRUST_CENTER.md`](docs/TRUST_CENTER.md) — trust architecture. +8. [`docs/trust/TRUST_CENTER.md`](docs/trust/TRUST_CENTER.md) — trust architecture. If these docs conflict, safety and claim discipline win. @@ -179,7 +179,7 @@ Agents must follow: - [`SAFETY.md`](SAFETY.md) - [`RESPONSIBLE_USE.md`](RESPONSIBLE_USE.md) - [`MODEL_RELEASE_POLICY.md`](MODEL_RELEASE_POLICY.md) -- [`docs/SAFETY_DOC_AUDIT.md`](docs/SAFETY_DOC_AUDIT.md) +- [`docs/trust/SAFETY_DOC_AUDIT.md`](docs/trust/SAFETY_DOC_AUDIT.md) ## Benchmark rule @@ -207,7 +207,7 @@ Agents must not present proxy models as validated biology. A virtual-assay module may affect ranking only when the documented gate allows it. -Use [`docs/VIRTUAL_ASSAY_SCOPE.md`](docs/VIRTUAL_ASSAY_SCOPE.md) and [`docs/evidence/SIMULATION_BENCHMARK.md`](docs/evidence/SIMULATION_BENCHMARK.md). +Use [`docs/evidence/VIRTUAL_ASSAY_SCOPE.md`](docs/evidence/VIRTUAL_ASSAY_SCOPE.md) and [`docs/evidence/SIMULATION_BENCHMARK.md`](docs/evidence/SIMULATION_BENCHMARK.md). ## Data and model rule @@ -218,9 +218,9 @@ Agents must not commit or release non-toy data, sensitive model artifacts, or ca Use: - [`DATA_LICENSE_NOTICE.md`](DATA_LICENSE_NOTICE.md) -- [`docs/DATA_GOVERNANCE.md`](docs/DATA_GOVERNANCE.md) +- [`docs/trust/DATA_GOVERNANCE.md`](docs/trust/DATA_GOVERNANCE.md) - [`MODEL_RELEASE_POLICY.md`](MODEL_RELEASE_POLICY.md) -- [`docs/MODEL_CARD_TEMPLATE.md`](docs/MODEL_CARD_TEMPLATE.md) +- [`docs/trust/MODEL_CARD_TEMPLATE.md`](docs/trust/MODEL_CARD_TEMPLATE.md) - [`docs/engineering/ARTIFACT_VERSIONING.md`](docs/engineering/ARTIFACT_VERSIONING.md) ## Reproducibility rule diff --git a/README.md b/README.md index 5738481d..005ae73d 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ The larger mission is more ambitious: > Build an open **wet-lab compression engine** for AMP discovery: a system that helps qualified scientists decide which small number of experiments are most worth running next, then learns from those outcomes. -The long-term infrastructure ambition is described in [`VISION.md`](VISION.md), [`GOAL.md`](GOAL.md), [`docs/OPEN_BIOTECH_STACK.md`](docs/OPEN_BIOTECH_STACK.md), [`docs/OPEN_INFRASTRUCTURE_MOAT.md`](docs/OPEN_INFRASTRUCTURE_MOAT.md), and [`docs/TRUST_CENTER.md`](docs/TRUST_CENTER.md). +The long-term infrastructure ambition is described in [`VISION.md`](VISION.md), [`GOAL.md`](GOAL.md), [`docs/research/OPEN_BIOTECH_STACK.md`](docs/research/OPEN_BIOTECH_STACK.md), [`docs/research/OPEN_INFRASTRUCTURE_MOAT.md`](docs/research/OPEN_INFRASTRUCTURE_MOAT.md), and [`docs/trust/TRUST_CENTER.md`](docs/trust/TRUST_CENTER.md). ## Start here @@ -20,13 +20,13 @@ The long-term infrastructure ambition is described in [`VISION.md`](VISION.md), |---|---|---| | New human contributor | [`docs/README.md`](docs/README.md) | [`docs/getting-started/FIRST_RUN_WALKTHROUGH.md`](docs/getting-started/FIRST_RUN_WALKTHROUGH.md), [`CONTRIBUTING.md`](CONTRIBUTING.md) | | AI agent | [`AGENTS.md`](AGENTS.md) | [`docs/getting-started/AGENT_ONBOARDING.md`](docs/getting-started/AGENT_ONBOARDING.md), [`docs/operations/HUMAN_AGENT_COLLABORATION.md`](docs/operations/HUMAN_AGENT_COLLABORATION.md) | -| Reviewer | [`docs/getting-started/REVIEWER_ONBOARDING.md`](docs/getting-started/REVIEWER_ONBOARDING.md) | [`docs/evidence/CLAIM_REVIEW_CHECKLIST.md`](docs/evidence/CLAIM_REVIEW_CHECKLIST.md), [`docs/RISK_REGISTER.md`](docs/RISK_REGISTER.md) | +| Reviewer | [`docs/getting-started/REVIEWER_ONBOARDING.md`](docs/getting-started/REVIEWER_ONBOARDING.md) | [`docs/evidence/CLAIM_REVIEW_CHECKLIST.md`](docs/evidence/CLAIM_REVIEW_CHECKLIST.md), [`docs/trust/RISK_REGISTER.md`](docs/trust/RISK_REGISTER.md) | | Computational scientist | [`docs/evidence/README.md`](docs/evidence/README.md) | [`docs/evidence/METRICS_CURRENT.md`](docs/evidence/METRICS_CURRENT.md), [`docs/evidence/BENCHMARKING.md`](docs/evidence/BENCHMARKING.md) | -| Data/schema/model contributor | [`docs/engineering/SCHEMA_REGISTRY.md`](docs/engineering/SCHEMA_REGISTRY.md) | [`docs/DATA_GOVERNANCE.md`](docs/DATA_GOVERNANCE.md), [`docs/engineering/ADAPTER_AUTHOR_GUIDE.md`](docs/engineering/ADAPTER_AUTHOR_GUIDE.md) | +| Data/schema/model contributor | [`docs/engineering/SCHEMA_REGISTRY.md`](docs/engineering/SCHEMA_REGISTRY.md) | [`docs/trust/DATA_GOVERNANCE.md`](docs/trust/DATA_GOVERNANCE.md), [`docs/engineering/ADAPTER_AUTHOR_GUIDE.md`](docs/engineering/ADAPTER_AUTHOR_GUIDE.md) | | Wet-lab/domain expert | [`docs/review/WET_LAB_HANDOFF.md`](docs/review/WET_LAB_HANDOFF.md) | [`docs/review/EXTERNAL_REVIEW_PACKET.md`](docs/review/EXTERNAL_REVIEW_PACKET.md), [`docs/review/PRE_REGISTERED_PILOT_TEMPLATE.md`](docs/review/PRE_REGISTERED_PILOT_TEMPLATE.md) | -| Safety reviewer | [`docs/TRUST_CENTER.md`](docs/TRUST_CENTER.md) | [`SAFETY.md`](SAFETY.md), [`SECURITY.md`](SECURITY.md) | -| Funder/institution | [`docs/OPEN_INFRASTRUCTURE_MOAT.md`](docs/OPEN_INFRASTRUCTURE_MOAT.md) | [`docs/ADOPTION_METRICS.md`](docs/ADOPTION_METRICS.md), [`GOVERNANCE.md`](GOVERNANCE.md) | -| Maintainer | [`GOVERNANCE.md`](GOVERNANCE.md) | [`docs/operations/SUSTAINABILITY_AND_BUS_FACTOR.md`](docs/operations/SUSTAINABILITY_AND_BUS_FACTOR.md), [`docs/RELEASE_CHECKLIST.md`](docs/RELEASE_CHECKLIST.md) | +| Safety reviewer | [`docs/trust/TRUST_CENTER.md`](docs/trust/TRUST_CENTER.md) | [`SAFETY.md`](SAFETY.md), [`SECURITY.md`](SECURITY.md) | +| Funder/institution | [`docs/research/OPEN_INFRASTRUCTURE_MOAT.md`](docs/research/OPEN_INFRASTRUCTURE_MOAT.md) | [`docs/research/ADOPTION_METRICS.md`](docs/research/ADOPTION_METRICS.md), [`GOVERNANCE.md`](GOVERNANCE.md) | +| Maintainer | [`GOVERNANCE.md`](GOVERNANCE.md) | [`docs/operations/SUSTAINABILITY_AND_BUS_FACTOR.md`](docs/operations/SUSTAINABILITY_AND_BUS_FACTOR.md), [`docs/trust/RELEASE_CHECKLIST.md`](docs/trust/RELEASE_CHECKLIST.md) | ## Why this repo exists @@ -157,37 +157,37 @@ openamp-foundry/ models/README.md # model directory rules docs/README.md # task-based documentation front door docs/PROJECT_INDEX.md # exhaustive document catalog - docs/TRUST_CENTER.md # safety/evidence/governance trust front door - docs/OPEN_INFRASTRUCTURE_MOAT.md # durable infrastructure thesis - docs/NUMBER_ONE_REPO_STANDARD.md # category-leader standard + docs/trust/TRUST_CENTER.md # safety/evidence/governance trust front door + docs/research/OPEN_INFRASTRUCTURE_MOAT.md # durable infrastructure thesis + docs/research/NUMBER_ONE_REPO_STANDARD.md # category-leader standard docs/getting-started/FIRST_RUN_WALKTHROUGH.md # first-run path docs/getting-started/COMMAND_SURFACE.md # command workflows and claim boundaries docs/engineering/SCHEMA_REGISTRY.md # schema and artifact registry docs/engineering/RUN_MANIFEST_STANDARD.md # provenance standard docs/engineering/ADAPTER_AUTHOR_GUIDE.md # safe adapter authoring - docs/RISK_REGISTER.md # major risks and mitigations + docs/trust/RISK_REGISTER.md # major risks and mitigations docs/operations/SUSTAINABILITY_AND_BUS_FACTOR.md # sustainability and bus-factor plan - docs/PUBLICATION_POLICY.md # public claims policy + docs/trust/PUBLICATION_POLICY.md # public claims policy docs/research/NEXT_100_PR_MAP.md # PR-sized roadmap docs/engineering/CI_AND_QUALITY_GATES.md # CI and quality gates docs/operations/HUMAN_AGENT_COLLABORATION.md # human-agent collaboration model docs/getting-started/REVIEWER_ONBOARDING.md # reviewer guide - docs/ADOPTION_METRICS.md # adoption metrics focused on trust + docs/research/ADOPTION_METRICS.md # adoption metrics focused on trust docs/operations/DECISION_RECORD_TEMPLATE.md # decision record template docs/getting-started/HUMAN_ONBOARDING.md # human contributor onboarding docs/getting-started/AGENT_ONBOARDING.md # agent task protocol - docs/PROOF_LADDER.md # evidence levels and claim ladder + docs/evidence/PROOF_LADDER.md # evidence levels and claim ladder docs/evidence/CLAIM_REVIEW_CHECKLIST.md # claim review checklist - docs/DATA_GOVERNANCE.md # data governance standard - docs/MODEL_CARD_TEMPLATE.md # model/adapter card template + docs/trust/DATA_GOVERNANCE.md # data governance standard + docs/trust/MODEL_CARD_TEMPLATE.md # model/adapter card template docs/engineering/ARTIFACT_VERSIONING.md # artifact compatibility policy - docs/RELEASE_CHECKLIST.md # release checklist + docs/trust/RELEASE_CHECKLIST.md # release checklist docs/evidence/BENCHMARKING.md # benchmark suite docs/evidence/BENCHMARK_GOVERNANCE.md # benchmark lifecycle and governance docs/evidence/METRICS_CURRENT.md # current benchmark summary - docs/CALIBRATION_POLICY.md # recalibration gate policy + docs/evidence/CALIBRATION_POLICY.md # recalibration gate policy docs/evidence/EVIDENCE_CERTIFICATE.md # candidate certificate spec - docs/VIRTUAL_ASSAY_SCOPE.md # virtual-assay scope and gates + docs/evidence/VIRTUAL_ASSAY_SCOPE.md # virtual-assay scope and gates docs/review/WET_LAB_HANDOFF.md # safe expert-review handoff guide examples/ # toy datasets only outputs/.gitkeep # generated files ignored by git diff --git a/docs/PROJECT_INDEX.md b/docs/PROJECT_INDEX.md index 8f58038e..5c9278a9 100644 --- a/docs/PROJECT_INDEX.md +++ b/docs/PROJECT_INDEX.md @@ -75,10 +75,10 @@ First useful contribution: select one narrow bottleneck, implement it, add tests Read in this order: 1. [`docs/getting-started/REVIEWER_ONBOARDING.md`](getting-started/REVIEWER_ONBOARDING.md) — reviewer roles and checklists. -2. [`docs/PROOF_LADDER.md`](PROOF_LADDER.md) — claim levels. +2. [`docs/evidence/PROOF_LADDER.md`](PROOF_LADDER.md) — claim levels. 3. [`docs/evidence/CLAIM_REVIEW_CHECKLIST.md`](../evidence/CLAIM_REVIEW_CHECKLIST.md) — claim review. 4. [`docs/evidence/BENCHMARK_GOVERNANCE.md`](../evidence/BENCHMARK_GOVERNANCE.md) — benchmark review. -5. [`docs/RISK_REGISTER.md`](RISK_REGISTER.md) — major risks and mitigations. +5. [`docs/trust/RISK_REGISTER.md`](RISK_REGISTER.md) — major risks and mitigations. First useful contribution: reject or downgrade weak claims, unclear release status, missing baselines, or unreviewable artifacts. @@ -99,7 +99,7 @@ First useful contribution: add a leakage-resistant benchmark, improve reference Read in this order: 1. [`DATA_LICENSE_NOTICE.md`](../DATA_LICENSE_NOTICE.md) — data license and redistribution policy. -2. [`docs/DATA_GOVERNANCE.md`](DATA_GOVERNANCE.md) — dataset cards, labels, leakage, release status. +2. [`docs/trust/DATA_GOVERNANCE.md`](DATA_GOVERNANCE.md) — dataset cards, labels, leakage, release status. 3. [`docs/engineering/SCHEMA_REGISTRY.md`](../engineering/SCHEMA_REGISTRY.md) — structured artifact registry. 4. [`docs/engineering/ADAPTER_AUTHOR_GUIDE.md`](../engineering/ADAPTER_AUTHOR_GUIDE.md) — safe adapter authoring. 5. [`docs/engineering/ARTIFACT_VERSIONING.md`](../engineering/ARTIFACT_VERSIONING.md) — artifact compatibility rules. @@ -111,7 +111,7 @@ First useful contribution: add a dataset card, schema example, adapter card, mod Read in this order: 1. [`docs/review/WET_LAB_HANDOFF.md`](review/WET_LAB_HANDOFF.md) — safe expert-review handoff guide. -2. [`docs/PROOF_LADDER.md`](PROOF_LADDER.md) — claim ladder from dry-lab nomination to independent validation. +2. [`docs/evidence/PROOF_LADDER.md`](PROOF_LADDER.md) — claim ladder from dry-lab nomination to independent validation. 3. [`docs/review/EXTERNAL_REVIEW_PACKET.md`](review/EXTERNAL_REVIEW_PACKET.md) — standard review packet contents. 4. [`docs/review/LAB_PARTNER_ONBOARDING.md`](review/LAB_PARTNER_ONBOARDING.md) — safe partner onboarding boundaries. 5. [`docs/review/PRE_REGISTERED_PILOT_TEMPLATE.md`](review/PRE_REGISTERED_PILOT_TEMPLATE.md) — non-protocol template for freezing pilot logic before qualified testing. @@ -122,11 +122,11 @@ First useful contribution: review whether candidate evidence packages are interp Read in this order: -1. [`docs/TRUST_CENTER.md`](TRUST_CENTER.md) — safety, evidence, release, and governance overview. +1. [`docs/trust/TRUST_CENTER.md`](TRUST_CENTER.md) — safety, evidence, release, and governance overview. 2. [`SAFETY.md`](../SAFETY.md) — safety posture. 3. [`SECURITY.md`](../SECURITY.md) — safety-sensitive reporting. 4. [`MODEL_RELEASE_POLICY.md`](../MODEL_RELEASE_POLICY.md) — release rules. -5. [`docs/SAFETY_DOC_AUDIT.md`](SAFETY_DOC_AUDIT.md) — safety-doc audit history. +5. [`docs/trust/SAFETY_DOC_AUDIT.md`](SAFETY_DOC_AUDIT.md) — safety-doc audit history. First useful contribution: identify where an artifact could be misread, over-released, overclaimed, or used outside scope. @@ -135,9 +135,9 @@ First useful contribution: identify where an artifact could be misread, over-rel Read in this order: 1. [`VISION.md`](../VISION.md) — long-term infrastructure thesis. -2. [`docs/OPEN_INFRASTRUCTURE_MOAT.md`](OPEN_INFRASTRUCTURE_MOAT.md) — why infrastructure can be durable. -3. [`docs/TRUST_CENTER.md`](TRUST_CENTER.md) — trust architecture. -4. [`docs/ADOPTION_METRICS.md`](ADOPTION_METRICS.md) — adoption metrics that value trust over hype. +2. [`docs/research/OPEN_INFRASTRUCTURE_MOAT.md`](OPEN_INFRASTRUCTURE_MOAT.md) — why infrastructure can be durable. +3. [`docs/trust/TRUST_CENTER.md`](TRUST_CENTER.md) — trust architecture. +4. [`docs/research/ADOPTION_METRICS.md`](ADOPTION_METRICS.md) — adoption metrics that value trust over hype. 5. [`GOVERNANCE.md`](../GOVERNANCE.md) — decision governance. First useful contribution: fund independent validation, benchmark audits, safe result publication, or infrastructure work that makes the project less dependent on any one person or model. @@ -149,8 +149,8 @@ Read in this order: 1. [`GOVERNANCE.md`](../GOVERNANCE.md) — project governance. 2. [`docs/getting-started/MAINTAINER_GUIDE.md`](getting-started/MAINTAINER_GUIDE.md) — maintainer review rules. 3. [`docs/operations/SUSTAINABILITY_AND_BUS_FACTOR.md`](operations/SUSTAINABILITY_AND_BUS_FACTOR.md) — sustainability and bus-factor plan. -4. [`docs/RISK_REGISTER.md`](RISK_REGISTER.md) — major risks and mitigations. -5. [`docs/RELEASE_CHECKLIST.md`](RELEASE_CHECKLIST.md) — release checklist. +4. [`docs/trust/RISK_REGISTER.md`](RISK_REGISTER.md) — major risks and mitigations. +5. [`docs/trust/RELEASE_CHECKLIST.md`](RELEASE_CHECKLIST.md) — release checklist. First useful contribution: make the repo easier to maintain without lowering safety, evidence, or reproducibility standards. @@ -162,15 +162,15 @@ First useful contribution: make the repo easier to maintain without lowering saf | [`GOAL.md`](../GOAL.md) | Concrete milestones, kill rules, and metrics. | | [`MISSION.md`](../MISSION.md) | Scientific mission and claim boundaries. | | [`GOVERNANCE.md`](../GOVERNANCE.md) | Project decision governance. | -| [`docs/TRUST_CENTER.md`](TRUST_CENTER.md) | Trust front door for safety, evidence, release, governance, and agents. | -| [`docs/OPEN_INFRASTRUCTURE_MOAT.md`](OPEN_INFRASTRUCTURE_MOAT.md) | Why OpenAMP should win through reusable trust infrastructure. | -| [`docs/NUMBER_ONE_REPO_STANDARD.md`](NUMBER_ONE_REPO_STANDARD.md) | Defines what category leadership means. | -| [`docs/WHY_WORK_ON_OPENAMP.md`](WHY_WORK_ON_OPENAMP.md) | Positioning: why serious contributors should choose this repo. | -| [`docs/OPEN_BIOTECH_STACK.md`](OPEN_BIOTECH_STACK.md) | Infrastructure thesis and stack model. | -| [`docs/ADOPTION_STRATEGY.md`](ADOPTION_STRATEGY.md) | Adoption strategy for humans, agents, labs, and institutions. | -| [`docs/ADOPTION_METRICS.md`](ADOPTION_METRICS.md) | Adoption metrics that prioritize trust and reuse over popularity. | +| [`docs/trust/TRUST_CENTER.md`](TRUST_CENTER.md) | Trust front door for safety, evidence, release, governance, and agents. | +| [`docs/research/OPEN_INFRASTRUCTURE_MOAT.md`](OPEN_INFRASTRUCTURE_MOAT.md) | Why OpenAMP should win through reusable trust infrastructure. | +| [`docs/research/NUMBER_ONE_REPO_STANDARD.md`](NUMBER_ONE_REPO_STANDARD.md) | Defines what category leadership means. | +| [`docs/research/WHY_WORK_ON_OPENAMP.md`](WHY_WORK_ON_OPENAMP.md) | Positioning: why serious contributors should choose this repo. | +| [`docs/research/OPEN_BIOTECH_STACK.md`](OPEN_BIOTECH_STACK.md) | Infrastructure thesis and stack model. | +| [`docs/research/ADOPTION_STRATEGY.md`](ADOPTION_STRATEGY.md) | Adoption strategy for humans, agents, labs, and institutions. | +| [`docs/research/ADOPTION_METRICS.md`](ADOPTION_METRICS.md) | Adoption metrics that prioritize trust and reuse over popularity. | | [`docs/research/NEXT_100_PR_MAP.md`](research/NEXT_100_PR_MAP.md) | PR-sized roadmap for compounding work. | -| [`docs/RISK_REGISTER.md`](RISK_REGISTER.md) | Major risks and mitigations. | +| [`docs/trust/RISK_REGISTER.md`](RISK_REGISTER.md) | Major risks and mitigations. | | [`CITATION.cff`](../CITATION.cff) | Citation metadata. | ## Core operating docs @@ -188,7 +188,7 @@ First useful contribution: make the repo easier to maintain without lowering saf | [`docs/operations/HIGH_LEVERAGE_TASKS.md`](operations/HIGH_LEVERAGE_TASKS.md) | Task map for humans and agents. | | [`docs/getting-started/MAINTAINER_GUIDE.md`](getting-started/MAINTAINER_GUIDE.md) | Maintainer review and governance standard. | | [`docs/operations/SUSTAINABILITY_AND_BUS_FACTOR.md`](operations/SUSTAINABILITY_AND_BUS_FACTOR.md) | Project sustainability and bus-factor plan. | -| [`docs/RELEASE_CHECKLIST.md`](RELEASE_CHECKLIST.md) | Release checklist. | +| [`docs/trust/RELEASE_CHECKLIST.md`](RELEASE_CHECKLIST.md) | Release checklist. | | [`docs/operations/DECISION_RECORD_TEMPLATE.md`](operations/DECISION_RECORD_TEMPLATE.md) | Decision record template. | | [`docs/operations/DOCS_MAINTENANCE.md`](operations/DOCS_MAINTENANCE.md) | Documentation maintenance rules. | | [`docs/operations/ISSUE_LABEL_TAXONOMY.md`](operations/ISSUE_LABEL_TAXONOMY.md) | Issue-label system. | @@ -208,21 +208,21 @@ First useful contribution: make the repo easier to maintain without lowering saf | [`docs/evidence/BENCHMARK_GOVERNANCE.md`](../evidence/BENCHMARK_GOVERNANCE.md) | Benchmark lifecycle and anti-cheating rules. | | [`docs/evidence/METRICS_CURRENT.md`](../evidence/METRICS_CURRENT.md) | Current benchmark state and single source of truth for metrics. | | [`docs/evidence/EVIDENCE_CERTIFICATE.md`](../evidence/EVIDENCE_CERTIFICATE.md) | Candidate certificate spec. | -| [`docs/CALIBRATION_POLICY.md`](CALIBRATION_POLICY.md) | Recalibration gate and policy. | -| [`docs/VIRTUAL_ASSAY_SCOPE.md`](VIRTUAL_ASSAY_SCOPE.md) | What virtual assay modules may and may not claim. | +| [`docs/evidence/CALIBRATION_POLICY.md`](CALIBRATION_POLICY.md) | Recalibration gate and policy. | +| [`docs/evidence/VIRTUAL_ASSAY_SCOPE.md`](VIRTUAL_ASSAY_SCOPE.md) | What virtual assay modules may and may not claim. | ## Data, model, release, and claims docs | Document | Job | |---|---| | [`DATA_LICENSE_NOTICE.md`](../DATA_LICENSE_NOTICE.md) | Data license and redistribution notice. | -| [`docs/DATA_GOVERNANCE.md`](DATA_GOVERNANCE.md) | Dataset cards, label governance, leakage, and release status. | +| [`docs/trust/DATA_GOVERNANCE.md`](DATA_GOVERNANCE.md) | Dataset cards, label governance, leakage, and release status. | | [`data/README.md`](../data/README.md) | Data directory policy. | | [`MODEL_RELEASE_POLICY.md`](../MODEL_RELEASE_POLICY.md) | Model and artifact release policy. | -| [`docs/MODEL_CARD_TEMPLATE.md`](MODEL_CARD_TEMPLATE.md) | Model, scorer, simulator, generator, and adapter card template. | +| [`docs/trust/MODEL_CARD_TEMPLATE.md`](MODEL_CARD_TEMPLATE.md) | Model, scorer, simulator, generator, and adapter card template. | | [`models/README.md`](../models/README.md) | Models directory policy. | | [`docs/evidence/CLAIM_REVIEW_CHECKLIST.md`](../evidence/CLAIM_REVIEW_CHECKLIST.md) | Claim review checklist. | -| [`docs/PUBLICATION_POLICY.md`](PUBLICATION_POLICY.md) | Publication and public claims policy. | +| [`docs/trust/PUBLICATION_POLICY.md`](PUBLICATION_POLICY.md) | Publication and public claims policy. | ## External review and collaboration docs @@ -243,10 +243,10 @@ First useful contribution: make the repo easier to maintain without lowering saf |---|---| | [`SAFETY.md`](../SAFETY.md) | Project safety policy. | | [`SECURITY.md`](../SECURITY.md) | Security and safety-sensitive reporting. | -| [`docs/SAFETY_DOC_AUDIT.md`](SAFETY_DOC_AUDIT.md) | Safety audit and remediation record for docs. | +| [`docs/trust/SAFETY_DOC_AUDIT.md`](SAFETY_DOC_AUDIT.md) | Safety audit and remediation record for docs. | | [`RESPONSIBLE_USE.md`](../RESPONSIBLE_USE.md) | Allowed and disallowed use. | | [`MODEL_RELEASE_POLICY.md`](../MODEL_RELEASE_POLICY.md) | Release policy for models, weights, and sensitive artifacts. | -| [`docs/TRUST_CENTER.md`](TRUST_CENTER.md) | Cross-cutting trust overview. | +| [`docs/trust/TRUST_CENTER.md`](TRUST_CENTER.md) | Cross-cutting trust overview. | ## GitHub workflow files diff --git a/docs/README.md b/docs/README.md index 05cfa14f..4375c27f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -20,10 +20,10 @@ This is the documentation front door. Start with a route, not the file list. ## Three documents that prevent most mistakes -1. [Trust Center](TRUST_CENTER.md) defines the safety, evidence, and release +1. [Trust Center](trust/TRUST_CENTER.md) defines the safety, evidence, and release architecture. -2. [Proof Ladder](PROOF_LADDER.md) limits claims to their evidence level. -3. [Current Metrics](../evidence/METRICS_CURRENT.md) records current measured performance +2. [Proof Ladder](evidence/PROOF_LADDER.md) limits claims to their evidence level. +3. [Current Metrics](evidence/METRICS_CURRENT.md) records current measured performance and known weaknesses. ## Documentation map @@ -48,11 +48,11 @@ flowchart TD - Safety: [`../SAFETY.md`](../SAFETY.md) and [`../RESPONSIBLE_USE.md`](../RESPONSIBLE_USE.md). -- Claims: [`PROOF_LADDER.md`](PROOF_LADDER.md) and - [`CLAIM_REVIEW_CHECKLIST.md`](../evidence/CLAIM_REVIEW_CHECKLIST.md). -- Metrics: [`METRICS_CURRENT.md`](../evidence/METRICS_CURRENT.md). -- Current work: [`ROADMAP.md`](research/ROADMAP.md) and - [`NEXT_100_PR_MAP.md`](research/NEXT_100_PR_MAP.md). +- Claims: [`evidence/PROOF_LADDER.md`](evidence/PROOF_LADDER.md) and + [`evidence/CLAIM_REVIEW_CHECKLIST.md`](evidence/CLAIM_REVIEW_CHECKLIST.md). +- Metrics: [`evidence/METRICS_CURRENT.md`](evidence/METRICS_CURRENT.md). +- Current work: [`research/ROADMAP.md`](research/ROADMAP.md) and + [`research/NEXT_100_PR_MAP.md`](research/NEXT_100_PR_MAP.md). - Full document catalog: [`PROJECT_INDEX.md`](PROJECT_INDEX.md). Documents describing a wave, audit, recommendation, or dated plan are records diff --git a/docs/CALIBRATION_POLICY.md b/docs/evidence/CALIBRATION_POLICY.md similarity index 100% rename from docs/CALIBRATION_POLICY.md rename to docs/evidence/CALIBRATION_POLICY.md diff --git a/docs/EXTERNAL_PREDICTOR_CONSENSUS.md b/docs/evidence/EXTERNAL_PREDICTOR_CONSENSUS.md similarity index 100% rename from docs/EXTERNAL_PREDICTOR_CONSENSUS.md rename to docs/evidence/EXTERNAL_PREDICTOR_CONSENSUS.md diff --git a/docs/evidence/METRICS_CURRENT.md b/docs/evidence/METRICS_CURRENT.md index b8aabdf3..cb019946 100644 --- a/docs/evidence/METRICS_CURRENT.md +++ b/docs/evidence/METRICS_CURRENT.md @@ -24,7 +24,7 @@ Machine-readable snapshot: `outputs/metrics_snapshot.json` regenerated with `mak > **New in v0.5.54:** Simulation ablation benchmark — tests MembraneProxy + StructureProxy on 500-AMP AMP-vs-decoy benchmark. Honest finding: composite degrades (delta=−0.1153) but `bacterial_binding` alone achieves AUROC 0.7512 — genuine non-charge signal. 17 new tests. 1922 total. > **New in v0.5.53:** Structure ensemble proxy — `StructureProxy` using Chou-Fasman 3-state helix/sheet/coil propensities. `non_helical` flag for helic-biased scorer warnings. `HelicityBaseline`. 34 new tests. 1905 total. > **New in v0.5.52:** Membrane interaction proxy — `MembraneProxy` using Wimley-White interfacial/octanol scales for coarse-grained bacterial and mammalian binding energy scores. `BomanBaseline` clamped. 30 new tests. 1873 total. -> **New in v0.5.51:** Virtual assay scope document — `docs/VIRTUAL_ASSAY_SCOPE.md` with uncertainty policy, ablation requirements, integration modes. Doc drift fixes: BENCHMARKING.md, METRICS_CURRENT.md test count, NOVELTY_AUDIT_GUIDE.md script ref. No code changes. +> **New in v0.5.51:** Virtual assay scope document — `docs/evidence/VIRTUAL_ASSAY_SCOPE.md` with uncertainty policy, ablation requirements, integration modes. Doc drift fixes: BENCHMARKING.md, METRICS_CURRENT.md test count, NOVELTY_AUDIT_GUIDE.md script ref. No code changes. > **New in v0.5.50:** Negative-result archive template — `docs/evidence/NEGATIVE_RESULT_ARCHIVE.md` with full 18-field entry schema, automation notes, and limitations. Phase 2 exit criteria: all 5 met ✅. No code changes. > **New in v0.5.49:** Policy version bump workflow — `scripts/calibration/bump_recalibration_policy.py` (standalone CLI, decision-log guard, dry-run mode, auto-increment + write). CI guard in `ci.yml` validates policy version against base branch when `configs/recalibration_policy.yaml` changes. `make bump-policy-version` Makefile target. 9 tests. 1843 total passing. Phase 2 exit: 5 of 5 criteria met. > **New in v0.5.48:** Fixed stale ARCHITECTURE.md package map — calibration and active_learning were listed as "Potential future packages" despite shipping in v0.5.19+ and v0.5.45+. Moved to main package map with version annotations. Updated 50_LOOP_PLAN.md "Current Position" and completed Phase 2 table. No code changes. @@ -1168,4 +1168,4 @@ Decoys score low on activity. Selective AMPs score moderately on both. | 2026-07-04 | **Calibration intake module added:** `openamp-foundry calibration-intake` joins a pilot panel CSV with a directory of validated lab result JSON files, produces a per-candidate prediction-vs-actual report with cohort metrics gated by `MIN_COHORT_SIZE=5`. Descriptive only — does NOT trigger recalibration, weight updates, or selection-rule changes. Synthetic example data in `examples/lab_results/` is clearly labeled in every file and in `examples/lab_results/README.md`. 29 new tests; total 1614 passing. | OpenAMP loop | | 2026-06-29 | Initial — expanded benchmark (PR #110) | OpenAMP CI | | 2026-07-05 | **Per-family benchmark breakdown added:** stratifies 500 AMPs by structural class (cysteine_rich, proline_rich, short, highly_cationic, moderately_cationic, low_charge). Pipeline is charge-dominated: highly_cationic AUROC 0.958 vs proline_rich AUROC 0.586 — a 0.37 gap. Proline-rich, short, and low-charge AMPs are consistently undervalued. Diversity selection should deliberately compensate for pipeline's helic/charge bias. `scripts/benchmarks/benchmark_per_family.py`, `make bench-per-family`, CI informational step. 27 new tests. | OpenAMP loop 18 | -| 2026-07-04 | **Recalibration policy + gate module added:** `openamp-foundry recalibration-gate` evaluates a calibration intake report against the pre-registered policy in `configs/recalibration_policy.yaml` and emits a binary `may_recalibrate` verdict. The policy file encodes 7 minimum conditions (cohort size, controls, orphans, positives, negatives, metrics availability), 5 permanent prohibited actions (toxicity, hemolysis, novelty, pathogen enhancement, post-hoc success redefinition), and 2 rate limits (L1 weight budget, cooldown). The validator rejects policy files that omit any canonical prohibited action or any `locked_changes` entry. The gate does NOT trigger weight updates; it is the missing permission layer between v0.5.19 intake and a future recalibration engine. Exit code 0 when `may_recalibrate=true`, 3 when false. 39 new tests; total 1647 passing. See `docs/CALIBRATION_POLICY.md`. | OpenAMP loop | +| 2026-07-04 | **Recalibration policy + gate module added:** `openamp-foundry recalibration-gate` evaluates a calibration intake report against the pre-registered policy in `configs/recalibration_policy.yaml` and emits a binary `may_recalibrate` verdict. The policy file encodes 7 minimum conditions (cohort size, controls, orphans, positives, negatives, metrics availability), 5 permanent prohibited actions (toxicity, hemolysis, novelty, pathogen enhancement, post-hoc success redefinition), and 2 rate limits (L1 weight budget, cooldown). The validator rejects policy files that omit any canonical prohibited action or any `locked_changes` entry. The gate does NOT trigger weight updates; it is the missing permission layer between v0.5.19 intake and a future recalibration engine. Exit code 0 when `may_recalibrate=true`, 3 when false. 39 new tests; total 1647 passing. See `docs/evidence/CALIBRATION_POLICY.md`. | OpenAMP loop | diff --git a/docs/evidence/NOVELTY_AUDIT_FULL.md b/docs/evidence/NOVELTY_AUDIT_FULL.md index 6c2e7992..7c38ed07 100644 --- a/docs/evidence/NOVELTY_AUDIT_FULL.md +++ b/docs/evidence/NOVELTY_AUDIT_FULL.md @@ -117,7 +117,7 @@ Bac2A proline-rich intracellular. Novel mechanism (DnaK binding). ## Wave 0.5 Novelty Audit (2026-06-29) > Separate audit for Wave 0.5 scaffold diversification candidates. -> Full details: `docs/WAVE_0_5_NOVELTY_AUDIT.md` +> Full details: `docs/research/WAVE_0_5_NOVELTY_AUDIT.md` > Machine-readable: `outputs/wave0_5_novelty_audit.csv` ### Summary diff --git a/docs/PROOF_LADDER.md b/docs/evidence/PROOF_LADDER.md similarity index 100% rename from docs/PROOF_LADDER.md rename to docs/evidence/PROOF_LADDER.md diff --git a/docs/evidence/README.md b/docs/evidence/README.md index abe02c83..3231be30 100644 --- a/docs/evidence/README.md +++ b/docs/evidence/README.md @@ -2,7 +2,7 @@ ## Claim discipline -- [Proof ladder](../PROOF_LADDER.md) +- [Proof ladder](PROOF_LADDER.md) - [Claim review checklist](CLAIM_REVIEW_CHECKLIST.md) - [Current metrics](METRICS_CURRENT.md) @@ -12,7 +12,7 @@ - [Benchmark governance](BENCHMARK_GOVERNANCE.md) - [Benchmark card](BENCHMARK_CARD.md) - [Simulation benchmark](SIMULATION_BENCHMARK.md) -- [Calibration policy](../CALIBRATION_POLICY.md) +- [Calibration policy](CALIBRATION_POLICY.md) ## Candidate evidence diff --git a/docs/VIRTUAL_ASSAY_SCOPE.md b/docs/evidence/VIRTUAL_ASSAY_SCOPE.md similarity index 100% rename from docs/VIRTUAL_ASSAY_SCOPE.md rename to docs/evidence/VIRTUAL_ASSAY_SCOPE.md diff --git a/docs/getting-started/FIRST_RUN_WALKTHROUGH.md b/docs/getting-started/FIRST_RUN_WALKTHROUGH.md index 7eb3e1db..6ef7cffe 100644 --- a/docs/getting-started/FIRST_RUN_WALKTHROUGH.md +++ b/docs/getting-started/FIRST_RUN_WALKTHROUGH.md @@ -17,7 +17,7 @@ Read: - [`README.md`](../README.md) - [`SAFETY.md`](../SAFETY.md) - [`docs/getting-started/COMMAND_SURFACE.md`](COMMAND_SURFACE.md) -- [`docs/PROOF_LADDER.md`](PROOF_LADDER.md) +- [`docs/evidence/PROOF_LADDER.md`](PROOF_LADDER.md) ## Expected setup diff --git a/docs/getting-started/HUMAN_ONBOARDING.md b/docs/getting-started/HUMAN_ONBOARDING.md index fc640a71..7a28b28b 100644 --- a/docs/getting-started/HUMAN_ONBOARDING.md +++ b/docs/getting-started/HUMAN_ONBOARDING.md @@ -58,7 +58,7 @@ Then look for a small issue in CLI ergonomics, tests, reports, schemas, or doc c - [`VISION.md`](../VISION.md) - [`GOAL.md`](../GOAL.md) -- [`docs/PROOF_LADDER.md`](PROOF_LADDER.md) +- [`docs/evidence/PROOF_LADDER.md`](PROOF_LADDER.md) - [`docs/evidence/METRICS_CURRENT.md`](../evidence/METRICS_CURRENT.md) - [`docs/evidence/BENCHMARKING.md`](../evidence/BENCHMARKING.md) @@ -68,7 +68,7 @@ Then look for a weak benchmark, missing baseline, leakage risk, uncontrolled com - [`docs/review/WET_LAB_HANDOFF.md`](WET_LAB_HANDOFF.md) - [`docs/review/COLLABORATION_PLAYBOOK.md`](COLLABORATION_PLAYBOOK.md) -- [`docs/PROOF_LADDER.md`](PROOF_LADDER.md) +- [`docs/evidence/PROOF_LADDER.md`](PROOF_LADDER.md) - [`RESPONSIBLE_USE.md`](../RESPONSIBLE_USE.md) Then review whether the evidence package would help a qualified scientist decide whether a small assay batch is worth considering. diff --git a/docs/getting-started/REVIEWER_ONBOARDING.md b/docs/getting-started/REVIEWER_ONBOARDING.md index f2cc45b9..516e0447 100644 --- a/docs/getting-started/REVIEWER_ONBOARDING.md +++ b/docs/getting-started/REVIEWER_ONBOARDING.md @@ -122,7 +122,7 @@ Ask: Use direct comments like: -- “Please map this claim to `docs/PROOF_LADDER.md`.” +- “Please map this claim to `docs/evidence/PROOF_LADDER.md`.” - “This needs a cheap-baseline comparison before it can affect ranking.” - “This reads like validation, but the evidence is dry-lab only.” - “Please add release status.” diff --git a/docs/operations/DOCS_MAINTENANCE.md b/docs/operations/DOCS_MAINTENANCE.md index 85495de9..2db5cb60 100644 --- a/docs/operations/DOCS_MAINTENANCE.md +++ b/docs/operations/DOCS_MAINTENANCE.md @@ -45,7 +45,7 @@ These docs define current project truth. | `MODEL_RELEASE_POLICY.md` | Artifact release boundaries. | | `docs/evidence/METRICS_CURRENT.md` | Current benchmark metrics. | | `docs/evidence/DECISION_RULES.md` | Gates and thresholds. | -| `docs/CALIBRATION_POLICY.md` | Recalibration gate policy. | +| `docs/evidence/CALIBRATION_POLICY.md` | Recalibration gate policy. | | `docs/PROJECT_INDEX.md` | Navigation hub. | These must be kept current. @@ -72,7 +72,7 @@ These explain systems and artifacts. - `docs/evidence/BENCHMARKING.md` - `docs/evidence/BENCHMARK_GOVERNANCE.md` - `docs/evidence/EVIDENCE_CERTIFICATE.md` -- `docs/VIRTUAL_ASSAY_SCOPE.md` +- `docs/evidence/VIRTUAL_ASSAY_SCOPE.md` - `docs/evidence/SIMULATION_BENCHMARK.md` If code behavior changes, these may need updates. @@ -84,9 +84,9 @@ These help outsiders safely evaluate or reuse the project. - `docs/review/COLLABORATION_PLAYBOOK.md` - `docs/review/WET_LAB_HANDOFF.md` - `docs/review/PRE_REGISTERED_PILOT_TEMPLATE.md` -- `docs/ADOPTION_STRATEGY.md` -- `docs/OPEN_BIOTECH_STACK.md` -- `docs/PROOF_LADDER.md` +- `docs/research/ADOPTION_STRATEGY.md` +- `docs/research/OPEN_BIOTECH_STACK.md` +- `docs/evidence/PROOF_LADDER.md` If external-facing language changes, these need review. @@ -99,7 +99,7 @@ Update: - `docs/evidence/METRICS_CURRENT.md` - `outputs/metrics_snapshot.json` if generated - `docs/evidence/BENCHMARKING.md` if benchmark meaning changed -- `docs/research/ROADMAP.md` or `docs/50_LOOP_PLAN.md` if milestone changed +- `docs/research/ROADMAP.md` or `docs/research/50_LOOP_PLAN.md` if milestone changed ### Benchmark added or changed diff --git a/docs/EXTERNAL_VALIDATION_AGENT_PROMPT.md b/docs/operations/EXTERNAL_VALIDATION_AGENT_PROMPT.md similarity index 100% rename from docs/EXTERNAL_VALIDATION_AGENT_PROMPT.md rename to docs/operations/EXTERNAL_VALIDATION_AGENT_PROMPT.md diff --git a/docs/LEGACY_LOOP_PROMPT.md b/docs/operations/LEGACY_LOOP_PROMPT.md similarity index 98% rename from docs/LEGACY_LOOP_PROMPT.md rename to docs/operations/LEGACY_LOOP_PROMPT.md index 07a33bf8..48fcf07b 100644 --- a/docs/LEGACY_LOOP_PROMPT.md +++ b/docs/operations/LEGACY_LOOP_PROMPT.md @@ -25,11 +25,11 @@ Read these first: - MISSION.md - README.md - docs/engineering/ARCHITECTURE.md -- docs/PLAN.md +- docs/research/PLAN.md - docs/research/ROADMAP.md - docs/evidence/METRICS_CURRENT.md -- docs/CALIBRATION_POLICY.md (if present — pre-registered recalibration gate) -- docs/SAFE_SCOPE.md +- docs/evidence/CALIBRATION_POLICY.md (if present — pre-registered recalibration gate) +- docs/trust/SAFE_SCOPE.md Agent-friendly package note: The calibration module (`src/openamp_foundry/calibration/`) now exposes its public API at the package level. Use diff --git a/docs/operations/SUSTAINABILITY_AND_BUS_FACTOR.md b/docs/operations/SUSTAINABILITY_AND_BUS_FACTOR.md index af11c907..8b429131 100644 --- a/docs/operations/SUSTAINABILITY_AND_BUS_FACTOR.md +++ b/docs/operations/SUSTAINABILITY_AND_BUS_FACTOR.md @@ -89,11 +89,11 @@ The repo is succession-ready when these are current: - `SAFETY.md`; - `MODEL_RELEASE_POLICY.md`; - `docs/PROJECT_INDEX.md`; -- `docs/TRUST_CENTER.md`; +- `docs/trust/TRUST_CENTER.md`; - `docs/evidence/METRICS_CURRENT.md`; - `docs/research/NEXT_100_PR_MAP.md`; -- `docs/RELEASE_CHECKLIST.md`; -- `docs/RISK_REGISTER.md`. +- `docs/trust/RELEASE_CHECKLIST.md`; +- `docs/trust/RISK_REGISTER.md`. ## Documentation debt policy diff --git a/docs/50_LOOP_PLAN.md b/docs/research/50_LOOP_PLAN.md similarity index 99% rename from docs/50_LOOP_PLAN.md rename to docs/research/50_LOOP_PLAN.md index 8e583a54..a87c700f 100644 --- a/docs/50_LOOP_PLAN.md +++ b/docs/research/50_LOOP_PLAN.md @@ -99,7 +99,7 @@ Build the multi-resolution virtual assay layer: structure proxies, membrane inte | Loop | Bottleneck | Deliverable | Verification | |------|-----------|-------------|-------------| -| 30 ✅ | No explicit virtual-assay scope document; stale BENCHMARKING.md; stale test count in METRICS_CURRENT.md; broken script ref in NOVELTY_AUDIT_GUIDE.md | `docs/VIRTUAL_ASSAY_SCOPE.md` — scope doc with modeled/NOT-modeled effects, uncertainty policy, ablation requirement, integration modes. Rewrote `docs/evidence/BENCHMARKING.md` with all 19 benchmarks. Fixed test count, script ref, scripts/__init__.py. | Scope doc reviewable; BENCHMARKING.md matches Makefile; 1843 tests | +| 30 ✅ | No explicit virtual-assay scope document; stale BENCHMARKING.md; stale test count in METRICS_CURRENT.md; broken script ref in NOVELTY_AUDIT_GUIDE.md | `docs/evidence/VIRTUAL_ASSAY_SCOPE.md` — scope doc with modeled/NOT-modeled effects, uncertainty policy, ablation requirement, integration modes. Rewrote `docs/evidence/BENCHMARKING.md` with all 19 benchmarks. Fixed test count, script ref, scripts/__init__.py. | Scope doc reviewable; BENCHMARKING.md matches Makefile; 1843 tests | | 31 ✅ | No membrane interaction proxy. The simulation module had only a dummy placeholder | `simulation/membrane.py`: MembraneProxy with Wimley-White interfacial and octanol scales, bacterial/mammalian binding scores, selectivity ratio, and uncertainty. BomanBaseline clamped. v0.5.52 | 30 tests, 1873 total. Magainin more selective than melittin (verified by test). Membrane proxy initialised, benchmark deferred to Loop 34 | | 32 ✅ | No structure ensemble proxy. Current pipeline assumes all AMPs are helical | `simulation/structure.py`: StructureProxy with Chou-Fasman 3-state propensities, normalized ensemble weights, non_helical flag. v0.5.53 | 34 tests, 1905 total. Protegrin/tachyplesin non-helical (✅), magainin not non-helical (✅). Melittin ambiguous — Chou-Fasman limitation documented | | 33 ✅ | No per-module ablation: do simulation modules improve discrimination? (Original 'selectivity ratio' superseded by Loop 31 membrane proxy — replaced with more useful ablation benchmark) | `scripts/benchmark_simulation_ablation.py`: tests MembraneProxy + StructureProxy on 500-AMP AMP-vs-decoy benchmark. Reports per-module AUROC, combined composite AUROC, and verdict. v0.5.54 | 17 tests, 1922 total. Honest finding: composite degrades AMP-vs-decoy (delta=-0.1153), but bacterial_binding alone achieves 0.7512 AUROC — genuine non-charge signal from Wimley-White + hydrophobic moment | diff --git a/docs/ADOPTION_METRICS.md b/docs/research/ADOPTION_METRICS.md similarity index 100% rename from docs/ADOPTION_METRICS.md rename to docs/research/ADOPTION_METRICS.md diff --git a/docs/ADOPTION_STRATEGY.md b/docs/research/ADOPTION_STRATEGY.md similarity index 100% rename from docs/ADOPTION_STRATEGY.md rename to docs/research/ADOPTION_STRATEGY.md diff --git a/docs/DISCOVERY_PREDICTION.md b/docs/research/DISCOVERY_PREDICTION.md similarity index 99% rename from docs/DISCOVERY_PREDICTION.md rename to docs/research/DISCOVERY_PREDICTION.md index fbb7747c..e6b48248 100644 --- a/docs/DISCOVERY_PREDICTION.md +++ b/docs/research/DISCOVERY_PREDICTION.md @@ -16,7 +16,7 @@ improvements already implemented or recommended. **Bottom line (post-PR #110, 7 scaffold families, AUROC 0.7832 on expanded 95-AMP + 96-decoy benchmark; original demo set AUROC 0.8420):** The pilot panel has a ~99.95% probability of yielding ≥1 candidate with MIC ≤ 16 µg/mL (P(zero active) = 0.000508 -across 7 families; per-family breakdown in [`docs/WET_LAB_PROBABILITY.md`](WET_LAB_PROBABILITY.md)) +across 7 families; per-family breakdown in [`docs/research/WET_LAB_PROBABILITY.md`](WET_LAB_PROBABILITY.md)) and **~10–20%** probability of generating high-impact publication material (up from 5–12% before computational improvements). The higher per-candidate estimate (internal model) is corrected to 10–20% by accounting for near-seed correlation and 7 effective independent scaffold @@ -690,7 +690,7 @@ is meaningfully higher (mean ensemble 0.821, mean safety 0.991). The 3 excluded mechanism-diverse seeds — a net improvement. > **For a per-family detailed analysis** with attrition model and assay guidance, see -> [`docs/WET_LAB_PROBABILITY.md`](WET_LAB_PROBABILITY.md). That document distinguishes +> [`docs/research/WET_LAB_PROBABILITY.md`](WET_LAB_PROBABILITY.md). That document distinguishes > "publishable novel result" (~30–50%) from "high-impact scenario tier" (~8–18% with MDR added). | Outcome | Internal model (n=20 independent) | Calibrated estimate (n=7 scaffolds, post-PR #72) | @@ -701,7 +701,7 @@ mechanism-diverse seeds — a net improvement. *"Publishable novel result" bar is lower than "high-impact" — single-lab first characterisation in a peptide science journal, not requiring independent external replication. See -`docs/WET_LAB_PROBABILITY.md` Section 3 for the composite probability derivation. +`docs/research/WET_LAB_PROBABILITY.md` Section 3 for the composite probability derivation. The MIC-only probability (Stage 1) is harder to correct without a formal per-scaffold Stage 1 rate; it is left as a qualitative adjustment toward the lower end of the 61–71% range. The diff --git a/docs/IP_PLAN.md b/docs/research/IP_PLAN.md similarity index 100% rename from docs/IP_PLAN.md rename to docs/research/IP_PLAN.md diff --git a/docs/NEW_VISION.md b/docs/research/NEW_VISION.md similarity index 99% rename from docs/NEW_VISION.md rename to docs/research/NEW_VISION.md index bcdf356e..f3aac1e5 100644 --- a/docs/NEW_VISION.md +++ b/docs/research/NEW_VISION.md @@ -4,7 +4,7 @@ > vision for a future virtual wet-lab layer. It is NOT a description of current > pipeline capability. Do not cite or present as implemented functionality. > For the current architecture, see `docs/engineering/ARCHITECTURE.md` and -> `docs/VIRTUAL_ASSAY_SCOPE.md`. For the current roadmap, see `docs/research/ROADMAP.md`. +> `docs/evidence/VIRTUAL_ASSAY_SCOPE.md`. For the current roadmap, see `docs/research/ROADMAP.md`. This is **exactly the right "bend reality" question**. diff --git a/docs/NUMBER_ONE_REPO_STANDARD.md b/docs/research/NUMBER_ONE_REPO_STANDARD.md similarity index 100% rename from docs/NUMBER_ONE_REPO_STANDARD.md rename to docs/research/NUMBER_ONE_REPO_STANDARD.md diff --git a/docs/OPEN_BIOTECH_STACK.md b/docs/research/OPEN_BIOTECH_STACK.md similarity index 100% rename from docs/OPEN_BIOTECH_STACK.md rename to docs/research/OPEN_BIOTECH_STACK.md diff --git a/docs/OPEN_INFRASTRUCTURE_MOAT.md b/docs/research/OPEN_INFRASTRUCTURE_MOAT.md similarity index 100% rename from docs/OPEN_INFRASTRUCTURE_MOAT.md rename to docs/research/OPEN_INFRASTRUCTURE_MOAT.md diff --git a/docs/PLAN.md b/docs/research/PLAN.md similarity index 99% rename from docs/PLAN.md rename to docs/research/PLAN.md index 014eaa7d..c8a7acdc 100644 --- a/docs/PLAN.md +++ b/docs/research/PLAN.md @@ -246,7 +246,7 @@ Second-batch hit rate improves over first-batch hit rate without changing succes Phase 5 is deliberately staged: the policy + gate ship before any recalibration engine exists, so the engine cannot be silently -applied. See `docs/CALIBRATION_POLICY.md` for the exact gate contract. +applied. See `docs/evidence/CALIBRATION_POLICY.md` for the exact gate contract. ### Phase 6 — Scientific credibility diff --git a/docs/research/README.md b/docs/research/README.md index 2e208b54..ad77c24f 100644 --- a/docs/research/README.md +++ b/docs/research/README.md @@ -5,15 +5,15 @@ - [Roadmap](ROADMAP.md) - [Next 100 PR map](NEXT_100_PR_MAP.md) - [High-leverage tasks](../operations/HIGH_LEVERAGE_TASKS.md) -- [Current metrics](../METRICS_CURRENT.md) -- [Risk register](../RISK_REGISTER.md) +- [Current metrics](../evidence/METRICS_CURRENT.md) +- [Risk register](../trust/RISK_REGISTER.md) ## Strategy -- [Open infrastructure moat](../OPEN_INFRASTRUCTURE_MOAT.md) -- [Open biotech stack](../OPEN_BIOTECH_STACK.md) -- [Adoption strategy](../ADOPTION_STRATEGY.md) -- [Adoption metrics](../ADOPTION_METRICS.md) +- [Open infrastructure moat](OPEN_INFRASTRUCTURE_MOAT.md) +- [Open biotech stack](OPEN_BIOTECH_STACK.md) +- [Adoption strategy](ADOPTION_STRATEGY.md) +- [Adoption metrics](ADOPTION_METRICS.md) ## Research records @@ -21,8 +21,8 @@ Wave plans, audits, recommendations, and postmortems preserve decisions under the assumptions and data available at the time. Treat them as historical evidence, not current policy or current metrics. -- [Wave 0.5 baseline](../WAVE_0_5_BASELINE.md) -- [Wave 0.5 novelty audit](../WAVE_0_5_NOVELTY_AUDIT.md) +- [Wave 0.5 baseline](WAVE_0_5_BASELINE.md) +- [Wave 0.5 novelty audit](WAVE_0_5_NOVELTY_AUDIT.md) - [Wave 1 analysis plan](WAVE1_ANALYSIS_PLAN.md) - [Wave 1 panel recommendation](WAVE_1_PANEL_RECOMMENDATION.md) - [Wave 2 plan](WAVE2_PLAN.md) diff --git a/docs/research/ROADMAP.md b/docs/research/ROADMAP.md index 3a0c2c15..51c808a8 100644 --- a/docs/research/ROADMAP.md +++ b/docs/research/ROADMAP.md @@ -9,7 +9,7 @@ Changes: - ``scripts/full_reproducibility_report.py`` — Fixed lab_batch_pack path to check for ``scripts/build_lab_batch_pack.py`` instead of ``make lab-batch-pack``. Updated loops_completed to 50. -- ``docs/50_LOOP_PLAN.md`` — Added Loop 50 entry. Next loop set to "None." +- ``docs/research/50_LOOP_PLAN.md`` — Added Loop 50 entry. Next loop set to "None." - ``docs/evidence/METRICS_CURRENT.md`` — Changelog updated. - 2021 tests passing. @@ -28,7 +28,7 @@ Changes: limitations (6 documented caveats). - ``Makefile`` — Added ``full-reproducibility-report`` target. - ``tests/test_full_reproducibility_report.py`` — 8 tests. -- ``docs/50_LOOP_PLAN.md`` — Loop 49 ✅. All 49 loops marked complete. +- ``docs/research/50_LOOP_PLAN.md`` — Loop 49 ✅. All 49 loops marked complete. Current position updated to "Phase 4 Complete". - ``docs/evidence/METRICS_CURRENT.md`` — Changelog updated. Test count: 2021. - 2021 tests passing (2013 existing + 8 new). @@ -47,7 +47,7 @@ Changes: results, calibration, reproducibility evidence, negative results, safety and governance, README for reproduction, preprint preparation. References 7 related governance docs. -- ``docs/50_LOOP_PLAN.md`` — Loop 48 ✅. Next: Loop 49. +- ``docs/research/50_LOOP_PLAN.md`` — Loop 48 ✅. Next: Loop 49. - ``docs/evidence/METRICS_CURRENT.md`` — Changelog updated. - No code changes. 2013 tests still pass. @@ -60,7 +60,7 @@ Changes: ``schemas/lab_result.schema.json``, reports per-file errors, detects control failures. Exit 0 all pass, 3 any fail, 2 missing files. - ``tests/test_validate_lab_data_return.py`` — 8 tests. -- ``docs/50_LOOP_PLAN.md`` — Loop 47 ✅. Next: Loop 48. +- ``docs/research/50_LOOP_PLAN.md`` — Loop 47 ✅. Next: Loop 48. - ``docs/evidence/METRICS_CURRENT.md`` — Changelog updated. Test count: 2008. - 2008 tests passing. @@ -78,7 +78,7 @@ Changes: against an existing zip. - `tests/test_lab_batch_pack.py` — covers custody-file generation, successful verification, tamper detection, and CLI verification mode. -- `docs/50_LOOP_PLAN.md` — Loop 45 ✅. Next: Loop 46. +- `docs/research/50_LOOP_PLAN.md` — Loop 45 ✅. Next: Loop 46. - `docs/evidence/METRICS_CURRENT.md` — version and changelog synced. Honest boundary: @@ -95,7 +95,7 @@ Changes: - ``schemas/decision_log.schema.json`` — Draft 2020-12 JSON Schema with 12 fields, 9 decision types, conditional dissent-requires-notes. - ``tests/test_decision_log_schema.py`` — 11 tests. -- ``docs/50_LOOP_PLAN.md`` — Loop 43 ✅. Next: Loop 45. +- ``docs/research/50_LOOP_PLAN.md`` — Loop 43 ✅. Next: Loop 45. - ``docs/evidence/METRICS_CURRENT.md`` — Changelog updated. Test count: 2000. - 2000 tests passing. @@ -116,7 +116,7 @@ Changes: evidence certificates can carry them without schema drift. - ``tests/test_simulation_mode_cli.py`` — covers ranked output, report columns, evidence-certificate inclusion, and schema validation for the new fields. -- ``docs/VIRTUAL_ASSAY_SCOPE.md`` and ``docs/evidence/SIMULATION_BENCHMARK.md`` — synced +- ``docs/evidence/VIRTUAL_ASSAY_SCOPE.md`` and ``docs/evidence/SIMULATION_BENCHMARK.md`` — synced to current behavior. Honest finding: @@ -135,7 +135,7 @@ Changes: modifications), assay protocols (MIC, hemolysis, serum stability), data return JSON format with required fields, positive/negative controls, safety and biosecurity (BSL-2), timeline (5–8 weeks), and related document links. -- ``docs/50_LOOP_PLAN.md`` — Loop 40 ✅. Phase 4 status: "In progress — Loop 40 ✅". +- ``docs/research/50_LOOP_PLAN.md`` — Loop 40 ✅. Phase 4 status: "In progress — Loop 40 ✅". Next: Loop 41. - ``docs/evidence/METRICS_CURRENT.md`` — Changelog entry updated. - No code changes. 1966 tests still pass. @@ -174,7 +174,7 @@ Changes: scope, error result schema. - ``docs/engineering/ARCHITECTURE.md`` — Extension points section expanded with ``ExternalSimulationAdapter`` usage example and documentation. -- ``docs/50_LOOP_PLAN.md`` — Loop 38 ✅. Next: Loop 39. +- ``docs/research/50_LOOP_PLAN.md`` — Loop 38 ✅. Next: Loop 39. - ``docs/evidence/METRICS_CURRENT.md`` — Pipeline version v0.5.59. Test count: 1966. - 1965 tests passing (1953 existing + 12 new — one test deduplicated). @@ -189,7 +189,7 @@ Changes: vs helix_propensity, non_helical vs proline_fraction. ``make bench-simulation-baselines`` target. - ``tests/test_benchmark_simulation_baselines.py`` — 13 tests. -- ``docs/50_LOOP_PLAN.md`` — Loop 36 ✅. Next: Loop 38. +- ``docs/research/50_LOOP_PLAN.md`` — Loop 36 ✅. Next: Loop 38. - ``docs/evidence/METRICS_CURRENT.md`` — Pipeline version v0.5.58. Test count: 1953. - ``docs/evidence/BENCHMARKING.md`` — Added bench-simulation-baselines (22 targets). @@ -238,7 +238,7 @@ Changes: only when weighted mode is honestly allowed, `3` otherwise. - ``Makefile`` — ``make simulation-gate`` target writing ``outputs/simulation_gate_verdict.json`` from both ablation artifacts. -- ``docs/VIRTUAL_ASSAY_SCOPE.md`` — corrected stale claim that `rank` already +- ``docs/evidence/VIRTUAL_ASSAY_SCOPE.md`` — corrected stale claim that `rank` already accepts `--simulation-mode`; current state now says weighted mode is blocked until the gate passes. - ``tests/test_simulation_gate.py`` — 6 tests covering blocked current-state @@ -265,7 +265,7 @@ Changes: ``examples/validation/hemolysis_reference.csv``. Reports per-score hemolysis detection AUROC (inverted for safety-type scorers). - ``Makefile`` — Added ``bench-simulation-ablation-within-amp`` target. -- ``docs/50_LOOP_PLAN.md`` — Loop 34 ✅ (re-interpreted). Next: Loop 35. +- ``docs/research/50_LOOP_PLAN.md`` — Loop 34 ✅ (re-interpreted). Next: Loop 35. - ``docs/evidence/METRICS_CURRENT.md`` — Pipeline version v0.5.55. Test count: 1928. - 1928 tests passing (1905 existing + 23 updated). @@ -290,7 +290,7 @@ Changes: computes per-module AUROC, and a combined simulation composite AUROC. ``make bench-simulation-ablation`` target. Output written to ``outputs/simulation_ablation.json``. -- ``docs/50_LOOP_PLAN.md`` — Loop 33 ✅ (re-interpreted as ablation benchmark). +- ``docs/research/50_LOOP_PLAN.md`` — Loop 33 ✅ (re-interpreted as ablation benchmark). Next: Loop 34. - ``docs/evidence/METRICS_CURRENT.md`` — Pipeline version v0.5.54. Test count: 1922. - ``docs/engineering/ARCHITECTURE.md`` — Package map updated. @@ -323,7 +323,7 @@ Changes: normalization, dominant state, non-helical flag, known reference comparisons (magainin helical, protegrin/tachyplesin beta-sheet, proline-rich non-helical, melittin ambiguous — documented limitation), and empty sequence. -- ``docs/50_LOOP_PLAN.md`` — Loop 32 ✅. Next: Loop 33. +- ``docs/research/50_LOOP_PLAN.md`` — Loop 32 ✅. Next: Loop 33. - ``docs/evidence/METRICS_CURRENT.md`` — Pipeline version v0.5.53. Test count: 1905. - 1905 tests passing (1871 existing + 34 new). @@ -345,7 +345,7 @@ Changes: - ``tests/test_membrane_proxy.py`` — 27 tests covering scale lookup, normalization, selectivity ratio, uncertainty, proxy contract, known-reference comparison (magainin more selective than melittin), empty sequence, and version. -- ``docs/50_LOOP_PLAN.md`` — Loop 31 ✅. Phase 3 status updated. Next: Loop 32. +- ``docs/research/50_LOOP_PLAN.md`` — Loop 31 ✅. Phase 3 status updated. Next: Loop 32. - ``docs/evidence/METRICS_CURRENT.md`` — Pipeline version bumped to v0.5.52. Test count: 1873. - 1873 tests passing (1843 existing + 30 new). @@ -359,7 +359,7 @@ was missing ~11 of 19 benchmarks; METRICS_CURRENT.md test count was stale (1832+ → 1843); NOVELTY_AUDIT_GUIDE.md referenced a nonexistent script. Changes: -- ``docs/VIRTUAL_ASSAY_SCOPE.md`` — Phase 3 scope document covering 4 planned +- ``docs/evidence/VIRTUAL_ASSAY_SCOPE.md`` — Phase 3 scope document covering 4 planned modules (membrane binding, structure ensemble, selectivity ratio, stability), 12 explicitly NOT-modeled effects, uncertainty policy (modules with uncertainty > 0.5 cannot affect selection), ablation requirement (each @@ -372,7 +372,7 @@ Changes: - ``docs/evidence/METRICS_CURRENT.md`` — Test count corrected: 1832+ → 1843. - ``docs/evidence/NOVELTY_AUDIT_GUIDE.md`` — Fixed stale script reference: ``scripts/download_uniprot_amps.py`` → ``scripts/download_novelty_dbs.py --uniprot``. -- ``docs/50_LOOP_PLAN.md`` — Loop 30 marked ✅. Phase 3 status updated to +- ``docs/research/50_LOOP_PLAN.md`` — Loop 30 marked ✅. Phase 3 status updated to "In progress — Loop 30 ✅". - ``scripts/__init__.py`` — Populated with module docstring. - 1843 tests passing. No code changes to pipeline. @@ -389,7 +389,7 @@ Changes: automation notes (auto-append by ``calibration-intake`` and ``filter_wave*`` scripts), and explicit limitations. Covers pre-selection rejects, selected but untested, lab-tested inactives, lab-tested toxic, and control failures. -- ``docs/50_LOOP_PLAN.md`` — Phase 2 header marked ✅ complete, status updated +- ``docs/research/50_LOOP_PLAN.md`` — Phase 2 header marked ✅ complete, status updated to v0.5.50, Loop 29 ✅, all 5 exit criteria now show green, Current Position updated to Phase 3 ready. - ``docs/evidence/METRICS_CURRENT.md`` — Bumped to v0.5.50, changelog entry. @@ -432,7 +432,7 @@ Changes: "Potential future packages" to the main package map with version annotations. Removed the stale ``analysis`` future-package entry. Fixed duplicate step "8." in the target future data flow (→ steps 8–10 with correct numbering). -- ``docs/50_LOOP_PLAN.md``: updated "Current Position" from "Loop 25 of 29" +- ``docs/research/50_LOOP_PLAN.md``: updated "Current Position" from "Loop 25 of 29" to "Loop 27 of 29", added Loops 23–27 to the completed Phase 2 table, fixed "Next loop" reference to Loop 28, updated Phase 2 exit-criteria tracking. - ``docs/evidence/METRICS_CURRENT.md``: test count updated to 1834. @@ -721,7 +721,7 @@ Implemented during the pre-wet-lab improvement loop (PRs #31–#54): - CLI integration tests — gold-standard, external-predict, pilot-confident, diversity-check (PRs #74–#79/#82/#85) - Lab-results directory loading + toxicity flag branch coverage (PR #80) -- Wet-lab probability analysis (`docs/WET_LAB_PROBABILITY.md`) — per-family P(MIC≤16) breakdown, composite P(≥1 active) = 99.95% (PRs #81/#87) +- Wet-lab probability analysis (`docs/research/WET_LAB_PROBABILITY.md`) — per-family P(MIC≤16) breakdown, composite P(≥1 active) = 99.95% (PRs #81/#87) - Assay pre-registration (`docs/review/ASSAY_PREREGISTRATION.md`) — MRSA USA300, serum stability gate, RPMI-1640 arm for SEED-009 (PR #83) - SEED-007 helix-wheel length fix 18 AA → 11 AA (PR #84) - `novelty-check-broad` CLI + 72-AMP curated database: 16/20 NOVEL, 3 KNOWN_VARIANT, 1 CLOSE_RELATIVE (`docs/evidence/NOVELTY_BROAD_CHECK.md`) (PR #86) @@ -777,7 +777,7 @@ Implemented during the pre-wet-lab improvement loop (PRs #31–#54): ## v0.5.5 — Wave 0.5 Scaffold Diversification ✓ (2026-06-29) -- Baseline freeze of Wave 0 panel (20 candidates, 7 families, `docs/WAVE_0_5_BASELINE.md`) +- Baseline freeze of Wave 0 panel (20 candidates, 7 families, `docs/research/WAVE_0_5_BASELINE.md`) - 10 new seed families designed: SEED-010 (histatin), SEED-011 (Pro-kinked), SEED-012 (Gly-rich), SEED-013 (pleurocidin), SEED-014 (cathelicidin-mini), SEED-015 (KFLK de novo), SEED-016 (RRWK dual-Trp), SEED-017 (Pro-kinked Leu/Phe), SEED-018 (GKRK scattered-charge), SEED-019 (Arg-Val alternating) - 118 raw candidates generated across 10 new families (`scripts/generate_wave0_5_candidates.py`) - 60 candidates shortlisted at internal gates (activity≥0.70, safety≥0.75, novelty≥0.50, `scripts/filter_wave0_5_candidates.py`) @@ -1065,7 +1065,7 @@ It must NOT replace the ensemble activity gate — it is a complementary signal. - New script: `scripts/benchmark_cross_dataset.py` - New target: `make bench-cross-dataset` - Docs: `docs/evidence/METRICS_CURRENT.md` (new section), `docs/evidence/BENCHMARK_CARD.md` (new section), - `docs/50_LOOP_PLAN.md` (Phase 1 ✅) + `docs/research/50_LOOP_PLAN.md` (Phase 1 ✅) ## v0.5.34 — Benchmark Card Consolidation ✓ (2026-07-05) @@ -1386,7 +1386,7 @@ Changes: loader (happy + every rejection mode), gate evaluator (every minimum condition), prohibited-action audit, rate-limit status, reviewer- artefact status, writers, end-to-end CLI smoke. Total 1647 passing. -- `docs/CALIBRATION_POLICY.md`: human-readable overview of the policy, +- `docs/evidence/CALIBRATION_POLICY.md`: human-readable overview of the policy, the gate, the permanent floor, rate limits, and how to update. Key honest limitations (must read before relying on the gate): diff --git a/docs/WAVE_0_5_BASELINE.md b/docs/research/WAVE_0_5_BASELINE.md similarity index 98% rename from docs/WAVE_0_5_BASELINE.md rename to docs/research/WAVE_0_5_BASELINE.md index 8b234004..1212b233 100644 --- a/docs/WAVE_0_5_BASELINE.md +++ b/docs/research/WAVE_0_5_BASELINE.md @@ -76,7 +76,7 @@ and classifies each candidate into a role that guides Wave 1 panel construction. ## External Predictor Status Historical baseline state only: at the time this file was frozen, external predictor fields had not yet been filled. -That is no longer the current repo state. The completed Wave 0.5 external screen is summarized in `docs/evidence/METRICS_CURRENT.md`, `docs/research/ROADMAP.md`, and `docs/WAVE_0_5_EXTERNAL_PREDICTOR_SUMMARY.md`. +That is no longer the current repo state. The completed Wave 0.5 external screen is summarized in `docs/evidence/METRICS_CURRENT.md`, `docs/research/ROADMAP.md`, and `docs/research/WAVE_0_5_EXTERNAL_PREDICTOR_SUMMARY.md`. The original manual-submission tool stack was: diff --git a/docs/WAVE_0_5_EXTERNAL_PREDICTOR_SUMMARY.md b/docs/research/WAVE_0_5_EXTERNAL_PREDICTOR_SUMMARY.md similarity index 97% rename from docs/WAVE_0_5_EXTERNAL_PREDICTOR_SUMMARY.md rename to docs/research/WAVE_0_5_EXTERNAL_PREDICTOR_SUMMARY.md index 4ca2543e..89b260c1 100644 --- a/docs/WAVE_0_5_EXTERNAL_PREDICTOR_SUMMARY.md +++ b/docs/research/WAVE_0_5_EXTERNAL_PREDICTOR_SUMMARY.md @@ -150,5 +150,5 @@ If not achieved, return to Phase 3 and generate additional candidates. ## See Also - `outputs/wave0_5_internal_shortlist.csv` — 60 candidates with internal scores -- `docs/WAVE_0_5_BASELINE.md` — Wave 0 panel baseline -- `docs/EXTERNAL_PREDICTOR_CONSENSUS.md` — Wave 0 consensus (same tool stack) +- `docs/research/WAVE_0_5_BASELINE.md` — Wave 0 panel baseline +- `docs/evidence/EXTERNAL_PREDICTOR_CONSENSUS.md` — Wave 0 consensus (same tool stack) diff --git a/docs/WAVE_0_5_NOVELTY_AUDIT.md b/docs/research/WAVE_0_5_NOVELTY_AUDIT.md similarity index 100% rename from docs/WAVE_0_5_NOVELTY_AUDIT.md rename to docs/research/WAVE_0_5_NOVELTY_AUDIT.md diff --git a/docs/WAVE_0_5_SCAFFOLD_DIVERSIFICATION_PLAN.md b/docs/research/WAVE_0_5_SCAFFOLD_DIVERSIFICATION_PLAN.md similarity index 91% rename from docs/WAVE_0_5_SCAFFOLD_DIVERSIFICATION_PLAN.md rename to docs/research/WAVE_0_5_SCAFFOLD_DIVERSIFICATION_PLAN.md index 801d7700..82890f9d 100644 --- a/docs/WAVE_0_5_SCAFFOLD_DIVERSIFICATION_PLAN.md +++ b/docs/research/WAVE_0_5_SCAFFOLD_DIVERSIFICATION_PLAN.md @@ -25,12 +25,12 @@ correlated-failure risk. The goal is not more candidates — it is more independ | Phase | Action | Output | |---|---|---| -| 1 — Baseline Freeze | Locked Wave 0 panel state | `docs/WAVE_0_5_BASELINE.md`, `outputs/wave0_5_baseline.csv` | +| 1 — Baseline Freeze | Locked Wave 0 panel state | `docs/research/WAVE_0_5_BASELINE.md`, `outputs/wave0_5_baseline.csv` | | 2 — Scaffold Search | Defined 10 new independent families | (design parameters in `scripts/generate_wave0_5_candidates.py`) | | 3 — Candidate Generation | Generated 118 raw candidates | `outputs/wave0_5_raw_candidates.csv` | | 4 — Internal Filter | Shortlisted 60 at internal gates | `outputs/wave0_5_internal_shortlist.csv` | -| 5 — External Predictors | Planned manual submissions; later completed and summarized in current-state docs | `docs/WAVE_0_5_EXTERNAL_PREDICTOR_SUMMARY.md`, `docs/evidence/METRICS_CURRENT.md` | -| 6 — Novelty Audit | Classified 60 shortlist vs 92 references | `outputs/wave0_5_novelty_audit.csv`, `docs/WAVE_0_5_NOVELTY_AUDIT.md` | +| 5 — External Predictors | Planned manual submissions; later completed and summarized in current-state docs | `docs/research/WAVE_0_5_EXTERNAL_PREDICTOR_SUMMARY.md`, `docs/evidence/METRICS_CURRENT.md` | +| 6 — Novelty Audit | Classified 60 shortlist vs 92 references | `outputs/wave0_5_novelty_audit.csv`, `docs/research/WAVE_0_5_NOVELTY_AUDIT.md` | | 7 — Panel Selection | Selected 24-candidate Wave 1 panel | `outputs/wave1_final_panel.csv`, `docs/research/WAVE_1_PANEL_RECOMMENDATION.md` | | 8 — Evidence Certificates | Generated machine-readable certs | `outputs/evidence_wave0_5/*.json` | | 9 — Docs Update | Updated all docs | `docs/evidence/METRICS_CURRENT.md`, `docs/research/ROADMAP.md`, etc. | @@ -70,7 +70,7 @@ correlated-failure risk. The goal is not more candidates — it is more independ | Task | Status | Blocker | |---|---|---| -| External predictor screen (all 60 shortlist) | COMPLETE | Reflected in `docs/evidence/METRICS_CURRENT.md` and `docs/WAVE_0_5_EXTERNAL_PREDICTOR_SUMMARY.md` | +| External predictor screen (all 60 shortlist) | COMPLETE | Reflected in `docs/evidence/METRICS_CURRENT.md` and `docs/research/WAVE_0_5_EXTERNAL_PREDICTOR_SUMMARY.md` | | Wave 0.5 Gate W0.5-3 (activity consensus) | COMPLETE | Gate result recorded after external screen | | Wave 0.5 Gate W0.5-4 (safety annotation) | COMPLETE | Gate result recorded after external screen | | FTO (freedom-to-operate) for CLOSE_RELATIVE candidates | PENDING | Legal review | diff --git a/docs/WET_LAB_PROBABILITY.md b/docs/research/WET_LAB_PROBABILITY.md similarity index 100% rename from docs/WET_LAB_PROBABILITY.md rename to docs/research/WET_LAB_PROBABILITY.md diff --git a/docs/WHY_WORK_ON_OPENAMP.md b/docs/research/WHY_WORK_ON_OPENAMP.md similarity index 100% rename from docs/WHY_WORK_ON_OPENAMP.md rename to docs/research/WHY_WORK_ON_OPENAMP.md diff --git a/docs/review/PRE_WET_LAB_CHECKLIST.md b/docs/review/PRE_WET_LAB_CHECKLIST.md index fa400f74..3723ced1 100644 --- a/docs/review/PRE_WET_LAB_CHECKLIST.md +++ b/docs/review/PRE_WET_LAB_CHECKLIST.md @@ -251,7 +251,7 @@ infectious disease specialist — ideally someone who: | Document | Purpose | |----------|---------| -| `docs/REVIEWER_SUMMARY.md` | 2-page quick overview — start here | +| `docs/review/REVIEWER_SUMMARY.md` | 2-page quick overview — start here | | `docs/review/EXPERT_REVIEW_PACK.md` | Full expert review packet with all candidate data | | `docs/evidence/NOVELTY_AUDIT_FULL.md` | Novelty classification against 120-AMP library | | `docs/evidence/BENCHMARK_CARD.md` | Benchmark methodology and metrics | diff --git a/docs/review/PUBLICATION_PACK.md b/docs/review/PUBLICATION_PACK.md index d87384d5..32cf4fcf 100644 --- a/docs/review/PUBLICATION_PACK.md +++ b/docs/review/PUBLICATION_PACK.md @@ -148,9 +148,9 @@ A top-level README in the release package should include: ## Related Documents -- `docs/RELEASE_CHECKLIST.md` — General release process. +- `docs/trust/RELEASE_CHECKLIST.md` — General release process. - `docs/evidence/CLAIM_REVIEW_CHECKLIST.md` — Claim verification before publication. -- `docs/DATA_GOVERNANCE.md` — Data licensing and redistribution policy. +- `docs/trust/DATA_GOVERNANCE.md` — Data licensing and redistribution policy. - `docs/engineering/ARTIFACT_VERSIONING.md` — Versioning scheme for pipeline outputs. -- `docs/MODEL_CARD_TEMPLATE.md` — Model card format for released scorers. -- `docs/TRUST_CENTER.md` — Trust and safety documentation hub. +- `docs/trust/MODEL_CARD_TEMPLATE.md` — Model card format for released scorers. +- `docs/trust/TRUST_CENTER.md` — Trust and safety documentation hub. diff --git a/docs/review/README.md b/docs/review/README.md index 32fb1a57..84ad8431 100644 --- a/docs/review/README.md +++ b/docs/review/README.md @@ -18,7 +18,7 @@ laboratory protocols. - [Assay preregistration](ASSAY_PREREGISTRATION.md) - [Pre-wet-lab checklist](PRE_WET_LAB_CHECKLIST.md) - [Publication pack](PUBLICATION_PACK.md) -- [Negative result archive](../NEGATIVE_RESULT_ARCHIVE.md) +- [Negative result archive](../evidence/NEGATIVE_RESULT_ARCHIVE.md) All experimental decisions remain with qualified humans under appropriate institutional oversight. diff --git a/docs/REVIEWER_SUMMARY.md b/docs/review/REVIEWER_SUMMARY.md similarity index 100% rename from docs/REVIEWER_SUMMARY.md rename to docs/review/REVIEWER_SUMMARY.md diff --git a/docs/DATA_GOVERNANCE.md b/docs/trust/DATA_GOVERNANCE.md similarity index 100% rename from docs/DATA_GOVERNANCE.md rename to docs/trust/DATA_GOVERNANCE.md diff --git a/docs/MODEL_CARD_TEMPLATE.md b/docs/trust/MODEL_CARD_TEMPLATE.md similarity index 100% rename from docs/MODEL_CARD_TEMPLATE.md rename to docs/trust/MODEL_CARD_TEMPLATE.md diff --git a/docs/PUBLICATION_POLICY.md b/docs/trust/PUBLICATION_POLICY.md similarity index 100% rename from docs/PUBLICATION_POLICY.md rename to docs/trust/PUBLICATION_POLICY.md diff --git a/docs/trust/README.md b/docs/trust/README.md index 131df47d..cbe575ca 100644 --- a/docs/trust/README.md +++ b/docs/trust/README.md @@ -2,18 +2,18 @@ ## Start here -- [Trust Center](../TRUST_CENTER.md) +- [Trust Center](TRUST_CENTER.md) - [Safety policy](../../SAFETY.md) - [Responsible use](../../RESPONSIBLE_USE.md) -- [Safe scope](../SAFE_SCOPE.md) +- [Safe scope](SAFE_SCOPE.md) ## Governance -- [Data governance](../DATA_GOVERNANCE.md) -- [Publication policy](../PUBLICATION_POLICY.md) -- [Release checklist](../RELEASE_CHECKLIST.md) -- [Risk register](../RISK_REGISTER.md) -- [Safety documentation audit](../SAFETY_DOC_AUDIT.md) +- [Data governance](DATA_GOVERNANCE.md) +- [Publication policy](PUBLICATION_POLICY.md) +- [Release checklist](RELEASE_CHECKLIST.md) +- [Risk register](RISK_REGISTER.md) +- [Safety documentation audit](SAFETY_DOC_AUDIT.md) Changes to safety policy, release policy, claim boundaries, benchmark thresholds, or calibration policy require human review. diff --git a/docs/RELEASE_CHECKLIST.md b/docs/trust/RELEASE_CHECKLIST.md similarity index 97% rename from docs/RELEASE_CHECKLIST.md rename to docs/trust/RELEASE_CHECKLIST.md index 06f4ddf7..53c64dac 100644 --- a/docs/RELEASE_CHECKLIST.md +++ b/docs/trust/RELEASE_CHECKLIST.md @@ -48,7 +48,7 @@ A release is a trust event. ### 4. Evidence and claims -- [ ] Claims mapped to `docs/PROOF_LADDER.md`. +- [ ] Claims mapped to `docs/evidence/PROOF_LADDER.md`. - [ ] Dry-lab outputs are not described as biological proof. - [ ] Unsupported claims listed or avoided. - [ ] Positive evidence is not overgeneralized. @@ -118,7 +118,7 @@ A release is a trust event. ## Claim level -Mapped to `docs/PROOF_LADDER.md`: Level . +Mapped to `docs/evidence/PROOF_LADDER.md`: Level . ## What this does not prove diff --git a/docs/RISK_REGISTER.md b/docs/trust/RISK_REGISTER.md similarity index 100% rename from docs/RISK_REGISTER.md rename to docs/trust/RISK_REGISTER.md diff --git a/docs/RISK_REVIEW.md b/docs/trust/RISK_REVIEW.md similarity index 100% rename from docs/RISK_REVIEW.md rename to docs/trust/RISK_REVIEW.md diff --git a/docs/SAFETY_DOC_AUDIT.md b/docs/trust/SAFETY_DOC_AUDIT.md similarity index 100% rename from docs/SAFETY_DOC_AUDIT.md rename to docs/trust/SAFETY_DOC_AUDIT.md diff --git a/docs/SAFE_SCOPE.md b/docs/trust/SAFE_SCOPE.md similarity index 100% rename from docs/SAFE_SCOPE.md rename to docs/trust/SAFE_SCOPE.md diff --git a/docs/TRUST_CENTER.md b/docs/trust/TRUST_CENTER.md similarity index 95% rename from docs/TRUST_CENTER.md rename to docs/trust/TRUST_CENTER.md index af0b649a..41fde47d 100644 --- a/docs/TRUST_CENTER.md +++ b/docs/trust/TRUST_CENTER.md @@ -35,15 +35,15 @@ OpenAMP has several trust surfaces. | Surface | Trust question | Source of truth | |---|---|---| | Safety | Could this increase misuse risk? | `SAFETY.md`, `RESPONSIBLE_USE.md`, `MODEL_RELEASE_POLICY.md` | -| Claims | Does wording exceed evidence? | `docs/PROOF_LADDER.md` | +| Claims | Does wording exceed evidence? | `docs/evidence/PROOF_LADDER.md` | | Benchmarks | Could the result be shortcut-driven? | `docs/evidence/BENCHMARK_GOVERNANCE.md`, `docs/evidence/METRICS_CURRENT.md` | | Candidates | Why was this candidate selected? | `docs/evidence/EVIDENCE_CERTIFICATE.md` | | External review | Can outsiders reject the package? | `docs/review/EXTERNAL_REVIEW_PACKET.md` | -| Data | Can the data be used and redistributed? | `DATA_LICENSE_NOTICE.md`, `docs/DATA_GOVERNANCE.md` | -| Models | Should this model/artifact be released? | `MODEL_RELEASE_POLICY.md`, `docs/MODEL_CARD_TEMPLATE.md` | -| Calibration | Can the system update without cherry-picking? | `docs/CALIBRATION_POLICY.md` | +| Data | Can the data be used and redistributed? | `DATA_LICENSE_NOTICE.md`, `docs/trust/DATA_GOVERNANCE.md` | +| Models | Should this model/artifact be released? | `MODEL_RELEASE_POLICY.md`, `docs/trust/MODEL_CARD_TEMPLATE.md` | +| Calibration | Can the system update without cherry-picking? | `docs/evidence/CALIBRATION_POLICY.md` | | Agents | Can agents work safely? | `AGENTS.md`, `docs/getting-started/AGENT_ONBOARDING.md` | -| Maintainers | Can the project survive growth? | `docs/getting-started/MAINTAINER_GUIDE.md`, `docs/RELEASE_CHECKLIST.md` | +| Maintainers | Can the project survive growth? | `docs/getting-started/MAINTAINER_GUIDE.md`, `docs/trust/RELEASE_CHECKLIST.md` | ## Trust architecture diff --git a/scripts/release/full_reproducibility_report.py b/scripts/release/full_reproducibility_report.py index 3edd9778..9affbc2f 100644 --- a/scripts/release/full_reproducibility_report.py +++ b/scripts/release/full_reproducibility_report.py @@ -94,14 +94,14 @@ def build_report() -> dict: # 5. Phase 4 readiness phase4_exit = { - "lab_partner_onboarding": "docs/LAB_PARTNER_ONBOARDING.md", + "lab_partner_onboarding": "docs/review/LAB_PARTNER_ONBOARDING.md", "pass_fail_criteria": "configs/wave1_pass_fail.yaml", "expert_review_template": ".github/ISSUE_TEMPLATE/expert_review.yml", "decision_log_schema": "schemas/decision_log.schema.json", "lab_batch_pack": "scripts/build_lab_batch_pack.py", - "analysis_plan": "docs/WAVE1_ANALYSIS_PLAN.md", + "analysis_plan": "docs/research/WAVE1_ANALYSIS_PLAN.md", "data_return_validation": "scripts/validate_lab_data_return.py", - "publication_pack": "docs/PUBLICATION_PACK.md", + "publication_pack": "docs/review/PUBLICATION_PACK.md", } exists = {k: Path(repo_root / v).exists() for k, v in phase4_exit.items()} report["sections"]["phase_4_readiness"] = { diff --git a/src/openamp_foundry/gates/wave0_5_gate_checker.py b/src/openamp_foundry/gates/wave0_5_gate_checker.py index d8a5e4d9..7cea984e 100644 --- a/src/openamp_foundry/gates/wave0_5_gate_checker.py +++ b/src/openamp_foundry/gates/wave0_5_gate_checker.py @@ -108,7 +108,7 @@ def check_w05_3_activity_consensus(consensus_path: Path) -> W05GateResult: status="PENDING", value=f"{len(pending_rows)}/{len(rows)} rows PENDING", threshold=f">= {int(MIN_ACTIVITY_CONSENSUS_FRACTION * 100)}% STRONG_ACTIVITY", - detail="External predictor submissions required. See docs/WAVE_0_5_EXTERNAL_PREDICTOR_SUMMARY.md", + detail="External predictor submissions required. See docs/research/WAVE_0_5_EXTERNAL_PREDICTOR_SUMMARY.md", ) strong = sum(1 for r in rows if r.get("activity_consensus") == "STRONG_ACTIVITY") @@ -145,7 +145,7 @@ def check_w05_4_safety_annotation(consensus_path: Path) -> W05GateResult: status="PENDING", value=f"{len(missing)}/{len(rows)} missing", threshold="100% annotated", - detail=f"{len(missing)} candidates need HemoFinder/AntiCP submissions. See docs/WAVE_0_5_EXTERNAL_PREDICTOR_SUMMARY.md", + detail=f"{len(missing)} candidates need HemoFinder/AntiCP submissions. See docs/research/WAVE_0_5_EXTERNAL_PREDICTOR_SUMMARY.md", ) return W05GateResult( diff --git a/src/openamp_foundry/pipeline.py b/src/openamp_foundry/pipeline.py index 79a720b5..912642fa 100644 --- a/src/openamp_foundry/pipeline.py +++ b/src/openamp_foundry/pipeline.py @@ -86,6 +86,19 @@ def score_candidates( from openamp_foundry.scoring.expert import expert_score exp = expert_score(candidate.sequence, features=features) raw_scores["expert_composite"] = exp.composite + # Charge bias: fraction of activity score driven by charge density. + # Higher values (>0.8) indicate the candidate's score is charge-dominated. + # This is informational — helps identify candidates where non-charge + # features (hydrophobic moment, amphipathicity) are not contributing. + _orig = act + if _orig > 0 and valid: + _mod = dict(features) + _mod["charge_density_ph74"] = 0.0 + _mod["charge_density"] = 0.0 + _no_charge = activity_likeness_score(_mod) + raw_scores["charge_bias"] = round(1.0 - min(_no_charge / _orig, 1.0), 4) + else: + raw_scores["charge_bias"] = 0.0 item = ScoredCandidate( candidate=candidate, features=features, diff --git a/tests/test_active_learning.py b/tests/active_learning/test_active_learning.py similarity index 99% rename from tests/test_active_learning.py rename to tests/active_learning/test_active_learning.py index c4592e2a..16698f37 100644 --- a/tests/test_active_learning.py +++ b/tests/active_learning/test_active_learning.py @@ -14,7 +14,7 @@ import pytest -REPO_ROOT = Path(__file__).resolve().parent.parent +REPO_ROOT = Path(__file__).resolve().parents[2] # ── Helpers ─────────────────────────────────────────────────────────── diff --git a/tests/test_ablation.py b/tests/benchmarks/test_ablation.py similarity index 100% rename from tests/test_ablation.py rename to tests/benchmarks/test_ablation.py diff --git a/tests/test_auprc.py b/tests/benchmarks/test_auprc.py similarity index 100% rename from tests/test_auprc.py rename to tests/benchmarks/test_auprc.py diff --git a/tests/test_cluster_split.py b/tests/benchmarks/test_cluster_split.py similarity index 100% rename from tests/test_cluster_split.py rename to tests/benchmarks/test_cluster_split.py diff --git a/tests/test_expert_ablation.py b/tests/benchmarks/test_expert_ablation.py similarity index 100% rename from tests/test_expert_ablation.py rename to tests/benchmarks/test_expert_ablation.py diff --git a/tests/test_feature_decomp.py b/tests/benchmarks/test_feature_decomp.py similarity index 100% rename from tests/test_feature_decomp.py rename to tests/benchmarks/test_feature_decomp.py diff --git a/tests/test_hidden_active_recovery.py b/tests/benchmarks/test_hidden_active_recovery.py similarity index 100% rename from tests/test_hidden_active_recovery.py rename to tests/benchmarks/test_hidden_active_recovery.py diff --git a/tests/test_metrics_snapshot.py b/tests/benchmarks/test_metrics_snapshot.py similarity index 100% rename from tests/test_metrics_snapshot.py rename to tests/benchmarks/test_metrics_snapshot.py diff --git a/tests/test_negative_robustness.py b/tests/benchmarks/test_negative_robustness.py similarity index 100% rename from tests/test_negative_robustness.py rename to tests/benchmarks/test_negative_robustness.py diff --git a/tests/test_retrospective.py b/tests/benchmarks/test_retrospective.py similarity index 100% rename from tests/test_retrospective.py rename to tests/benchmarks/test_retrospective.py diff --git a/tests/test_data_loaders.py b/tests/data/test_data_loaders.py similarity index 99% rename from tests/test_data_loaders.py rename to tests/data/test_data_loaders.py index dd808282..b14b69e3 100644 --- a/tests/test_data_loaders.py +++ b/tests/data/test_data_loaders.py @@ -138,7 +138,7 @@ def test_returns_peptide_candidate_objects(self): assert isinstance(candidates[0], PeptideCandidate) def test_uses_demo_file_successfully(self): - demo = Path(__file__).parents[1] / "examples" / "sequences" / "demo_candidates.csv" + demo = Path(__file__).parents[2] / "examples" / "sequences" / "demo_candidates.csv" candidates = load_candidates_csv(demo) assert len(candidates) > 0 for c in candidates: diff --git a/tests/test_lab_results.py b/tests/data/test_lab_results.py similarity index 100% rename from tests/test_lab_results.py rename to tests/data/test_lab_results.py diff --git a/tests/test_reference_set.py b/tests/data/test_reference_set.py similarity index 100% rename from tests/test_reference_set.py rename to tests/data/test_reference_set.py diff --git a/tests/test_batch_pack.py b/tests/evidence/test_batch_pack.py similarity index 100% rename from tests/test_batch_pack.py rename to tests/evidence/test_batch_pack.py diff --git a/tests/test_certificate.py b/tests/evidence/test_certificate.py similarity index 100% rename from tests/test_certificate.py rename to tests/evidence/test_certificate.py diff --git a/tests/test_certificate_schema.py b/tests/evidence/test_certificate_schema.py similarity index 97% rename from tests/test_certificate_schema.py rename to tests/evidence/test_certificate_schema.py index 658b12f2..8b204c29 100644 --- a/tests/test_certificate_schema.py +++ b/tests/evidence/test_certificate_schema.py @@ -11,7 +11,7 @@ from openamp_foundry.features.physchem import compute_features from openamp_foundry.types import PeptideCandidate, ScoredCandidate -_SCHEMA = Path(__file__).parents[1] / "schemas" / "candidate.schema.json" +_SCHEMA = Path(__file__).parents[2] / "schemas" / "candidate.schema.json" def test_certificate_validates(): diff --git a/tests/test_decision_log_schema.py b/tests/evidence/test_decision_log_schema.py similarity index 100% rename from tests/test_decision_log_schema.py rename to tests/evidence/test_decision_log_schema.py diff --git a/tests/test_reproducibility.py b/tests/evidence/test_reproducibility.py similarity index 100% rename from tests/test_reproducibility.py rename to tests/evidence/test_reproducibility.py diff --git a/tests/test_aggregation_propensity.py b/tests/features/test_aggregation_propensity.py similarity index 100% rename from tests/test_aggregation_propensity.py rename to tests/features/test_aggregation_propensity.py diff --git a/tests/test_aggregation_safe_mutations.py b/tests/features/test_aggregation_safe_mutations.py similarity index 100% rename from tests/test_aggregation_safe_mutations.py rename to tests/features/test_aggregation_safe_mutations.py diff --git a/tests/test_helix_propensity.py b/tests/features/test_helix_propensity.py similarity index 100% rename from tests/test_helix_propensity.py rename to tests/features/test_helix_propensity.py diff --git a/tests/test_net_charge_ph74.py b/tests/features/test_net_charge_ph74.py similarity index 100% rename from tests/test_net_charge_ph74.py rename to tests/features/test_net_charge_ph74.py diff --git a/tests/test_physchem.py b/tests/features/test_physchem.py similarity index 100% rename from tests/test_physchem.py rename to tests/features/test_physchem.py diff --git a/tests/test_physchem_amphipathicity.py b/tests/features/test_physchem_amphipathicity.py similarity index 100% rename from tests/test_physchem_amphipathicity.py rename to tests/features/test_physchem_amphipathicity.py diff --git a/tests/test_simple_mutation.py b/tests/generators/test_simple_mutation.py similarity index 100% rename from tests/test_simple_mutation.py rename to tests/generators/test_simple_mutation.py diff --git a/tests/test_template_mutator.py b/tests/generators/test_template_mutator.py similarity index 100% rename from tests/test_template_mutator.py rename to tests/generators/test_template_mutator.py diff --git a/tests/test_cli.py b/tests/integration/test_cli.py similarity index 100% rename from tests/test_cli.py rename to tests/integration/test_cli.py diff --git a/tests/test_cli_triage.py b/tests/integration/test_cli_triage.py similarity index 100% rename from tests/test_cli_triage.py rename to tests/integration/test_cli_triage.py diff --git a/tests/test_config.py b/tests/integration/test_config.py similarity index 91% rename from tests/test_config.py rename to tests/integration/test_config.py index 32112626..40c77853 100644 --- a/tests/test_config.py +++ b/tests/integration/test_config.py @@ -22,20 +22,20 @@ def test_loads_valid_yaml(self): assert result["nested"]["a"] == 1 def test_loads_default_pipeline_config(self): - default = Path(__file__).parents[1] / "configs" / "pipeline.yaml" + default = Path(__file__).parents[2] / "configs" / "pipeline.yaml" result = load_config(default) assert "filters" in result assert "weights" in result assert "selection" in result def test_default_config_weights_are_positive(self): - default = Path(__file__).parents[1] / "configs" / "pipeline.yaml" + default = Path(__file__).parents[2] / "configs" / "pipeline.yaml" result = load_config(default) for name, w in result["weights"].items(): assert w > 0, f"Weight '{name}' must be positive, got {w}" def test_default_config_filters_present(self): - default = Path(__file__).parents[1] / "configs" / "pipeline.yaml" + default = Path(__file__).parents[2] / "configs" / "pipeline.yaml" result = load_config(default) filters = result["filters"] assert "min_length" in filters @@ -43,7 +43,7 @@ def test_default_config_filters_present(self): assert filters["min_length"] < filters["max_length"] def test_default_config_selection_present(self): - default = Path(__file__).parents[1] / "configs" / "pipeline.yaml" + default = Path(__file__).parents[2] / "configs" / "pipeline.yaml" result = load_config(default) sel = result["selection"] assert "top_n" in sel @@ -54,7 +54,7 @@ def test_default_config_selection_present(self): assert 0.0 <= sel["max_disagreement"] <= 1.0 def test_phase3_config_selection_present(self): - phase3 = Path(__file__).parents[1] / "configs" / "phase3.yaml" + phase3 = Path(__file__).parents[2] / "configs" / "phase3.yaml" result = load_config(phase3) sel = result["selection"] assert "top_n" in sel @@ -65,13 +65,13 @@ def test_phase3_config_selection_present(self): assert 0.0 <= sel["max_disagreement"] <= 1.0 def test_phase3_config_weights_are_positive(self): - phase3 = Path(__file__).parents[1] / "configs" / "phase3.yaml" + phase3 = Path(__file__).parents[2] / "configs" / "phase3.yaml" result = load_config(phase3) for name, w in result["weights"].items(): assert w > 0, f"phase3.yaml weight '{name}' must be positive, got {w}" def test_phase3_config_filters_present(self): - phase3 = Path(__file__).parents[1] / "configs" / "phase3.yaml" + phase3 = Path(__file__).parents[2] / "configs" / "phase3.yaml" result = load_config(phase3) filters = result["filters"] assert "min_length" in filters diff --git a/tests/test_docs_consistent.py b/tests/integration/test_docs_consistent.py similarity index 94% rename from tests/test_docs_consistent.py rename to tests/integration/test_docs_consistent.py index eb613b63..a37c97d9 100644 --- a/tests/test_docs_consistent.py +++ b/tests/integration/test_docs_consistent.py @@ -7,7 +7,7 @@ from pathlib import Path -REPO_ROOT = Path(__file__).resolve().parent.parent +REPO_ROOT = Path(__file__).resolve().parents[2] DOCS_DIR = REPO_ROOT / "docs" # Current authoritative benchmark values — single source of truth @@ -116,7 +116,7 @@ def test_doc_simulation_benchmark_report_records_blocked_weighted_mode(self): assert "sim_max_uncertainty" in report def test_virtual_assay_scope_records_uncertainty_certificate_contract(self): - scope = (DOCS_DIR / "VIRTUAL_ASSAY_SCOPE.md").read_text(encoding="utf-8") + scope = (DOCS_DIR / "evidence" / "VIRTUAL_ASSAY_SCOPE.md").read_text(encoding="utf-8") assert "evidence" in scope assert "certificates" in scope assert "uncertainty" in scope @@ -175,7 +175,7 @@ def test_doc_no_overconfident_probability_claims(self): def test_doc_wet_lab_probability_has_honest_correction(self): """WET_LAB_PROBABILITY.md must contain an honest lower-bound estimate.""" - path = DOCS_DIR / "WET_LAB_PROBABILITY.md" + path = DOCS_DIR / "research" / "WET_LAB_PROBABILITY.md" assert path.exists() text = path.read_text(encoding="utf-8") assert "55–80%" in text or "55-80" in text or "honest" in text.lower(), ( @@ -187,7 +187,7 @@ def test_doc_wave05_generated_outputs_claimed_only_if_present(self): files_present = all(path.exists() for path in WAVE05_GENERATED_OUTPUTS) metrics_text = (DOCS_DIR / "evidence" / "METRICS_CURRENT.md").read_text(encoding="utf-8") - summary_text = (DOCS_DIR / "WAVE_0_5_EXTERNAL_PREDICTOR_SUMMARY.md").read_text( + summary_text = (DOCS_DIR / "research" / "WAVE_0_5_EXTERNAL_PREDICTOR_SUMMARY.md").read_text( encoding="utf-8" ) @@ -198,8 +198,8 @@ def test_doc_wave05_generated_outputs_claimed_only_if_present(self): def test_doc_wave05_historical_docs_do_not_pose_as_live_pending_state(self): """Historical Wave 0.5 docs must label superseded pending steps as historical.""" - baseline_text = (DOCS_DIR / "WAVE_0_5_BASELINE.md").read_text(encoding="utf-8") - scaffold_text = (DOCS_DIR / "WAVE_0_5_SCAFFOLD_DIVERSIFICATION_PLAN.md").read_text( + baseline_text = (DOCS_DIR / "research" / "WAVE_0_5_BASELINE.md").read_text(encoding="utf-8") + scaffold_text = (DOCS_DIR / "research" / "WAVE_0_5_SCAFFOLD_DIVERSIFICATION_PLAN.md").read_text( encoding="utf-8" ) prereg_text = (DOCS_DIR / "review" / "ASSAY_PREREGISTRATION.md").read_text(encoding="utf-8") @@ -217,11 +217,11 @@ def test_doc_wave05_historical_docs_do_not_pose_as_live_pending_state(self): def test_doc_external_predictor_gate_distinguishes_generic_from_wave05(self): """Live docs must not imply the completed Wave 0.5 screen is still wholly pending.""" - consensus_text = (DOCS_DIR / "EXTERNAL_PREDICTOR_CONSENSUS.md").read_text( + consensus_text = (DOCS_DIR / "evidence" / "EXTERNAL_PREDICTOR_CONSENSUS.md").read_text( encoding="utf-8" ) decision_text = (DOCS_DIR / "evidence" / "DECISION_RULES.md").read_text(encoding="utf-8") - reviewer_text = (DOCS_DIR / "REVIEWER_SUMMARY.md").read_text(encoding="utf-8") + reviewer_text = (DOCS_DIR / "review" / "REVIEWER_SUMMARY.md").read_text(encoding="utf-8") roadmap_text = (DOCS_DIR / "research" / "ROADMAP.md").read_text(encoding="utf-8") expert_text = (DOCS_DIR / "review" / "EXPERT_REVIEW_PACK.md").read_text(encoding="utf-8") @@ -244,7 +244,7 @@ def test_doc_external_predictor_gate_distinguishes_generic_from_wave05(self): def test_doc_lab_batch_pack_chain_of_custody_current(self): """Loop 45 must stay marked as shipped with identity-hash boundaries.""" - loop_text = (DOCS_DIR / "50_LOOP_PLAN.md").read_text(encoding="utf-8") + loop_text = (DOCS_DIR / "research" / "50_LOOP_PLAN.md").read_text(encoding="utf-8") roadmap_text = (DOCS_DIR / "research" / "ROADMAP.md").read_text(encoding="utf-8") metrics_text = (DOCS_DIR / "evidence" / "METRICS_CURRENT.md").read_text(encoding="utf-8") onboarding_text = (DOCS_DIR / "review" / "LAB_PARTNER_ONBOARDING.md").read_text( diff --git a/tests/test_import_shim.py b/tests/integration/test_import_shim.py similarity index 93% rename from tests/test_import_shim.py rename to tests/integration/test_import_shim.py index abff2992..7635a083 100644 --- a/tests/test_import_shim.py +++ b/tests/integration/test_import_shim.py @@ -7,7 +7,7 @@ from pathlib import Path -REPO_ROOT = Path(__file__).resolve().parent.parent +REPO_ROOT = Path(__file__).resolve().parents[2] SRC_PACKAGE = REPO_ROOT / "src" / "openamp_foundry" diff --git a/tests/test_pipeline_demo.py b/tests/integration/test_pipeline_demo.py similarity index 100% rename from tests/test_pipeline_demo.py rename to tests/integration/test_pipeline_demo.py diff --git a/tests/test_pipeline_filters.py b/tests/integration/test_pipeline_filters.py similarity index 99% rename from tests/test_pipeline_filters.py rename to tests/integration/test_pipeline_filters.py index 816d42e4..f8a821f3 100644 --- a/tests/test_pipeline_filters.py +++ b/tests/integration/test_pipeline_filters.py @@ -227,7 +227,7 @@ def test_disagreement_gate_config_values_documented(tmp_path): exceeds disagreement 0.41 (verified across 709-sequence phase3 pool), so raising to 0.45 accommodates known mechanism divergence without admitting genuinely uncertain ones. """ - repo_root = Path(__file__).parents[1] + repo_root = Path(__file__).parents[2] pipeline_cfg = load_config(repo_root / "configs" / "pipeline.yaml") phase3_cfg = load_config(repo_root / "configs" / "phase3.yaml") @@ -249,7 +249,7 @@ def test_phase3_config_has_stricter_safety_filter_than_pipeline(): A candidate with safety=0.50 passes pipeline.yaml but is blocked by phase3.yaml. """ - repo_root = Path(__file__).parents[1] + repo_root = Path(__file__).parents[2] pipeline_cfg = load_config(repo_root / "configs" / "pipeline.yaml") phase3_cfg = load_config(repo_root / "configs" / "phase3.yaml") @@ -338,7 +338,7 @@ def test_all_proline_pipeline_scores_and_disagreement(tmp_path): assert act < 0.25 # Disagreement ≈ 0.33: passes both pipeline and phase3 gate (both 0.45) assert 0.25 < dis < 0.45, f"PPPPPPPP disagreement expected ~0.33, got {dis}" - repo_root = Path(__file__).parents[1] + repo_root = Path(__file__).parents[2] pipeline_max = float(load_config(repo_root / "configs" / "pipeline.yaml")["selection"]["max_disagreement"]) phase3_max = float(load_config(repo_root / "configs" / "phase3.yaml")["selection"]["max_disagreement"]) assert dis < pipeline_max, "PPPPPPPP should pass the pipeline disagreement gate" diff --git a/tests/test_public_api_imports.py b/tests/integration/test_public_api_imports.py similarity index 100% rename from tests/test_public_api_imports.py rename to tests/integration/test_public_api_imports.py diff --git a/tests/test_utils.py b/tests/integration/test_utils.py similarity index 100% rename from tests/test_utils.py rename to tests/integration/test_utils.py diff --git a/tests/test_order_generator.py b/tests/qc/test_order_generator.py similarity index 100% rename from tests/test_order_generator.py rename to tests/qc/test_order_generator.py diff --git a/tests/test_presynth_qc.py b/tests/qc/test_presynth_qc.py similarity index 100% rename from tests/test_presynth_qc.py rename to tests/qc/test_presynth_qc.py diff --git a/tests/test_boman_scorer.py b/tests/scoring/test_boman_scorer.py similarity index 100% rename from tests/test_boman_scorer.py rename to tests/scoring/test_boman_scorer.py diff --git a/tests/test_elastase_stability.py b/tests/scoring/test_elastase_stability.py similarity index 100% rename from tests/test_elastase_stability.py rename to tests/scoring/test_elastase_stability.py diff --git a/tests/test_expert_ranking_integration.py b/tests/scoring/test_expert_ranking_integration.py similarity index 100% rename from tests/test_expert_ranking_integration.py rename to tests/scoring/test_expert_ranking_integration.py diff --git a/tests/test_expert_scoring.py b/tests/scoring/test_expert_scoring.py similarity index 100% rename from tests/test_expert_scoring.py rename to tests/scoring/test_expert_scoring.py diff --git a/tests/test_hemolysis_risk.py b/tests/scoring/test_hemolysis_risk.py similarity index 100% rename from tests/test_hemolysis_risk.py rename to tests/scoring/test_hemolysis_risk.py diff --git a/tests/test_macrel_local.py b/tests/scoring/test_macrel_local.py similarity index 100% rename from tests/test_macrel_local.py rename to tests/scoring/test_macrel_local.py diff --git a/tests/test_negative_penalization.py b/tests/scoring/test_negative_penalization.py similarity index 100% rename from tests/test_negative_penalization.py rename to tests/scoring/test_negative_penalization.py diff --git a/tests/test_rich_selectivity_integration.py b/tests/scoring/test_rich_selectivity_integration.py similarity index 100% rename from tests/test_rich_selectivity_integration.py rename to tests/scoring/test_rich_selectivity_integration.py diff --git a/tests/test_safety_moment.py b/tests/scoring/test_safety_moment.py similarity index 100% rename from tests/test_safety_moment.py rename to tests/scoring/test_safety_moment.py diff --git a/tests/test_scoring_activity.py b/tests/scoring/test_scoring_activity.py similarity index 100% rename from tests/test_scoring_activity.py rename to tests/scoring/test_scoring_activity.py diff --git a/tests/test_scoring_ensemble.py b/tests/scoring/test_scoring_ensemble.py similarity index 100% rename from tests/test_scoring_ensemble.py rename to tests/scoring/test_scoring_ensemble.py diff --git a/tests/test_scoring_safety.py b/tests/scoring/test_scoring_safety.py similarity index 100% rename from tests/test_scoring_safety.py rename to tests/scoring/test_scoring_safety.py diff --git a/tests/test_scoring_synthesis.py b/tests/scoring/test_scoring_synthesis.py similarity index 100% rename from tests/test_scoring_synthesis.py rename to tests/scoring/test_scoring_synthesis.py diff --git a/tests/test_selectivity_proxy.py b/tests/scoring/test_selectivity_proxy.py similarity index 100% rename from tests/test_selectivity_proxy.py rename to tests/scoring/test_selectivity_proxy.py diff --git a/tests/test_selectivity_rich.py b/tests/scoring/test_selectivity_rich.py similarity index 100% rename from tests/test_selectivity_rich.py rename to tests/scoring/test_selectivity_rich.py diff --git a/tests/test_serum_stability.py b/tests/scoring/test_serum_stability.py similarity index 100% rename from tests/test_serum_stability.py rename to tests/scoring/test_serum_stability.py diff --git a/tests/test_toxicity_penalty.py b/tests/scoring/test_toxicity_penalty.py similarity index 100% rename from tests/test_toxicity_penalty.py rename to tests/scoring/test_toxicity_penalty.py diff --git a/tests/test_diversity.py b/tests/selection/test_diversity.py similarity index 100% rename from tests/test_diversity.py rename to tests/selection/test_diversity.py diff --git a/tests/test_pilot_panel.py b/tests/selection/test_pilot_panel.py similarity index 100% rename from tests/test_pilot_panel.py rename to tests/selection/test_pilot_panel.py diff --git a/tests/test_selection_diversity.py b/tests/selection/test_selection_diversity.py similarity index 100% rename from tests/test_selection_diversity.py rename to tests/selection/test_selection_diversity.py diff --git a/tests/test_selection_pareto.py b/tests/selection/test_selection_pareto.py similarity index 100% rename from tests/test_selection_pareto.py rename to tests/selection/test_selection_pareto.py diff --git a/tests/test_external_adapter.py b/tests/simulation/test_external_adapter.py similarity index 100% rename from tests/test_external_adapter.py rename to tests/simulation/test_external_adapter.py diff --git a/tests/test_membrane_proxy.py b/tests/simulation/test_membrane_proxy.py similarity index 100% rename from tests/test_membrane_proxy.py rename to tests/simulation/test_membrane_proxy.py diff --git a/tests/test_simulation_gate.py b/tests/simulation/test_simulation_gate.py similarity index 100% rename from tests/test_simulation_gate.py rename to tests/simulation/test_simulation_gate.py diff --git a/tests/test_simulation_interfaces.py b/tests/simulation/test_simulation_interfaces.py similarity index 100% rename from tests/test_simulation_interfaces.py rename to tests/simulation/test_simulation_interfaces.py diff --git a/tests/test_simulation_mode_cli.py b/tests/simulation/test_simulation_mode_cli.py similarity index 99% rename from tests/test_simulation_mode_cli.py rename to tests/simulation/test_simulation_mode_cli.py index dcb65d8b..118f3f0e 100644 --- a/tests/test_simulation_mode_cli.py +++ b/tests/simulation/test_simulation_mode_cli.py @@ -10,7 +10,7 @@ DEMO_CANDIDATES = "examples/sequences/demo_candidates.csv" DEMO_REFS = "examples/known_reference/demo_known_amps.csv" -CERT_SCHEMA = Path(__file__).parents[1] / "schemas" / "candidate.schema.json" +CERT_SCHEMA = Path(__file__).parents[2] / "schemas" / "candidate.schema.json" def test_simulation_mode_off_default_has_no_sim_scores(): diff --git a/tests/test_structure_proxy.py b/tests/simulation/test_structure_proxy.py similarity index 100% rename from tests/test_structure_proxy.py rename to tests/simulation/test_structure_proxy.py