VERSION_SYNC_POLICY
HELM SDK Version Sync Policy
How SDK versions, proto IDL, and spec versions stay in sync.
Version Relationships
SPEC_VERSION (1.0.0-alpha.1)
│
├── Proto IDL (helm.proto) — version field in package
│
├── Go SDK (sdk/go) — go.mod module version
├── Python SDK (sdk/python) — pyproject.toml version
├── TypeScript SDK (sdk/ts) — package.json version
├── Java SDK (sdk/java) — pom.xml version
└── Rust SDK (sdk/rust) — Cargo.toml version
Rules
1. Spec Version is Authoritative
The spec version in protocols/specs/SPEC_VERSION is the single source of truth.
All other version references derive from it.
2. SDK Major.Minor Tracks Spec
SDK versions MUST track the spec's major.minor:
- Spec
1.0.0→ SDK1.0.x - Spec
1.1.0→ SDK1.1.x - SDK patch versions are independent (bug fixes, performance)
3. Proto Version is Locked
The proto package helm.kernel.v1 increments its v{N} suffix ONLY on
breaking wire format changes. Non-breaking additions do NOT change the version.
4. Generated Types MUST Match
All *_gen.* files across SDKs MUST be regenerated from the same proto
revision. The codegen-check CI target enforces this:
make codegen-check # Fails if generated files differ from committed
5. Release Cadence
| Artifact | Release Trigger | Automation |
|---|---|---|
| Spec | RFC finalization | Manual |
| Proto IDL | Spec change | Manual |
| SDK types | Proto change | make codegen |
| SDK packages | SDK code change | goreleaser / per-language CI |
6. Version Bump Process
- Update
protocols/specs/SPEC_VERSION - Regenerate:
make codegen - Run:
make codegen-check(CI will also verify) - Bump SDK versions in their respective manifests
- Tag release:
git tag v{VERSION}
CI Enforcement
The sdk_gates.yml workflow triggers on proto changes and verifies:
- All
*_gen.*files haveAUTO-GENERATEDheaders - Generated files are present for all 5 languages
- Build + test pass for each SDK