## 1. Client Compatibility Check - [x] 1.1 Create `client/MIN_ENGINE_VERSION` file with initial value `2.0.0` - [x] 1.2 Add `MinEngineVersion` variable to `client/cmd/root.go` (set via ldflags, default `dev`) - [x] 1.3 Update `client/Makefile` to read `MIN_ENGINE_VERSION` file and inject via `-ldflags "-X cmd.MinEngineVersion=..."` alongside existing `Version` - [x] 1.4 Add `CheckEngineVersion(minVersion string)` method to `client/internal/api/client.go` that calls `GET /api/v1/status`, parses `version` field, and compares against `minVersion` using semver major.minor.patch - [x] 1.5 Add `versionChecked bool` field to `Client` struct; guard `CheckEngineVersion` so it runs at most once per Client instance - [x] 1.6 Call `CheckEngineVersion` at the start of `Client.do()` (before executing the actual request); skip if `MinEngineVersion` is empty or `dev` - [x] 1.7 On version mismatch: print `Error: kb client vX.Y.Z requires engine vM.N.P+ (connected engine is vA.B.C)\nUpdate your engine image to engine-vM.N.P or later.` to stderr and `os.Exit(1)` - [x] 1.8 On status endpoint unreachable: skip version check silently (let the actual request surface the error) ## 2. Release Script — Client - [x] 2.1 Create `release-client.sh` extracting client-specific logic from `release.sh`: version bump of `client/VERSION`, Go binary build, git tag `client-vX.Y.Z`, Gitea release with binary assets - [x] 2.2 Release notes template: include `MinEngineVersion` requirement (e.g. "Requires engine v2.0.0+") - [x] 2.3 Pass `MIN_ENGINE_VERSION` to `make all` in the build step ## 3. Release Script — Engine - [x] 3.1 Create `release-engine.sh` extracting engine-specific logic from `release.sh`: version bump of `engine/VERSION`, Docker image build (nvidia + rocm), git tag `engine-vX.Y.Z`, Gitea release, image push - [x] 3.2 Release notes template: include Docker pull commands with `engine-vX.Y.Z` prefixed tags ## 4. Cleanup - [x] 4.1 Remove old `release.sh` (replaced by the two new scripts) - [x] 4.2 Update Docker image tag format in release scripts from `vX.Y.Z-nvidia` to `engine-vX.Y.Z-nvidia` (and same for rocm/latest) ## 5. Testing - [x] 5.1 Test client version check passes when engine version >= MinEngineVersion - [x] 5.2 Test client version check fails with correct error message when engine version < MinEngineVersion - [x] 5.3 Test client skips version check when MinEngineVersion is empty or `dev` - [x] 5.4 Test client skips version check when engine is unreachable - [x] 5.5 Dry-run `release-client.sh --dry-run --gitea` and verify correct tag format and build - [x] 5.6 Dry-run `release-engine.sh --dry-run --gitea` and verify correct tag format and image names