agentsclimarketplace

Releasing versions

Skill aiskillstore/marketplace/skills/bpsai/releasing-versions

Manages release preparation including validation, version bumping, documentation verification, and security checks.From its SKILL.md

Install
npx -y skills add aiskillstore/marketplace --skill releasing-versions

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.

SKILL.md

6.4 KB, ~1.8k tokens by cl100k_base, as published. Nobody here has run it

Releasing Versions

When to Use

  • Preparing a new release
  • Version bumping
  • Pre-release validation
  • Documentation verification before release

Release Workflow Overview

PhasePurposeBlocking?
1. Pre-Release ValidationTests, securityYes
2. Version BumpUpdate version stringsYes
3. DocumentationVerify/update docsWarning
4. Template SyncCookiecutter alignmentWarning
5. Build VerificationPackage buildsYes
6. Git OperationsCommit and tagYes

Phase 1: Pre-Release Validation

1.1 Verify Sprint Tasks Complete

# 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.

1.2 Run Full Test Suite

# 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.

1.3 Security Scans

# 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.

Phase 2: Version Bump

Locate Version Files

grep -E "^version|__version__" tools/cli/pyproject.toml tools/cli/bpsai_pair/__init__.py

Update Both Files

FileFormat
pyproject.tomlversion = "X.Y.Z"
__init__.py__version__ = "X.Y.Z"

Note: Version in files has NO 'v' prefix. Git tags use 'v' prefix.

Related Files to Update

FileUpdate
capabilities.yamlversion: "X.Y.Z"
config.yamlversion: "X.Y.Z"

Phase 3: Documentation Verification

3.1 Required Documentation

# 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

3.2 Documentation Freshness

# 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.

3.3 CHANGELOG Entry Format

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>

Phase 4: Template Sync (PairCoder Only)

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 instructions
  • capabilities.yaml format
  • Skill files

Phase 5: Build Verification

# 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

Phase 6: Release Checklist

  • All sprint tasks complete
  • Tests passing (100%)
  • Coverage β‰₯ 80%
  • No secrets in codebase
  • Version bumped in pyproject.toml
  • Version bumped in init.py
  • Version bumped in capabilities.yaml
  • Version bumped in config.yaml
  • CHANGELOG updated
  • README current
  • FEATURE_MATRIX updated
  • Cookiecutter template synced (if applicable)
  • Package builds successfully
  • Package installs cleanly

Phase 7: Git Operations

# 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.

Phase 8: Report Summary

πŸ“¦ **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

Version Format Reference

LocationFormatExample
pyproject.tomlX.Y.Z2.9.0
init.pyX.Y.Z2.9.0
Git tagsvX.Y.Zv2.9.0
CHANGELOG[X.Y.Z][2.9.0]

What ships with it: 1 file

40.1 KB alongside SKILL.md

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.