docs: add COMPATIBILITY.md - #218
Conversation
Records the version-number semantics actually in use (product-stage signal rather than strict semver), the 6.3.0 removal list with the measured downstream-reference evidence behind each entry, and a migration guide for AbstractCommandExecutor — the only deprecated type with real downstream users. Also corrects the dependency-scope guidance: the published POM carries no dependencies after flatten-maven-plugin, so consumers must use provided / compileOnly or they shade the entire framework into their own JAR. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J9hmZrywjj8deHYraePCkZ
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Up to standards ✅🟢 Issues
|
| Metric | Results |
|---|---|
| Coverage variation | ✅ +0.00% coverage variation (-1.00%) |
| Diff coverage | ✅ ∅ diff coverage |
Coverage variation details
Coverable lines Covered lines Coverage Common ancestor commit (9b0a961) 10908 7221 66.20% Head commit (9048c21) 10908 (+0) 7221 (+0) 66.20% (+0.00%) Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch:
<coverage of head commit> - <coverage of common ancestor commit>
Diff coverage details
Coverable lines Covered lines Diff coverage Pull request (#218) 0 0 ∅ (not applicable) Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified:
<covered lines added or modified>/<coverable lines added or modified> * 100%
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: fdcbe4843d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
|
||
| 1. 改继承:`extends AbstractCommandExecutor` → `extends BaseCommandExecutor`。 | ||
| 2. 实现新增的抽象方法 `protected void handleHelp(CommandSender sender)`。 | ||
| 3. `@CmdMapping` / `@CmdParam` / `@CmdTarget` / `@CmdCD` / `@UsageLimit` 语义不变。 |
There was a problem hiding this comment.
Document the changed cooldown scope before migration
For executors containing multiple @CmdCD methods, the annotation semantics are not unchanged: AbstractCommandExecutor.checkCD blocks every command in that executor while the player has any active cooldown, whereas CooldownValidator keys cooldowns by method.toString() and therefore only blocks the same method. Following this migration guide can silently weaken cross-command throttling, so either preserve the legacy behavior or document this difference here.
Useful? React with 👍 / 👎.
The MINOR policy contradicted this file's own removal notice. It promised that minor releases only drop types with zero measured downstream references, while a later section announces the removal of AbstractCommandExecutor — which has 14 — in 6.3.0. A third-party author reading only the version-semantics section would conclude a minor release cannot break them. It now states both cases explicitly, with the conditions attached to the second. The migration-timing advice was unexecutable for the readers it named. It told third parties to wait for both known gaps to ship, but the second lands in the same release that removes the old base class, leaving them no transition window at all. It now separates the two audiences and states the tradeoff. The dependency-scope warning overstated its mechanism: with no shade step, compile scope does not bundle anything. The conclusion was right, the reason was not — now qualified to builds that shade or shadow. Finally, "Modules/" is a maintainer-local directory name that means nothing to a public reader; replaced with the organization-level description. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J9hmZrywjj8deHYraePCkZ
The table's parenthetical said the fix is scheduled 'before the migration', but the section below tells third parties to migrate in 6.2.5 — earlier than this fix. The two sentences meant different migrations. Now says explicitly that it precedes the maintainer-run migration of the 17 in-org repositories. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01J9hmZrywjj8deHYraePCkZ
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 44d2f73a45
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
|
||
| 1. 改继承:`extends AbstractCommandExecutor` → `extends BaseCommandExecutor`。 | ||
| 2. 实现新增的抽象方法 `protected void handleHelp(CommandSender sender)`。 | ||
| 3. `@CmdMapping` / `@CmdParam` / `@CmdTarget` / `@CmdCD` / `@UsageLimit` 语义不变。 |
There was a problem hiding this comment.
Document the changed CmdTarget precedence
When an executor has both class- and method-level @CmdTarget annotations, migration changes their composition: legacy onCommand requires both checkSender calls to pass, while SenderTypeValidator.determineTargetType returns the method annotation instead of applying the class restriction. For example, a method marked BOTH inside a PLAYER executor becomes console-callable after migration, contrary to the claim that the semantics are unchanged; document this override behavior or preserve the legacy restriction.
Useful? React with 👍 / 👎.
|
|
||
| 1. 改继承:`extends AbstractCommandExecutor` → `extends BaseCommandExecutor`。 | ||
| 2. 实现新增的抽象方法 `protected void handleHelp(CommandSender sender)`。 | ||
| 3. `@CmdMapping` / `@CmdParam` / `@CmdTarget` / `@CmdCD` / `@UsageLimit` 语义不变。 |
There was a problem hiding this comment.
Document the changed UsageLimit scope
For a method using @UsageLimit(ALL) that is invoked concurrently by different players, the legacy checkLock/serverLock implementation indexes the lock by player UUID and therefore only rejects re-entry from the same player, whereas UsageLockValidator indexes server-wide locks by method key and rejects every other player. This observable concurrency change can make migrated commands unavailable while another player runs them, so the guide should not state that @UsageLimit semantics are unchanged.
Useful? React with 👍 / 👎.
What
新增仓库根的
COMPATIBILITY.md。Why
本仓库此前没有任何书面的版本或废弃契约:32 处
@Deprecated中仅 4 处带since/forRemoval,且全部写since="6.2.0"、无一指明移除版本;没有 CHANGELOG;README 的 Gradle 片段用
implementation而 Maven 片段用provided,两者自相矛盾。17 个下游仓库面对的是一个「全部 public、全部同等稳定、零机器检查」的表面。
本文件记录三件事:实际在用的版本号语义、6.3.0 的移除清单及其实测依据、
AbstractCommandExecutor的迁移指引与移除预告。Notes
Modules/下 17 个独立下游 Git 仓库的引用量实测(其中 15 个是继承
UltiToolsPlugin的插件模块)。AbstractCommandExecutor是唯一有真实下游用户的废弃类型(实测 14 个文件,集中在 5 个仓库),它的移除预告同时是给仓库外第三方模块的唯一通知渠道。
format=""在 6.2.5、参数级 tab 补全在 6.3.0),并提示只等到 6.2.5 就迁移会静默丢失补全。
🤖 Generated with Claude Code
https://claude.ai/code/session_01J9hmZrywjj8deHYraePCkZ