Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
72d3fc9
Cap the SDK's Kotlin at the Kotlin embedded in Gradle
alexander-yevsyukov Oct 20, 2026
cf0c174
Read Kotlin requirements from all metadata and modules
alexander-yevsyukov Oct 20, 2026
1968f54
Polish the Kotlin-cap wording from the pre-PR review
alexander-yevsyukov Oct 20, 2026
b7b7e31
Settle the version list and the loop's usage
alexander-yevsyukov Oct 20, 2026
6800ac3
Trim the Why section of the Kotlin cap guideline
alexander-yevsyukov Oct 20, 2026
d564686
Tell a missing file from a failed fetch in the requirement loop
alexander-yevsyukov Oct 20, 2026
8e6f1c4
Turn the Kotlin cap guideline into a `kotlin-version-cap` skill
alexander-yevsyukov Oct 20, 2026
f3c6790
Read only what a consumer receives, and follow metadata redirects
alexander-yevsyukov Oct 20, 2026
41d5f4d
Merge inherited POM dependencies, and settle versionless metadata ones
alexander-yevsyukov Oct 20, 2026
e302201
Interpolate POM coordinates and apply managed defaults before filtering
alexander-yevsyukov Oct 20, 2026
23d3a7e
Read active profiles and plugin markers, and survive cut-short fetches
alexander-yevsyukov Oct 20, 2026
d014b6e
Follow platforms, imported BOMs, and relocations
alexander-yevsyukov Oct 20, 2026
ab2e820
Track the cycle guard per path, and defer BOM-managed versions
alexander-yevsyukov Oct 20, 2026
7b1e11b
Settle versionless dependencies per module, and check BOMs as platforms
alexander-yevsyukov Oct 20, 2026
dc782e3
Flag unresolved managed Kotlin coordinates when reading a platform
alexander-yevsyukov Oct 20, 2026
2388c5f
Read only the active wrapper URL, the default capability, and real BO…
alexander-yevsyukov Oct 20, 2026
ea607ff
Activate profiles and interpolate inherited entries as Gradle does
alexander-yevsyukov Oct 20, 2026
df9c127
Count an imported BOM only where its management reaches consumers
alexander-yevsyukov Oct 20, 2026
94f9713
Clip only POM-only BOM imports, never metadata platforms
alexander-yevsyukov Oct 20, 2026
551bf1f
Let the first imported BOM win, and the child's imports come first
alexander-yevsyukov Oct 20, 2026
1e71c2f
Resolve versionless dependencies through the first managing import
alexander-yevsyukov Oct 20, 2026
d0f3218
Let a dependency's own scope beat an imported BOM's default
alexander-yevsyukov Oct 20, 2026
df16007
Count a library's Kotlin BOM, and imported defaults, only where they …
alexander-yevsyukov Oct 20, 2026
056a342
Align Kotlin modules only on a real kotlin-bom import
alexander-yevsyukov Oct 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 11 additions & 7 deletions claude/agents/dependency-audit.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@ name: dependency-audit
description: >
Audits changes to dependency declarations under
`buildSrc/src/main/kotlin/io/spine/dependency/` — catches accidental
version downgrades, BOM mismatches, missing deprecation markers, copyright
drift, and convention drift. Use proactively whenever a diff touches that
directory, or when the user asks "audit this dependency bump". Read-only;
does not run builds.
version downgrades, BOM mismatches, versions above the Kotlin version cap,
missing deprecation markers, copyright drift, and convention drift. Use
proactively whenever a diff touches that directory or
`buildSrc/build.gradle.kts`, or when the user asks "audit this dependency
bump". Read-only; does not run builds.
tools: Read, Grep, Glob, Bash
model: haiku
---
Expand All @@ -15,10 +16,13 @@ Follow the `dependency-audit` skill exactly:

- Skill: `.agents/skills/dependency-audit/SKILL.md`
- The skill owns the per-area checks (version sanity, naming and structure,
deprecation discipline, convention drift, cross-cutting) and the output
format (Must fix / Should fix / Nits + one-line verdict).
deprecation discipline, convention drift, cross-cutting, Kotlin version cap)
and the output format (Must fix / Should fix / Nits + one-line verdict).
- Read-only: use `Read`, `Grep`, `Glob`, and `Bash` solely for `git diff`,
`git grep`, and related read-only inspection. Do not run builds.
`git grep`, and related read-only inspection. For the Kotlin-cap check,
that includes running the `kotlin-version-cap` skill's script, which reads
the Gradle cache and makes plain GETs of `config`'s wrapper properties and
of artifact POM and `.module` files. Do not run builds.
- **Be fast.** Fetch the full unified diff once, work from it, and `Read`
individual files only when the skill's step 2 budget allows. Issue
independent `Grep`/`Bash` calls in parallel within a single response;
Expand Down
7 changes: 6 additions & 1 deletion claude/commands/bump-gradle.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
description: >
Upgrade the Gradle wrapper to the latest release.
argument-hint: "[gradle-version]"
allowed-tools: Read, Edit, Bash(./gradlew:*), Bash(git status:*), Bash(git diff:*), WebFetch
allowed-tools: >-
Read, Edit, Bash(./gradlew:*), Bash(git status:*), Bash(git diff:*), WebFetch,
Bash(python3 .agents/skills/kotlin-version-cap/scripts/kotlin_cap.py:*)
model: sonnet
---

Expand All @@ -14,3 +16,6 @@ Follow the `bump-gradle` skill exactly:
truth for the latest version. Do NOT rely on remembered Gradle versions.
- If the user supplied a version: $ARGUMENTS, use it; otherwise read it from the release notes.
- Commit the wrapper change and dependency report change in separate commits per the skill.
- Report which Kotlin the new Gradle embeds and how the bump moves the Kotlin
version cap (the `kotlin-version-cap` skill). Never raise Kotlin in
the same change.
8 changes: 7 additions & 1 deletion claude/commands/dependency-update.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ description: >
argument-hint: "[--dry-run] [paths...]"
allowed-tools: >-
Read, Edit, Write, Grep, Glob, WebFetch, Bash(git status:*),
Bash(git diff:*), Bash(./gradlew build:*), Bash(./gradlew clean build:*)
Bash(git diff:*), Bash(./gradlew build:*), Bash(./gradlew clean build:*),
Bash(python3 .agents/skills/kotlin-version-cap/scripts/kotlin_cap.py:*)
model: sonnet
---

Expand All @@ -18,6 +19,11 @@ Follow the `dependency-update` skill exactly:
`// https://...` or KDoc `@see`). If no URL, fall back to Maven Central
AND back-fill the URL comment.
- Filter out snapshots, RCs, alphas, betas, milestones, EAPs, and `-dev` builds.
- Apply the Kotlin version cap (the `kotlin-version-cap` skill): never
raise Kotlin above the Kotlin embedded in the Gradle version of `config`'s
wrapper, and never adopt a release that requires a newer Kotlin than that.
Report held-back versions under "Capped" and values already above the cap under
"Above the cap".
- Apply the edit. Do NOT commit; emit the report described in the skill.
- Flag `local/` (Spine SDK) updates separately so the user can decide whether to bump in lockstep.
- After the run, suggest the user review the diff and run `./gradlew build`
Expand Down
3 changes: 2 additions & 1 deletion claude/commands/pre-pr.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ Follow the `pre-pr` skill exactly:
the build), or a `.kt`/`.kts`/`.java` diff that also touches comment
lines. See the skill for the exact conditions.
- `dependency-audit` when any file under
`buildSrc/src/main/kotlin/io/spine/dependency/` changed.
`buildSrc/src/main/kotlin/io/spine/dependency/` or
`buildSrc/build.gradle.kts` changed.
- `check-links` when a Hugo site exists (a Hugo config under `docs/` or
`site/`) and the diff touches files under the site directory or
`lychee.toml`. Honor the `check-links.ok` sentinel short-circuit from
Expand Down
2 changes: 2 additions & 0 deletions guidelines/_TOC.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,3 +39,5 @@
33. [Raise test coverage](../skills/raise-coverage/SKILL.md)
34. [Kotlin JVM tester](../skills/kotlin-jvm-tester/SKILL.md) — how to write JVM tests
in Kotlin for Spine: naming, structure, helpers, and Java coexistence
35. [Kotlin version cap](../skills/kotlin-version-cap/SKILL.md) — the SDK's Kotlin never
exceeds the Kotlin embedded in the Gradle version of `config`'s wrapper
Loading
Loading