Workflow template engine with support for web-form configuration, parallel operators, and flexible execution targets.
For package architecture diagrams, dependency graphs, and development guidelines, see CLAUDE.md.
Releases are managed via git tags and automated PyPI publishing. Each release generates per-package scoped notes and maintains a CHANGELOG.md in the package directory.
Tip: Use
/release-wtfor all releases. It handles GCP metapackage auto-tagging, correct push ordering, and conda-aware release flow. Manual tagging risks missing the lockstep GCP tags or pushing in the wrong order.
Run /release-wt in Claude Code for an interactive assistant that:
- Analyzes changes and recommends version bumps
- Generates per-package release notes from diffs/commits
- Updates each package's
CHANGELOG.md - Syncs
[tool.pixi.package] versionin each package'spyproject.toml(required for correct conda package versions) - Creates annotated tags (with notes embedded) and pushes with confirmation
- Run
bash scripts/release-status.shto see which packages have unreleased changes - Determine the appropriate version bump for each changed package:
- Patch (0.x.Y → 0.x.Y+1): bugfixes, docs, internal refactors, dependency updates with no API changes
- Minor (0.X.y → 0.X+1.0): new features or breaking changes (pre-1.0 convention)
- Create tags with
bash scripts/release-tag.sh <package-name> <version>(tags use format<package-name>/v<version>)- Pipe release notes via stdin to embed them in the tag annotation:
echo "- Fix bug" | bash scripts/release-tag.sh wt-contracts 0.2.0
- Pipe release notes via stdin to embed them in the tag annotation:
- Push tags one at a time:
git push origin <tag>
- One tag per push: The publish workflow reads
GITHUB_REFto determine which package to build. Pushing multiple tags in a singlegit pushwill only trigger one workflow run. Always push one tag at a time. - Cross-package dependencies: If an upstream package has breaking changes, check whether downstream dependents need their dependency floor bumped and a patch release.
- GCP metapackages (
wt-task-gcp,wt-invokers-gcp,wt-runner-gcp) only need releasing when their dependency pins change.
The mypy hook addresses common pitfalls with type checking in pre-commit (reference):
| Problem | Solution |
|---|---|
| Checking only changed files misses errors in dependent code | pass_filenames: false runs mypy on all packages |
| Pre-commit's isolated virtualenv lacks project dependencies | language: system uses the dev environment via uv |
Default hooks use --ignore-missing-imports hiding errors |
Uses per-package strict configs in pyproject.toml |
Run manually: ./scripts/run-mypy.sh