chore: release v5.53.0#83
Conversation
Qodo reviews are paused for this user.Troubleshooting steps vary by plan Learn more → On a Teams plan? Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center? |
Reviewer's GuideRelease bump to v5.53.0 adding formal release notes, updating versioned URLs and metadata, and documenting new tests and bug fixes for cooldown cleanup, invite cache pruning, HTTPException handling, and CLI scaffold collision. Sequence diagram for bot-level cooldown cleanup and plugin unloadsequenceDiagram
participant Bot
participant Callback
participant CooldownRegistry
participant Plugin
Bot->>Bot: _cooldown_cleanup_loop
Bot->>CooldownRegistry: prune_expired_entries
alt [entries > _COOLDOWN_MAX_ENTRIES]
Bot->>CooldownRegistry: evict_oldest_buckets
end
Plugin->>Bot: remove_plugin
Bot->>Callback: detach_cooldown_registry
Bot->>CooldownRegistry: remove_registry_entry
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
📝 WalkthroughSummary by CodeRabbit
WalkthroughEasyCord version references are updated from v5.52.0 to v5.53.0 across package metadata, documentation, installation links, and release links. Changelog and release notes document the new release, its fixes, architecture updates, regression coverage, and test total. ChangesEasyCord v5.53.0 Release
Estimated code review effort: 1 (Trivial) | ~5 minutes Suggested labels: Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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 |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@CHANGELOG.md`:
- Around line 5-6: Insert a blank line immediately after each release subsection
heading in CHANGELOG.md, including “### Added”, “### Fixed”, and “### Tests”,
before their respective content. Ensure all affected headings satisfy
markdownlint MD022.
In `@release_v5.53.0/notes.md`:
- Around line 44-46: Update the fenced installation command in the release notes
to use a bash language identifier on its opening fence, while preserving the
existing pip command and closing fence.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro
Run ID: 4ad8cdf4-f58c-4b13-9e05-895b32c7e532
📒 Files selected for processing (6)
CHANGELOG.mdREADME.mddocs/getting-started.mdeasycord/__init__.pypyproject.tomlrelease_v5.53.0/notes.md
📜 Review details
⏰ Context from checks skipped due to timeout. (2)
- GitHub Check: CodeRabbit
- GitHub Check: Analyze (Python)
🧰 Additional context used
📓 Path-based instructions (4)
**/*
📄 CodeRabbit inference engine (CLAUDE.md)
Before investigating EasyCord architecture, module relationships, data flows, or cross-cutting patterns, query
C:\Users\Tom\Code projects\EasyCord\graphify-out\graph.jsonwith Graphify; do not manually read source files first or read deprecated vault files.
Files:
docs/getting-started.mdpyproject.tomlrelease_v5.53.0/notes.mdeasycord/__init__.pyREADME.mdCHANGELOG.md
**/*.py
📄 CodeRabbit inference engine (AGENTS.md)
Async tests use
pytest-asynciowithasyncio_mode = "auto", so async tests do not need manual event-loop setup.Target Python 3.10+ and discord.py versions
>=2.7.1,<3.
Files:
easycord/__init__.py
easycord/__init__.py
📄 CodeRabbit inference engine (AGENTS.md)
Only symbols re-exported from
easycord/__init__.pyare part of the stable public API; internal modules prefixed with_are not public contract surface.
Files:
easycord/__init__.py
easycord/**/*.py
📄 CodeRabbit inference engine (CLAUDE.md)
easycord/**/*.py: Import public APIs fromeasycord, never from underscore-prefixed internal modules such aseasycord._*.
Usectx.userorctx.member, neverctx.author; treatctx.is_adminas a property and never call it.
Store per-guild plugin state in the database layer, not on thePlugininstance.
Never hardcode response strings in plugins; look them up withctx.t(...).
Always awaitToolLimiter.check_limit,reset_user, andreset_tool.
Require an explicitToolSafetyannotation when registering a tool with@ai_tool.
UseSENDABLE_CHANNEL_TYPESto narrow a channel before calling.send().
Initialize cooldown sentinels inLevelsPlugin._cooldownstofloat("-inf"), not0.0.
Route every destructive action in event-path plugins through one governed method that owns rate limiting, channel narrowing, and Discord error handling; Discord exceptions must not escape the dispatcher.
UseServerConfigStore.mutate(guild_id, fn)for every config read-modify-write operation;fnmust be synchronous and perform no Discord or network I/O while the lock is held.
Equivalent per-guild locks may guard a complete load-modify-save sequence, but never perform an unguarded sequence.
Perform Discord operations such aschannel.sendoradd_rolesoutside the configuration mutation lock.
sync_commands()must requireconfirm_removals=Truebefore allowing command removals.
bot.run(reload=True)is development-only; its watcher must be cancelled byclose().
Plugin.on_reload()runs on the new instance after a successful hot-reload swap, withself.botavailable, and does not run on failure.
Files:
easycord/__init__.py
🪛 markdownlint-cli2 (0.22.1)
release_v5.53.0/notes.md
[warning] 44-44: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
CHANGELOG.md
[warning] 5-5: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
[warning] 15-15: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
[warning] 27-27: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
🔇 Additional comments (4)
easycord/__init__.py (1)
19-19: LGTM!pyproject.toml (1)
7-7: LGTM!Also applies to: 51-52
README.md (1)
2-2: LGTM!Also applies to: 56-56, 1029-1029
docs/getting-started.md (1)
6-6: LGTM!
| ### Added | ||
| - `tests/test_bot_permissions_adoption.py` — 16 regression tests pinning |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Add blank lines after the release section headings.
markdownlint reports MD022 violations because the ### Added, ### Fixed, and ### Tests headings are immediately followed by content. Insert one blank line after each heading.
Also applies to: 15-16, 27-28
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 5-5: Headings should be surrounded by blank lines
Expected: 1; Actual: 0; Below
(MD022, blanks-around-headings)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@CHANGELOG.md` around lines 5 - 6, Insert a blank line immediately after each
release subsection heading in CHANGELOG.md, including “### Added”, “### Fixed”,
and “### Tests”, before their respective content. Ensure all affected headings
satisfy markdownlint MD022.
Source: Linters/SAST tools
| ``` | ||
| pip install easycord==5.53.0 | ||
| ``` |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Specify the fenced code language.
Add bash to the opening fence so Markdown tooling can identify the installation command.
-```
+```bash
pip install easycord==5.53.0
<details>
<summary>🧰 Tools</summary>
<details>
<summary>🪛 markdownlint-cli2 (0.22.1)</summary>
[warning] 44-44: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
</details>
</details>
<details>
<summary>🤖 Prompt for AI Agents</summary>
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @release_v5.53.0/notes.md around lines 44 - 46, Update the fenced
installation command in the release notes to use a bash language identifier on
its opening fence, while preserving the existing pip command and closing fence.
</details>
<!-- fingerprinting:phantom:triton:luna -->
<!-- cr-indicator-types:potential_issue -->
<!-- cr-comment:v1:2e298babe377a635c8df839a -->
_Source: Linters/SAST tools_
<!-- This is an auto-generated comment by CodeRabbit -->
EasyCord v5.53.0 — Framework Hardening Phase 1
Overview
Phase 1 of the v5.53 Framework Hardening roadmap. Five tasks landed:
verified-open bug fixes with full regression coverage, cooldown architecture
cleanup, and EventBus observability improvements.
What's in this release
Bug fixes
_on_guild_remove._grant_level_rewardcaughtForbiddenonly;HTTPExceptionparent class now caught so all Discord errors are handled.
auto_rolepost-sleepadd_rolesfailed silently onNotFoundand generic
HTTPException; both now absorbed.Architecture improvements
_cooldown_cleanup_loopreplaces per-callback sweep tasks(which were unreliable at import time). A
_COOLDOWN_MAX_ENTRIES=50_000hardcap with oldest-bucket eviction prevents unbounded growth.
bot._cooldown_registrieswhen the owning plugin is unloaded viaremove_plugin— previously these entries were permanent zombies.Regression net (new tests)
1513 tests total (+75 from v5.52.0):
test_bot_permissions_adoption.py— 16 tests (B-021 structural guard)test_cli_scaffold.py— scaffold collision regressiontest_cooldown_cleanup.py— 10 tests (expiry, cap eviction, lifecycle)test_event_bus.pyextensions — EventBus observabilitytest_p1_bug_sweep.py— B-007/B-015/B-016 regressionsUpgrade notes
No breaking changes. Drop-in upgrade from v5.52.0.
Install
Artifacts
easycord-5.53.0-py3-none-any.whleasycord-5.53.0.tar.gzSummary by Sourcery
Prepare the v5.53.0 release of EasyCord with framework hardening fixes, expanded regression coverage, and updated metadata and docs.
Bug Fixes:
Enhancements:
Build:
Documentation:
Tests: