You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
refactor: remove "next" key from compat manifest, add DATABRICKS_FORCE_EMBEDDED_COMPAT
The manifest is now purely range-based: each versioned entry defines a
range floor that applies to that CLI version and all above it. The "next"
key was redundant since we always know the CLI version when updating the
manifest. Dev builds now resolve to the highest versioned entry.
Also adds DATABRICKS_FORCE_EMBEDDED_COMPAT=true env var to skip remote
fetch and use only the embedded manifest, useful for local development.
Co-authored-by: Isaac
Copy file name to clipboardExpand all lines: .agent/skills/bump-cli-compat/SKILL.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -68,7 +68,7 @@ Read `internal/build/cli-compat.json`. Note the current versions and the list of
68
68
69
69
### Step 4: Update the manifest
70
70
71
-
Update **all entries** (both `next` and all versioned CLI entries) to the new appkit and skills versions. This is the "no template changes" scenario — a simple search & replace.
71
+
Update the **highest versioned entry**to the new appkit and skills versions. Do NOT add new versioned keys — this is the default "no breaking changes" flow. The manifest is range-based: updating the highest entry automatically covers all CLI versions in that range.
72
72
73
73
Write the updated `internal/build/cli-compat.json`.
- Each key is a CLI version (`X.Y.Z`) or `"next"`.
15
-
- Each value specifies the compatible `appkit` and `skills` versions.
16
-
-`"next"` is used for dev builds (`0.0.0-dev*`). For production CLI versions newer than all listed entries, the highest versioned entry is used.
15
+
Each key is a CLI version in semver format. Each entry defines a **range floor**: it applies to that CLI version and all versions above it, up to (but not including) the next entry. The manifest should be **sparse** — not every CLI version needs its own entry. Only add a new entry when a compatibility boundary changes.
- CLI `0.0.0-dev+abc` → uses `0.296.0` entry (dev builds use the highest versioned entry)
17
22
18
23
## How the CLI resolves versions
19
24
20
-
1.**Exact match**on CLI version → use that entry.
21
-
2.**No exact match**, between two entries → use the nearest lower version's entry.
22
-
3.**Newer than all entries**→ use the highest versioned entry.
23
-
4.**Older than all entries** → use the lowest (oldest) entry.
24
-
5.**Dev builds**(`0.0.0-dev*`) → use `"next"`.
25
+
1.**Dev builds**(`0.0.0-dev*`) → use the highest versioned entry.
26
+
2.**Exact match** on CLI version → use that entry.
27
+
3.**No exact match**, between two entries → use the nearest lower version's entry.
28
+
4.**Newer than all entries** → use the highest versioned entry.
29
+
5.**Older than all entries** → use the lowest (oldest) entry.
25
30
26
31
## Manifest sources (fallback chain)
27
32
@@ -32,15 +37,16 @@ At runtime, the CLI resolves the manifest from four sources:
32
37
3.**Stale local cache** — if remote fetch fails but a previously cached file exists (even if expired), it is used as-is.
33
38
4.**Embedded manifest** — compiled into the binary via `go:embed`. Used as last resort when both remote and local cache fail.
34
39
40
+
Set `DATABRICKS_FORCE_EMBEDDED_COMPAT=true` to skip all tiers and use only the embedded manifest. This is useful for local development when testing with a locally compiled binary that has a modified `cli-compat.json`.
41
+
35
42
## When to update
36
43
37
-
After each AppKit or Agent Skills release:
44
+
The goal is to **keep the manifest sparse** — only add entries at compatibility boundaries. After each AppKit or Agent Skills release:
38
45
39
46
1.**Run evals** on the new AppKit version. If there is no regression, proceed.
40
47
2.**Open a PR** to update `cli-compat.json`. The change depends on the type of release:
41
-
-**No template changes** (just an AppKit/skills version bump): search & replace all version occurrences in the manifest and update `next`.
42
-
-**Template changes that don't require new CLI features**: test the last 3 CLI versions with the new template and update matching entries.
43
-
-**Template changes that require new CLI features**: add a new entry for the minimum CLI version that supports them; older entries keep pointing to the previous template version.
48
+
-**No breaking changes** (the new AppKit/skills version works with all existing CLI versions): update the existing highest versioned entry's appkit/skills values in-place. Do NOT add a new versioned key. All CLI versions in that range automatically pick up the new versions.
49
+
-**Breaking changes** (the new AppKit templates require specific `apps init` features, or the new skills version requires CLI commands that older CLIs lack): add a new entry keyed to the **minimum CLI version** that supports the new features. Older entries keep their previous appkit/skills values so older CLI binaries stay compatible.
44
50
45
51
This process is manual for now but can be automated as part of the release workflow in the future. Use the `/bump-cli-compat` Claude Code skill to automate the update and PR creation.
46
52
@@ -52,7 +58,7 @@ The manifest is validated by Go tests in `libs/clicompat/`:
52
58
go test ./libs/clicompat/... -run TestEmbeddedManifest -v
53
59
```
54
60
55
-
This checks: valid JSON, `"next"` key present, at least one versioned entry, valid semver keys, valid semver entry values, `next` versions >= all entries, and ascending key order.
61
+
This checks: valid JSON, at least one entry, valid semver keys, valid semver entry values, and ascending key order.
0 commit comments