fix: load after RPCharacters by dropping loadbefore ItemsAdder - #29
Conversation
BirdMessenger depends on TLibs, which soft-depends on ItemsAdder, so loadbefore ItemsAdder can never hold. It closed the cycle RPCharacters -> TLibs -> ItemsAdder -> BirdMessenger -> RPCharacters, which stops Paper starting without -Dpaper.useLegacyPluginLoading=true. Main crash-looped on 2026-09-29 when that flag was dropped. The legacy loader broke the cycle by enabling RPCharacters after BirdMessenger, so the character-activated mail listener never registered. ItemsAdder already enabled first on both servers, so nothing changes there. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (3)
💤 Files with no reviewable changes (1)
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 9 remain after this review. 📝 WalkthroughWalkthroughThe plugin descriptor removes ChangesPlugin load order
Priority: ➖ Normal Estimated code review effort: 2 (Simple) | ~8 minutes Change: Bug fix · Severity of issue fixed: Medium Merge Risk: ⚪ Minimal · up to The load-order declaration changes, but the inspected code establishes no concrete interaction failure. No specific merge-blocking risk remains. Security Architecture ReviewSecurity architecture risk: 🟡 Moderate · up to The startup change is intended to restore character-activation mail delivery. That newly effective delivery path relies on an unverified assumption that character IDs cannot belong to different players, and its behavior under the remaining startup cycle has not been demonstrated. Retained concerns
Security review detailsSecurity Blast Radius
Security Findings and Attack Paths
Trust Boundaries and Controls
Resilience and Maintainability Implications
Hardening Proposals
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Full details: Docstring CoverageExplanation Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 1 functions across 1 files. (1 skipped: 1 unsupported.)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
A rabbit checks the plugin’s order, Comment |
Why
On 2026-09-29, Main was started without
-Dpaper.useLegacyPluginLoading=trueand crash-looped:BirdMessenger depends on TLibs, which soft-depends on ItemsAdder, so
loadbefore: [ItemsAdder]could never hold. The startup logs on both servers show ItemsAdder already enabling before BirdMessenger.The legacy loader broke the cycle at BirdMessenger's soft dependency instead, so RPCharacters enabled after BirdMessenger. As a result,
isPluginEnabled("RPCharacters")inonEnablereturned false, andCharacterActivatedListenernever registered. Pending mail was not delivered when a player switched to the addressed character.Changes
loadbefore: [ItemsAdder]fromplugin.ymland added a comment explaining why it must stay out.PluginLoadOrderTest, which fails if aloadbeforereturns or a dependency is dropped.Remaining cycle
Across Main's 73 plugins, this change removes 13 of the 14 load-order cycles. The remaining one is RPCharacters ↔ SimpleFactions: each soft-depends on the other. Main will still need the legacy loading flag until one of those two edges is removed.
Testing
mvn verifypasses: 34 tests, 0 failures.🤖 Generated with Claude Code
Summary by CodeRabbit