This document defines the versioning system for Synaptic Canvas, establishing a single source of truth across the marketplace platform, individual packages, and their artifacts.
Synaptic Canvas uses a three-layer versioning system based on semantic versioning (SemVer: MAJOR.MINOR.PATCH):
- Marketplace Platform Version (
version.yaml) - Infrastructure and CLI - Package Versions (
packages/*/manifest.yaml) - Per-package releases - Artifact Versions (YAML frontmatter) - Commands, skills, agents
Location: version.yaml
Purpose: Version of the Synaptic Canvas platform infrastructure (installer, registry format, CLI)
- Major changes to the installation system
- Breaking changes to registry format or manifest schema
- New marketplace-wide features affecting all packages
- CLI/installer interface changes
The platform version is referenced in:
- Installer compatibility checks
- Registry API versioning
- CLI tool versioning
Location: packages/<package-name>/manifest.yaml
Purpose: Version of an individual package and all its artifacts
Scope: Independent per package
Each package maintains its own version independently:
# packages/<package-name>/manifest.yaml
name: <package-name>
version: 0.8.0 # Package version (SemVer)
description: "..."- PATCH (0.8.1): Bug fixes, documentation updates, non-breaking improvements
- MINOR (0.9.0): New features, new agents/commands/skills, functionality enhancements
- MAJOR (1.0.0): Breaking changes, major refactoring, API changes, production-ready release
Location: Frontmatter YAML in artifact files Scope: Commands, skills, agents Policy: Synchronized with parent package version
- Commands (
packages/<package>/commands/*.md) - Skills (
packages/<package>/skills/*/*.md-SKILL.md) - Agents (
packages/<package>/agents/*.mdand.claude/agents/*.md)
All artifacts must include version in YAML frontmatter:
---
name: <artifact-name>
description: >
<description>
version: 0.8.0
---- Commands & Skills: Version must match parent
manifest.yamlversion - Agents: Version must match parent package version
- Installed Artifacts:
.claude/artifacts follow their source package version
Version mismatches are detected by the validation scripts:
python3 scripts/validate-all.py
python3 scripts/audit-versions.pyThe set-package-version.py script is the single source of truth for version management.
# Update a single package
python3 scripts/set-package-version.py sc-delay-tasks 0.8.0
# Update all packages to the same version
python3 scripts/set-package-version.py --all 0.8.0
# Update all packages AND marketplace platform version
python3 scripts/set-package-version.py --all --marketplace 0.8.0
# Preview changes without applying
python3 scripts/set-package-version.py --all 0.8.0 --dry-runFor each package:
packages/<package>/manifest.yamlpackages/<package>/.claude-plugin/plugin.jsonpackages/<package>/commands/*.md(frontmatter)packages/<package>/skills/*/SKILL.md(frontmatter)packages/<package>/agents/*.md(frontmatter)
Registry files (regenerated automatically):
.claude-plugin/marketplace.json.claude-plugin/registry.jsondocs/registries/nuget/registry.json
If --marketplace:
version.yaml
- Version decrement protection: Errors if you try to set a lower version
- Dry-run mode: Preview all changes before applying
- Skip detection: Packages already at target version are skipped
When releasing version 0.9.0 of sc-delay-tasks:
# 1. Set the new version (updates all files automatically)
python3 scripts/set-package-version.py sc-delay-tasks 0.9.0
# 2. Run validation to verify
python3 scripts/validate-all.py
# 3. Update CHANGELOG
# Add entry to packages/sc-delay-tasks/CHANGELOG.md
# 4. Commit with clear message
git commit -m "chore(sc-delay-tasks): release v0.9.0"When releasing all packages at once:
# 1. Set version for all packages and marketplace
python3 scripts/set-package-version.py --all --marketplace 1.0.0
# 2. Run validation
python3 scripts/validate-all.py
# 3. Commit
git commit -m "chore: release v1.0.0"# Run full validation suite
python3 scripts/validate-all.py
# Audit versions specifically
python3 scripts/audit-versions.py
# Compare versions by package
python3 scripts/compare-versions.py --by-package- Use the script - Always use
set-package-version.py, never edit versions manually - Validate after changes - Run
validate-all.pybefore committing - Document changes - Update CHANGELOG.md with every version bump
- Use semantic versioning - Reserve MAJOR version for breaking changes
- Review before release - Use
--dry-runto preview changes
version.yaml- Current marketplace platform versionpackages/*/manifest.yaml- Individual package manifestsCHANGELOG.md- Release history for each packagescripts/set-package-version.py- Version management scriptscripts/validate-all.py- Full validation suitescripts/audit-versions.py- Version consistency checkerRELEASING.md- Step-by-step release process