204: trial search improvements and PyPI trusted publisher#146
Conversation
- Add boolean-aware eligibility query handling for --mutation (OR/AND/NOT) - Add --criteria flag for free-text eligibility search - Push keyword into trial condition for search all relevance - Add PyPI publish via Trusted Publishers (OIDC, no token needed) - Bump version to 0.8.10 - Update README, CHANGELOG, SKILL.md for new features
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d7095b6fd9
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
src/entities/trial.rs
Outdated
| if term.is_empty() { | ||
| return None; |
There was a problem hiding this comment.
Handle unary NOT when splitting boolean expressions
split_boolean_expression rejects any operator token that has an empty left segment, so inputs like "dMMR AND NOT MSI-H" return None at the NOT token and are later treated as a single quoted literal instead of a boolean query. This breaks the new AND/NOT behavior for a common form (AND NOT ...) and can also poison eligibility post-filtering because the literal string gets tokenized as ordinary words.
Useful? React with 👍 / 👎.
| - uses: dtolnay/rust-toolchain@stable | ||
|
|
There was a problem hiding this comment.
Install Rust targets in PyPI wheel matrix builds
The pypi-build job builds non-host targets (for example aarch64-unknown-linux-gnu) but the dtolnay/rust-toolchain step does not request with: targets: ${{ matrix.target }}. On GitHub runners the default toolchain only has the host target installed, so cross-target maturin build --target ... fails with missing std for that target, which blocks pypi-publish because it depends on all matrix jobs.
Useful? React with 👍 / 👎.
Cargo.lock
Outdated
| [[package]] | ||
| name = "biomcp-cli" | ||
| version = "0.8.9" | ||
| version = "0.9.0" |
There was a problem hiding this comment.
Align package version across manifests and lockfiles
This commit sets the root package entry in Cargo.lock to 0.9.0 while Cargo.toml and pyproject.toml are 0.8.10, creating an inconsistent release state. That mismatch can cause confusing version reporting and lockfile churn when developers run packaging/release commands locally, since tooling expects the root package version to match the source manifests.
Useful? React with 👍 / 👎.
…ockfile sync - Handle unary NOT in boolean expressions (e.g., "dMMR AND NOT MSI-H") - Add Rust target to pypi-build toolchain for cross-compilation - Regenerate Cargo.lock to match 0.8.10 version
Copy install.sh into docs/ so MkDocs serves it at biomcp.org/install.sh. Update all references from the raw.githubusercontent.com URL.
Summary
--mutationflag (OR/AND/NOT operators)--criteriaflag for free-text eligibility text search against ClinicalTrials.govsearch allrelevance improvementContext
Project 204 fixes trial search gaps identified during the dMMR adjuvant endometrial cancer validation scenario. The three P0/P1 gaps (GAP-2 boolean mutation, GAP-1 criteria search, GAP-4 keyword pushdown) are addressed. The release workflow is updated to use PyPI Trusted Publishers instead of token-based auth.
Verification
cargo fmt --check: passcargo test: 373 passedpytest tests/: 6 passed (including MCP contract)