bump-sdk-version · git:20260528.e89174d · 2026-05-28 · sha256 8ade5dad2dae9802
bump-sdk-version git:20260528.e89174dA
Immutable. This exact content is served forever at /api/v1/blob/8ade5dad2dae9802.
---
name: bump-sdk-version
description: Bump the FutureSearch SDK version across all files. Use when releasing a new SDK version, updating version numbers, or the user says bump version, release, version bump.
---
# Bump SDK Version
## Versioning Guidelines
We use **semantic versioning** (MAJOR.MINOR.PATCH) while at major version 0:
| Bump | When | Examples |
|:-----|:-----|:---------|
| **Patch** (0.8.0 -> 0.8.1) | Bug fixes, docs changes, small tweaks, dependency updates | Fix a typo in output, update a dependency |
| **Minor** (0.8.1 -> 0.9.0) | New features, new operation types, API additions | Add a new operation, new SDK method, new MCP tool |
| **Patch for breaking changes** that are trivial to adapt | Rename a parameter, change a default | Rename `max_rows` to `row_limit` |
| **Minor for breaking changes** that require migration | Remove or restructure API surface | Remove an operation type, change return format |
If unsure, ask the user which component to bump.
## Files to Update
All paths are relative to `futuresearch-python/`. Update the version string in each:
1. **`pyproject.toml`** — `project.version` (the source of truth)
2. **`.claude-plugin/plugin.json`** — `version`
3. **`.claude-plugin/marketplace.json`** — `plugins[0].version`
4. **`gemini-extension.json`** — `version`
5. **`futuresearch-mcp/pyproject.toml`** — `project.version` AND `dependencies` (`futuresearch>=X.Y.Z`)
6. **`futuresearch-mcp/server.json`** — `version` AND `packages[0].version`
7. **`futuresearch-mcp/manifest.json`** — `version`
8. **`CITATION.cff`** — `version` AND `date-released` (set to today's date)
9. **`README.md`** — BibTeX `version` field in the citation block
10. **`stubs/everyrow/pyproject.toml`** — `project.version` AND `dependencies` (`futuresearch>=X.Y.Z`)
11. **`stubs/everyrow-mcp/pyproject.toml`** — `project.version` AND `dependencies` (`futuresearch-mcp>=X.Y.Z`)
After editing, regenerate the lock files. Run `uv lock` in `futuresearch-python/` first:
```bash
cd futuresearch-python && uv lock
```
Then sync transitive lockfiles across the entire monorepo. The CI check
`check-uv-sync` runs `./uv-all.sh sync --all-extras --dev --all-groups` and
will fail if any other workspace's `uv.lock` still references the old SDK
version. Run it from the repo root:
```bash
cd <repo-root> && ./uv-all.sh sync --all-extras --dev --all-groups
```
Stage any additional lockfiles it touches alongside the bump.
## Verification Steps
### 1. Run version consistency tests
```bash
cd futuresearch-python && uv run pytest tests/test_version.py -v
```
### 2. Search for stale version references
Search for the OLD version number to catch any files that were missed. Use `--hidden` (or equivalent) to include `.claude-plugin/` and other dotfiles:
```bash
cd futuresearch-python && rg --hidden "OLD_VERSION" --glob '!.venv' --glob '!uv.lock' --glob '!*.pyc' --glob '!__pycache__'
```
Be sure to escape the `.` characters in the version number: `"1\.2\.3"`.
Review any hits — some may be false positives: e.g., changelogs, migration notes, 3rd party packages.
### 3. Commit
Create a branch and commit with message: `Bump SDK version to X.Y.Z`
## Important: Dedicated PR
Version bumps should be in their own PR — do not bundle them with feature or fix changes. The commit message and PR title should be: `Bump SDK version to X.Y.Z`
## Publishing the release
Merging the bump PR does NOT publish. The publish pipeline lives in the
public `futuresearch/futuresearch-python` repo's `.github/workflows/publish.yaml`
and triggers on `release: published` only. After the bump PR merges:
1. Wait for `sync-futuresearch-python` to mirror the bump commit to the public
repo (verify with `gh api repos/futuresearch/futuresearch-python/commits/main --jq '.commit.message'`).
2. Create a GitHub Release with tag `vX.Y.Z` (note the `v` prefix) and the
auto-generated changelog:
```bash
gh release create vX.Y.Z \
--repo futuresearch/futuresearch-python \
--generate-notes \
--latest
```
3. This kicks off `publish.yaml`, which:
- Builds and uploads 4 wheels to PyPI (`futuresearch`, `futuresearch-mcp`,
`everyrow`, `everyrow-mcp`)
- Builds and attaches the `.mcpb` bundle to the release
- Publishes to the MCP Registry (waits 30s for PyPI propagation first)
4. Watch the run:
```bash
gh run list --repo futuresearch/futuresearch-python --workflow=publish.yaml --limit 1
```
## Checklist
- [ ] All 11 files updated with new version
- [ ] `CITATION.cff` date-released set to today
- [ ] Dependency version floors updated (`futuresearch>=X.Y.Z`, `futuresearch-mcp>=X.Y.Z`)
- [ ] `uv lock` regenerated
- [ ] `./uv-all.sh sync --all-extras --dev --all-groups` run from repo root; any updated transitive lockfiles staged
- [ ] `uv run pytest tests/test_version.py` passes
- [ ] `rg --hidden "OLD_VERSION"` shows no unexpected hits
- [ ] PR contains only version bump changes (no other features or fixes)
- [ ] After merge + sync: `gh release create vX.Y.Z` in the public repo to trigger PyPI/MCP-Registry publish