Skip to content

Commit 77f3142

Browse files
committed
Merge v0.8.20 release — changelog, mustmatch shim removal, tag
2 parents 7af8774 + 241d81f commit 77f3142

17 files changed

Lines changed: 414 additions & 364 deletions

.march/code-log.md

Lines changed: 0 additions & 58 deletions
This file was deleted.

CHANGELOG.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,63 @@
11
# Changelog
22

3+
## 0.8.20 — 2026-03-30
4+
5+
### Security
6+
7+
- Security fix: remove partial API key from health output so shared operator
8+
reports no longer leak credential fragments. (067)
9+
- Hardened the MCP allowlist so mutating `study download` paths stay blocked
10+
while the safe `--list` path remains available. (068)
11+
12+
### Fixes
13+
14+
- Fixed `batch --json` so responses always include the `_meta` contract field.
15+
(069)
16+
- Hardened the GWAS variant section against live decode failures. (070)
17+
- Fixed gene-to-PGx and disease-to-drug See-also routing so those pivots land
18+
on the correct entity helpers. (077)
19+
- Fixed large PMC OA full-text downloads that were timing out on bigger
20+
payloads. (080)
21+
22+
### New features
23+
24+
- Added cross-entity See-also links for drug→PGx, gene→PGx, disease→study,
25+
and zero-result→discover routing. (076)
26+
- Added the quality ratchet to `make check` so the repo gate now audits
27+
mustmatch lint, MCP allowlist coverage, and source-registry drift. (075)
28+
- Added the study top-mutated helper plus disease literature fallback for
29+
missing direct evidence paths.
30+
31+
### Improvements
32+
33+
- Reworked CLI help, typed-path guidance, and the skill catalog for
34+
self-teaching agent navigation. (072, 073, 074)
35+
- `get disease` now shows full disease definitions instead of truncated
36+
characterizations. (080)
37+
- `get disease` now separates defining phenotypic features from the full HPO
38+
list with ranked key-feature summaries. (081)
39+
- `get gene` now shows UniProt protein isoforms in the protein section. (082)
40+
- `get drug` now shows drug target family names alongside individual targets.
41+
(083)
42+
- `get gene` now shows protein legacy names alongside current symbols. (084)
43+
- `get variant` now shows variant legacy nomenclature alongside current HGVS
44+
names. (085)
45+
- Improved purine-analog mechanism labels so ATC-exact and mechanism-of-action
46+
coverage stay aligned. (086)
47+
- Closed the remaining BioASQ product gaps around protein function truncation,
48+
variant-specific targets, and disease feature coverage. (087)
49+
- Replaced the in-shell mustmatch shim with the packaged `mustmatch lint`
50+
entrypoint plus a small compatibility layer for the repo’s existing ratchet
51+
contract. (088)
52+
53+
### Docs
54+
55+
- Added architecture contract docs for See-also links, discover grammar, CI,
56+
and post-tag public proof expectations. (078)
57+
- Documentation consistency audit across the public docs surface.
58+
- Repo cleanup for layout, example paths, and tracked `.march` artifacts.
59+
(079)
60+
361
## 0.8.19 — 2026-03-26
462

563
### Improvements

CITATION.cff

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ abstract: >-
66
BioMCP is a single-binary CLI and MCP server for querying biomedical
77
databases with one command grammar, compact markdown output, and local study
88
analytics.
9-
version: 0.8.19
10-
date-released: 2026-03-26
9+
version: 0.8.20
10+
date-released: 2026-03-30
1111
license: MIT
1212
repository-code: https://github.com/genomoncology/biomcp
1313
url: https://biomcp.org

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "biomcp-cli"
3-
version = "0.8.19"
3+
version = "0.8.20"
44
edition = "2024"
55
description = "Biomedical CLI and MCP server — genes, variants, trials, articles, drugs, diseases, pathways, proteins, adverse events, PGx"
66
homepage = "https://biomcp.org"

architecture/technical/overview.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ so release-visible version identity and docs parity are checked against the
200200
live surfaces:
201201

202202
```bash
203-
tag="${BIOMCP_TAG:?set BIOMCP_TAG to the published release tag, e.g. v0.8.19}"
203+
tag="${BIOMCP_TAG:?set BIOMCP_TAG to the published release tag, e.g. v0.8.20}"
204204
version="${tag#v}"
205205
tmpdir="$(mktemp -d)" && BIOMCP_INSTALL_DIR="$tmpdir" BIOMCP_VERSION="$tag" bash install.sh >/tmp/biomcp-install.log && "$tmpdir/biomcp" version | head -n 1
206206
bioasq_page="$(mktemp)" && curl -fsSL -A 'Mozilla/5.0' https://biomcp.org/reference/bioasq-benchmark/ >"$bioasq_page" && rg -q 'hf-public-pre2026' "$bioasq_page" && rg -q 'Phase A\+' "$bioasq_page" && rg -q 'Phase B' "$bioasq_page"

docs/sources/uniprot.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ Returns a protein card with accession, gene, function, and UniProt evidence link
3636
biomcp get gene BRAF protein
3737
```
3838

39-
Returns a gene detail view with a `Protein (UniProt)` section. When UniProt
40-
annotates legacy protein names, that section includes an `Also known as:` line
41-
with alternative full names and short names from UniProt. When UniProt annotates
42-
alternative products, the same section also includes an `Isoforms (N)` line with
43-
isoform names and the displayed isoform length from the canonical record.
39+
Returns a gene detail view with a `Protein (UniProt)` section, including legacy names and isoforms when UniProt annotates them.
40+
41+
When UniProt annotates legacy protein names, the section includes an `Also known as:` line
42+
with alternative full names and short names. When UniProt annotates alternative products,
43+
the section also includes an `Isoforms (N)` line with isoform names and the canonical record length.
4444

4545
```bash
4646
biomcp get protein P15056 structures

manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"manifest_version": "0.3",
33
"name": "biomcp",
44
"display_name": "BioMCP",
5-
"version": "0.8.19",
5+
"version": "0.8.20",
66
"description": "Read-only biomedical search and evidence retrieval across BioMCP's CLI command grammar.",
77
"long_description": "BioMCP packages the existing Rust CLI and MCP server as a local read-only bundle for biomedical discovery, detail lookups, cross-entity pivots, enrichment, and study analytics.",
88
"author": {

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "maturin"
44

55
[project]
66
name = "biomcp-cli"
7-
version = "0.8.19"
7+
version = "0.8.20"
88
description = "Biomedical MCP CLI - query genes, variants, trials, articles, drugs, diseases"
99
readme = "README.md"
1010
license = { text = "MIT" }
@@ -28,7 +28,7 @@ Documentation = "https://biomcp.org"
2828
dev = [
2929
"jsonschema>=4.26",
3030
"mcp>=1.0.0",
31-
"mustmatch>=0.0.2",
31+
"mustmatch>=0.0.4",
3232
"pytest>=8.0",
3333
"pytest-asyncio>=0.24",
3434
"pytest-timeout>=2.3",

spec/13-study.md

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -290,16 +290,10 @@ echo "$out" | mustmatch not like "# Study Co-occurrence"
290290
[ -f "$PWD/.cache/spec-study-env" ] || bash fixtures/setup-study-spec-fixture.sh "$PWD"
291291
. "$PWD/.cache/spec-study-env"
292292
out="$(biomcp study query --study msk_impact_2017 --gene TP53 --type mutations --chart bar --cols 40 --rows 12)"
293-
OUT="$out" python3 - <<'PY'
294-
import os
295-
import re
296-
297-
text = re.sub(r"\x1b\[[0-9;?]*[ -/]*[@-~]", "", os.environ["OUT"])
298-
lines = text.splitlines()
299-
assert lines, text
300-
assert len(lines) <= 12, (len(lines), text)
301-
assert max(len(line) for line in lines) <= 40, text
302-
PY
293+
clean="$(printf '%s\n' "$out" | sed 's/\x1b\[[0-9;?]*[A-Za-z]//g')"
294+
line_count="$(printf '%s\n' "$clean" | wc -l | tr -d ' ')"
295+
test "$line_count" -le 12
296+
printf '%s\n' "$clean" | mustmatch not like "# Study"
303297
```
304298

305299
## Chart Flag: Co-occurrence Heatmap

0 commit comments

Comments
 (0)