Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "analysis-workflow",
"version": "0.2.1",
"version": "0.2.2",
"description": "Conventions for analysis repos where humans (notebooks) and coding agents (scripts) work side by side: one task per session, worktree and directory; worktree-safe output paths; additive write-back to AnnData zarr working objects. Ships a skill, guard hooks and the analysis_workflow Python package.",
"author": {
"name": "quadbio"
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,11 @@ their committed `.claude/settings.json`, as [analysis_template](https://github.c
}
```

**The package**, in the analysis repo's `pixi.toml`:
**The package**, in the analysis repo's `pixi.toml` (its lock pins the commit; `pixi update` moves it):

```toml
[pypi-dependencies]
analysis-workflow = { git = "https://github.com/quadbio/analysis-workflow", tag = "v0.2.1" }
analysis-workflow = { git = "https://github.com/quadbio/analysis-workflow" }
```

## Develop
Expand All @@ -70,8 +70,8 @@ For live package edits in an analysis repo, depend on the checkout instead:

## Release

Bump `version` in both `pyproject.toml` and `.claude-plugin/plugin.json` (a test checks they agree), tag
`vX.Y.Z`, then bump the `ref` in [quadbio/claude-plugins](https://github.com/quadbio/claude-plugins).
Bump `version` in `.claude-plugin/plugin.json` and merge: the marketplace follows `main`, and users update when the
version changes.

## License

Expand Down
4 changes: 3 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ requires = [ "hatchling" ]

[project]
name = "analysis-workflow"
version = "0.2.1"
description = "Task paths, additive AnnData write-back and layout checks for agent-run analysis repos."
readme = "README.md"
license = "MIT"
Expand All @@ -16,6 +15,7 @@ classifiers = [
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
]
dynamic = [ "version" ]
dependencies = [ "anndata>=0.12", "numpy", "pandas", "scipy", "typer", "zarr>=3" ]
urls.Source = "https://github.com/quadbio/analysis-workflow"
scripts.analysis-workflow = "analysis_workflow.cli:app"
Expand All @@ -24,6 +24,8 @@ scripts.analysis-workflow = "analysis_workflow.cli:app"
dev = [ "pre-commit", "pytest" ]

[tool.hatch]
version.path = ".claude-plugin/plugin.json"
version.pattern = '"version": "(?P<version>[^"]+)"'
build.targets.wheel.packages = [ "src/analysis_workflow" ]

[tool.ruff]
Expand Down
9 changes: 1 addition & 8 deletions tests/test_plugin.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,11 @@
"""The plugin manifest and the Python package describe the same release."""
"""The plugin manifest points at files that exist."""

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"]


def test_hook_scripts_exist():
hooks = json.loads((ROOT / "hooks" / "hooks.json").read_text())["hooks"]
commands = [h["command"] for groups in hooks.values() for group in groups for h in group["hooks"]]
Expand Down
1 change: 0 additions & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading