skills/bpsai/releasing-versions/SKILL.md
Manages release preparation including validation, version bumping, documentation verification, and security checks.
npx skillsauth add aiskillstore/marketplace releasing-versionsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
| Phase | Purpose | Blocking? | |-------|---------|-----------| | 1. Pre-Release Validation | Tests, security | Yes | | 2. Version Bump | Update version strings | Yes | | 3. Documentation | Verify/update docs | Warning | | 4. Template Sync | Cookiecutter alignment | Warning | | 5. Build Verification | Package builds | Yes | | 6. Git Operations | Commit and tag | Yes |
# Check for incomplete tasks
bpsai-pair task list --status in_progress
bpsai-pair task list --status blocked
# Check current state
bpsai-pair status
BLOCKER: All tasks must be complete or moved to next sprint.
# All tests must pass
pytest tests/ -v --tb=short
# Check coverage meets target (80%)
pytest tests/ --cov=bpsai_pair --cov-report=term-missing --cov-fail-under=80
BLOCKER: Release cannot proceed if tests fail.
# Scan for accidentally committed secrets
bpsai-pair security scan-secrets
# Scan dependencies for known vulnerabilities
bpsai-pair security scan-deps
BLOCKER: Secrets detected = cannot release. WARNING: Dependency vulnerabilities should be reviewed but may not block.
grep -E "^version|__version__" tools/cli/pyproject.toml tools/cli/bpsai_pair/__init__.py
| File | Format |
|------|--------|
| pyproject.toml | version = "X.Y.Z" |
| __init__.py | __version__ = "X.Y.Z" |
Note: Version in files has NO 'v' prefix. Git tags use 'v' prefix.
| File | Update |
|------|--------|
| capabilities.yaml | version: "X.Y.Z" |
| config.yaml | version: "X.Y.Z" |
# Check CHANGELOG has entry for this version
grep -A 20 "## \[X.Y.Z\]" CHANGELOG.md
# Check README mentions current features
head -100 README.md
# Check FEATURE_MATRIX is current
head -50 .paircoder/docs/FEATURE_MATRIX.md
# Check modification dates
git log -1 --format="%ci" -- README.md
git log -1 --format="%ci" -- CHANGELOG.md
git log -1 --format="%ci" -- .paircoder/docs/FEATURE_MATRIX.md
WARNING if any required doc older than 7 days - may need update.
If missing, create entry following Keep a Changelog format:
## [X.Y.Z] - YYYY-MM-DD
### Added
- Feature 1
- Feature 2
### Changed
- Change 1
### Fixed
- Fix 1
### Removed
- (if applicable)
Generate content from archived tasks:
bpsai-pair task changelog-preview --since <last-version>
Verify cookiecutter template matches current version:
# Check template exists
ls -la tools/cli/bpsai_pair/data/cookiecutter-paircoder/
# Compare key files
diff .paircoder/config.yaml \
tools/cli/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/.paircoder/config.yaml
diff CLAUDE.md \
tools/cli/bpsai_pair/data/cookiecutter-paircoder/{{cookiecutter.project_slug}}/CLAUDE.md
Key files that should stay in sync:
config.yaml structure (not values)CLAUDE.md instructionscapabilities.yaml format# Clean old builds
rm -rf tools/cli/dist/ tools/cli/build/ tools/cli/*.egg-info
# Build the package
cd tools/cli && pip install build && python -m build
# Verify clean install
pip install dist/*.whl --force-reinstall
# Verify version is correct
bpsai-pair --version
# Stage all changes
git add -A
# Commit with release message
git commit -m "Release vX.Y.Z"
# Create annotated tag
git tag -a "vX.Y.Z" -m "Release vX.Y.Z"
# Show what will be pushed
git log --oneline -5
git tag -l | tail -5
DO NOT push yet - let user review and confirm.
📦 **Release Prepared**: vX.Y.Z
**Pre-Release Checks**:
- ✅ All tasks complete
- ✅ Tests: XXX passed
- ✅ Coverage: XX%
- ✅ Security: Clean
**Documentation**:
- ✅ CHANGELOG: Updated
- ✅ README: Current
- ✅ FEATURE_MATRIX: Updated
- ⚠️ User guide: Last updated X days ago (review recommended)
**Cookiecutter**:
- ✅ Template synced
**Build**:
- ✅ Package built: bpsai_pair-X.Y.Z-py3-none-any.whl
- ✅ Installs cleanly
- ✅ Version verified
**Ready to Release**:
```bash
git push origin main
git push origin vX.Y.Z
Then publish to PyPI:
cd tools/cli && twine upload dist/*
## Error Recovery
### Tests Fail
1. Do not proceed with release
2. Fix failing tests
3. Re-run from Phase 1
### Secrets Detected
1. Do not proceed with release
2. Remove secrets from history (git filter-branch or BFG)
3. Rotate any exposed credentials
4. Re-run security scan
### Documentation Stale
1. WARNING, not blocker
2. User can choose to update or proceed
3. Log the decision
### Cookiecutter Differs
1. Determine if difference is intentional
2. If template should be updated, do so
3. If difference is project-specific, document why
## Configuration Reference
Release configuration in `config.yaml`:
```yaml
release:
version_source: tools/cli/pyproject.toml
documentation:
- CHANGELOG.md
- README.md
- .paircoder/docs/FEATURE_MATRIX.md
cookie_cutter:
template_path: tools/cli/bpsai_pair/data/cookiecutter-paircoder
sync_required: true
freshness_days: 7
| Location | Format | Example | |----------|--------|---------| | pyproject.toml | X.Y.Z | 2.9.0 | | init.py | X.Y.Z | 2.9.0 | | Git tags | vX.Y.Z | v2.9.0 | | CHANGELOG | [X.Y.Z] | [2.9.0] |
development
Apple Human Interface Guidelines for content display components. Use this skill when the user asks about charts component, collection view, image view, web view, color well, image well, activity view, lockup, data visualization, content display, displaying images, rendering web content, color pickers, or presenting collections of items in Apple apps. Also use when the user says how should I display charts, what's the best way to show images, should I use a web view, how do I build a grid of items, what component shows media, or how do I present a share sheet. Cross-references: hig-foundations for color/typography/accessibility, hig-patterns for data visualization patterns, hig-components-layout for structural containers, hig-platforms for platform-specific component behavior.
tools
Automate HelpDesk tasks via Rube MCP (Composio): list tickets, manage views, use canned responses, and configure custom fields. Always search tools first for current schemas.
testing
Expert Haskell engineer specializing in advanced type systems, pure functional design, and high-reliability software. Use PROACTIVELY for type-level programming, concurrency, and architecture guidance.
tools
GraphQL gives clients exactly the data they need - no more, no less. One endpoint, typed schema, introspection. But the flexibility that makes it powerful also makes it dangerous. Without proper controls, clients can craft queries that bring down your server. This skill covers schema design, resolvers, DataLoader for N+1 prevention, federation for microservices, and client integration with Apollo/urql. Key insight: GraphQL is a contract. The schema is the API documentation. Design it carefully.