From e0b62bfcc0565a78bee2f1e371212ba8262d355b Mon Sep 17 00:00:00 2001 From: Marius1311 Date: Tue, 13 Oct 2026 12:05:14 +0200 Subject: [PATCH 1/2] Release 0.4.1; the version bump is the whole release The marketplace now follows main, so a plugin.json version bump releases; a workflow tags vX.Y.Z on merge. Co-Authored-By: Claude Opus 5.5 --- .claude-plugin/plugin.json | 2 +- .github/workflows/tag.yaml | 22 ++++++++++++++++++++++ README.md | 8 ++++---- pyproject.toml | 2 +- uv.lock | 2 +- 5 files changed, 29 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/tag.yaml diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 502f154..3c17f73 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "cell-type-annotation", - "version": "0.4.0", + "version": "0.4.1", "description": "Evidence-driven cell-type annotation of pre-clustered single-cell and spatial transcriptomics data: Claude annotates level by level, one routed cross-check per level, signed-off assumptions, critic subagents. Ships a skill and the cell_type_annotation Python package; runs as an analysis-workflow task.", "author": { "name": "quadbio" diff --git a/.github/workflows/tag.yaml b/.github/workflows/tag.yaml new file mode 100644 index 0000000..4db17d1 --- /dev/null +++ b/.github/workflows/tag.yaml @@ -0,0 +1,22 @@ +name: Tag release + +on: + push: + branches: [main] + paths: [.claude-plugin/plugin.json] + +permissions: + contents: write + +jobs: + tag: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + - name: Tag the version in plugin.json, if new + run: | + tag="v$(jq -r .version .claude-plugin/plugin.json)" + if ! git ls-remote --exit-code --tags origin "refs/tags/$tag" > /dev/null; then + git tag "$tag" + git push origin "$tag" + fi diff --git a/README.md b/README.md index 5fda01d..861fea2 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ The package, in the analysis repo's `pixi.toml`, next to the scverse stack the t ```toml [pypi-dependencies] -cell-type-annotation = { git = "https://github.com/quadbio/cell-type-annotation", tag = "v0.4.0" } +cell-type-annotation = { git = "https://github.com/quadbio/cell-type-annotation", tag = "v0.4.1" } ``` Cross-check tools (celltypist, cellmapper, panhumanpy, scvi-tools, scimilarity) are added as a run needs them. Their @@ -73,9 +73,9 @@ For live package edits in an analysis repo, depend on the checkout: ## Release -1. Bump `version` in both `pyproject.toml` and `.claude-plugin/plugin.json` (a test checks they agree). -2. Tag `vX.Y.Z`. -3. Bump the `ref` in [quadbio/claude-plugins](https://github.com/quadbio/claude-plugins). +Bump `version` in both `pyproject.toml` and `.claude-plugin/plugin.json` (a test checks they agree). +That is the release: the marketplace follows `main`, users update when the version changes, and the merge tags +`vX.Y.Z`, which analysis repos pin. ## License diff --git a/pyproject.toml b/pyproject.toml index c18e13b..1c0ab4d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ requires = [ "hatchling" ] [project] name = "cell-type-annotation" -version = "0.4.0" +version = "0.4.1" description = "Method routing, evidence checks, label hierarchies and reports for evidence-driven cell-type annotation." readme = "README.md" license = "MIT" diff --git a/uv.lock b/uv.lock index da40e5b..a25a13c 100644 --- a/uv.lock +++ b/uv.lock @@ -52,7 +52,7 @@ wheels = [ [[package]] name = "cell-type-annotation" -version = "0.4.0" +version = "0.4.1" source = { editable = "." } dependencies = [ { name = "anndata" }, From 078a6f8b8df4dd93d57725dd61be1bd18a47f689 Mon Sep 17 00:00:00 2001 From: Marius1311 Date: Tue, 13 Oct 2026 12:14:44 +0200 Subject: [PATCH 2/2] Release: plugin.json holds the only version; no tag workflow, no pinned versions in docs Co-Authored-By: Claude Opus 5.5 --- .github/workflows/tag.yaml | 22 ---------------------- README.md | 10 +++++----- pyproject.toml | 4 +++- tests/test_plugin.py | 13 ------------- uv.lock | 1 - 5 files changed, 8 insertions(+), 42 deletions(-) delete mode 100644 .github/workflows/tag.yaml delete mode 100644 tests/test_plugin.py diff --git a/.github/workflows/tag.yaml b/.github/workflows/tag.yaml deleted file mode 100644 index 4db17d1..0000000 --- a/.github/workflows/tag.yaml +++ /dev/null @@ -1,22 +0,0 @@ -name: Tag release - -on: - push: - branches: [main] - paths: [.claude-plugin/plugin.json] - -permissions: - contents: write - -jobs: - tag: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v5 - - name: Tag the version in plugin.json, if new - run: | - tag="v$(jq -r .version .claude-plugin/plugin.json)" - if ! git ls-remote --exit-code --tags origin "refs/tags/$tag" > /dev/null; then - git tag "$tag" - git push origin "$tag" - fi diff --git a/README.md b/README.md index 861fea2..a72c158 100644 --- a/README.md +++ b/README.md @@ -38,11 +38,12 @@ It requires the [knowledgebase MCP](https://github.com/biocontext-ai/knowledgeba The plugin, once per machine, from the [quadbio marketplace](https://github.com/quadbio/claude-plugins). -The package, in the analysis repo's `pixi.toml`, next to the scverse stack the task scripts use: +The package, in the analysis repo's `pixi.toml` (its lock pins the commit), next to the scverse stack the task +scripts use: ```toml [pypi-dependencies] -cell-type-annotation = { git = "https://github.com/quadbio/cell-type-annotation", tag = "v0.4.1" } +cell-type-annotation = { git = "https://github.com/quadbio/cell-type-annotation" } ``` Cross-check tools (celltypist, cellmapper, panhumanpy, scvi-tools, scimilarity) are added as a run needs them. Their @@ -73,9 +74,8 @@ For live package edits in an analysis repo, depend on the checkout: ## Release -Bump `version` in both `pyproject.toml` and `.claude-plugin/plugin.json` (a test checks they agree). -That is the release: the marketplace follows `main`, users update when the version changes, and the merge tags -`vX.Y.Z`, which analysis repos pin. +Bump `version` in `.claude-plugin/plugin.json` and merge: the marketplace follows `main`, and users update when the +version changes. ## License diff --git a/pyproject.toml b/pyproject.toml index 1c0ab4d..9b98d87 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,6 @@ requires = [ "hatchling" ] [project] name = "cell-type-annotation" -version = "0.4.1" description = "Method routing, evidence checks, label hierarchies and reports for evidence-driven cell-type annotation." readme = "README.md" license = "MIT" @@ -16,6 +15,7 @@ classifiers = [ "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", ] +dynamic = [ "version" ] dependencies = [ "anndata>=0.12", "matplotlib>=3.8", "numpy>=2", "pandas>=2", "scipy" ] urls.Source = "https://github.com/quadbio/cell-type-annotation" @@ -23,6 +23,8 @@ urls.Source = "https://github.com/quadbio/cell-type-annotation" dev = [ "pre-commit", "pytest" ] [tool.hatch] +version.path = ".claude-plugin/plugin.json" +version.pattern = '"version": "(?P[^"]+)"' build.targets.wheel.packages = [ "src/cell_type_annotation" ] [tool.ruff] diff --git a/tests/test_plugin.py b/tests/test_plugin.py deleted file mode 100644 index 2d26782..0000000 --- a/tests/test_plugin.py +++ /dev/null @@ -1,13 +0,0 @@ -"""The plugin manifest and the Python package describe the same release.""" - -import json -import tomllib -from pathlib import Path - -ROOT = Path(__file__).parents[1] - - -def test_versions_agree(): - plugin = json.loads((ROOT / ".claude-plugin" / "plugin.json").read_text()) - package = tomllib.loads((ROOT / "pyproject.toml").read_text())["project"] - assert plugin["version"] == package["version"] diff --git a/uv.lock b/uv.lock index a25a13c..fb65d13 100644 --- a/uv.lock +++ b/uv.lock @@ -52,7 +52,6 @@ wheels = [ [[package]] name = "cell-type-annotation" -version = "0.4.1" source = { editable = "." } dependencies = [ { name = "anndata" },