Skip to content

Commit 4a5eb17

Browse files
committed
Refresh public tool registry
1 parent 5c3d015 commit 4a5eb17

8 files changed

Lines changed: 390 additions & 63 deletions

AGENTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ The repo ships:
1414
- per-axis readiness state (responses, factors, arms, scale_context, doe, decision_rules, evidence, feasibility)
1515
- decision_rules / stop_rules / risk_register / assumptions blocks
1616
- DoE family taxonomy with minimum-runs guidance
17-
- a curated 37-tool BO/DoE registry with documented adapter routing (`docs/TOOL_REGISTRY.md`, `docs/tool-registry.json`)
17+
- a curated 47-tool BO/DoE and sidecar registry with documented adapter routing (`docs/TOOL_REGISTRY.md`, `docs/tool-registry.json`)
1818
- BoFire, ENTMOOT v2, OMLT, TabPFN, BoTorch, pyDOE3, SALib, scipy, PubMed MCP adapters that degrade cleanly when the optional extra is absent
1919
- a cumulative dossier pattern (per-corpus swarm plus integrator plus harvester) backed by `provenance.py` and `rocrate_retrofit.py`
2020
- a cost-model honesty stack (simulator, bulk reagent, fully-loaded COGS, CMO, range)

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Terminology note: the repo keeps internal identifiers such as `wave1`, `wave2`,
2222

2323
Key capabilities implemented in code:
2424

25-
- A curated 37-tool BO/DoE registry (`docs/TOOL_REGISTRY.md`, `docs/tool-registry.json`) with documented tradeoffs and direct adapters for the load-bearing entries (BoFire, ENTMOOT v2, OMLT, TabPFN, BoTorch, pyDOE3, SALib, scipy, PubMed MCP).
25+
- A curated 47-tool BO/DoE and sidecar registry (`docs/TOOL_REGISTRY.md`, `docs/tool-registry.json`) with documented tradeoffs and direct adapters for the load-bearing entries (BoFire, ENTMOOT v2, OMLT, TabPFN, BoTorch, pyDOE3, SALib, scipy, PubMed MCP).
2626
- A public adaptive-backend surface (`docs/BIOMANUFACTURING_ADAPTIVE_BACKENDS.md`, `docs/adaptive-backend-evaluation.json`) that lets BoFire, BayBE, Ax/BoTorch, ENTMOOT, OMLT, and TabPFN compete behind the same design preflight checks.
2727
- A cost-model honesty stack: simulator number, plus bulk-reagent number, plus fully-loaded shake-flask COGS, plus CMO benchmark, plus a stated range. Documented in `docs/COST_MODEL_REALISM_CHECK.md` with `templates/cost_stack.template.md`.
2828
- Scale-bridge objects with explicit kLa, P/V, tip-speed, mixing-time, OUR, RQ, VVM, and geometric-similarity criteria.
@@ -495,7 +495,7 @@ flowchart TB
495495
- [`docs/ADAPTIVE_WAVE2.md`](docs/ADAPTIVE_WAVE2.md): first-batch result ingestion, assay-power checks, and follow-up planning artifacts
496496
- [`docs/WAVE2_BOTORCH.md`](docs/WAVE2_BOTORCH.md): follow-up planning walkthrough with the BoTorch backend (qEI / qUCB)
497497
- [`docs/SELF_LEARNING_DOE.md`](docs/SELF_LEARNING_DOE.md): learning ledger, hiccup review, and arm-scoped negative memory runbook
498-
- [`docs/TOOL_REGISTRY.md`](docs/TOOL_REGISTRY.md): 37-tool BO/DoE landscape with positioning and adapter status
498+
- [`docs/TOOL_REGISTRY.md`](docs/TOOL_REGISTRY.md): 47-tool BO/DoE and sidecar landscape with positioning and adapter status
499499
- [`docs/BIOMANUFACTURING_ADAPTIVE_BACKENDS.md`](docs/BIOMANUFACTURING_ADAPTIVE_BACKENDS.md): backend-selection surface for BoFire, BayBE, Ax/BoTorch, ENTMOOT, OMLT, and TabPFN
500500
- [`docs/BOFIRE_POSITIONING.md`](docs/BOFIRE_POSITIONING.md): when to route to BoFire and when to stay on stdlib
501501
- [`docs/BOFIRE_CONSTRAINT_PATTERNS.md`](docs/BOFIRE_CONSTRAINT_PATTERNS.md): linear, NChooseK, cardinality patterns, including the `SoboStrategy` + `NChooseK` trap

docs/ADAPTER_MAP.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,4 @@ Reports which extras are installed and which adapters are active. Useful for deb
5555

5656
## Adapter status from the tool registry
5757

58-
See [`TOOL_REGISTRY.md`](TOOL_REGISTRY.md) and [`tool-registry.json`](tool-registry.json) for the curated 37-tool surface that includes each adapter's routing rationale, current signal, fit, and risks.
58+
See [`TOOL_REGISTRY.md`](TOOL_REGISTRY.md) and [`tool-registry.json`](tool-registry.json) for the curated 47-tool surface that includes each adapter's routing rationale, current signal, fit, and risks.

docs/BIOMANUFACTURING_ADAPTIVE_BACKENDS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ Keep **pyDOE/pyDOE3** for static classical DoE baselines and smoke fixtures.
9393

9494
## How Deep Does Each Route Go In This Repo
9595

96-
"37 tools in the registry" and "9 documented adapters" can suggest parity that the repo does not actually claim. The honest depth ladder, as of 2026-05:
96+
"47 tools in the registry" and "9 documented adapters" can suggest parity that the repo does not actually claim. The honest depth ladder, as of 2026-06:
9797

9898
| Tier | Backends | What's in this repo |
9999
| --- | --- | --- |

docs/GLOSSARY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,4 +86,4 @@ Short definitions of the terms a newcomer hits in the first ten minutes of worki
8686

8787
**Goal (Derringer-Suich desirability).** A composite objective formulated from response targets and bounds. Produced by `ferm-doe goals`. Each response gets a desirability score in [0, 1]; the campaign desirability is the geometric mean. See [`goals.py`](../src/biosymphony_ferm_doe/goals.py) for the formulation.
8888

89-
**Tool registry.** The curated set of 37 BO/DoE tools the repo tracks, with adapter status (adopted, evaluate_next, watch, boundary_only, avoid, compatibility_only). Lives at [`tool-registry.json`](tool-registry.json) and is summarized in [`TOOL_REGISTRY.md`](TOOL_REGISTRY.md).
89+
**Tool registry.** The curated set of 47 BO/DoE and sidecar tools the repo tracks, with adapter status (adopted, evaluate_next, watch, boundary_only, avoid, compatibility_only). Lives at [`tool-registry.json`](tool-registry.json) and is summarized in [`TOOL_REGISTRY.md`](TOOL_REGISTRY.md).

docs/TOOL_REGISTRY.md

Lines changed: 58 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,58 @@
1-
# Tool Registry
2-
3-
`docs/tool-registry.json` is the repo's curated tool memory. It is not an
4-
auto-updating package index. It records which external tools are useful for
5-
BioSymphony Ferm DoE, how they should be routed, what claim level they support,
6-
what license boundary applies, and how the engine should fail closed when a
7-
tool is absent.
8-
9-
The `last_checked` dates and `current_signal` text on each entry are baselines
10-
captured on a specific day. Before relying on a finding tied to one of these
11-
tools, re-confirm the installed version matches the `current_signal` text,
12-
especially for upstream branches under active development like `bofire main`
13-
(see [`BACKEND_EVAL_FINDINGS.md`](BACKEND_EVAL_FINDINGS.md) for the as-of
14-
dates that anchor each verified backend).
15-
16-
Use it before:
17-
18-
- adding or changing optional dependencies in `pyproject.toml`
19-
- deciding whether a campaign should use BoFire, pydoe/pyDOE3, SALib, or a sidecar
20-
- comparing BoFire, BayBE, Ax/BoTorch, ENTMOOT, OMLT, or TabPFN on the adaptive-backend fixture surface
21-
- preparing an optional remote-compute run that installs external packages
22-
- promoting a watchlist repo into an adapter
23-
- making a current-version, active-maintenance, archived, or deprecated claim
24-
25-
Validation:
26-
27-
```bash
28-
python3 skills/biosymphony-ferm-doe/scripts/tool_registry_check.py docs/tool-registry.json
29-
python3 skills/biosymphony-ferm-doe/scripts/tool_registry_check.py docs/tool-registry.json \
30-
--out .runtime/validation/tool-registry-report.json \
31-
--md-out .runtime/validation/tool-registry-summary.md
32-
nox -s tool_registry
33-
```
34-
35-
The companion adaptive-backend surface is validated separately:
36-
37-
```bash
38-
python3 skills/biosymphony-ferm-doe/scripts/adaptive_backend_surface_check.py \
39-
docs/adaptive-backend-evaluation.json
40-
nox -s adaptive_backend_surface
41-
```
42-
43-
The validator treats stale `last_checked` values as warnings by default. Use
44-
`--fail-on-stale` when preparing a dependency change or a paid remote run.
45-
46-
The validator also checks that adopted optional packages appear in the declared
47-
`pyproject.toml` extra, that declared Nox lanes exist, that remote-compute lane
48-
manifests exist, and that the BoFire route reasons match the adapter constants.
1+
# BioSymphony Tool Registry
2+
3+
- Status: `PASS`
4+
- Tools: `47`
5+
- Findings: `0 errors`, `0 warnings`
6+
- Checked on: `2026-06-21`
7+
- Pyproject alignment: `10` packages across `15` extras
8+
- Action lanes: `4` nox lanes, `0` remote lanes
9+
10+
| Tool | Priority | Status | Extra | Claim | Route |
11+
| --- | --- | --- | --- | --- | --- |
12+
| bofire | P0 | adopted_optional | bofire | bofire_adapter_planning | non_box_constraints, multi_objective_responses, scale_fidelity_structure, ... |
13+
| frictionless | P0 | adopted_optional | contracts | contract_validation | table_contracts |
14+
| nox | P0 | adopted_optional | dev | execution_lane | local_validation, optional_lanes |
15+
| pubmed_mcp_adapter | P0 | adopted_optional | | live_citation_enrichment | dossier_citation_enrichment, bibtex_export |
16+
| ro_crate | P0 | adopted_optional | | provenance_metadata | compile_dossier, workflow_run_provenance, profile_validation_candidate |
17+
| salib | P0 | adopted_optional | sensitivity | sensitivity_screening | sensitivity_screening, assumption_attack, scale_recipe_uncertainty |
18+
| ax | P1 | evaluate_next | backend-eval | not_yet_evaluated | adaptive_orchestration_pilot, custom_generation_strategy, botorch_infrastructure |
19+
| baybe | P1 | evaluate_next | backend-eval | not_yet_evaluated | bofire_alternative_adapter, categorical_substance_encoding, transfer_learning_across_campaigns, ... |
20+
| biosteam | P1 | evaluate_next | | economic_context_sidecar | cost_rollup_sidecar, downstream_context |
21+
| botorch | P1 | adopted_optional | botorch | experimental_adapter | experimental_adaptive_adapter |
22+
| cwl | P1 | watch | | workflow_provenance_sidecar | provider_handoff_bundle |
23+
| eln_file_format | P1 | evaluate_next | | interchange_candidate | eln_export_candidate, run_packet_interchange, ro_crate_profile_reference |
24+
| entmoot | P1 | adopted_optional | entmoot | adapter_backed_nchoosek_bo | nchoosek_cardinality_bo, tree_based_surrogate, in_repo_adapter |
25+
| fedbatchdesigner | P1 | evaluate_next | | reference_sidecar | fed_batch_reference_example |
26+
| grobid_fulltext | P1 | evaluate_next | | evidence_extraction_sidecar | public_pdf_structuring, dossier_evidence_harvest, citation_context_extraction |
27+
| omlt | P1 | adopted_optional | omlt | omlt_adapter_planning | mip_surrogate_optimization, nchoosek_cardinality_bo, optional_in_repo_adapter |
28+
| petab_libpetab | P1 | evaluate_next | | calibration_contract_candidate | mechanistic_model_contract, parameter_estimation_fixture, petab_validation |
29+
| pixi | P1 | watch | | developer_tooling | dependency_locking |
30+
| pseudobatch | P1 | evaluate_next | | preprocessing_candidate | fed_batch_sample_withdrawal, ledger_preprocessing, growth_rate_transform_reference |
31+
| pydoe | P1 | watch | | adapter_backed_classical_doe | screening, rsm_fit, space_filling_scout |
32+
| pydoe3 | P1 | compatibility_only | pydoe3 | compatibility_adapter | extended_box_behnken, latin_hypercube_maximin, legacy_pydoe3_adapter |
33+
| pyomo_dae | P1 | evaluate_next | | deterministic_feasibility_sidecar | fed_batch_feasibility, dynamic_constraints |
34+
| pypesto | P1 | evaluate_next | | calibration_sidecar_candidate | mechanistic_parameter_estimation, uncertainty_quantification_sidecar, petab_sbml_pipeline |
35+
| pyplate | P1 | evaluate_next | | execution_recipe_sidecar | plate_arm_manifest, plate_recipe_export |
36+
| sbml_runtime_stack | P1 | evaluate_next | | simulation_sidecar | mechanistic_model_sidecar |
37+
| xopt | P1 | evaluate_next | | not_yet_evaluated | adaptive_backend_comparison, constrained_bo, multi_objective_bo, ... |
38+
| atlas | P2 | watch | | not_yet_evaluated | categorical_aware_bo |
39+
| bletl | P2 | boundary_only | | external_reference | external_biolector_ingest |
40+
| botorch_direct | P2 | watch | | not_yet_evaluated | cost_aware_acquisition, direct_surrogate_control |
41+
| cadet | P2 | boundary_only | | external_reference | downstream_external_sidecar |
42+
| cobrapy | P2 | boundary_only | | evidence_sidecar | metabolic_evidence_sidecar |
43+
| dwsim | P2 | boundary_only | | external_reference | external_flowsheet_export |
44+
| estim8 | P2 | boundary_only | | external_reference | fmi_modelica_parameter_estimation, external_bioprocess_model_ingest |
45+
| europe_pmc_api | P2 | watch | | metadata_harvest_watch | public_life_science_search, open_fulltext_lookup, annotation_harvest |
46+
| llambo | P2 | watch | | not_yet_evaluated | llm_warmstart_first_batch, optuna_sampler_pilot |
47+
| nextflow | P2 | watch | | workflow_sidecar | large_compute_pipeline |
48+
| obsidian_apo | P2 | boundary_only | | external_reference | dash_ui_reference, shap_explanation_reference |
49+
| openalex_official | P2 | watch | | metadata_harvest_watch | public_literature_context, citation_graph_harvest |
50+
| processoptimizer | P2 | watch | | not_yet_evaluated | scikit_optimize_migration_target |
51+
| pymoo | P2 | evaluate_next | | candidate_table_diagnostic | pareto_report, design_tournament |
52+
| smt | P2 | evaluate_next | | surrogate_diagnostic | scale_bridge_diagnostic |
53+
| snakemake | P2 | watch | | workflow_sidecar | batch_benchmark_dag |
54+
| tabicl_v2 | P2 | watch | | watch_only | foundation_model_surrogate_watch, tabpfn_comparison, larger_table_regression_watch |
55+
| tabpfn_v2 | P2 | adopted_optional | tabpfn | tabpfn_adapter_planning | foundation_model_surrogate_pilot, small_data_tabular_regression, optional_in_repo_adapter |
56+
| trieste | P2 | watch | | watch_only | complex_acquisition_reference, ask_tell_bo_watch, multi_fidelity_bo_watch |
57+
| pysamoo | Avoid | avoid | | not_applicable | |
58+
| scikit_optimize | Avoid | avoid | | not_applicable | |
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Tool Registry Refresh - 2026-06-21
2+
3+
Public-safe research sweep for recent or currently active tools, repos, and preprints related to the BioSymphony Ferm DoE tool knowledge base.
4+
5+
## Selected Entries
6+
7+
These were added to `docs/tool-registry.json` because they have a clear public route and fail-closed boundary.
8+
9+
| Entry | Why it belongs | Primary sources |
10+
| --- | --- | --- |
11+
| `xopt` | Constrained, parallel, and multi-objective Bayesian optimization for arbitrary scientific objectives. Useful as a comparison backend for constrained public fixtures. | [repo](https://github.com/xopt-org/Xopt), [docs](https://xopt.xopt.org/), [PyPI](https://pypi.org/project/xopt/) |
12+
| `trieste` | Active TensorFlow BO toolbox with ask-tell, batch/asynchronous, constrained, multi-fidelity, and multi-objective routes. Kept as watch due to stack weight. | [repo](https://github.com/secondmind-labs/trieste), [docs](https://secondmind-labs.github.io/trieste/), [PyPI](https://pypi.org/project/trieste/) |
13+
| `tabicl_v2` | Recent open tabular foundation model to watch next to the existing TabPFN adapter, especially for larger public result tables. | [repo](https://github.com/soda-inria/tabicl), [docs](https://tabicl.readthedocs.io/), [arXiv v2](https://arxiv.org/abs/2602.11139), [PyPI](https://pypi.org/project/tabicl/) |
14+
| `petab_libpetab` | Contract layer for parameter-estimation fixtures around SBML/ODE sidecars. | [repo](https://github.com/PEtab-dev/libpetab-python), [docs](https://petab.readthedocs.io/), [PyPI](https://pypi.org/project/petab/) |
15+
| `pypesto` | Parameter-estimation and uncertainty sidecar for public or synthetic mechanistic models. | [repo](https://github.com/ICB-DCM/pyPESTO), [docs](https://pypesto.readthedocs.io/), [PyPI](https://pypi.org/project/pypesto/), [paper](https://doi.org/10.1093/bioinformatics/btad711) |
16+
| `pseudobatch` | Fed-batch sample-withdrawal correction reference for preprocessing public ledgers before growth-rate or response modeling. | [repo](https://github.com/biosustain/pseudobatch), [docs](https://biosustain.github.io/pseudobatch/), [PyPI](https://pypi.org/project/pseudobatch/), [preprint](https://doi.org/10.1101/2024.05.27.596043) |
17+
| `eln_file_format` | ELN/LIMS-neutral run-packet interchange candidate built on RO-Crate conventions. | [repo/spec](https://github.com/TheELNConsortium/TheELNFileFormat), [IANA media type](https://www.iana.org/assignments/media-types/application/vnd.eln+zip), [RO-Crate use case](https://www.researchobject.org/ro-crate/eln) |
18+
| `grobid_fulltext` | Public scholarly PDF structuring sidecar for open-access evidence and citation-context extraction. | [repo](https://github.com/grobidOrg/grobid), [docs](https://grobid.readthedocs.io/), [releases](https://github.com/grobidOrg/grobid/releases) |
19+
| `openalex_official` | Broad public metadata and citation-graph context beyond PubMed. Kept as watch because API access/rate limits can change. | [docs](https://developers.openalex.org/), [PyPI](https://pypi.org/project/openalex-official/), [paper](https://arxiv.org/abs/2205.01833) |
20+
| `europe_pmc_api` | Life-science literature, preprint, open full-text, and annotation source. Kept as watch due to source-license variance. | [developers](https://europepmc.org/developers), [REST API](https://europepmc.org/RestfulWebService), [annotations API](https://europepmc.org/AnnotationsApi) |
21+
22+
The existing `ro_crate` entry was also refreshed to mention Workflow Run RO-Crate, `ro-crate-py`, and `rocrate-validator` as optional profile-aware context.
23+
24+
## Deferred Notes
25+
26+
These remain notes rather than immediate registry additions or dependencies.
27+
28+
| Candidate | Reason deferred |
29+
| --- | --- |
30+
| OpenBox | Relevant black-box optimizer, but its service/AutoML surface overlaps orchestration and is less directly lab-facing than Xopt. |
31+
| NIMO / NIMO Controller | Useful self-driving-lab reference, but robotics/control-plane concepts should not replace BioSymphony manifest or safety gates. |
32+
| Optuna and SMAC3 | Mature optimizers; useful benchmarks, but less DoE/lab-specific than current BayBE, Ax, BoFire, Xopt, and ENTMOOT surface. |
33+
| HEBO / MCBO and GIT-BO | Interesting mixed/combinatorial and tabular-surrogate research, but package cadence, repo shape, or GPU requirements make them watch notes. |
34+
| Multi-stage BO for SDLs | Conceptually useful for intermediate observables; no clear code license found, so keep as literature note. |
35+
| BiRD, IDAES, GEKKO, do-mpc | Useful process/model/control sidecars, but solver and domain weight would need a concrete public fixture before registry promotion. |
36+
| ISA-API and DataPLANT ARC | Strong metadata patterns; license/platform breadth need a narrower export target before adoption. |
37+
| Datalad, PaperQA2, A2A | Useful for large artifacts, research automation, or agent handoff; not needed until a concrete dossier or handoff adapter exists. |

0 commit comments

Comments
 (0)